Протокол STP — как оно работает

Написал admin . Опубликовано в Network просмотров 6 340

Так себеПойдетХорошоПонравилосьОтличный пост (4 votes, average: 4,00 out of 5)
Загрузка...

Введение

Как известно, грамотный дизайн отказоустойчивой сети подразумевает использование резервирования каналов. Наиболее подходящей для этого является кольцевая топология. Однако, в случае построения сети по технологии Ethernet в чистом виде, множественные связи между узлами не предусмотрены и могут привести к полной неработоспособности всей конструкции. Например, в случае попадания в кольцо широковещательного пакета, он будет передаваться активным оборудованием по кругу бесконечно, обеспечивая предельную загрузку. Для предотвращения подобных ситуаций был создан специальный протокол Spanning Tree Protocol (STP).

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

Алгоритм работы STP

Spanning Tree Protocol переводится как «протокол покрывающего дерева». Кратко опишем алгоритм его действия:

1. В сети выбирается один корневой коммутатор (Root Bridge). Вообще-то, согласно техническому стандарту нужно использовать слово «мост», однако, опуская незначительные различия, будем оперировать термином «коммутатор», что гораздо привычнее.
2. Далее каждый отличный от корневого коммутатор просчитывает кратчайший путь к корневому. Соответствующий порт называется корневым портом (Root Port). Он у каждого коммутатора только один!
3. После этого для каждого сегмента сети просчитывается кратчайший путь к корневому коммутатору. Коммутатор, через который проходит этот путь, становиться назначенным для этой сети (Designated Bridge). Непосредственно подключенный к сети порт коммутатора – назначенным портом.
4. Далее на всех коммутаторах блокируются все порты, не являющиеся корневыми и назначенными. В итоге получается древовидная структура (математический граф) с вершиной в виде корневого коммутатора.

На примере коммутатор A является корневым (Root Bridge) для всей сети. Его порт номер 1 является назначенным (Designated Port) для сегмента X, а порт номер 2 – назначенным для сегмента Y. Коммутатор B имеет корневой порт (Root Port) номер 1 и блокирует порт номер 2. Коммутатор C использует порт номер 2 как корневой и порт номер один в качестве назначенного порта для сегмента Z.

Параметры STP

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

Технология STP предполагает конфигурирование некоторых дополнительных параметров на коммутаторах. Наиболее важными из них являются: приоритет коммутатора (Bridge Priority) и стоимость пути на каждом порту (Port Cost).

Приоритет коммутатора (Bridge Priority) имеет размер 2 байта и учитывается при выборах корневого коммутатора – тот, у кого приоритет ниже, становится корневым.

Стоимость пути на каждом порту (Port Cost) учитывается при вычислении кратчайшего пути до корня.

Функционирование STP базируется на использовании передачи специальных Ethernet пакетов Bridge Protocol Data Unit (BPDU). Они представляют собой оговоренные стандартом мультикастовые Ethernet фреймы (с MAC адресом назначения 01:80:C2:00:00:00).

Пакет BPDU состоит из множества полей, важнейшими из которых являются: идентификатор корневого коммутатора (Root Bridge Identifier RBID), расстояние до корня (Root Path Cost RPC), идентификатор текущего коммутатора (Bridge Identifier BID), идентификатор текущего порта (Port Identifier), время жизни сообщения (Message Age), максимальное время жизни сообщения (Max Age) и время приветствия (Hello Time).

Идентификатор коммутатора (Bridge Identifier BID) имеет размер 8 байт и состоит из MAC адреса и приоритета (BID = MAC + Priority) и описывает текущий коммутатор, через который прошел пакет BPDU.

Идентификатор корневого коммутатора (Root Bridge Identifier RBID) формируется так же как и BID (RBID = MAC + Priority), только характеризует корневой коммутатор и переносится неизменным в отдельном поле BPDU.

Расстояние до корня (Root Path Cost RPC) описывает расстояние до корневого коммутатора в условных единицах по конкретному пути.

Максимальное время жизни сообщения (Max Age) учитывается следующим образом: если пакет BPDU имеет время жизни (Message Age) превышающее максимальное, то он игнорируется.

