Рейтинг@Mail.ru

NetCloud

Простыми словами о сетевых технологиях

Избавляемся от широковещательного шторма с помощью STP

Широковещательный шторм — передача большого количества пакетов в сети, часто с последующим увеличением их количества. Причины широковещательного шторма:

  • Петли коммутации
  • Атаки на сеть
  • Неисправная сетевая карта

Петля коммутации — состояние в сети, при котором происходит бесконечная пересылка фреймов между коммутаторами, подключенными в один и тот же сегмент сети.

cv_31c

Единственной возможностью перекрыть циркулирование фрейма между сегментами сети является включение одного из каналов связи между ними. Данную функцию реализует протокол STP, который оставляет между сегментами только один возможный канал связи.

STP (Spanning Tree Porotocol) — сетевой протокол, предназначенный для автоматического удаления циклов (петель коммутации) из топологии на канальном уровне в Ethernet сетях. Протокол работает на канальном уровне. STP позволяет сделать топологию избыточной на физическом уровне, но при этом логически блокировать петли. Достигается это за счет того, что STP отправляет сообщения BPDU и обнаруживает фактическую топологию сети. А затем, определяя роли коммутаторов и портов, часть портов блокирует так, чтобы в итоге получить топологию без петель.

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

  • Выбирается корневой мост (Root Bridge)
  • Далее каждый коммутатор просчитывает ближайший путь к корневому. Соответствующий порт называется корневым портов (Root Port)
  • После этого для каждого сегмента сети, к которому присоединен более чем один мост, просчитывается кратчайший путь к корневому мосту (порту). Мост, через который проходит этот путь, становится назначенным мостом (Designed Bridge), а соответствующий порт — назначенным портом (Designed Port)
  • Далее во всех сегментах, с которыми соединены более одного порта, все мосты блокируют все порты, не являющиеся корневыми и назначенными

В итоге получается древовидная структура (математический граф) с вершиной в виде корневого коммутатора. Ранее было упомянуто, что коммутаторы обмениваются между собой пакетами BPDU. BPDU (Bridge Protocol Data Unit) — фрейм протокола управления сетевыми мостами.

250px-g0803_configuration-bpdu

Рассмотрим формат пакета:

  • Protocol Identifier — идентификатор протокола
  • Protocl Version — версия протокола
  • BPDU Type — тип BPDU. Существует два типа — конфигурационный и уведомление о реконфигурации
  • Flags — флаги. В поле Flag используется только два бита: бит 1 является флагом изменения топологии (Topology Change), бит 8 является флагом подтверждения смены топологии (Topology Change Acknowledgement)
  • Root ID — идентификатор корневого моста
  • Root Path Cost — стоимость пути до корневого моста
  • Bridge ID — идентификатор моста. Состоит из поля приоритета (2б) и MAC-адреса (6б). Root Priority = N * 4094, где N — назначается администратором.
  • Port ID — идентификатор порта
  • Message Age — время жизни сообщения
  • Max Message Age — максимальное время жизни сообщения. Если пакет превысил это значение, то он игнорируется коммутаторами
  • Hello Time — интервал hello, через который посылаются пакеты BPDU
  • Forward Delay — задержка смены состояний. Минимальное время перехода моста в активное состояние.

Познакомившись с форматом пакета BPDU, рассмотрим две ситуации: первая — процесс построения дерева после включения STP на коммутаторах, вторая — изменение топологии сети после обрыва одного из линков.

Построение дерева:

  • В начале каждый коммутатор считает себя корневым (root)
  • Каждый коммутатор посылает Hello BPDU через интервал 2 секунды
  • Если мост получает BPDU с Bridge ID меньше, чем свой, он транслирует этот BPDU, а свой прекращает
  • В конце остается только один мост, который продолжает генерировать и передавать свои BPDU. Этот мост и будет считаться корневым Root Bridge
  • На основании меньшего Root Path Cost выбираются корневые порты у оставшихся коммутаторов. Если Root Path Cost совпадает, то порт выбирается на основе меньшего Bridge ID. Если и Bridge ID совпало, то выбираем на основе меньшего Port ID
  • Коммутатор в сети имеющий наименьшее расстояние до корневого является назначенным. Сегменты, подключенные к этому коммутатору через назначенные порты.

