Spanning Tree Protocol — сетевой протокол, работающий на втором уровне модели OSI. Основан на одноименном алгоритме, разработчиком которого является «Мама Интернета» — Радья Перлман (англ. Radia Perlman).
Основной задачей STP является приведение сети Ethernet с множественными связями к древовидной топологии, исключающей циклы пакетов. Происходит это путем автоматического блокирования ненужных в данный момент для полной связности портов. Протокол описан в стандарте IEEE 802.1D.
Для того чтобы определить какие порты заблокировать, а какие будут в режиме пересылки, STP выполняет следующее:
- Выбор корневого моста (Root Bridge)
- Определение корневых портов (Root Port)
- Определение выделенных портов (Designated Port)
Выбор корневого моста
Корневым становится коммутатор с наименьшим идентификатором моста (Bridge ID).
Только один коммутатор может быть корневым. Для того чтобы выбрать корневой коммутатор, все коммутаторы отправляют сообщения BPDU, указывая себя в качестве корневого коммутатора. Если коммутатор получает BPDU от коммутатора с меньшим Bridge ID, то он перестает анонсировать информацию о том, что он корневой и начинает передавать BPDU коммутатора с меньшим Bridge ID. В итоге только один коммутатор останется корневым и будет передавать BPDU.
Изначально Bridge ID состоял из двух полей:
- Приоритет — поле, которое позволяет административно влиять на выборы корневого коммутатора. Размер — 2 байта,
- MAC-адрес — используется как уникальный идентификатор, который, в случае совпадения значений приоритетов, позволяет выбрать корневой коммутатор. Так как MAC-адреса уникальны, то и Bridge ID уникален, так что какой-то коммутатор обязательно станет корневым.
Определение корневых портов
Порт коммутатора, который имеет кратчайший путь к корневому коммутатору называется корневым портом. У любого не корневого коммутатора может быть только один корневой порт.
Определение назначенных портов
Коммутатор в сегменте сети, имеющий наименьшее расстояние до корневого коммутатора называется назначенным коммутатором (мостом). Порт этого коммутатора, который подключен к рассматриваемому сегменту сети, называется назначенным портом.
Принцип действия
- В сети выбирается один корневой мост (Root Bridge).
- Далее каждый, отличный от корневого, мост просчитывает кратчайший путь к корневому. Соответствующий порт называется корневым портом (Root Port). У любого не корневого коммутатора может быть только один корневой порт.
- После этого для каждого сегмента сети просчитывается кратчайший путь к корневому порту. Мост, через который проходит этот путь, становится назначенным для этой сети (Designated Bridge). Непосредственно подключенный к сети порт моста — назначенным портом.
- Далее на всех мостах блокируются все порты, не являющиеся корневыми и назначенными. В итоге получается древовидная структура (математический граф) с вершиной в виде корневого коммутатора.
Алгоритм действия STP
- После включения коммутаторов в сеть, по умолчанию каждый (!) коммутатор считает себя корневым (root).
- Затем коммутатор начинает посылать по всем портам конфигурационные Hello BPDU пакеты раз в 2 секунды.
- Исходя из данных Hello BPDU пакетов, тот или иной коммутатор приобретает статус root, то есть корня.
- После этого все порты кроме root port и designated port блокируются.
Происходит посылка Hello-пакетов раз в 20 секунд либо при пропадании/восстановлении какого-нибудь линка, с целью препятствия появлению петель в сети.
Пример топологии
Изменениями топологии считается изменения ролей DP и RP. Коммутатор, который обнаружил изменения в топологии отправляет Topology Change Notification (TCN) BPDU корневому коммутатору:
- Коммутатор, на котором произошли изменения отправляет TCN BPDU через свой корневой порт. Отправка сообщения повторяется каждый hello interval (2 секунды) до тех пор, пока получение сообщения не будет подтверждено.
- Следующий коммутатор, который получил TCN BPDU отправляет назад подтверждение. Подтверждение отправляется в следующем Hello BPDU, которое будет отправлять коммутатор, выставлением флага Topology Change Acknowledgement (TCA).
- Далее коммутаторы, у которых порт работает в роли DP для сегмента, повторяют первые два шага и отправляют TCN через свой корневой порт и ждут подтверждения.
После того как корневой коммутатор получил TCN BPDU, он отправляет несколько следующих Hello с флагом TCA. Эти сообщения получают все коммутаторы. При получении сообщения hello с флагом TCA, коммутатор использует короткий таймер (Forward Delay time) для того чтобы обновить записи в таблице коммутации. Обновления выполняется из-за того, что после изменений в топологии STP в таблице коммутации могут храниться неправильные записи.
Если порт изменяет состояние с Blocking в Forwarding, то он должен пройти через два промежуточных состояния: Listening и Learning. Переход из Forwarding в Blocking может выполняться сразу.
Роли и состояния портов
Роли портов:
- Root Port — корневой порт коммутатора
- Designated Port — назначенный порт сегмента
- Nondesignated Port — неназначенный порт сегмента
- Disabled Port — порт который находится в выключенном состоянии
Состояния портов:
- Blocking — блокирование
- Listening — прослушивание
- Learning — обучение
- Forwarding — пересылка
Функция root-guard "защита корня"
Функция защиты корня обеспечивает возможность задать расположение корневого моста в сети. Это обеспечивает уверенность в том, что порт, на котором активизирована функция защиты корня, является назначенным. Обычно все порты корневого моста являются назначенными, если два или более портов корневого моста не соединены вместе. Если мост получает высокоприоритетные STP элементы данных протокола управления мостами (BPDU) в корневом порту, для которого включена функция защиты корня, защита корня переводит порт в состояние STP, называемое несогласованностью корня. Состояние несогласованности корня аналогично состоянию прослушивания. Трафик через порт в таком состоянии не пересылается. Таким образом, защита корня задает расположение корневого моста. Функцию защиты корня необходимо включить на всех портах, которые не должны стать корневыми.
Изменения "места разрыва кольца" на оборудовании Sprinter
По умолчанию на оборудовании Sprinter протокол RSTP определяет «место разрыва кольца», т.е. какой порт блокировать, основываясь на скорости соединения, которой соответствует стоимость соединения.
Ниже приведено соответствие скорости и стоимости соединения:
10 Mb/s: Cost=2 000 000
100 Mb/s: Cost=200 000
1000 Mb/s: Cost=20 000
Для того чтобы изменить «место разрыва кольца» необходимо изменять стоимость соединений в тех точках, изменение стоимости которых позволит определить более кратчайший путь через ранее заблокированный порт и заблокирует порт в другом сегменте.
Для изменения стоимости соединения порта необходимо использовать команду:
rstp <port number> -c <port cost>
где port number
- номер порта, для которого изменяем стоимость соединения
port cost
- новое значение стоимости соединения
Для рисунка, представленного ниже, эта команда выглядит следующим образом:
rstp <port number> -c 4