Время жизни (Message Age) служит для выявления устаревших сообщений. Корневой коммутатор выпускает BPDU с Message Age равным нулю. Каждый коммутатор по пути следования BPDU увеличивает Message Age на единицу и ретранслирует дальше. Кроме того, входящее значение Message Age на порту внутри коммутатора является стартовым для таймера, который производит ежесекундное увеличение своего значения. В случае превышения таймером параметра Max Age информация о BPDU уничтожается, так как считается, что она устарела. Обычно задолго до устаревания приходит новый пакет BPDU и происходит сброс значения таймера до Message Age из нового BPDU. И так далее.

Время приветствия (Hello Time) характеризует интервал, через который посылаются пакеты BPDU.

STP управляет топологией путем изменения состояния портов, которое может принимать следующие значения: прослушивание (Listening), обучение (Learning), коммутация (Forwarding), блокирование (Blocking).

Блокированный порт (Blocking) принимает и обрабатывает только пакеты BPDU. Все остальные отбрасываются.

Состояние прослушивания (Listening) является промежуточным между блокированием и обучением.

Порт в режиме обучения (Learning) начинает принимать все пакеты и на основе MAC адресов источников строить таблицу коммутации. Однако коммутация (продвижение) на данном этапе не производится.

Режим коммутации (Forwarding) является штатным режимом продвижения всех пакетов.

Практический пример

Для закрепления материала рассмотрим подробно работу протокола STP на следующем примере. Предположим, имеется сетевая топология из трех коммутаторов A, B, C. Коммутаторы связаны между собой через разделяемые сетевые сегменты X, Y и Z.

Сконфигурируем их следующим образом: приоритет коммутатора A установим 8192, приоритет B и C по 32768. Стоимость портов 1 и 2 коммутатора B установим 100. Стоимость портов 1 и 2 коммутатора C установим 50.

После включения STP (или коммутаторов с включенным STP) начинаются выборы корневого коммутатора. Все коммутаторы начинают рассылать BPDU с идентификатором корневого коммутатора в качестве которого вначале считают себя. После того, как коммутатор получает BPDU с идентификатором корневого коммутатора меньшим, чем он сам, он перестает считать себя корневым. В итоге выборов корневым становится коммутатор с наименьшим идентификатором. Мы этого намеренно добивались для коммутатора A, установив его приоритет заведомо меньше, чем у B и C. Корневой коммутатор в сети – единственный. Желательно, чтобы им становился наиболее мощный коммутатор ядра сети.

Непосредственно после выборов корневой коммутатор начинает генерировать (передавать) на всех своих портах BPDU с определенным периодом (период можно настраивать, обычно это 1-2 секунды). Все остальные коммутаторы только ретранслируют получаемые от корневого BPDU, изменяя в них только некоторые параметры (например, стоимость пути до корня).

Таким образом, BPDU от корневого коммутатора достигают всех коммутаторов в сети. В нашем случае корневой коммутатор A посылает в сторону B и C на портах 1 и 2 пакеты BPDU, содержащие RBID=[MAC A + A Priority] и RPC = 0, так как A является корневым и следовательно путь до корня от самого A равен 0. Коммутатор B при получении на порту 1 BPDU от A добавляет входную стоимость порта (которая равна 100) к RPC, содержащейся в BPDU (0). Коммутатор B запоминает стоимость пути к корню через порт 1 (RPC = 100) и посылает в сторону C пакет BPDU с RBID=A и RPC=100. Коммутатор C получает от A BPDU с RBID A, RPC=0 через порт 2 и BPDU от B с RBID = A , RPC=100 через порт 1. Коммутатор С добавляет к полученным RPC свои входные стоимости портов и в итоге получает RPC через порт 1 = 150 и RPC через порт 2 = 50. Он выбирает путь к корню с наименьшей стоимостью (а это RPC=50 через порт 2) и в соответствии с этим назначает корневой порт – 2. Тот же коммутатор С посылает в сторону B BPDU с RBID=A и RPC=50. Коммутатор B уже имеет информацию о достижении корня (порт 1, RPC=100) и, получив BPDU от С (RBID=A и RPC=50), и добавив к нему свою входную стоимость (100), выполняет несложный выбор – корневым (с наименьшим RPC=100) становится порт номер 1.

После выбора корневых портов коммутаторами решается какой коммутатор (Designated Bridge) и его порт (Designated Port) будет обслуживать каждый конкретный сегмент сети. Это происходит аналогично выбору корневых портов – для каждого сегмента просчитывается кратчайший путь до корня.

