STP

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


STP (Spanning Tree Protocol) — сетевой протокол (или семейство сетевых протоколов) предназначенный для автоматического удаления циклов (петель коммутации) из топологии сети на канальном уровне в Ethernet-сетях. Первоначальный протокол STP описан в стандарте 802.1D. Позже появилось несколько новых протоколов (RSTP, MSTP, PVST, PVST+), отличающихся некоторыми особенностями в алгоритме работы, в скорости, в отношении к VLANам и ряде других вопросов, но в целом решающих ту же задачу похожими способами. Все их принято обобщённо называть STP-протоколами.

Протокол STP в своё время был разработан мамой Интернета Радией Перлман (Radia Perlman), а позже, в начале 90х превратился в стандарт IEEE 802.1D.

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

Содержание

[править] Описание протокола

Протокол работает на канальном уровне. STP позволяет делать топологию избыточной на физическом уровне, но при этом логически блокировать петли. Достигается это с помощью того, что STP отправляет сообщения BPDU и обнаруживает фактическую топологию сети. А затем, определяя роли коммутаторов и портов, часть портов блокирует так, чтобы в итоге получить топологию без петель.

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

  1. Выбор корневого моста (Root Bridge)
  2. Определение корневых портов (Root Port)
  3. Определение выделенных портов (Designated Port)

[править] Выбор корневого моста

Корневым становится коммутатор с наименьшим идентификатором моста (Bridge ID).

Только один коммутатор может быть корневым. Для того чтобы выбрать корневой коммутатор, все коммутаторы отправляют сообщения BPDU, указывая себя в качестве корневого коммутатора. Если коммутатор получает BPDU от коммутатора с меньшим Bridge ID, то он перестает анонсировать информацию о том, что он корневой и начинает передавать BPDU коммутатора с меньшим Bridge ID.

В итоге только один коммутатор останется корневым и будет передавать BPDU.

Изначально Bridge ID состоял из двух полей:

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

[править] Определение корневых портов

Порт коммутатора, который имеет кратчайший путь к корневому коммутатору, называется корневым портом. У любого не корневого коммутатора может быть только один корневой порт. Корневой порт выбирается на основе меньшего Root Path Cost - это общее значение стоимости всех линков до корневого коммутатора. Если стоимость линков до корневого коммутатора совпадает, то выбор корневого порта происходит на основе меньшего Bridge ID коммутатора. Если и Bridge ID коммутаторов до корневого коммутатора совпадает, то тогда корневой порт выбирается на основе Port ID.

[править] Определение назначенных портов

Коммутатор в сегменте сети, имеющий наименьшее расстояние до корневого коммутатора, называется назначенным коммутатором (мостом). Порт этого коммутатора, который подключен к рассматриваемому сегменту сети называется назначенным портом. Так же как и корневой порт выбирается на основе:

  • Меньшего Root Path Cost.
  • Меньшего Bridge ID.
  • Меньшего Port ID.

[править] Пример топологии

Пример топологии

[править] STP (802.1d)

Изменениями топологии считается изменения ролей 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 — пересылка

[править] BPDU

Bridge Protocol Data Unit (BPDU)


Название поля Размер поля Описание
Protocol Identifier 2 байта
Protocol Version Identifier 1 байт
BPDU Type 1 байт
Flags 1 байт
Root Identifier 8 байт
Root Path Cost 4 байта стоимость пути к корневому устройству. Чем меньше значение, тем выше приоритет
Bridge Identifier 8 байт идентификатор устройства. Чем меньше значение, тем больше приоритет
Port Identifier 2 байта идентификатор порта. Чем меньше значение, тем выше приоритет
Message Age 2 байта Specifies the amount of time elapsed since the Root Bridge (Root Switch) sent the configuration message on which the current configuration message is based.
Max Age 2 байта Indicates when the current configuration message should be deleted.
Hello Time 2 байта Provides the time period between Root Bridge (Root Switch) configuration messages
Forward Delay 2 байта Provides the length of time that bridges should wait before transitioning to a new state after a topology change.

[править] RSTP (802.1w)

Роли портов:

  • Root
  • Designated
  • Alternate — альтернативный путь к корневому коммутатору. Путь отличается от того, который использует корневой порт.
  • Backup — запасной путь в сегмент.

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

  • Learning
  • Forwarding
  • Discarding

[править] Отличия STP и RSTP

Соответствие между состояниями портов в STP и RSTP:

Состояние в STP (802.1d) Состояние в RSTP (802.1w)
Blocking Discarding
Listening Discarding
Learning Learning
Forwarding Forwarding

[править] Флаги в BPDU

Коммутатор устанавливает флаг proposal в RSTP BPDU для того чтобы предложить себя на роль выделенного (designated) коммутатора в сегменте. Роль порта в proposal-сообщении всегда установлена в designated.

Коммутатор устанавливает флаг agreement в RSTP BPDU для того чтобы принять предыдущее предложение. Роль порта в agreement-сообщении всегда установлена в root.

