Spanning-Tree protocol (STP): различия между версиями

Материал из Juniper Exam Wiki
Перейти к навигации Перейти к поиску
Строка 135: Строка 135:


===RSTP (Rapid STP)===
===RSTP (Rapid STP)===
Отличие в скорости реакции на изменение топологии.
Отличие в скорости реакции на изменение топологии. При изменении топологии, свитч немедленно чистит записи о текущей топологии. Для p2p и edge-портов - быстрый переход к forwarding state.  


STP: до 50 сек
STP: сходимость до 50 сек


RSTP: 6 сек (3 * hello BPDU interval)
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.


По дефолту используется в Juniper.


'''+''':
'''+''':
*Быстрее в сходимости при факапах
*Быстрее в сходимости при факапах.
*Voice и video лучше использовать с rstp.
*Voice и video лучше использовать с rstp.
*RSTP обратносовместим с STP, причем на свитче не обязательно использовать именно RSTP.
*RSTP обратносовместим с STP, причем на свитче не обязательно использовать именно RSTP.

Версия 14:13, 21 марта 2021

В общем

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

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