Доклад на тему протокол stp

Обновлено: 02.07.2024

Причиной создания протокола STP стало возникновение петель на коммутаторах. Что такое петля? Определение петли звучит так:

Петля коммутации (Bridging loop, Switching loop) — состояние в сети, при котором происходит бесконечная пересылка фреймов между коммутаторами, подключенными в один и тот же сегмент сети.

Из определения становится ясно, что возникновение петли создает большие проблемы — ведет к перегрузке свитчей и неработоспособности данного сегмента сети. Как возникает петля? На картинке ниже приведена топология, при которой будет возникать петля при отсутствии каких-либо защитных механизмов:

My Image

Возникновение петли при следующих условиях:

1. Какой-либо из хостов посылает бродкаст фрейм:

2. Также петля может образоваться и без отправки бродкаст фрейма.

  1. К примеру, VPC5 отправляет фрейм с юникастовым мак-адресом назначения.
  2. Возможна ситуация, что мак-адрес назначения отсутствует в таблице мак-адресов коммутаторов. В данном случае, коммутатор будет пересылать пакет через все порты, кроме порта с которого получил данный фрейм. И получаем такую же ситуацию, как и с бродкаст фреймом.
  3. Ниже мы будем рассматривать протокол STP на коммутаторах Cisco. На них используется STP отдельно для каждого vlan-а, протокол PVST+. У нас всего один vlan, поэтому смысл от этого не меняется.

Основы STP

My Image

Фрейм BPDU имеет следующие поля:

  • Идентификатор отправителя (Bridge ID)
  • Идентификатор корневого свича (Root Bridge ID)
  • Идентификатор порта, из которого отправлен данный пакет (Port ID)
  • Стоимость маршрута до корневого свича (Root Path Cost)

Вот вывод информации о Bridge ID с коммутатора Switch1 из первой картинки. Priority — 32769 ( по умолчанию 32768 + Vlan Id), MAC-адреса — Address 5000.0001.0000:

My Image

Представим картину, коммутаторы только включились и теперь начинают строить топологию без петель. Как только коммутаторы загрузились, они приступают к рассылке BPDU, где информируют всех, что они являются корнем дерева. В BPDU в качестве Root Bridge ID, коммутаторы указывают собственный Bridge ID. Например, Switch1 отправляет BPDU коммутатору Switch3, а Switch3 отправляет к Switch1. BPDU от Switch1 к Switch3:

My Image

BPDU от Switch3 к Switch1:

My Image

Как видим из Root Identifier, оба коммутотара друг другу сообщают, что именно он является Root коммутатором.

Выбор корневого коммутатора

Блокирование избыточных каналов

Как мы видим из топологии, канал между Switch2 и Switch3 должен быть заблокирован для предотвращения образования петель. Как STP справляется с этим?

После того, как выбран Root Bridge, Switch2 и Switch3 перестают отправлять BPDU через Root Port-ы, но BPDU, полученные от Root Bridge, они пересылают через все свои остальные активные порты, при этом изменив в данных BPDU только следующие поля:

  • Идентификатор отправителя (Bridge ID) — заменяется на свой идентификатор.
  • Идентификатор порта, из которого отправлен данный пакет (Port ID) — изменяется на идентификатор порта, с которого будет отправлен BPDU.
  • Стоимость маршрута до корневого свича (Root Path Cost) — вычисляется стоимость маршрута относительно самого коммутатора.

My Image


А Switch3 от Switch2 получает такой BPDU:

My Image

После обмена такими BPDU, Switch2 и Switch3 понимают, что топология избыточна. Почему коммутаторы понимают, что топология избыточна? И Switch2, и Switch3 в своих BPDU сообщают об одном и том же Root Bridge. Это означает, что к Root Bridge, относительно Switch3, существует два пути — через Switch1 и Switch2, а это и есть та самая избыточность против которой мы боремся. Также и для Switch2 два пути — через Switch1 и Switch3. Чтоб избавиться от этой избыточности
необходимо заблокировать канал между Switch3 и Switch2. Как это происходит?

Выбор на каком коммутатоторе заблокировать порт происходит по следующей схеме:

  • Меньшего Root Path Cost.
  • Меньшего Bridge ID.
  • Меньшего Port ID.

My Image