В RSTP нет отдельного BPDU для анонсирования изменений в топологии (topology change notification (TCN)). Протокол использует флаг topology change (TC) для того чтобы указать на изменения. Однако, для совместимости с коммутаторами, которые используют 802.1D, коммутаторы использующие RSTP обрабатывают и генерируют TCN BPDU.

[править] PVST (Cisco)

Per-VLAN Spanning Tree (PVST) — проприетарный протокол компании Cisco Systems, который для каждого VLAN строит отдельное дерево. Он предполагает использование ISL для создания транков (тегированных портов) и позволяет порту быть заблокированным для одних VLAN и разблокированным для других.

[править] PVST+ (Cisco)

Per-VLAN Spanning Tree Plus (PVST+) — проприетарный протокол компании Cisco Systems, с функциональностью аналогичной PVST. Однако, вместо ISL он использует 802.1Q.

Различают два вида протокола PVST+:

  • PVST+ — основан на протоколе STP, с некоторыми проприетарными усовершенствованиями Cisco,
  • Rapid PVST+ — основан на протоколе RSTP.

Проприетарные усовершенствования Cisco:

  • Backbone Fast Convergence — функция улучшает сходимость топологии spanning-tree из-за непрямых изменений топологии;
  • Loop Guard — функция проверяет, что корневой порт или альтернативный корневой порт получает BPDU. Если порт не получает BPDU, то loop guard переводит порт в состояние inconsistent, изолируя таким образом проблему и позволяя топологии spanning-tree перейти в другое состояние, до тех пор пока порт не начнет опять получать BPDU;
  • Portfast — функция позволяет порту пропустить состояния listening и learning и сразу же перейти в состояние forwarding. Настраивается на портах уровня доступа (там где подключены пользователи);
  • Portfast BPDU Guard — функция позволяет выключать порт при получении BPDU;
  • Root Guard — функция не позволяет порту стать корневым портом или заблокированным. Если порт получит BPDU от корневого коммутатора, то он перейдет в специальное заблокированное состояние, которое называется root-inconsistent;
  • Uplink Fast Convergence — функция позволяет быстро переключаться на избыточный uplink, в случае, если корневой порт выключился или пересчитывается топология spanning-tree;
  • Uplink Load Balancing — функция позволяет балансировать нагрузку между uplink-портами, непосредственно контролируя стоимость портов для VLAN на транковых (тегированых) портах.

[править] Rapid PVST+ (Cisco)

Rapid PVST+ в каждом VLAN строит дерево. В каждом VLAN работает RSTP.

[править] MSTP (802.1s)

Роли портов:

  • Root
  • Designated
  • Alternate — альтернативный путь к корневому коммутатору. Путь отличается от того, который использует корневой порт.
  • Backup — запасной путь в сегмент.
  • Master — provides connectivity from the Region to a CIST Root that lies outside the Region. The Bridge Port that is the CIST Root Port for the CIST Regional Root is the Master Port for all MSTIs.

Каждая MSTI работает на всех интерфейсах в регионе, независимо от того разрешен ли соответствующий VLAN на интерфейсе.

[править] STP в ProCurve

Основная страница: STP в ProCurve

[править] STP в Cisco

Основная страница: STP в Cisco

PVST несовместим с MSTP и при одновременной работе устройств Cisco с этими протоколами вызывает проблемы в сети, в частности, отключение downlink'овского порта корневого MSTP.

Для блокировки PVST на большинстве сетевых устройств других производителей приходится создавать MAC фильтр, поскольку в их BPDU фильтрах пакеты PVST неизвестны и могут проходить через эти устройства даже при отключенных STP.

[править] STP в D-Link

 create access_profile ethernet destination_mac FF-FF-FF-FF-FF-FF profile_id 4
 config access_profile profile_id 4 add access_id 1 ethernet destination_mac 01-00-0C-CC-CC-CD port all deny
 enable cpu_interface_filtering
 create cpu access_profile profile_id 4 ethernet destination_mac FF-FF-FF-FF-FF-FF
 config cpu access_profile profile_id 4 add access_id 1 ethernet destination_mac 01-00-0C-CC-CC-CD port all deny


[править] STP в Allied Telesyn AT-8000

Конфигурация должна быть следующей: ---

configure
mac access-list PVST
deny any 01:00:0c:cc:cc:cd 00:00:00:00:00:00
permit any any
exit
interface range ethernet all
service-acl input PVST
exit
exit


[править] STP в Linux

Виртуальный мост Linux (Linux Bridge) поддерживает STP.

[править] STP в OpenVswitch

Настроить br0 на участие в дереве 802.1D:

 ovs−vsctl set Bridge br0 stp_enable=true

Установить приоритет моста равным 0x7800:

 ovs−vsctl set Bridge br0 other_config:stp-priority=0x7800

Установить стоимость пути через eth0 равным 10:

 ovs−vsctl set Port eth0 other_config:stp-path-cost=10

Очистить конфигурацию STP на мосту:

 ovs−vsctl clear Bridge br0 stp_enable

[править] Дополнительная информация

Источник — «http://xgu.ru/wiki/STP»