Spanning-Tree protocol (STP)
В общем
Ethernet легко подвержен бродкаст-штормам, когда в сети возникают петли.
Но для обеспечения резервирования, требуются альтернативные линки и это приводит топологию сети к петлям.
STP как раз дает возможность использовать резервирование, но избежать петель.
Juniper поддерживает данные вариации STP: STP, RSTP(используется по дефолту), MSTP, VSTP.
Итого зачем вообще нужен STP:
- - Предотвращает бродкаст штормы
- - Обеспечивает резервирование дополнительными линками, без петель
- - Позволяет подключать к сети устройства, не поддерживающие STP (используя edge ports)
Корень дерева (root tree | root bridge) - это свитч, который выбирается алгоритмом STP на основании Bridge ID (Bridge Priority [0 - 65535] + MAC-addr свитча). В приоритете коммутатор с наименьшим Bridge ID. В дальнейшем он используется для рассчета наилучшего пути от 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. На этапе построения топологии используются Configuration BPDU.
Когда отработал STA (spanning tree algorithm), всем портам назначены роли и состояния, идентифицированы root и designated bridges, требуется механизм для поддержания данной топологии в актуальном состоянии. Используем BPDU.
Root bridge отправляет BPDU каждые 2 сек (дефолтный hello time interval RSTP) на мультикаст-адрес: 01-80-c2-00-00-00. Когда на порт приходит 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
STP работает на основании "создания" bridge (switch).
Root bridge (switch) - в самом верху.
Ethernet от root switch подсоединяет другие свитчи в Local Area Network (LAN).
В STP и RSTP инстансах свитчам присваиваются extended system-id.
При изменении топологии, bridge извещает об этом root bridge, который требует от остальных почистить записи текущей топологии.
В построенном дереве только root bridge генерирует BPDU.
Дефолтные тайминги 50 sec до перехода в состояние forwarding.
Нахождение порта в состояниях:
- blocking (20 sec)
- listening (15 sec)
- learning (15 sec)
- forwarding
Другие таймеры:
- Hello (2 sec)
- Max Age (20 sec)
- Forward delay timer (15 sec)
+:
- Работает с 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
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)
Отличие в скорости реакции на изменение топологии. При изменении топологии, свитч немедленно чистит записи о текущей топологии. Для p2p и edge-портов - быстрый переход к forwarding state.
STP: сходимость до 50 сек
RSTP: сходимость 6 сек (3 * hello BPDU interval)
В построенной топологии (дереве) все свитчи генерируют BPDU каждые 2 sec.
В RSTP добавились port-mode:
- shared (half duplex) - p2p между свитчами, проходит обычный цикл во всеми таймингами blocking > listening > learning > forwarding.
- p2p (full duplex) - тут свитч сам запрашивает у соседа-свитча на p2p линке - давай дружить (тут вся инфа о нашем bridge), я вижу root bridge вот так. Сосед принимает решение, сравнивая полученные данные с уже имеющимися. Для обмена данными используются proposal BPDU (запрос локального bridge) и agreement BPDU (ответ соседа).
- egde - для конечных устройств. Моментально становятся в состояние - forwarding.
По дефолту именно RSTP используется в 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.
Если требуется разбалансировать нагрузку или просто часть вланов пустить по одному дереву, а остальные по-другому, то MSTP для этого подойдет лучше всего. Будет создано столько STP, сколько топологий мы хотим использовать.
Быстрая сходимость сети унаследована от 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