Spanning tree protocol что это

Обновлено: 03.07.2024

Все, о чем мы говорили ранее в этой статье, относится к первой реализация протокола STP, которая была разработана в 1985 году Радией Перлман (ее стихотворение использовано в качестве эпиграфа). В 1990 году эта реализации была включена в стандарт IEEE 802.1D. Тогда время текло медленнее, и перестройка топологии STP, занимающая 30-50 секунд (. ), всех устраивала. Но времена меняются, и через десять лет, в 2001 году, IEEE представляет новый стандарт RSTP (он же 802.1w, он же Rapid Spanning Tree Protocol, он же Быстрый STP).

Чтобы структурировать предыдущий материал и посмотреть различия между обычным STP (802.1d) и RSTP (802.1w), соберем таблицу с основными фактами:

В уже сложившейся топологии только корневой свич шлет BPDU,

Все свичи шлют BPDU в соответствии с hello-таймером (2 секунды по умолчанию)

discarding (отбрасывание, заменяет disabled, blocking и listening)

root (корневой), участвует в пересылке данных, ведет к корневому свичу

designated (назначенный), тоже работает, ведет от корневого свича

non-designated (неназначенный), не участвует в пересылке данных

alternate (дополнительный), не участвует в пересылке данных

Использует процесс Proposal and Agreement (предложение и соглашение)

Свич, обнаруживший изменение топологии, извещает корневой свич.

Тот, в свою очередь, требует от всех остальных очистить их записи

Обнаружение изменений в топологии влечет немедленную очистку записей

Если некорневой свич не получает hello-пакеты от корневого в течение Max Age,

Начинает действовать, если не получает BPDU в течение 3 hello-интервалов

Последовательное прохождение порта через состояния:

Как мы видим, в RSTP остались такие роли портов, как корневой и назначенный, а роль заблокированного разделили на две новых роли: Alternate и Backup. Alternate — это резервный корневой порт, а backup — резервный назначенный порт. Как раз в этой концепции резервных портов и кроется одна из причин быстрого переключения в случае отказа. Это меняет поведение системы в целом: вместо реактивной (которая начинает искать решение проблемы только после того, как она случилась) система становится проактивной, заранее просчитывающей “пути отхода” еще до появления проблемы. Смысл простой: для того, чтобы в случае отказа основного переключится на резервный линк, RSTP не нужно заново просчитывать топологию, он просто переключится на запасной, заранее просчитанный.

Ранее, для того, чтобы убедиться, что порт может участвовать в передаче данных, требовались таймеры, т.е. свич пассивно ждал в течение означенного времени, слушая BPDU. Ключевой фичей RSTP стало введение концепции типов портов, основанных на режиме работы линка — full duplex или half duplex (типы портов p2p или shared, соответственно), а также понятия пограничный порт (тип edge p2p), для конечных устройств. Пограничные порты назначаются, как и раньше, командой spanning-tree portfast, и с ними все понятно — при включении провода сразу переходим к forwarding-состоянию и работаем. Shared-порты работают по старой схеме с прохождением через состояния BLK — LIS — LRN — FWD. А вот на p2p-портах RSTP использует процесс предложения и соглашения (proposal and agreement). Не вдаваясь в подробности, его можно описать так: свич справедливо считает, что если линк работает в режиме полного дуплекса, и он не обозначен, как пограничный, значит, на нем только два устройства- он и другой свич. Вместо того, чтобы ждать входящих BPDU, он сам пытается связаться со свичом на том конце провода с помощью специальных proposal BPDU, в которых, конечно, есть информация о стоимости маршрута к корневому свичу. Второй свич сравнивает полученную информацию со своей текущей, и принимает решение, о чем извещает первый свич посредством agreement BPDU. Так как весь этот процесс теперь не привязан к таймерам, происходит он очень быстро, только подключили новый свич и он практически сразу вписался в общую топологию и приступил к работе (можете сами оценить скорость переключения в сравнении с обычным STP на видео). В Cisco-мире RSTP называется PVRST (Per-Vlan Rapid Spanning Tree).