Здесь как оказалось заблокируется порт Gi 0/1 на коммутаторе Sw2. В данном голосовании определяющим становится Root Path Cost. Вернемся к нашей топологии. Так как путь до Root Bridge одинаковый, то в данном выборе побеждает Switch2, так как его priority равны, сравниваются Bridge ID. У Switch2 — 50:00:00:02:00:00, у Switch3 — 50:00:00:03:00:00. У Switch2 MAC-адрес лушче (меньше). После того, как выбор сделан, Switch3 перестает переслать какие-либо пакеты через данный порт — Gi1/0, в том числе и BPDU, а только слушает BPDU от Switch2. Данное состояние порта в STP называется Blocking(BLK). Порт Gi1/0 на Switch2 работает в штатном режиме и пересылает различные пакеты при необходимости, но Switch3 их сразу отбрасывает, слушая только BPDU. Таким образом, на данном примере мы построили топологию без избыточных каналов. Единственный избыточный канал между Switch2 и Switch3 был заблокирован при помощи перевода порта Gi1/0 на Switch3 в специальное состояние блокирования — BLK. Теперь более детально разберем механизмы STP.

Состояния портов

Мы говорили выше, что, например, порт Gi1/0 на Switch3 переходит в специальное состояние блокирования — Blocking. В STP существуют следующие состояния портов:

Blocking — блокирование. В данном состоянии через порт не передаются никакие фреймы. Используются для избежания избыточности топологии.

Listening — прослушивание. Как мы говорили выше, что до того, пока еще не выбран корневой коммутатор, порты находятся в специальном состоянии, где передаются только BPDU, фреймы с данными не передаются и не принимаются в этом случае. Состояние Listening не переходит в следующее даже, если Root Bridge определен. Данное состояние порта длится в течении Forward delay timer, который, по умолчанию, равен 15. Почему всегда надо ждать 15 секунд? Это вызвано осторожностью протокола STP, чтоб случайно не был выбран некорректный Root Bridge. По истечению данного периода, порт переходит в следующее состояние — Learning.

Learning — обучение. В данном состояние порт слушает и отправляет BPDU, но информацию с данными не отправляет. Отличие данного состояния от Listening в том, что фреймы с данными, который приходят на порт изучаются и информация о MAC-адресах заносится в таблицу MAC-адресов коммутатора. Переход в следующее состояние также занимает Forward delay timer.

Forwarding — пересылка. Это обычное состояние порта, в котором отправляются и пакеты BPDU, и фреймы с обычными данными. Таким образом, если мы пройдемся по схеме, когда коммутаторы только загрузились, то получается следующая схема:

  1. Коммутатор переводит все свои подключенные порты в состояние Listening и начинает отправлять BPDU, где объявляет себя корневым коммутатором. В этот период времени, либо коммутатор остается корневым, если не получил лучший BPDU, либо выбирает корневой коммутатор. Это длится 15 секунд.
  2. После переходит в состояние Learning и изучает MAC-адреса. 15 секунд.
  3. Определяет какие порты перевести в состояние Forwarding, а какие в Blocking.

Роли портов

Помимо состояний портов, также в STP нужны определить портам их роли. Это делается для того, чтоб на каком порте должен ожидаться BPDU от корневого коммутатора, а через какие порты передавать копии BPDU, полученных от корневого коммутатора. Роли портов следующие:

Root Port — корневой порт коммутатора. При выборе корневого коммутатора также и определяется корневой порт. Это порт через который подключен корневой коммутатор. Например, в нашей топологии порты Gi0/0 на Switch2 и Switch3 являются корневыми портами. Через данные порты Switch2 и Switch3 не отправляют BPDU, а только слушают их от Root Bridge. Возникает вопрос — как выбирается корневой порт? Почему не выбран порт Gi1/0? Через него ведь тоже можно иметь связь с коммутатором? Для определения корневого порта в STP используется метрика, которая указывает в поле BPDU — Root Path Cost (стоимость маршрута до корневого свича). Данная стоимость определяется по скорости канала.

Switch1 в своих BPDU в поле Root Path Cost ставит 0, так как сам является Root Bridge. А вот, когда Switch2, когда отправляет BPDU к Switch3, то изменяет данное поле. Он ставит Root Path Cost равным стоимости канала между собой и Switch1. На картинке BPDU от Switch2 и Switch3 можно увидеть, что в данном поле Root Path Cost равен 4, так как канал между Switch1 и Switch2 равен 1 Gbps. Если количество коммутаторов будет больше, то каждый следующий коммутатор будет суммировать стоимость Root Path Cost. Таблица Root Path Cost.