Изменение топологии:

  • При обнаружении изменения в сети коммутатор отравляет BPDU, у которого установлен Flag Topology Change = 1. BPDU рассылается каждый hello-интервал в направлению к корневому коммутатору.
  • Следующий коммутатор (на пути к Root Bridge), получив BPDU с Topology Change = 1 отправляет обратно BPDU с подтверждением Topoly Change Acknowledgement = 1.
  • Остальные коммутаторы, для которых для данного сегмента порт работает в режиме Designed port, повторяют первые два шага и отправляют в направлении к Root Bridge BPDU с Topology Change = 1.
  • Как только корневой коммутатор получает уведомление об изменении топологии, он отправляет hello с флагом Topology Change Acknowledgement =1 всем коммутаторам. Коммутатор, получив сообщение hello, использует таймер Forward Delay Time для того, чтобы обновить записи в своей таблице коммутации.

 

Настройка STP на управляемом коммутаторе Dlink DES-3528 

В коммутационном шкафу была собрана схема для изучения протокола STP.

net

После сборки схемы была замечена высокая интенсивность мигания индикаторов портов, обусловленная тем что через порты коммутатора проходит большой трафик. На компьютере PC5 в диспетчере задач отмечалась высокая загрузка ЦП.

cp1

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

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

На коммутаторе SW5 командой show stp проверялся статус протокола STP – включен или выключен.

disable_stp

Выяснилось, что протокол STP на коммутаторах SW1 – SW5 был выключен. Командой enable stp включаем протокол STP на всех коммутаторах и проверяем загрузку ЦП компьютера.

enable_stp

cp2

Загрузка ЦП упала после включения протокола STP. Отсюда можно сделать вывод, что высокая нагрузка на процессор была связана с широковещательным штормом, а протокол STP устранил эту проблему.
При просмотре статуса STP show stp была выведена следующая информация:

  • STP Status : Enabled – STP включен
  • STP Version: RSTP – версия RSTP (Rapid spanning tree protocol)
  • Maxe Age: 20 – время жизни пакета 20 с
  • Hello time: 2 – время отклика 2 с
  • Forward Delay: 15 – обновления записей в таблице коммутатора через 15 с
  • Max Hops: 20 – максимальное количество хопов 20
  • Tx Hould Count: 6 – максимальное количество шагов прохождения пакета
  • Forwading BPDU: Disabled – посылка фрейма для устранения петель

С помощью команды show stp instance 0 выведем информацию о дереве протокола STP.

show_stp_instance

Команда выводит следующие поля:

  • Instance Type: CIST – тип используемой конфигурации
  • Instance Status: Enabled – статут конфигурации (включен)
  • Instance Priority: 32768 – приоритет коммутатора
  • Designed Root Bridge: 00-22-B0-B4-4A-E0 – назначенный корневой коммутатор (MAC-адрес назначенного коммутатора)
  • External Root Cost: 200000 – сумма пути до корневого коммутатора
  • Regional Root Bridge: 00-22-B0-B4-5D-D0 – региональный коммутатор
  • Internal Root Cost: 0 – сумма пути до регионального коммутатора
  • Designated Bridge: 00-22-B0-B4-4A-E0 – назначенный коммутатор
  • Root Port: 4 – порт, по которому подключён корневой коммутатор
  • Last Topology Change: 357 – время, в котором произошло последнее изменение топологии прохождения пакета
  • Topology Change Count: 9 — общее количество раз, когда топология изменилась

С помощью команды show stp port 1-7 просмотрим информацию по всем портам коммутатора.





port1

port4

port5

port6

