пятница, 15 июля 2016 г.

Что Ethernet-инженеру нужно знать о STP

Есть у меня довольно много заметок по разным всяким темам. Есть даже блокнотик, в который я старался выписывать краткую информацию по каждой технологии. Время от времени буду переносить информацию в блог.

Сегодня перенесу заметку по STP. Тема реально важная. В последний раз я встретился с ней там, где реально не ожидал. В самых недрах VPLS... В посте ниже некая шпаргалочка по STP, которая рассчитана на то, что вы знали про него, но кое-что забыли. Сам иногда обращаюсь к ней.

Существует миллион видов протокола STP, но все они так или иначе делятся на три.

STP

1. Выборы root коммутатора.

После запуска процесса на коммутаторе, каждый коммутатор начинает слать BPDU-сообщения, в котором отправляет свой BridgeID (BID), который состоит из значения Priority и MAC-адреса. Отправляет он свой BID в двух полях, в Sender BID и в Root BID. Каждый коммутатор считает себя Root Bridge, пока он не получил других BPDU. Если свитч получает BPDU, в котором Root BID меньше чем его BID, он перестает слать свои BPDU и форвардит полученные BPDU (так называемые Superior Hello). При форварде он меняет поле Sender BID на свой BID.


2. Определение root-портов.


После того, как Root Bridge выбран, начинается процесс определения root-портов. Root-порт - это порт на коммутаторе, который ведет к руту. Root Bridge рассылает BPDU c нулем в поле COST. 

Допустим, на картинке выше:
SW2 получил BDPU от SW1 через интерфейс Gi1/0/1, он добавляет стоимость исходящего порта до рута. 0 + 2 = 2.
SW2 перенаправляет BPDU дальше к SW3.
Так же SW2 получает BPDU от SW3, в которой поле COST равно 2, и добавляет к нему стоимость своего исходящего интерфейса. 2 + 2 = 4.
SW2 сравнивает два порта по стоимости полученных через него BPDU. Gi1/0/1 (COST = 2) < Gi1/0/2 (COST = 4).
Порт Gi1/0/1 становится root-портом.
Процесс повторяется для SW3.

3. Определение designated-портов.

Далее выбираются Designated порты (DP) на каждом сегменте. Designated - порт, который имеет менее выгодный маршрут до root-коммутатора. Все порты Root Bridge становятся DP сразу.

Нас интересует сегмент SW2 - SW3:
SW2 получает BDPU от SW3 и после вычисления стоимости получает COST равный 4.
SW3 аналогично.
Начинается процесс выбора DP по

  1. Меньший Root BID
  2. Меньший Path Cost
  3. Меньший Sender BID
  4. Меньний Sender Port ID
В BPDU полученных SW2 и SW3 одинаковый RootBID, одинаковый PatchCost, выбор делается на основе SenderBID. Он ниже у SW2, поэтому он назначает свой порт в сегмент как DP, SW3 блокирует свой порт как проигравшый. Может быть случай, когда два коммутатора соединены двумя линками. Тогда и SenderID будет одинаков, выбор делается на основе SenderPortID, который состоит из приоритета (128) и ID порта.
Топология сошлась.

4. Простая авария

Линк SW1 - SW3 упал. SW3 узнает это по состоянию порта down/down и удаляет свой лучший BPDU. Теперь у SW3 нет пути до Root Bridge. SW1 так же узнает о падении линка, т.к. SW1 Root Bridge? он не отсылает сообщение руту о изменении топологии (TCN), он сразу шлет BPDU с TCN флагом. SW2 и SW3 уменьшают время жизни записей в FDB до Forwarding Delay (15 sec). SW3 тем временем понимает, что он получил BPDU через ранее блокированный порт. Эта BPDU становится лучшей. SW3 переводит порт в состояние Listening, затем в Learning, а затем и в Forwarding.Одним словом, все очень долго...

Линк мог и не упасть, но связность потеряться. В этом случае, SW3 будет ждать истечения MaxAge таймера. После чего SW3 будет пассивно ждать получения лучшего BDPU, после чего разблокирует порт через все состояния. Ещё дольше...

При изменении топологии вообще (в том числе и на абонентских портах), коммутатор, который заметил это, шлет TCN сообщение Root Bridge, который при получении его шлет Acknowledgment вниз коммутаторам, а следом BPDU с TCN флагом. Коммутаторы получая его уменьшают время жизни FDB до Forwarding Delay и Max Age.

RSTP


Выбор Root Bridge, RP и DP проходят аналогично классическому STP. Однако порт Gi1/0/1 на SW3 более не в блокированном состоянии. Он в состоянии Alternate, т.к. это лучшая альтернатива до Root Bridge. Выбор может происходить между несколькими портами и осуществляться на основе стандартных критериев.
  1. Меньший Root BID
  2. Меньший Path Cost
  3. Меньший Sender BID
  4. Меньний Sender Port ID
В данном случае, Gi1/0/1 это лучшая альтернатива у SW3, потому что COST через этот путь равен 4, а более путей нет. Каждый коммутатор в RSTP топологии шлет BPDU, а не только Root, как в классическом STP.

В RSPT существуют роли портов:

  • Edge-порт - при включении сразу переводится в Forwarding, 
  • Shared-порт - работает как в CSTP (BLK — LIS — LRN — FWD).
  • P2P-порт - порт между двумя коммутаторами.
При отсутствии BDPU от Root Bridge после 3 Hello-интервалов коммутатор блокирует свои порты начинает процесс Proposal/Agreement. Довольно запутанный процесс, в результате которого, соседний свич просит разблокировать порт в его сторону, если оттуда он видит лучшие BPDU. После чего, сам этот соседний свич блокирует порты и начинает Proposal. При получении лучшего BPDU с порта, коммутатор сразу переводит порт в Forwarding, блокирует остальные и шлет Proposal. Это такой волнообразный процесс.

Коммутатора реагирует на изменение топологии посылая своим соседям TCN BPDU, после чего сбрасывает свою FDB-таблицу, кроме порта, состояние которого поменялось. Коммутатор шлет TCN BPDU через все nonedge designated порты. Каждый следующий сосед сбрасывает свою таблицу, кроме порта из которого пришел TCN, и шлет TCN сообщение далее своим соседям.

MSTP

MSTP строит одну топологию на группу VLANов, под капотом RSPT. Может работать со всеми STP-протоколами.

Существует понятие Region внутри которого находятся Instances. Каждому Instance соответствует группа VLANов. По умолчанию существует нулевой инстанс, в котором находятся все вланы. Регион характеризуется Именем, Номером, Маппингами VLANов.

Для интероперабильности (словцо...) с другими протоколами существует Internal Spanning Tree (IST) инстанс. IST представляет MST регион на линках, где он встречается с другими протоколами. Обычный STP видит MST-регион как коробку и не имеет представлений о внутренней топологии MST. IST существует всегда. BDPU шлется только в IST для всех инстансов сразу в качестве M-record. Если MST встречается с другим протоколом на линке, то MST BPDU шлется в каждом влане отдельно.

Пока все. В следующем посте начинаем собирать лабу по MPLS VPN.

Комментариев нет:

Отправить комментарий