Содержание

Петли в коммутируемой сети могут возникнуть по нескольким причинам:

  • Отключен STP;
  • PVST BPDU передает идентификатор VLAN. Если на access-интерфейсе полученный идентификатор VLAN'а не совпадает с VLAN ID в котором было получено BPDU, то порт переводится в заблокированное состояние для этого VLAN;
  • Различные версии STP;
  • Разные native VLAN'ы на концах транка;
  • Слишком маленькие таймеры STP;
  • Большое количество хопов в топологии STP.

Настройки STP по умолчанию (для коммутатора 3550):

Hello time: 2 секунд

Forward-delay time: 15 секунд

Maximum-aging time: 20 секунд

Transmit hold count: 6 BPDU

Включить PVST+ в VLAN (по умолчанию включен):

Включение Rapid PVST:

Задачи по настройке MST:

  1. Создать нужные VLAN'ы и назначить порты в соответствующие VLAN.
  2. Настроить параметры IST:
    • IST Bridge Priority
    • IST Port Priority
  3. Глобально включить MST и зайти в режим настройки MST выполнив команду spanning-tree mode mst
  4. Из режима настройки MST настроить параметры, которые обязательно должны совпадать у всех коммутаторов в регионе:
    • Имя региона MST
    • MST revision number
    • Соответствие MST instance -- VLAN'ы
  5. Настроить параметры, которые обычно (но не обязательно) уникальны для коммутатора:
    • Bridge Priority для instance
    • Port Priority для instance
  • Loop Guard
  • BPDU Guard
  • Root Guard
  • PortFast
  • BPDU Filter
  • UDLD

Функции PortFast, BPDU guard, BPDU filtering, EtherChannel guard, root guard или loop guard могут быть настроены в режиме PVST+, rapid PVST+ или MSTP.

Функции UplinkFast, BackboneFast или cross-stack UplinkFast могут быть настроены в режиме rapid PVST+ или MSTP, но они будут оставаться выключенными (inactive) до тех пор пока режим не будет изменен на PVST+.

Portfast — функция, которая позволяет порту пропустить состояния listening и learning и сразу же перейти в состояние forwarding. Настраивается на портах уровня доступа, к которым подключены пользователи или сервера.

Фактически, PortFast меняет две вещи в стандартной работе STP:

Когда на интерфейсе включен PortFast, он все равно отправляет BPDU.

Но, если включить PortFast на портах, которые соединены с другими коммутаторами, то есть риск создания петли. Так как, после получения BPDU порт остается в состоянии Forwarding. За это время, уже может образоваться петля.

Поэтому, в связке с PortFast, как правило, используется BPDUGuard (хотя и это, конечно же, не даст 100% гарантии, что не будет петли).

Синтаксис команды для настройки Port Fast на интерфейсе:

Настройка Port Fast на access-интерфейсе:

Настройка Port Fast на интерфейсе, который работает в режиме trunk (тегированый порт):

Если на интерфейсе, который работает в режиме транка выполнить команду без параметра trunk, то функция Port Fast не будет применена.

Функцию Port Fast можно настроить глобально на всех интерфейсах в режиме access:

Отключить Port Fast на интерфейсе:

Просмотр информации о статусе функции Port Fast на интерфейсе:

Просмотр информации о настройках spanning-tree на интерфейсе:

Если Port Fast была включена глобально на всех access-портах, то это можно посмотреть в суммарной информации о настройках STP на коммутаторе:

Проприетарное усовершенствование протокола 802.1D сделанное Cisco. В RSTP эта функция не используются, так как улучшения уже встроены в протокол.

После включения UplinkFast на коммутаторе:

Если основной RP выходит из строя, то коммутатор сразу переключается на запасной и переводит его в состояние forward.

