STP

Введение

STP (от англ. Spanning Tree Protocol) — сетевой протокол, работающий на втором уровне модели OSI. Основан на одноимённом алгоритме, который разработала Радья Перлман (англ. Radia Perlman). Протокол описан в стандарте IEEE 802.1D.

Основной задачей данного протокола является приведение сети Ethernet с множественными связями к древовидной топологии, исключающей зацикливание пакетов. Все устройства, на которых включен протокол STP, выполняют это в автоматическом режиме.

Если связать для надежности сетевое оборудование большим количеством связей (для надежности), то без принятия дополнительных мер возникнут проблемы в работе сети (рис.1). Поэтому важно иметь протокол, который позволяет использовать избыточные связи в качестве резерва и автоматически их использовать по мере надобности. Разумеется, резервируемый канал не должен пропускать трафик (за исключением служебного трафика самого протокола). Конечно, с этой задачей способен справиться и администратор сети, но он скорее отдаст богу душу, чем осилит мониторинг сети 24х7 с пробежками до каждого проблемного коммутатора.

Рис. 1

Рис. 1

Терминология

Так как протокол STP обычно настраивается на коммутаторах, то я, соответственно, буду  указывать описание для коммутаторов. Также прошу обратить внимание на то, что сам протокол оперирует понятием «bridge», то есть мост.

Введем следующую терминологию.

Избыточная связь — если коммутатор А имеет с коммутатором Б больше одной физической или логической (на L2 уровне модели оси) связи.