Designated Port — назначенный порт сегмента. Для каждого сегмента сети должен быть порт, который отвечает за подключение данного сегмента к сети. Условно говоря, под сегментом сети может подразумеваться кабель, который осуществляет подключение данного сегмента. Например, порты Gi0/2 на Switch1, Switch3 подключают отдельные сегменты сети, к которым ведет только данный кабель. Также, например, порты на Root Bridge не могут быть заблокированы и все являются назначенными портами сегмента. После данного пояснения можно дать более строгое определения для назначенных портов:
Designated Port (назначенный) — некорневой порт моста между сегментами сети, принимающий трафик из соответствующего сегмента. В каждом сегменте сети может быть только один назначенный порт. У корневого коммутатора все порты — назначенные.

Также важно заметить, что порт Gi1/0 на Switch2 также является назначенным, несмотря на то, что данный канал связи заблокированным на Switch3. Условно говоря, Switch2 не имеет информации о том, что на другом конце порт заблокирован.

Nondesignated Port — неназначенный порт сегмента. Non-designated Port (неназначенный) — порт, не являющийся корневым, или назначенным. Передача фреймов данных через такой порт запрещена. В нашем примере, порт Gi1/0 является неназначенным.

Disabled Port — порт который находится в выключенном состоянии.

Таймеры и сходимость протокола STP

image

image

TCN был включен в STP, чтоб некорневые коммутаторы могли уведовлять об изменении в сети. Обычными BPDU они этого делать не могут, так как некорневые коммутаторы не отправляют BPDU. Как можно заметить структура TCN не несет в себе никакой информации о том, что именно и где изменилось, а просто сообщает что где-то что-то изменилось. Теперь перейдем к рассмотрению вопроса о сходимости STP.

Посмотрим, что произойдет если мы отключим интерфейс Gi0/1 на Switch1 и посмотрим при помощи каких механизмов перестроится дерево STP. Switch2 перестанет получать BPDU от Switch1 и не будет получать BPDU от Switch3, так как на Switch3 данный порт заблокирован. У Switch2 уйдет 20 секунд ( Max Age Timer ), чтоб понять потерю связи с Root Bridge. До этого времени, Gi0/0 на Switch2 будет находится в состоянии Forwarding с ролью Root Port. Как только истечет Max Age Timer и Switch2 поймет потерю связи, он будет заново строить дерево STP и как это свойственно STP начнет считать себя Root Bridge. Он отправит новый BPDU, где укажет самого себя в качестве Root Bridge через все активные порты, в том числе и на Switch3. Но таймер Max Age, истекший на Switch2 также истек и на Switch3 для интерфейса Gi1/0. Данный порт уже 20 секунд не получал BPDU и данный порт перейдет в состояние LISTENING и отправит BPDU c указанием в качестве Root Bridge — Switch1. Как только Switch2 примет данный BPDU, он перестанет считать себя Root Bridge и выберет в качестве Root Port — интерфейс Gi1/0. В этот момент Switch2 также отправит TCN через Gi1/0, так как это новый Root Port. Это приведет к тому, что время хранения MAC-адресов на коммутаторах уменьшится с 300 секунд до 15. Но на этом работоспособность сети не восстановится полностью, необходимо подождать пока порт Gi1/0 на Switch3 пройдет состояние Listening, а затем Learning. Это займет время равное двум периодам Forward delay timer — 15 + 15 = 30 секунд. Что мы получаем — при потери связи Switch2 ждет пока истечет таймер Max Age = 20 секунд, заново выберает Root Bridge через другой интерфейс и ждет еще 30 секунд пока ранее заблокированный порт перейдет в состояние Forwarding. Суммарно получаем, что связь между VPC5 и VPC6 прервется на 50 секунд. Как было сказано несколькими предложениями выше при изменение Root Port с Gi0/0 на Gi1/0 на Switch2 был отправлен TCN. Если бы этого не произошло, то все MAC-адреса, изученные через порт Gi 0/0, оставались бы привязаны к Gi0/0. Например, MAC-адрес VPC5 и VPC7 несмотря на то, что STP завершит сходимость через 50 секунд, связь между VPC6 и VPC5, VPC7 не была бы восстановлена, так как все пакеты предназначенные VPC5, VPC7 отправлялись через Gi0/0. Надо было бы ждать не 50 секунд, а 300 секунд пока таблица MAC-адресов перестроится. При помощи TCN, время хранение изменилось с 300 секунд до 15 и пока интерфейс Gi1/0 на Switch3 проходил состояния Listening, а затем Learning и данные о MAC-адресах обновятся.