Информация о портах

  • MSTI – код дерева
  • Designated Bridge – назначенный коммутатор с идентификатором
  • Internal PathCost — стоимость пути до корня
  • Prio – приоритет
  • Status – состояние порта
  • Role – роль порта
  • Port Index – индекс порта
  • Hello Time – время приветствия

По полученным данным можно построить логическую топологию сети. Из рисунков выше видно, что порт 1 и 6 являются назначенным (Designed), порт 5 альтернативный (Alternative), порт 4 корневой (Root). Помимо ролей портов, можно также узнать их состояние. Порты 1,4,6 находятся в состоянии пересылки (Forwarding) — то есть в данный момент они в работе. Порт 5 находится в состоянии блокировки (Discarding). Получается альтернативный порт в данный момент заблокирован и через него не будут передаваться кадры. Порты 2, 3, 6, 7 не показаны на скриншотах так как они находятся в состоянии Disabled — выключены. Иными словами, данные порты не задействованы в схеме.

В итоге, получив аналогичную информацию со всех остальных коммутаторов SW1, SW2, SW3, SW4, мы можем воспроизвести текущую топологию сети и построить дерево STP.

network_stp

tree

Обрыв кабеля и перерасчет маршрутов в схеме

В собранной схеме в нескольких местах был произведен обрыв. Место обрыва определялось с помощью команды show stp port 1-7. В том случае если рабочий порт находился в состоянии Disabled (Выключено) делался вывод о том, что на этом месте произошел обрыв. Например, для коммутатора SW5 четвертый корневой порт находился в состоянии Disabled. Кроме того выяснилось, что
второй порт коммутатора SW2 также находился в состоянии Disabled.

port4_sw5_error

В результате проверки, было локализовано место обрыва. Как видно из рисунка выше на SW5 порт 4, который ранее был корневым (Root), в данный момент выключен (Disabled). Также на SW1 корневой порт 2 также находится в состоянии disabled.

network_after_break

В результате обрыва произошло перенаправление маршрутов к Root Bridge (корневому коммутатору). Для перенаправления использовались Alternative Port (альтернативные порты). В итоге поменялось дерево сети.

tree_after_break

 

Настройка приоритетов на коммутаторах Dlink DES-3528

Настроим приоритеты на коммутаторах таким образом, чтобы при отключении корневого коммутатора SW2 корневым стал SW4. После чего при отключении SW4 корневым стал SW3. При настройке приоритетов учитывалось два обстоятельства: во-первых чем ниже приоритет коммутатора, тем выше вероятность того, что он станет корневым; во-вторых приоритетность коммутатора должны быть кратна 4096. Исходя из поставленной задачи и учитывая тот факт, что на всех коммутаторах стоит приоритетность по умолчанию, равная 32768, было сделано следующее.

Настроим приоритет коммутатора командой  config stp priority. Для SW2 зададим самый низкий приоритет, для SW4 приоритет 8192, для SW3 оставим приоритет по-умолчанию 16384.

SW2 > config stp priority 4096

SW4 > config stp priority 8192

Выведем информацию о приоритете коммутаторов SW2, SW4.

priority_sw2

priority_sw4

 

В результате отключения коммутатора SW2 произошло перенаправление корневых портов в соответствии с приоритетами коммутаторов. Корневым коммутатором стал SW4. На SW5 корневым портом был назначен порт 6.

sw2-death

redirect-from-sw5-sw2-enable-sw4-root

 

Протокол RSTP

RSTP (Rapid Spanning Tree Protocol) — быстрый протокол покрывающего дерева. Версия протокола STP с ускоренной реконфигурацией дерева, использующего для исключения петель в соединениях коммутаторов.

По сравнению с STP уменьшилось время построения топологии, а также время восстановления работоспособности сети. Что позволило уменьшить это время? В протоколе RSTP есть только три состояния порта (в отличие от STP — 4 состояния). Состояния «отключен», «блокирован», «прослушивание» портов STP были заменены в одно состояние «сбрасывание».


 

  • Задавайте вопросы, оставляйте комментарии по поводу статьи.