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)

+:

  • Работает с несколькими вланами
  • Поддерживает несколько инстансов для одного физ интерфейса
  • Поддерживает edge ports на MX и ACX роутерах

-:

  • Не со всеми протоколами совместим
  • Поддерживает ограниченное кол-во портов. MSTP регион поддерживает до 64 MSTIs (а в каждом инстансе 1-4094 вланов)
  • MSTP больше нагружает CPU.
  • Не так быстр как RSTP

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+