Также интересен вопрос, что произойдет, если мы заново включим интерфейс Gi0/1 на Switch1? При включение интерфейса Gi0/1, он, как и подобает, перейдет в состояние Listening и начнет рассылать BPDU. Как только Switch2 получит BPDU на порту Gi0/0, то сразу перевыберет свой Root Port, так как тут Cost будет наименьшем и начнет пересылать траффик через интерфейс Gi0/0, но нам необходимо подождать пока интерфейс Gi0/1 пройдет состояния Listening, Learning до Forwarding. И задержка будет уже не 50 секунд, а 30.

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

Рассмотрим, допускается ли в Ethernet кольцевое соединение между коммутаторами. Например, в сети 4 коммутатора и они соединены 4 кабелями, так что образуется кольцо. Вопрос состоит в том, может ли работать такая сеть? К сожалению, такая сеть работать не может, потому что в ней возникает широковещательный шторм.

p, blockquote 1,0,0,0,0 -->


p, blockquote 2,0,0,0,0 -->

Широковещательный шторм


p, blockquote 3,0,0,0,0 -->

Рассмотрим, как образуется широковещательный шторм. Предположим, на верхний левый порт коммутатора 1 пришел кадр. И коммутатор 1 не знает, куда этот кадр передавать и у него нет соответствующей записи в таблице коммутации. В этом случае коммутатор 1 передает кадр на все порты, кроме того откуда этот кадр пришел.

p, blockquote 4,0,0,0,0 -->


p, blockquote 5,0,0,0,0 -->

Компьютеры, которые подключены к портам коммутатора увидят, что этот кадр предназначен не для них и просто отбросят их. А два порта на картинке ниже, подключены к другим коммутаторам и кадр через эти порты будет передан в другие коммутаторы 2 и 3.

p, blockquote 6,0,0,0,0 -->


p, blockquote 7,0,0,0,0 -->

Предположим, что у коммутаторов 2 и 3 тоже нет записей об адресе получателя этого кадра в таблице коммутации. Поэтому они вынуждены передавать этот кадр на все порты.

p, blockquote 8,0,0,0,0 -->


p, blockquote 9,0,0,0,0 -->

Как и на предыдущем этапе компьютеры отбросят кадры, которые предназначены не для них, а через соединение кадр будет передан на коммутатор 4.

p, blockquote 10,0,0,0,0 -->


p, blockquote 11,0,0,0,0 -->

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

p, blockquote 12,0,0,0,0 -->


p, blockquote 13,0,0,0,0 -->

Кроме этого кадр 1 передастся в коммутатор 3, а кадр 2 передастся в коммутатор 2. Таким образом, кадры будут ходить по кругу и передаваться на все порты.

p, blockquote 14,0,0,0,0 -->


p, blockquote 15,0,0,0,0 -->

Через некоторое время таких кадров будет очень много и сеть окажется неработоспособной. Такая ситуация называется широковещательный шторм и из-за него кольцевое соединение в сети Ethernet невозможно.

p, blockquote 16,0,1,0,0 -->

Протокол STP

Протокол связующего дерева (Spanning Tree Protocol) или иногда называют протокол остовного дерева. Протокол STP позволяет отключать на программном уровне некоторые соединения между коммутаторами, чтобы не образовывалось кольцо.

p, blockquote 17,0,0,0,0 -->

Связующее дерево или остовное дерево, как его чаще называют в математике это подграф без циклов, содержащий все вершины исходного графа. Связующее дерево содержит все наши исходные коммутаторы, но при этом в нем циклов, т.е. Ethernet в такой конфигурации точно будет работать.

p, blockquote 18,0,0,0,0 -->

Протокол STP определен в стандарте IEEE 802.1D. Благодаря этому протоколу можно создавать несколько соединений между коммутаторами. Это повышает надежность работы сети. Если по какой-то причине одно соединение разорвется, то можно будет использовать другое соединение.

p, blockquote 19,0,0,0,0 -->

