Spanning-Tree protocol (STP)

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

В общем

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 режим.

Роли портов STP

  • 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 сразу принимает на себя его роль.
  • 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.

MSTP создает внутреннее и внешнее дерево (CIST: common instance ST) и управляет всеми MSTP регионами, а также отдельными устройствами, на которых запущен RSTP/STP - MSTP определяет их как отдельные области дерева.

CIST рассматривает MSTP регион как виртуальный bridge, несмотря на то сколько внутри региона девайсов, и позволяет нескольким девайсам региона коннектиться с другими регионами.

CIST - это единая топология которая объединяет разные свитчи (STP, RSTP, MSTP). Благодаря чему коннектятся разные LAN и девайсы внутри бриджа.

B MSTP есть обратная совместимость с STP и RSTP.

Также лучше иcпользуются сетевые ресурсы.

MSTP region - это группка свитчей с одинаковыми:

  • region name - задается админом - это просто зазвание
  • revision level - задается админом
  • mapping table

MSTP region поддерживает до 64 MSTI, каждый MSTI может содержать до 4094 vlans.

Когда мы определяем регион, MSTP автоматом создает internal STI (STI instance 0), который определяет root switch региона и добавляет в регион все вланы, которые не определены в другие MSTI.

MSTI будет включать в себя все статические вланы, которые мы укажем. При создании новых dynamic vlans, свитч тоже запихнет их в IST, если не укажем, что этот влан принадлежит другому MSTI.

+:

  • Работает с несколькими вланами
  • Поддерживает несколько инстансов для одного физ интерфейса
  • Поддерживает 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)

+:

  • Работает в разными вланами. Включаем VSTP внутри вланов, для которых требуется работа STP.
  • VSTP и RSTP могут быть включены на свитче одновременно.
  • Можно добавить интерфейс как в 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.

TIPS:

- Рекомендуется включать VSTP во всех вланах.
- При использовании: set protocol vstp vlan all, vlan-id 1 туда не включен, если он нужен, то добавляем отдельно: set protocol vstp vlan 1
- Максимальное кол-во вланов, используемых в VSTP - опредлеляется типов свитча и его OS.
- Можно использовать VSTP вместе с cisco-свитчами PVST+ и Rapid-PVST+