Курс по сетевым технологиям
A A A

 

Проблемы в сетях L2

Рассмотрим сеть



Сеть является замкнутой и на первый взгляд кажется надежной. Ведь при обрыве одного из кабелей все устройства по прежнему будут «на связи». Однако в этом кроется потенциальная проблема.

Предположим, что питание только что включили и  естественно коммутаторы не имеют записи в своих таблицах МАС адресов.

Алиса отправляет данные Кате. Коммутатор А посылает кадры от Алисы на все порты, кроме того порта, от которого принял кадр, используя при этом  широковещательную рассылку, то есть по адресу ff:ff:ff:ff:ff:ff.

Остальные коммутаторы делают тоже самое, то есть они копируют полученные кадры и заполняют ими всю сеть, то есть создают широковещательный шторм. Некоторые копии тех кадров достигают коммутатора А и он также копирует их и посылает на все порты.

 

Возникает замкнутая петля, которая может привести к отказу всей сети.

Кроме того, это приводит  к нестабильности таблицы МАС адресов, так как коммутаторы находятся постоянно в состоянии изучения МАС адресов от поступающих кадров.

Например, когда Алиса посылает Кате данные, то коммутатор А вносит изменения в свою таблицу:



Через некоторое время копия такого же кадра поступает на коммутатор А от коммутатора D через коммутаторы С и B. Коммутатор А сразу же изменит свою таблицу в соответствии с полученной информацией:



То есть пока циркулируют копии кадров по сети таблицы коммутаторов будут меняться, и некоторые кадры не достигнут своих пункта назначения.

Чтобы избежать подобных проблем был создан протокол связующего дерева STP (Spanning Tree Protocol - стандарт IEEE 802.1d).

 

 

Принцип работы STP

Принцип работы протокола основан на создании логического дерева соединений коммутаторов. На верхушке дерева находится корневой коммутатор (Root switch), далее следуют ответвления, то есть некорневые коммутаторы. Причем все избыточные связи просто блокируются. Это позволяет избежать петель в сети. Например, вышеописанная сеть после включения STP будет выглядеть так (ее логическая структура)




Так как же работает STP? 

Процесс построения дерева состоит из следующих этапов: 

  • Выбор корневого коммутатора (root switch)
  • Выбор корневых портов (root port)
  • Выбор назначенных портов (designated port)

 

Выбор корневого коммутатора  (в сети может быть только один коммутатор) основывается на минимальных значениях приоритета коммутатора и его ID. Под ID подразумевается его МАС адрес. То есть, чем они меньше, тем больше шансов стать корневым. Коммутаторы каждые 2с посылают Hello BPDU кадры. Кадры содержат следующую информацию:  

  • Свой приоритет (по умолчанию у всех  32769)
  • Свой ID
  • ID корневого коммутатора  
  • Стоимость пути к корневому коммутатору

В самом начале все коммутаторы претендуют быть корневым, поэтому указывают свой ID в  качестве корневого.

Соседи сравнивают значения приоритета и ID в полученных кадрах и чьи значения окажутся выше, тот перестает претендовать на пост корневого и начинает распространять Hello победителя. И так до тех пор, пока не найдется коммутатор с еще низшим значением.

Следует знать, что сначала сравниваются приоритеты и, если они равны, то сравниваются уже их ID. 

 

Наконец, корневой коммутатор избран. Что дальше? 

Далее выбираются корневые порты (root ports), то есть порты, которые ближе всего к корню.

 

И как же они узнают, что они ближе? 

Как только выбран корень, он начинает каждые 2с генерировать Hello кадры. Все остальные коммутаторы пересылают эти кадры дальше по дереву, при этом внося небольшие изменения, то есть добавляет стоимость своего интерфейса. На всем протяжении маршрута к корню все эти стоимости суммируются и анонсируются далее



Стоимость интерфейса зависит от его скорости. Ниже представлена таблица стоимости интерфейсов:

 

Скорость интерфейса

Стоимость интерфейса