Еще одно преимущество протокола STP в том, что он защищает от случайных ошибок в конфигурации ethernet. Конечно же никто не хочет, чтобы вся его сеть ethernet остановилась, если по ошибке включили кабель не в тот коммутатор и случайно создали кольцо. Протокол STP защищает от такой ситуации.

p, blockquote 20,0,0,0,0 -->

Место протокола STP в модели OSI

В модели взаимодействия открытых систем протокол STP находится на канальном уровне, он реализуется на коммутаторах.

p, blockquote 21,0,0,0,0 -->

Работа протокола STP

Рассмотрим, как работает протокол STP. В примере с 4-мя коммутаторами одно из соединений (между коммутатором 3 и 4) будет отключено на программном уровне.

p, blockquote 22,0,0,0,0 -->


p, blockquote 23,0,0,0,0 -->

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

p, blockquote 24,0,0,0,0 -->


p, blockquote 25,0,0,0,0 -->

Протокол STP может автоматически включить заблокированное соединение, и коммутатор по-прежнему сможет передавать данные в сеть.

p, blockquote 26,0,0,0,0 -->

Этапы работы протокола STP

Работа протокола STP состоит из трех этапов. На первом этапе выбирается корневой коммутатор. На втором этапе рассчитываются кратчайшие пути от всех коммутаторов в сети до корневого коммутатора. На 3 этапе отключаются все остальные соединения, кроме кратчайших.

p, blockquote 27,0,0,0,0 -->

Протокол STP придумала Ради Перлман и написала стихотворение, как протокол работает.

p, blockquote 28,0,0,0,0 -->


p, blockquote 29,0,0,0,0 -->

p, blockquote 30,0,0,0,0 -->

p, blockquote 31,0,0,0,0 -->

В качестве адреса получателя используется групповой МАК-адрес STP. Все Ethernet коммутаторы, которые поддерживают STP принимают и обрабатывают кадры, которые приходят на этот групповой адрес (01:80:С2:00:00:00).

p, blockquote 32,1,0,0,0 -->

Выбор корневого коммутатора

Подробно рассмотрим, как работает протокол STP. На первом этапе выполняется выбор корневого коммутатора. Выбор выполняется по идентификатору, в качестве корневого выбирается коммутатор, у которого этот идентификатор минимальный.

p, blockquote 33,0,0,0,0 -->

Сейчас в качестве идентификатора коммутаторов используется его МАК-адрес, но можно повлиять на значение идентификатора вручную, чтобы выбрать в качестве корневого наиболее мощный коммутатор в вашей сети, а не тот коммутатор, у которого случайно оказался самый маленький МАК-адрес.

p, blockquote 34,0,0,0,0 -->

Предположим, что в нашей сети коммутаторы используют в качестве идентификаторов простые, целые числа. У коммутатора 1 идентификатор 4, у коммутатора 2 BID=2 и так далее, смотри по картинке ниже. В качестве корневого по протоколу будет выбран коммутатор 4 с идентификатором 1.

p, blockquote 35,0,0,0,0 -->


p, blockquote 36,0,0,0,0 -->

p, blockquote 37,0,0,0,0 -->


p, blockquote 38,0,0,0,0 -->

p, blockquote 39,0,0,0,0 -->


p, blockquote 40,0,0,0,0 -->

p, blockquote 41,0,0,0,0 -->


p, blockquote 42,0,0,0,0 -->

p, blockquote 43,0,0,0,0 -->


p, blockquote 44,0,0,0,0 -->

На следующем этапе информация о том, что корневой коммутатор это коммутатор с номером 4, доходит до 1 коммутатора в нашей сети и теперь все коммутаторы считают, что корневой коммутатор это коммутатор 4 с BID=1. На этом выбор корневого коммутатора заканчивается.

p, blockquote 45,0,0,0,0 -->

Видео о работе корневого коммутатора

p, blockquote 46,0,0,0,0 -->

Расчет кратчайших путей

Теперь необходимо рассчитать кратчайшие пути от всех коммутаторов до корневого коммутатора. Длина пути между коммутаторами определяется в зависимости от двух параметров:

  • количество промежуточных коммутаторов;
  • скорость соединений между промежуточными коммутаторами.

p, blockquote 48,0,0,1,0 -->

Расстояние между коммутаторами определено в стандарте IEEE 802.1D. Предположим, что у нас соединение с коммутаторами 1 Гбит/с в этом случае в качестве значения расстояния мы используем число 4,как в таблице ниже.