Петля коммутации  — состояние в сети, при котором идет бесконечная пересылка кадров между коммутаторами (или аналогичными устройствами), подключенными в один и тот же сегмент сети (пример — http://netwild.ru/petlya/).

Граф — совокупность непустого множества вершин и наборов пар вершин (связей между вершинами). Проще говоря — это объекты и связи между ними. В протоколе STP также используют термин «древо» или «дерево», что является своеобразным синонимом.

Корень дерева (root) — один из STP-совместимых коммутаторов, с которого начинается построение дерева.

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

Стоимость порта — относительная величина, характеризуемая типом порта в коммутаторе (fast ethernet или gigabyte ethernet). Чем меньше стоимость порта, тем он приоритетнее.

Стоимость пути — сумма стоимостей портов от корневого коммутатора до искомого коммутатора.

BPDU

BPDU (Bridge Protocol Data Units) — основная единица (кадр) обмена информацией в протоколе STP.

Фрейм BPDU имеет следующие поля:

  • Идентификатор версии протокола и алгоритма STA. Коммутаторы должны поддерживать одну и ту же версию протокола STA. Размер – 2 байта.
  • Версия протокола STP. Размер – 1 байт.
  • Тип BPDU. Существует 2 типа BPDU – конфигурационный и уведомление о реконфигурации. Размер – 1 байт.
  • Флаги:

 — бит 1 является флагом изменения топологии (Topology Change).

 — бит 8 является флагом Topology Change Acknowledgement (подтверждение смены топологии).

Размер – 1 байт.

  • Идентификатор корневого коммутатора. Размер – 8 байт.
  • Расстояние до корневого коммутатора. Размер – 4 байта.
  • Идентификатор коммутатора. Размер – 8 байт.
  • Идентификатор порта. Размер – 2 байта.
  • Время жизни сообщения. Измеряется в единицах по 0.5 сек, служит для выявления устаревших сообщений. Размер – 2 байта.
  • Максимальное время жизни сообщения. Если кадр BPDU имеет время жизни, превышающее максимальное, то кадр игнорируется коммутаторами. Размер – 2 байта.
  • Интервал hello. Интервал, через который посылаются пакеты BPDU. Размер – 2 байта.
  • Задержка смены состояний. Минимальное время перехода коммутатора в активное состояние. Размер – 2 байта.

Выборы корня

Для своей работы протокол строит граф (дерево), создание которого начинается с корня (root).

После включения коммутатора в сеть он считает себя корнем и начинает обмениваться BPDU с соседями. В каждом BPDU коммутатор указывает себя в качестве корневого коммутатора. Каждый коммутатор имеет свой уникальный Bridge ID, по которому, собственно, и происходит выбор корневого коммутатора.

Bridge ID содержит следующие два поля:

  • Приоритет – поле, которое позволяет административно влиять на выборы корневого коммутатора (изменения вносит администратор сети). Размер – 2 байта.
  • MAC-адрес – используется как уникальный идентификатор, который, в случае совпадения значений приоритетов, позволяет выбрать корневой коммутатор. Так как MAC-адреса уникальны, то и Bridge ID уникален, так что какой-то коммутатор обязательно станет корневым.

Получив BPDU с наименьшим Bridge ID, коммутатор перестает считать себя корневым и начинает передавать BPDU коммутатора с меньшим Bridge ID (который он считает корневым).

В итоге, корнем становится коммутатор с самим меньшим Bridge ID в сети.

Нужно учесть следующие моменты:

 — адрес отправки BPDU является групповым (multicast), что обеспечивает его пропуск неинтеллектуальным оборудованием (под «адресом» имеется в виду mac-адрес);

— расчет Bridge ID идет по следующей формуле:

Bridge ID = Bridge priority + MAC;Bridge priority = vlan xxx + 32768 (default cost);Cost — «стоимость портов». По умолчанию равна 32768 (2 в 15 степени);Hello BPDU = root ID + bridge ID + cost;

Очевидно, что в сети с единственным STP-совместимым устройством оно и будет корнем.

Выбранный корень, или назначенный корневой коммутатор (Designated Root Bridge, в соответствии с терминологией стандарта) не несет никакой дополнительной нагрузки — он всего лишь служит отправной точкой для построения топологии, от него будут «расти» все передающие данные соединения коммутаторов между собой.

Построение топологии

Далее для всех остальных мостов в сети определяется корневой порт (Root Port), т.е. ближайший к корневому мосту порт. От других портов, соединенных с корневым мостом непосредственно или через другие мосты, он отличается своим идентификатором — комбинации из его номера и задаваемым администратором приоритетом. У каждого коммутатора может быть только один корневой порт!

Помимо выделенного корневого коммутатора в STP вводится логическое понятие назначенного коммутатора (Designated Bridge) — владелец этого статуса считается главным в обслуживании данного сегмента локальной сети. Статус назначенного коммутатора также выборный и может переходить от одного устройства к другому.

Аналогичным образом вводится логическое понятие выборного назначенного порта (Designated Port, он обслуживает данный сегмент сети), а для него — понятие соответствующей стоимости пути (Designated Cost).

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

Рис. 2

Рис. 2

Далее  наступает фаза стабильности, характеризуемая следующими условиями:

  • В сети только одно устройство считает себя корнем, а остальные периодически анонсируют его как корень.
  • Корневой мост регулярно посылает на все свои порты пакеты с BPDU. Интервал времени, через который происходит рассылка, называется интервалом приветствия (Hello Time).
  • В каждом сегменте сети имеется единственный корневой порт, через который происходит обмен трафиком с корневым мостом. Он имеет наименьшее значение стоимости пути до корня по сравнению с другими портами в сегменте. При равенстве этой величины в качестве назначенного выбирается порт с наименьшим идентификатором порта (MAC-адрес порта и его приоритет, Bridge ID).
  • BPDU принимаются и отправляются STP-совместимым устройством на всех его портах, даже на тех, которые были «отключены» в результате работы STP. Однако BPDU не принимаются на портах, которые были «отключены» администратором (т.е. те, которые имеют Admin Status: Down).
  • Каждый мост осуществляет пересылку (Forwarding) пакетов только между корневым портом и назначенными портами соответствующих сегментов. Все остальные находятся в блокированном состоянии (Blocking).

Как следует из последнего пункта, STP управляет топологией путем изменения состояния портов, которое может принимать следующие значения:

  • Блокирован (Blocking). Порт заблокирован, однако, в отличие от пользовательских кадров, кадры с пакетами STP (BPDU) принимаются и обрабатываются (но и только).
  • Ожидает (Listening). Первый этап подготовки к состоянию пересылки. В отличие от пользовательских кадров, кадры с пакетами STP (BPDU) принимаются и обрабатываются. Обучения не происходит, так как в этот период в таблицу коммутации может попасть недостоверная информация.
  • Обучается (Learning). Второй этап подготовки к состоянию пересылки. Кадры с пакетами STP (BPDU) принимаются и обрабатываются, а пользовательские кадры мост принимает для построения таблицы коммутации, но не пересылает данные, а понемногу дропает.
  • Передает (Forwarding). Рабочее состояние портов, когда передаются как кадры с пакетами STP, так и кадры пользовательских протоколов.

Таким образом, во время реконфигурации сети (т.е. когда порты мостов находятся в одном из трех состояний — Blocking, Listening или Learning) на данных портах пользовательские кадры не передаются, и сеть работает только на протокол STP.

Если в течение промежутка времени, определяемого значением Max Age Time, фреймов BPDU от корневого коммутатора не поступает, коммутатор считает, что либо между ним и корневым мостом пропала связь, либо последний отключен. В этом случае он инициирует реконфигурацию топологии сети. Путем задания соответствующих параметров можно регулировать, насколько быстро будут перестраиваться маршруты между коммутаторами.

Следует учесть тот факт, что протокол STP работает вне VLAN’ов. Если же вы хотите построить топологию с учетом разбиения на VLAN’ы, то используйте протокол MSTP.

 

Оставить комментарий

*

code