10 Мбит/с

100

100 Мбит/с

19

1 Гбит/с

4

10 Гбит/с

2

 

Если некорневой коммутатор получает Hello с наименьшей стоимостью к корню, то сразу переводит порт, через который он получил кадр, в состоянии пересылки (forwarding), а сам порт становится корневым



 

А что если получены Hello с одинаковыми значениями стоимости маршрута к корню? Что будет в данном случае? 

Такая ситуация возможна только в 2-х случаях.

1-й случай.

Кадры получены от разных коммутаторов. В данном случае выбирается порт, который подключен к коммутатору с наименьшим ID. Второй порт переводится в состояние блокировки (blocking).

 

2-й случай.

Кадры получены от одного коммутатора, то есть имеются параллельные каналы.

Возможны 2 варианта:

1-й вариант.

Коммутатор объединяет эти параллельные каналы в один логический канал и использует для балансировки нагрузки. Причем все параллельные каналы должны иметь одинаковые характеристики, то есть скорость, тип интерфейса, VLAN, дуплекс  и так далее.

 

2-й вариант.

Сравниваются порядковые номера портов. У кого он меньше, тот и становится корневым. Проигравший порт блокируется. Например, если сравнить порты Fa0/1 и Fa0/2, то выиграет Fa0/1.

И наконец, выбирается назначенный порт (designated port). Назначенные порты всегда подключены к другим сегментам сети (коммутаторам), а также к конечным терминалам (компьютерам). Выбирается он по тем же правилам, что и корневой порт – сравниваются стоимости маршрута к корню



После того, как определены корневые и назначенные порты, все остальные порты блокируются

 

 

 

Состояние портов

В процессе работы протокола STP порты могут находиться в одном из следующих состояний:

  • Выключен (down) – порт физически выключен
  • Блокирование (blocking) – устойчивое состояние, порт данные не передает.
  • Прослушивание (listening) – промежуточное состояние, порт данные не передает. BPDU пакеты передаются. Все таблицы МАС адресов обнуляются. Длительность состояния 15с.
  • Самообучение (learning) -  промежуточное состояние, порт данные не передает. BPDU пакеты передаются. Коммутатор обновляет таблицу МАС адресов за счет поступающих кадров. Длительность состояния 15 с.
  • Пересылка (forwarding) – устойчивое состояние, порт активно передает данные и BPDU пакеты.

 

При включении коммутатора или подключения другого коммутатора порты проходят последовательно через вышеописанные стадии.

Промежуточные состояния необходимы для предотвращения возникновения случайных петель во время конвергенции STP.

 

 

Реакция сети на изменения в топологии

Теперь представим, что порт Fa 2 коммутатора D отключается



Коммутатор C перестает получать Hello от корневого коммутатора. Запускается таймер устаревания (Max Age), который равен  20 с. Если в течении работы таймера не поступит Hello от корневого коммутатора, то порт Fa 2 данного коммутатора перейдет в состояние прослушивания. Таблица МАС адресов обнулится. Через 15 с порт перейдет в состояние самообучения. В этом состоянии коммутатор изучает МАС адреса входящих кадров, а также Hello кадры, которые все еще передаются от коммутатора А через коммутатор B.

Так как порт Fa 2 единственный, который подключен к корневому коммутатору, то он переходит в состояние пересылки и становится корневым.

 

 

Протокол PVST+

Протокол STP разрабатывался до появления VLAN, поэтому, когда в сети настроено несколько VLAN, то STP этого не учитывает и работает так, словно сеть настроена только для одной VLAN.  

Чтобы учитывать все VLAN компания Cisco разработала протокол, которые работает точно так же, как и STP, однако учитывает все настроенные VLAN, то есть создает по экземпляру STP для каждой VLAN. Этот протокол получил название PVST+ (Per VLAN STP). Данный протокол использует стандарт 802.1Q (стандарт описывает тегирование трафика VLAN). По умолчанию во всех Cisco коммутаторах уже включен PVST+.