Кроме того, UplinkFast позволяет коммутаторам обновить записи в таблицах коммутации, без использования TCN. Вместо TCN коммутатор находит MAC-адреса всех локальных устройств и отправляет один multicast фрейм с каждым MAC-адресом в поле отправитель. Удаляются также остальные записи в таблицы коммутации самого коммутатора.

Проприетарное усовершенствование протокола 802.1D сделанное Cisco. В RSTP эта функция не используются, так как улучшения уже встроены в протокол.

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

BPDU Guard — функция, которая позволяет выключать порт при получении BPDU.

Может быть включена глобально на коммутаторе или на интерфейсе, у этих режимов есть некоторые отличия:

  • Если BPDU Guard включена глобально на коммутаторе, то для портов с включенной функцией Port Fast:
    • при корректной настройке, порты с включенным Port Fast не должны получать BPDU,
    • получение BPDU на портах с Port Fast говорит о неправильных настройках или о том, что подключено неавторизованное устройство,
    • при получении BPDU на интерфейсе, функция BPDU Guard переведет его в состояние error-disabled,
    • при получении BPDU на интерфейсе, функция BPDU Guard переведет его в состояние error-disabled.

    Включение BPDU Guard глобально на коммутаторе, на портах с включенной функцией Port Fast:

    Хотя в команде, которая включает BPDU Guard глобально на коммутаторе, есть параметр portfast, применение этой команды не включает функцию Port Fast. Она должна быть настроена отдельно.

    Настройка BPDU Guard на интерфейсе:

    Просмотр информации о настройках spanning-tree на интерфейсе:

    Если функция BPDU Guard была включена глобально на коммутаторе, то это можно посмотреть в суммарной информации о настройках STP на коммутаторе:

    BPDU Filtering — после включения функции, порт не принимает и не отправляет BPDU.

    Может быть включена глобально на коммутаторе или на интерфейсе, у этих режимов есть некоторые отличия:

    • Если BPDU filtering включена глобально на коммутаторе, то для портов с включенной функцией Port Fast:
      • функция работает только для портов на которых включена функция Port Fast, но не включена функция BPDU Filtering (не применена на интерфейсе),
      • порт не принимает и не отправляет BPDU,
      • при включении порта отправляются несколько BPDU (10 BPDU) если порт на протяжении этого времени получает любой BPDU пакет то PortFast или PortFast + BPDU filtering отключается.
      • порт не принимает и не отправляет BPDU,
      • применение этой функции на интерфейсе равносильно отключению spanning-tree на нем и может привести к образованию петель.

      Возможные комбинации при включении BPDU Filtering глобально или на интерфейсе:

      Настройка на интерфейсе Глобальная настройка Состояние PortFast Состояние PortFast BPDU Filtering
      По умолчанию Включена Включена Включена
      По умолчанию Включена Отключена Отключена
      По умолчанию Отключена Не применимо Отключена
      Отключена Не применимо Не применимо Отключена
      Включена Не применимо Не применимо Включена

      Включение BPDU Filtering глобально на коммутаторе, на портах с включенной функцией Port Fast:

      Хотя в команде, которая включает BPDU Filtering глобально на коммутаторе, есть параметр portfast, применение этой команды не включает функцию Port Fast. Она должна быть настроена отдельно.

      Настройка BPDU Filtering на интерфейсе:

      Просмотр информации о настройках spanning-tree на интерфейсе:

      Если функция BPDU Filtering была включена глобально на коммутаторе, то это можно посмотреть в суммарной информации о настройках STP на коммутаторе:

      Root Guard -- если функция включена на интерфейсе, то при получении на нём BPDU лучшего, чем текущий корневой коммутатор, порт переходит в состояние root-inconsistent (эквивалентно состоянию listening). После того как порт перестает получать BPDU, он переходит в нормальное состояние.

      Включение Root Guard на интерфейсе (переводит порт в роль designated):

      Посмотреть какие порты в состоянии inconsistent:

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

      Описание Loop Guard


      На каких портах следует включать Loop Guard? Наиболее очевидный ответ blocking. Однако это не всегда правильно. Loop guard должен быть включен на non-designated портах (более точно root и alternate портах).

      По умолчанию Loop guard выключен. Для того что бы его включить используйте следующие команды:

      Что бы включить Loop guard глобально:

      Команда для проверки статуса Loop Guard:

      • Root Guard и Loop Guard не могут быть включены одновременно.
      • Root Guard не должен быть включен на интерфейсах, которые используются функцией UplinkFast. UplinkFast позволяет запасным интерфейсам (которые находятся в заблокированном состоянии) заменять корневой порт, если он вышел из строя. Однако, если на запасных интерфейсах включен Root Guard, то порты будут переведены в состояние root-inconsistent и не перейдут в состояние forward.

      Функции Loop Guard и UDLD (Unidirectional Link Detection) частично совпадают друг с другом. Обе эти функции предназначены для борьбы с последствиями сбоев в функциональности STP. Однако есть небольшие отличия в функциональности.

      Spanning tree protocol что это

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


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

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

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

      STP в Cisco


      На этой странице описывается процедура настройки различных версий протокола Spanning Tree на коммутаторах Cisco.

      Содержание

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

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

      Корневым становится коммутатор с наименьшим идентификатором моста (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.



      Изменениями топологии считается изменения ролей DP и RP.

      Коммутатор, который обнаружил изменения в топологии отправляет Topology Change Notification (TCN) BPDU корневому коммутатору:

      Если порт изменяет состояние с Blocking в Forwarding, то он должен пройти через два промежуточных состояния: Listening и Learning. Переход из Forwarding в Blocking может выполняться сразу.

      • Root Port — корневой порт коммутатора
      • Designated Port — назначенный порт сегмента
      • Nondesignated Port — неназначенный порт сегмента
      • Disabled Port — порт который находится в выключенном состоянии.
      • Blocking — блокирование
      • Listening — прослушивание
      • Learning — обучение
      • Forwarding — пересылка

      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.

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

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

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

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

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

      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+ в каждом VLAN строит дерево. В каждом VLAN работает RSTP.

      • 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 на интерфейсе.

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

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

      Spanning tree protocol что это

      STP довольно старый протокол, он создавался для работы в одном LAN-сегменте. А что делать, если мы хотим внедрить его в нашей сети, которая имеет несколько VLANов?

      Стандарт 802.1Q, о котором мы упоминали в статье о коммутации, определяет, каким образом вланы передаются внутри транка. Кроме того, он определяет один процесс STP для всех вланов. BPDU по транкам передаются нетегированными (в native VLAN). Этот вариант STP известен как CST (Common Spanning Tree). Наличие только одного процесса для всех вланов очень облегчает работу по настройке и разгружает процессор свича, но, с другой стороны, CST имеет недостатки: избыточные линки между свичами блокируются во всех вланах, что не всегда приемлемо и не дает возможности использовать их для балансировки нагрузки.

      Cisco имеет свой взгляд на STP, и свою проприетарную реализацию протокола — PVST (Per-VLAN Spanning Tree) — которая предназначена для работы в сети с несколькими VLAN. В PVST для каждого влана существует свой процесс STP, что позволяет независимую и гибкую настройку под потребности каждого влана, но самое главное, позволяет использовать балансировку нагрузки за счет того, что конкретный физический линк может быть заблокирован в одном влане, но работать в другом. Минусом этой реализации является, конечно, проприетарность: для функционирования PVST требуется проприетарный же ISL транк между свичами.

      Также существует вторая версия этой реализации — PVST+ , которая позволяет наладить связь между свичами с CST и PVST, и работает как с ISL-транком, так и с 802.1q. PVST+ это протокол по умолчанию на коммутаторах Cisco.

      Читайте также: