Spanning-Tree protocol (STP)
В общем
Ethernet легко подвержен бродкаст-штормам, когда в сети возникают петли.
Но для обеспечения резервирования, требуются альтернативные линки и это приводит топологию сети к петлям.
STP как раз дает возможность использовать резервирование, но избежать петель.
Juniper поддерживает данные вариации STP: STP, RSTP(используется по дефолту), MSTP, VSTP.
Итого зачем вообще нужен STP:
- - Предотвращает бродкаст штормы
- - Обеспечивает резервирование дополнительными линками, без петель
- - Позволяет подключать к сети устройства, не поддерживающие STP (используя edge ports)
Корень дерева (root tree | root bridge) - это свитч, который выбирается алгоритмом STP. В дальнейшем он используется для рассчета наилучшего пути от bridge до root bridge.
Фреймы ходят по сети к получателю - leaf (ПК или любой другой не транзитный хост) - вдоль ветвей (branches).
Tree branch (ветвь) - сегмент сети или линк между бриджами.
Designated bridges - свитчи, которые передают фреймы по STP-дереву.
STP создает единственный возможный путь между root и leaf. Альтернативные пути переводятся в standby режим.
Роли портов (RSTP)
- Root port - ближайший к root bridge. Это единственный порт, который получает фреймы от root bridge и пересылает их на него.
- Designated port - порт, передающий трафик от root bridge к leaf. Designated bridge имеет один designated порт для каждого LAN. Root bridge передает фреймы во все designated порты.
- Alternate port - альтернатиный порт к root bridge. Он не является частью активного spanning tree, но когда root port накрывается (если падает линк или переходит в состояние отбрасывания пакетов), то alternate port сразу принимает на себя его роль. Отсутствует в обычном STP, за счет чего STP отстает по времени сходимости.
- Backup port - резервный для desidnated порта. Работает аналогично alternate port.
- Disabled port - порт, не принимает участия в активном spanning tree.
- Edge port - порт в сторону хоста, не поддерживаюшего STP (ПК, сервер, роутеры, тупиковые хабы). Т.к. предполагается, что хосты не способны образовать петлю => edge port сразу переходит в состояние передачи фреймов. Можно назначить edge порт, а также STP может сам распознать edge порт (через отсутствие связи с конечными станциями).
Состояния портов (RSTP)
- Discarding - отбрасывает все BPDU, все data-фреймы и не изучает mac-адреса.
- Learning - изучает маки, и строит таблицу коммутации.
- Forwarding - порт пересылает и фильтрует фреймы > становится частью активного spanning tree.
BPDU (bridge protocol data units)
BPDU фреймы - это сообщения, которыми обмениваются свитчи. В них содержится информация: bridge ID, root path costs, и port MAC addresses. Начальный обмен BPDU между коммутаторами определяет root bridge. Также BPDU распространяют информацию о стоимости маршрутов (cost) между ветками (tree branches) - основанные либо на пропускной способности линков, либо заданные вручную. RTSP строит топологию исходя из cost.
Когда отработал STA (spanning tree algorithm), всем портам назначены роли и состояния, идентифицированы root и designated bridges, требуется механизм для поддержания данной топологии в актуальном состоянии. Используем BPDU.
Root bridge отправляет BPDU каждые 2 сек (дефолтный hello time interval RSTP). Когда на порт приходит BPDU, он сравнивает данные, с полученными ранее, и на основании сравнения:
- - Если данные BPDU совпадают с существующей записью в таблице MAC-адресов, порт сбрасывает таймер max age на 0 и пересылает новый BPDU с текущей активной информацией о топологии на следующий порт в spanning tree.
- - Если топология в BPDU была изменена, обновляется таблица MAC-адресов, max age устанавливается в 0, и новый BPDU пересылается с текущей активной информацией о топологии на следующий порт в spanning tree.
- - Когда порт не получает BPDU в течение 3 * hello (3*2 = 6 сек), он реагирует одним из двух способов.
- -Если bridge является root port: происходит полное перестроение spanning tree.
- -Если bridge является любым некорневым мостом: RSTP обнаруживает, что подключенный хост не умеет отправлять BPDU, и назначает этот порт в edge port.
STP генерирует свои BPDUs. Сетевуха на хосте (ПК, сервер, ...) тоже генерирует свои BPDUs. Эти BPDU хостов могут быть обработаны STP свитча и привести к проблемам на сети. Поэтому лучше включать BPDU Protection на edge ports.
Root Bridge Fails
Когда link на root port падает, в BPDU добавляется флаг, topology change notification (TCN).
Когда этот BPDU доходит до следующего порта в VLAN, таблица MAC-адресов сбрасывается, и BPDU едет на следующий bridge. В итоге, все порты во VLAN обнулили свои таблицы MAC. После этого RSTP назначает новый root port.
Если root port или designated port падают - alternate или backup port берут на себя их роль после обмена BDPU (proposal-agreement handshake).
Если локальный порт становится root или designated, то он согласовывает быстрое изменение тем же proposal-agreement handshake с ближайшим свитчем.
Так как падение линка приводит к очистке маков на всей сети - это немного затормаживает работу сети и образует неплохой такой флуд для переобучения маков.
Включенный ARP (address resolution protocol) заставляет коммутатор активно отправлять ARP-запросы на IP-адреса в кэше ARP.
Включение ARP в STP наиболее полезно для избегания чрезмерного флуда в L2.
Модификации STP
STP
+:
- Работает с 802.1D 1998 bridges
- STP обратносовместим с RSTP, можно включать STP на 802.1D 1998 bridges
- Годится для устаревших сетей, где не требуется быстрая сходимость.
-:
- STP и RSTP ограничены одним инстансом для одного интерфейса. Используется set rstp interface для включения интерфейса в RSTP инстанс.
- STP медленее RSTP
- Не разделяет вланы. Создает spanning tree без учетов вланов и возможности постоения топологии для каждого влана. (в MSTP решена эта проблема)
- Не обеспечивает быструю сходимость. STP использует тайминги, RSTP использует handshake механизм.
- В IEEE 802.1D STP не используются edge ports.
На MX (c 14.1R1): - Без включения traceoptions работает логирование состояний и ролей интерфейсов STP. - Сбор информации что стриггерило изменения в STP (роль или статус).
На SRX: Поддерживается начиная с 15.1X49-D70 на некоторых девайсах.
На EX: По дефолту используется RSTP. Если работаем с Junos, поддерживающем Enhanced Layer 2 Software (ELS) - можно указать чтобы STP использовался принудительно (через указание force-version в конфиге).
Основные команды:
show spanning-tree statistics message-queues show spanning-tree stp-buffer see-all show spanning-tree statistics bridge show spanning-tree statistics interface clear spanning-tree stp-buffer
STP работает на основании создания bridge (switch).
Root bridge (switch) - в самом верху.
Ethernet от root switch подсоединяет другие свитчи в Local Area Network (LAN).
В STP и RSTP инстансах свитчам присваиваются extended system-id.
Config
1. удаляем RSTP глобально или выключаем на конкретных интерфейсах:
delete protocols rstp set protocols rstp interface ge-0/0/0.0 disable
2. включаем STP глобально или для конкретных интерфейсов:
set protocols stp interface all set protocols stp interface ge-0/0/0.0
3. для более быстрого изучения маков - включаем Address Resolution Protocol (ARP) [при использовании irb | rvi]
set protocols stp interface all arp-on-stp set protocols stp interface ge-0/0/0.0 arp-on-stp
RSTP (Rapid STP)
Отличие в скорости реакции на изменение топологии.
STP: до 50 сек
RSTP: 6 сек (3 * hello BPDU interval)
По дефолту используется в Juniper.
+:
- Быстрее в сходимости при факапах
- Voice и video лучше использовать с rstp.
- RSTP обратносовместим с STP, причем на свитче не обязательно использовать именно RSTP.
- Поддерживается больше портов, чем в MSTP или VSTP
- Поддерживает edge ports на MX и ACX роутерах
-:
- STP и RSTP ограничены одним инстансом для одного интерфейса. Используется set rstp interface для включения интерфейса в RSTP инстанс.
- Не работает с 802.1D 1998 bridges
- Не разделяет вланы. Создает spanning tree без учетов вланов и возможности постоения топологии для каждого влана. (в MSTP решена эта проблема)
Config
[глобально, внутри routing instance, внутри logical system]
Необходимый минимум:
- Добавляем интерфейсы [все последующие фичи применимы и к 'interface all']
set protocols rstp interface ge-0/0/0.0 или set protocols rstp interface all
- Назначаем приоритет интерфейса для определения root port. [default priority = 128, значение должно быть кратно 16 (16,32,112 и т.п.)]
set protocols rstp interface ge-0/0/0.0 priority [0-240]
- Назначаем тип интерфейса. [defaults: full-duplex = p2p mode, half-duplex = shared]
set protocols rstp interface ge-0/0/0.0 mode (p2p | shared)
- Задаем bridge-priority (switch priority). [default priority = 32 768, значение должно быть кратно 4096]
set protocols rstp bridge-priority [0 - 61 440]
- BPDU hello timers. [defaults: 20 sec]
set protocols rstp max-age [6-40]
- Интервал пересылки configuration BPDU от root bridge. [defaults: 2 sec]
set protocols rstp hello-time [1-10]
Опционально:
- Для поддержания устаревших bridge включаем чистый stp. [чтобы откатить - удаляем force-version из конфига и clear spanning-tree protocol-migration]
set protocols rstp force-version stp
- Добавление provider-bridge в rstp. [dst mac-address BPDU выставляется = 01:80:c2:00:00:08 и он не блочится RE, на которую прилетел]
set protocols rstp bpdu-destination-mac-address provider-bridge-group
- Задать extended system ID. [это ID STP|RSTP инстанса]
set protocols rstp extended-system-id [0 - 4095]
- interface cost (вместо определения cost по interface speed - задаем cost вручную)
set protocols rstp interface ge-0/0/0.0 cost [1 - 200 000 000]
- Настроить интерфейс как edge - не ожидает BPDU от хоста. Если прилетела BPDU, порт становится non-edge port и переводится в forwarding state. [не работает для чистого STP]
set protocols rstp interface ge-0/0/0.0 edge
- bridge port пребывает в learning и listening 15 sec, до перехода в forwarding state. Можно этот интервал изменить. [defaults: 15 sec]
set protocols rstp forward-delay [4-30]
NSB - non stop bridging ptorotoсol синхронизирует RSTP на обоих RE, чтобы избежать перерыва сервиса при RE switchover.
- Включаем NSB, если на девайсе две RE:
set chassis redundancy graceful-switchover set system commit synchronize set protocols layer2-control nonstop-bridging
MSTP (Multiple STP)
Является расширением RSTP. На одну физическую топологию накладывается несколько STP-инстансов (STI). Одна STI может состоять из одного или нескольких вланов.
В отличие от STP и RSTP, для одного влана порт будет в состоянии forwarding, для другого - blocked.
?!При этом балансируется нагрузка по всей сети и поддерживается не большой уровень загрузки CPU свитчей.?!
Быстрая сходимость сети унаследована от RSTP.
MSTI (MST instance) - это по сути набор вланов.
MSTP region - это группка свитчей с одинаковыми MSTI. Также у свитчей одного региона должны быть одинаковыми:
- region name - задается админом - это просто зазвание
- revision level - задается админом
- mapping table
MSTP region поддерживает до 64 MSTI, каждый MSTI может содержать до 4094 vlans.
Когда мы создаем регион, MSTP автоматом создает internal STI (IST instance 0), в котором определяется Regional Root Bridge и добавляются все вланы, которые не определены в другие MSTI.
Все вланы, на свитче одного MST-региона буду по умолчанию привязаны к IST. При создании новых вланов, по дефолту тоже пойдут в IST, или в MSTI, который зададим для vlan.
IST (MST instance 0) - по умолчанию существует в каждом MSTP region.
Кроме региона, MSTP создает CIST: Common and Internal Spanning Tree, которое управляет всеми MSTP регионами, а также отдельными устройствами, на которых запущен RSTP/STP [MSTP определяет их как отдельные части дерева].
CIST рассматривает MSTP регион как виртуальный bridge, несмотря на то сколько внутри региона девайсов, и позволяет коннектиться разным регионам внутри MSTP.
Благодаря CIST - в MSTP может работать с STP и RSTP.
Также есть Common Apanning Tree, который собирает IST (MSTI) и CIST вместе.
Ещё немного обобщив терминологию:
- IST - дерево внутри региона
- CIST - дерево между регионами
- CST - деревья внутри региона + деревья между регионами
О плюсах и минусах MSTP:
+:
- Работает с несколькими вланами
- Поддерживает несколько инстансов для одного физ интерфейса
- Поддерживает edge ports на MX и ACX роутерах
-:
- Не со всеми протоколами совместим
- Поддерживает ограниченное кол-во портов. MSTP регион поддерживает до 64 MSTIs (а в каждом инстансе 1-4094 вланов)
- MSTP больше нагружает CPU.
- Не так быстр как RSTP
Config
set protocols mstp interface all
Для QFX5100 и других, которые не поддерживают interface all включаем mstp для диапазона интерфейсов:
set interfaces interface-range all-interfaces member-range ge-0/0/0 to ge-0/0/23 set protocols mstp interface all-interfaces
Для конкретного интерфейса:
set protocols mstp interface ge-0/0/0 set protocols mstp interface ge-0/0/0 priority [0-240] set protocols mstp interface ge-0/0/0 cost [1 - 200 000 000] set protocols mstp interface ge-0/0/0 mode (p2p | shared) set protocols mstp interface ge-0/0/0 edge set protocols mstp interface ge-0/0/0 disable
Для протокола (аналогично RSTP):
set protocols mstp bridge-priority [0 - 61 440] set protocols mstp max-age [6-40] set protocols mstp hello-time [1-10] set protocols mstp forward-delay [4-30]
MSTP-specific options:
set protocols mstp configuration-name region1 set protocols mstp revision-level [0 - 65 535] set protocols mstp max-hops [1 - 255] | defaults = 19 hops 20 hops - кол-во хопов для BPDU в MSTP-регионе. set protocols mstp msti [1 - 64] set protocols mstp msti [1 - 64] bridge-priority [0 - 61 440] set protocols mstp msti [1 - 64] vlans (vlan-id | vlan-id-range)
msti-id уникальна в рамках региона. То есть в другом регионе можно использовать тот же msti-id. CIST (common instance ST) msti-id = 0.
set protocols mstp msti [1 - 64] interface ge-0/0/0.0 set protocols mstp msti [1 - 64] interface ge-0/0/0.0 priority [0-240] set protocols mstp msti [1 - 64] interface ge-0/0/0.0 cost [1 - 200 000 000] set protocols mstp msti [1 - 64] interface ge-0/0/0.0 edge
Operational commands:
show spanning-tree interface show spanning-tree bridge
VSTP (VLAN STP)
Для PVST для каждого влана рассчитывается своя топология - при этом будут затрачены значительные ресурсы свитча (CPU, память) и по мере роста вланов - их будет тратиться всё больше и больше.
+:
- Работает в разными вланами. Включаем VSTP внутри вланов, для которых требуется работа STP.
- VSTP и RSTP могут быть включены на свитче одновременно.
- Совместим с Cisco PVST+ и Rapid-PVST+ (но без поддержки ISL trunks)
- Можно добавить интерфейс как в global level, так и в VLAN level. Если добавить global, то VSTP будет включен во всех вланах этого интерфейса. Если будет добавлен global и VLAN level, то конфиг VLAN level будет приоритетнее и перезапишеи global level.
- Поддерживает edge ports на MX и ACX роутерах
-:
- 1 инстанс на один влан
- Использует ограниченное кол-во портов
- VSTP может работать максимум с 509 вланами. Однако, лучше использовать не более 190.
- Для одного влана нельзя включить и VSTP и RSTP.
- Если на свитче одновременно включаем VSTP + RSTP и на свитче более 253 вланов, то для 1-253 влана будет работаеть VSTP, для остальных RSTP.
- Не работает на SRX. Также имеет разные спецификации по кол-ву вланов для разныех моделей свитчей. Лучше смотреть на сайте juniper.
TIPS:
- - Рекомендуется включать VSTP во всех вланах.
- - При использовании: set protocol vstp vlan all, vlan-id 1 туда не включен, если он нужен, то добавляем отдельно: set protocol vstp vlan 1
- - Максимальное кол-во вланов, используемых в VSTP - опредлеляется типов свитча и его OS.
- - Можно использовать VSTP вместе с cisco-свитчами PVST+ и Rapid-PVST+
Config
set protocols vstp interface all set protocols vstp vlan all interface all set protocols vstp vlan (vlan-id | vlan-id-range | vlans list) interface all set protocols vstp vlan-group (voice-vlans) vlan (vlan-id | vlan-id-range | vlans list) interface all
set protocols vstp interface ge-0/0/0.0 set protocols vstp interface ge-0/0/0.0 disable set protocols vstp vlan all interface ge-0/0/0.0 set protocols vstp vlan (vlan-id | vlan-id-range | vlans list) interface ge-0/0/0.0 set protocols vstp vlan-group (voice-vlans) vlan (vlan-id | vlan-id-range | vlans list) interface ge-0/0/0.0
Operational commands:
show spanning-tree interface show spanning-tree bridge show spanning-tree statistics bridge show spanning-tree interface routing-instance RI-name show spanning-tree bridge routing-instance RI-name
© Наталия Бобкова 2014—2022