p, blockquote 49,0,0,0,0 -->


p, blockquote 50,0,0,0,0 -->

На первом этапе, коммутаторы, которые подключены непосредственно к корневому коммутатору, определяют скорость соединения с этим коммутатором и выбирают соответствующее значение расстояния.

p, blockquote 51,0,0,0,0 -->


p, blockquote 52,0,0,0,0 -->

В нашем случае скорость соединения 1 Гбит/с значения расстояния равно 4.Затем это кратчайшее расстояние до корневого коммутатора рассылается в четвертый коммутатор. 4-эй коммутатор берет это значение 4, определяет скорость соединения с этими коммутаторами 1 Гбит/с расстояние 4 и суммарное расстояние 8. Теперь мы знаем расстояние от всех портов до корневого коммутатора.

p, blockquote 53,0,0,0,0 -->


p, blockquote 54,0,0,0,0 -->

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

p, blockquote 55,0,0,0,0 -->

Если порты нумеруются слева направо, то будет отключен порт справа.

p, blockquote 56,0,0,0,0 -->


p, blockquote 57,0,0,0,0 -->

На этом работа протокола STP завершена, у нас образовалось связующее дерево. Все четыре коммутатора соединены между собой и цикла нет. Если произойдет разрыв одного из соединений, то теперь у нас будет один путь у которого расстояние 8.

p, blockquote 58,0,0,0,0 -->

Поэтому мы имеем полное право его выключить использовать для передачи данных.

p, blockquote 59,0,0,0,0 -->


p, blockquote 60,0,0,0,0 -->

Состояние портов в STP

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

Развитие STP

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

p, blockquote 62,0,0,0,0 -->

Поэтому был предложен новый вариант протокола STP, который называется RSTP (Rapid Spanning Tree Protocol) – быстрый протокол связующего дерева. Он работает по похожим принципам, но срабатывает всего лишь за несколько секунд. Протокол RSTP определен стандартом IEEE 802.1w.

p, blockquote 63,0,0,0,0 -->

Кроме этого возможны проблемы при взаимодействии протокола STP с технологией VLAN. Вы можете попытаться создать несколько соединений между коммутаторами, которые будут принадлежать разным Vlan. Но STP в исходном варианте ничего не знает про vlan поэтому соединение между коммутаторами в разных vlan будут отключены.

p, blockquote 64,0,0,0,0 --> p, blockquote 65,0,0,0,1 -->

Для того, чтобы можно было использовать технологию vlan совместно с протоколом STP необходимо, чтобы связующее дерево строилось для каждого vlan отдельно. Эту возможность реализовали в протоколе Multiple Spanning Tree Protocol (MSTP), который определен в стандарте 802.1s.


Предположим, что питание только что включили и естественно коммутаторы не имеют записи в своих таблицах МАС адресов.

Алиса отправляет данные Кате. Коммутатор А посылает кадры от Алисы на все порты, кроме того порта, от которого принял кадр, используя при этом широковещательную рассылку, то есть по адресу ff:ff:ff:ff:ff:ff.

Остальные коммутаторы делают тоже самое, то есть они копируют полученные кадры и заполняют ими всю сеть, то есть создают широковещательный шторм. Некоторые копии тех кадров достигают коммутатора А и он также копирует их и посылает на все порты.

Возникает замкнутая петля, которая может привести к отказу всей сети.

Кроме того, это приводит к нестабильности таблицы МАС адресов, так как коммутаторы находятся постоянно в состоянии изучения МАС адресов от поступающих кадров.

Например, когда Алиса посылает Кате данные, то коммутатор А вносит изменения в свою таблицу:


Через некоторое время копия такого же кадра поступает на коммутатор А от коммутатора D через коммутаторы С и B. Коммутатор А сразу же изменит свою таблицу в соответствии с полученной информацией:


То есть пока циркулируют копии кадров по сети таблицы коммутаторов будут меняться, и некоторые кадры не достигнут своих пункта назначения.

Чтобы избежать подобных проблем был создан протокол связующего дерева STP (Spanning Tree Protocol - стандарт IEEE 802.1d).

Принцип работы STP