Последним этапом работы STP является блокирование на всех коммутаторах портов, не являющихся корневыми или назначенными. Заметим, что блокировка STP работает только для передаваемых данных – BPDU через блокируемые порты пропускаются и линк будет по-прежнему активным.

Дополнительные функции

Кроме основной задачи построения беспетлевой топологии STP решает еще одну дополнительную – изменение времени хранения MAC адресов в таблицах коммутаторов в случае изменения состояния портов. Происходит это следующим образом: коммутатор, на котором произошло изменение (например, отключился и снова включился порт), посылает в сторону корневого специальный BPDU Topology Change Notification (TCN). Корневой после его получения рассылает TCN для всех коммутаторов и они изменяют время хранения MAC адресов в своих таблицах с целью обеспечения коммутации пакетов с учетом возможных изменений (например, на порту изменился MAC адрес клиента, а коммутатор по умолчанию продержит соответствующую запись в таблице слишком долго).

Развитие STP

Дальнейшим развитием STP явилось появление таких протоколов как RSTP, PVSTP и MSTP.

Rapid STP (RSTP) характеризуется значительными усовершенствованиями STP, среди которых необходимо отметить уменьшение времени сходимости и более высокую устойчивость.

Per Vlan STP (PVSTP) в соответствии с названием расширяет функционал STP для использования виланов. В рамках данного протокола в каждом вилане работает отдельный экземпляр STP.

Multiple STP (MSTP) является наиболее современной реализацией STP, учитывающей все достоинства и недостатки предыдущих решений. Данный протокол предполагает конфигурирование необходимого количества экземпляров STP в не зависимости от числа виланов на коммутаторе (в отличие от PVSTP, в котором число STP процессов равно числу виланов) и вхождение виланов в нужный STP экземпляр.

Заключение

В заключение приведем описание работы STP, ориентированное на практическое применение при разработке сетевых топологий:

1. Во всей сети выбирается ОДИН корневой мост. Это делается по наименьшему BID. BID=MAC+BRIDGE PRIORITY. По умолчанию Priority=32768, поэтому при равных приоритетах выбирается коммутатор с меньшим MAC адресом.

Если требуется, чтобы коммутатор стал корневым — нужно сделать его приоритет наименьшим среди всех других коммутаторов.

2. КАЖДЫЙ коммутатор анализирует ВСЕ возможные варианты связи и просчитывает самый кратчайший путь (то есть СУММАРНУЮ стоимость пути) до корневого коммутатора. Порт, через который это достигается становится корневым. Он ОДИН у каждого коммутатора. Если стоимости пути равны (например два параллельных линка между коммутаторами), то используется дополнительный параметр – Port ID, в который входит Port Priority.

Если необходимо, чтобы конкретный линк связывал данный коммутатор с корневым – необходимо на конкретном порту получить наименьшую стоимость пути до корня. Это достигается изменением параметра «стоимость» на портах коммутаторов.

3. Для КАЖДОГО сегмента сети просчитывается кратчайший путь до корневого коммутатора. Коммутатор, через который этот путь проходит, становится назначенным коммутатором, а его порт, соединенный с данным сегментом, – назначенным портом. Выбор назначенного порта в каждом сегменте происходит по наименьшей стоимости пути или, при равных стоимостях, — по наименьшему Bridge ID.

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

4. Все порты не являющиеся Root или Designated – блокируются. Главное не забывать, что блокировка по STP не означает отсутствие физического линка! Блокирование касается только передаваемых данных, а BPDU должны передаваться безпрепятственно.

Автор Эдуард Афонцев

Похожие статьи:

Метки: , , , , , ,

Trackback from your site.

Comments (7)

  • m0ps

    |

    спасибо, доходчиво написано, правда очень не хватает картинок для примеров. без них кучу текста разобрать очень тяжело

    Reply

    • admin

      |

      Спасибо за замечание. Действительно, надо бы добавить парочку схем.

      Reply

  • Отличная статья

    |

    Надо было разобраться с STP. Все реально более менее доходчиво и схема много объясняет. Поделюсь в твиттере

    Reply

  • defLeppard

    |

    Спасибо за статью! Очень внятно все написано.

    Reply

  • Anatolij

    |

    BID=MAC+BRIDGE PRIORITY

    ———
    приоритет должен быть первым

    Reply

  • ok

    |

    Спасибо, помогло разобраться!

    Reply

  • G

    |

    Доступно написано!

    Reply

Leave a comment