Принцип работы протокола основан на создании логического дерева соединений коммутаторов. На верхушке дерева находится корневой коммутатор (Root switch), далее следуют ответвления, то есть некорневые коммутаторы. Причем все избыточные связи просто блокируются. Это позволяет избежать петель в сети. Например, вышеописанная сеть после включения STP будет выглядеть так (ее логическая структура)




Так как же работает STP?

Процесс построения дерева состоит из следующих этапов:

  • Выбор корневого коммутатора (root switch)
  • Выбор корневых портов (root port)
  • Выбор назначенных портов (designated port)

Выбор корневого коммутатора (в сети может быть только один коммутатор) основывается на минимальных значениях приоритета коммутатора и его ID. Под ID подразумевается его МАС адрес. То есть, чем они меньше, тем больше шансов стать корневым. Коммутаторы каждые 2с посылают Hello BPDU кадры. Кадры содержат следующую информацию:

  • Свой приоритет (по умолчанию у всех 32769)
  • Свой ID
  • ID корневого коммутатора
  • Стоимость пути к корневому коммутатору

В самом начале все коммутаторы претендуют быть корневым, поэтому указывают свой ID в качестве корневого.

Соседи сравнивают значения приоритета и ID в полученных кадрах и чьи значения окажутся выше, тот перестает претендовать на пост корневого и начинает распространять Hello победителя. И так до тех пор, пока не найдется коммутатор с еще низшим значением.

Следует знать, что сначала сравниваются приоритеты и, если они равны, то сравниваются уже их ID.

Наконец, корневой коммутатор избран. Что дальше?

Далее выбираются корневые порты (root ports), то есть порты, которые ближе всего к корню.

И как же они узнают, что они ближе?

Как только выбран корень, он начинает каждые 2с генерировать Hello кадры. Все остальные коммутаторы пересылают эти кадры дальше по дереву, при этом внося небольшие изменения, то есть добавляет стоимость своего интерфейса. На всем протяжении маршрута к корню все эти стоимости суммируются и анонсируются далее


Стоимость интерфейса зависит от его скорости. Ниже представлена таблица стоимости интерфейсов:

Если некорневой коммутатор получает Hello с наименьшей стоимостью к корню, то сразу переводит порт, через который он получил кадр, в состоянии пересылки (forwarding), а сам порт становится корневым


А что если получены Hello с одинаковыми значениями стоимости маршрута к корню? Что будет в данном случае?

Такая ситуация возможна только в 2-х случаях.

Кадры получены от разных коммутаторов. В данном случае выбирается порт, который подключен к коммутатору с наименьшим ID. Второй порт переводится в состояние блокировки (blocking).

Кадры получены от одного коммутатора, то есть имеются параллельные каналы.

Возможны 2 варианта:

Коммутатор объединяет эти параллельные каналы в один логический канал и использует для балансировки нагрузки. Причем все параллельные каналы должны иметь одинаковые характеристики, то есть скорость, тип интерфейса, VLAN, дуплекс и так далее.

Сравниваются порядковые номера портов. У кого он меньше, тот и становится корневым. Проигравший порт блокируется. Например, если сравнить порты Fa0/1 и Fa0/2, то выиграет Fa0/1.

И наконец, выбирается назначенный порт (designated port). Назначенные порты всегда подключены к другим сегментам сети (коммутаторам), а также к конечным терминалам (компьютерам). Выбирается он по тем же правилам, что и корневой порт – сравниваются стоимости маршрута к корню


После того, как определены корневые и назначенные порты , все остальные порты блокируются


В процессе работы протокола STP порты могут находиться в одном из следующих состояний:

  • Выключен (down ) – порт физически выключен
  • Блокирование ( blocking ) – устойчивое состояние, порт данные не передает.
  • Прослушивание ( listening ) – промежуточное состояние, порт данные не передает. BPDU пакеты передаются. Все таблицы МАС адресов обнуляются. Длительность состояния 15с.
  • Самообучение ( learning ) - промежуточное состояние, порт данные не передает. BPDU пакеты передаются. Коммутатор обновляет таблицу МАС адресов за счет поступающих кадров. Длительность состояния 15 с.
  • Пересылка ( forwarding ) – устойчивое состояние, порт активно передает данные и BPDU пакеты.

При включении коммутатора или подключения другого коммутатора порты проходят последовательно через вышеописанные стадии.

Промежуточные состояния необходимы для предотвращения возникновения случайных петель во время конвергенции STP.

Реакция сети на изменения в топологии

Теперь представим, что порт Fa 2 коммутатора D отключается


Коммутатор C перестает получать Hello от корневого коммутатора. Запускается таймер устаревания (Max Age), который равен 20 с. Если в течении работы таймера не поступит Hello от корневого коммутатора, то порт Fa 2 данного коммутатора перейдет в состояние прослушивания. Таблица МАС адресов обнулится. Через 15 с порт перейдет в состояние самообучения. В этом состоянии коммутатор изучает МАС адреса входящих кадров, а также Hello кадры, которые все еще передаются от коммутатора А через коммутатор B.

Так как порт Fa 2 единственный, который подключен к корневому коммутатору, то он переходит в состояние пересылки и становится корневым.

Протокол STP разрабатывался до появления VLAN, поэтому, когда в сети настроено несколько VLAN, то STP этого не учитывает и работает так, словно сеть настроена только для одной VLAN.

Чтобы учитывать все VLAN компания Cisco разработала протокол, которые работает точно так же, как и STP, однако учитывает все настроенные VLAN, то есть создает по экземпляру STP для каждой VLAN. Этот протокол получил название PVST+ (Per VLAN STP). Данный протокол использует стандарт 802.1Q (стандарт описывает тегирование трафика VLAN). По умолчанию во всех Cisco коммутаторах уже включен PVST+.

Вы можете изучить и скачать доклад-презентацию на тему Spanning Tree Protocol (STP). Презентация на заданную тему содержит 21 слайдов. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас - поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций в закладки!

500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500

Spanning Tree Protocol Протокол покрывающего дерева (STP) позволяет коммутаторам автоматически определять древовидную конфигурацию связей в сети при произвольном соединения портов между собой. Полученная конфигурация гарантированно не имеет замкнутых маршрутов и избыточного дублирования соединений. В случае отказа сегмента коммутатор сам сможет восстановить работоспособность без внешнего вмешательства.

Spanning Tree Protocol Неиспользуемые, или приводящие к избыточности и замкнутости маршруты блокируются. В случае нарушения основного пути алгоритм перенастроит топологию, активировав некоторые ранее заблокированные связи.

Достоинства STP позволяет решить следующие проблемы: Широковещательные штормы Некорректная таблица фильтрации MAC-адресов Групповая передача кадров

Spanning Tree Algorithm Основные этапы: 1 : Выбор корневого коммутатора 2 : Выбор корневых портов 3 : Выбор назначенных портов

Spanning Tree Algorithm Основные этапы: 1 : Выбор корневого коммутатора 2 : Выбор корневых портов 3 : Выбор назначенных портов

Spanning Tree Algorithm Основные этапы: 1 : Выбор корневого коммутатора 2 : Выбор корневых портов 3 : Выбор назначенных портов

Spanning Tree Algorithm Основные этапы: 1 : Выбор корневого коммутатора 2 : Выбор корневых портов 3 : Выбор назначенных портов

Состояния портов Отключен (disabled) – отключен администратором или системой Заблокирован (blocking) – принимает и обрабатывает BPDU. Устанавливается для неназначенных и некорневых портов, либо при инициализации. Слушает (listening) – Принимает и обрабатывает BPDU. Устанавливается из состояния blocking, когда порт становится корневым, или назначенным. Через промежуток времени, равный forward delay*, порт переходит в состояние learning. Обучается (learning) –Принимает и обрабатывает BPDU, запоминает MAC-адреса. Через промежуток времени, равный forward delay*, порт переходит в состояние forwarding. Передает (forwarding) – полная функциональность, принимает и обрабатывает BPDU, MAC-адреса и пользовательские данные. *Задержка во времени обусловлена тем, что изменение топологии в одной части сети не становятся мгновенно известны другим частям

RSTP (Rapid STP) RSTP – ускоренная версия протокола STP. Уменьшилось время построения топологии (менее секунды) Исключена поддержка коаксиального кабеля

Отличия RSTP Порт в RSTP может иметь всего три статуса – Discarding, Learning и Forwarding. Таким образом, статусу Discarding соответствует объединение статусов Disabled, Blocking и Listening протокола STP. Добавлены новые роли портов: Резервный для назначенного - backup (запасной designated port) Альтернативный корневому - alternate (запасной root port) Прирост в скорости обновления топологии получен за счет быстрого включения alternate-портов и лавинообразного процесса handshake

Читайте также: