Какой коммутатор является корневым

Обновлено: 06.07.2024

отключен (disabled): состояние administratively down, отключен командой shutdown . Понятное дело, ничего делать не может вообще, пока вручную не включат.

Порядок перечисления состояний не случаен: при включении (а также при втыкании нового провода), все порты на устройстве с STP проходят вышеприведенные состояния именно в таком порядке (за исключением disabled-портов). Возникает закономерный вопрос: а зачем такие сложности? А просто STP осторожничает. Ведь на другом конце провода, который только что воткнули в порт, может быть свич, а это потенциальная петля. Вот поэтому порт сначала 15 секунд (по умолчанию) пребывает в состоянии прослушивания — он смотрит BPDU, попадающие в него, выясняет свое положение в сети — как бы чего ни вышло, потом переходит к обучению еще на 15 секунд — пытается выяснить, какие mac-адреса “в ходу” на линке, и потом, убедившись, что ничего он не поломает, начинает уже свою работу. Итого, мы имеем целых 30 секунд простоя, прежде чем подключенное устройство сможет обмениваться информацией со своими соседями. Современные компы грузятся быстрее, чем за 30 секунд. Вот комп загрузился, уже рвется в сеть, истерит на тему “DHCP-сервер, сволочь, ты будешь айпишник выдавать, или нет?”, и, не получив искомого, обижается и уходит в себя, извлекая из своих недр айпишник автонастройки. Естественно, после таких экзерсисов, в сети его слушать никто не будет, ибо “не местный” со своим 169.254.x.x. Понятно, что все это не дело, но как этого избежать?

Для таких случаев используется особый режим порта — portfast. При подключении устройства к такому порту, он, минуя промежуточные стадии, сразу переходит к forwarding-состоянию. Само собой, portfast следует включать только на интерфейсах, ведущих к конечным устройствам (рабочим станциям, серверам, телефонам и т.д.), но не к другим свичам.

Есть очень удобная команда режима конфигурации интерфейса для включения нужных фич на порту, в который будут включаться конечные устройства: switchport host . Эта команда разом включает PortFast, переводит порт в режим access (аналогично switchport mode access), и отключает протокол PAgP (об этом протоколе подробнее в разделе агрегация каналов).

STP довольно старый протокол, он создавался для работы в одном LAN-сегменте. А что делать, если мы хотим внедрить его в нашей сети, которая имеет несколько VLANов?

Стандарт 802.1Q, о котором мы упоминали в статье о коммутации, определяет, каким образом вланы передаются внутри транка. Кроме того, он определяет один процесс STP для всех вланов. BPDU по транкам передаются нетегированными (в native VLAN). Этот вариант STP известен как CST (Common Spanning Tree). Наличие только одного процесса для всех вланов очень облегчает работу по настройке и разгружает процессор свича, но, с другой стороны, CST имеет недостатки: избыточные линки между свичами блокируются во всех вланах, что не всегда приемлемо и не дает возможности использовать их для балансировки нагрузки.

Cisco имеет свой взгляд на STP, и свою проприетарную реализацию протокола — PVST (Per-VLAN Spanning Tree) — которая предназначена для работы в сети с несколькими VLAN. В PVST для каждого влана существует свой процесс STP, что позволяет независимую и гибкую настройку под потребности каждого влана, но самое главное, позволяет использовать балансировку нагрузки за счет того, что конкретный физический линк может быть заблокирован в одном влане, но работать в другом. Минусом этой реализации является, конечно, проприетарность: для функционирования PVST требуется проприетарный же ISL транк между свичами.

Также существует вторая версия этой реализации — PVST+ , которая позволяет наладить связь между свичами с CST и PVST, и работает как с ISL-транком, так и с 802.1q. PVST+ это протокол по умолчанию на коммутаторах Cisco.

В прошлом уроке обсудили известные проблемы локальных сетей. Сегодня рассмотрим протокол Spanning-Tree (STP), который помогает решать эти проблемы. Того самого бойца невидимого фронта. Немного общей(скучной) информации:

· Сам протокол был разработан в 1985 году Радьей Перлман, сотрудником компании DEC.

· Также протокол был включен в стандарт IEEE 802.1D-1990, который называется классическим STP.

· В последствии появились более усовершенствованные версии:

§ Rapid STP, относится к стандарту IEEE 802.1D-2004

§ Per-VLAN STP, проприетарный протокол компании Cisco

§ Rapid PVSTP, проприетарный протокол компании Cisco

§ MSTP, относится к стандарту IEEE 802.1Q-2003

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

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

Но если серьёзно, нас больше интересует более подробное понимание принципов. Так давайте начнём. В качестве примера рассмотрим рисунок 1.

image1

Рисунок 1 – Топология STP

image2

Рисунок 2 – Bridge ID

Дальше все остальные коммутаторы кроме корневого называются назначенными мостами Designated Bridge (SW1 и SW3). Теперь коммутаторы назначают роли для своих портов. Designated Bridge выбирают один порт в качестве корневого порта Root Port , этот порт имеет самую низкую стоимость до корневого коммутатора. В топологии SW1 в качестве корневого выбирает GE0/0/1, а SW3 - GE0/0/2 (рисунок 3).

image3

Рисунок 3 – Выбор корневого порта

Root Bridge на все свои порты устанавливает роль назначенного порта Designated Port .

image4

Рисунок 4 – Выбор назначенного порта

Designated Port – это некорневой порт, которому разрешается передавать трафик в сетевой сегмент. Одна сторона сетевого сегмента – назначенный порт, а другая – корневой порт.

image5

Рисунок 5 – Сетевой сегмент

Теперь сегмент между SW1-SW3 должен заблокироваться для избегания петли. Здесь коммутаторы SW1 и SW3 сравнивают свои Bridge ID, и коммутатор с наименьшим побеждает (SW1). Соответственно интерфейс GE0/0/3 коммутатора SW1 станет назначенным портом, а интерфейс GE0/0/3 коммутатора SW3 заблокируется. Таким образом петля разрушается.

BPDU

· Конфигурационный BPDU

· Генерируется только корневым коммутатором каждые 2 секунды

· Остальные только пересылают соседям, при этом изменяя только Bridge ID отправителя

· Topology Change Notification BPDU

· Генерируется всеми при изменении топологии

· Используется для уведомления корневого коммутатора о изменениях в топологии

· Отправляется через Root Port

· Вышестоящий коммутатор подтверждает о получении с помощью Topology Change Acknowledgment BPDU

image6

Рисунок 6 – Формат BPDU

Стоимость каналов

Назначенные мосты используют стоимости каналов для выбора оптимального пути до корневого моста. Стоимость пути до корневого моста передается внутри BPDU (поле Root Path Cost ). При получении BPDU c определенного порта коммутатор прибавляет стоимость своего интерфейса к значению Root Path Cost, таким образом получается полная стоимость от него до корневого коммутатора.

image7

Рисунок 7 – Стоимость каналов

На рисунке 7 видно, что при отправке BPDU корневой мост устанавливает поле RPC равным к 0. Потому что он сам и есть Root Bridge. А когда SW1 получает этот BPDU с интерфейса GE0/0/1, то он прибавляет стоимость интерфейса GE0/0/1 к значению RPC (сейчас 0) и получает стоимость пути до корневого моста. И когда он пересылает этот BPDU в сторону SW3, то отправляет уже с измененным полем RPC. Коммутаторы Huawei поддерживает разные стандарты по выбору стоимости. По умолчанию они используют стандарт 802.1t.

image8

Рисунок 8 – Стандарты стоимости

image9

Рисунок 9 – Проверка стоимости интерфейса

image10

Рисунок 10 – Смена стандарта стоимости

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

В STP порты могут находиться в следующих состояниях (рисунок 11):

· Disabled – когда порт выключен он находится в этом состоянии;

· Blocking – состояние порта, который в целях избегания петли заблокирован протоколом STP. В этом состоянии порт только слушает сеть, принимая BPDU от соседей;

· Listening – промежуточное состояние порта, в нем порт находится 15 секунд. Это время определяется таймером Forward Delay . В этом состоянии порт получает и отправляет BPDU, но не изучает МАС-адреса и не отправляет данные;

· Learning – промежуточное состояние порта, в нем порт находится 15 секунд. Также определяется таймером Forward Delay . В этом состоянии порт получает и отправляет BPDU, изучает МАС-адреса, но не отправляет данные;

· Forwarding – в этом состоянии порт уже получает и отправляет трафик.

image11

Рисунок 11 – Состояния портов

image12

Рисунок 12 – Проверка состояния портов на коммутаторе

Таймеры:

Классический STP был протоколом, основанных на таймерах. Работа всего протокола была зависима от этих таймеров:

· Forward Delay – таймер устанавливает длительность состоянии Listening и Learning, по умолчанию равен 15 сек;

· Max Age – таймер показывает, сколько времени BPDU хранится на полученном порте, при получении нового BPDU таймер будет сбрасываться. По умолчанию равен к 20 сек.

Установленных таймеров можно проверить командой display stp interface interface _ number >:

image13

Рисунок 13 – Проверка таймеров интерфейса

Друзья, в этом уроке мы рассмотрели только базовые принципы протокола STP. На следующем уроке рассмотрим более детальные нюансы выбора корневого порта и назначенного порта. Поверьте мне на слово, там не так всё просто)).

А теперь вопрос: Почему на коммутаторах мы можем выставить приоритет только с шагом 4096? Например, 0 или 4096 или 8192 и т.д. А не 100, 150 или 345? Прошу в комментариях написать более подробный развернутый ответ.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


STP (Spanning Tree Protocol) — сетевой протокол (или семейство сетевых протоколов) предназначенный для автоматического удаления циклов (петель коммутации) из топологии сети на канальном уровне в Ethernet-сетях. Первоначальный протокол STP описан в стандарте 802.1D. Позже появилось несколько новых протоколов (RSTP, MSTP, PVST, PVST+), отличающихся некоторыми особенностями в алгоритме работы, в скорости, в отношении к VLANам и ряде других вопросов, но в целом решающих ту же задачу похожими способами. Все их принято обобщённо называть STP-протоколами.

Протокол STP в своё время был разработан мамой Интернета Радией Перлман (Radia Perlman), а позже, в начале 90х превратился в стандарт IEEE 802.1D.

В настоящее время протокол STP (или аналогичный) поддерживается почти всеми Ethernet-коммутаторами, как реальными, так и виртуальными, за исключением самых примитивных.

Содержание

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

  1. Выбор корневого моста (Root Bridge)
  2. Определение корневых портов (Root Port)
  3. Определение выделенных портов (Designated Port)

Корневым становится коммутатор с наименьшим идентификатором моста (Bridge ID).

В итоге только один коммутатор останется корневым и будет передавать BPDU.

Изначально Bridge ID состоял из двух полей:

  • Приоритет — поле, которое позволяет административно влиять на выборы корневого коммутатора. Размер — 2 байта,
  • MAC-адрес — используется как уникальный идентификатор, который, в случае совпадения значений приоритетов, позволяет выбрать корневой коммутатор. Так как MAC-адреса уникальны, то и Bridge ID уникален, так что какой-то коммутатор обязательно станет корневым.

Порт коммутатора, который имеет кратчайший путь к корневому коммутатору, называется корневым портом. У любого не корневого коммутатора может быть только один корневой порт. Корневой порт выбирается на основе меньшего Root Path Cost - это общее значение стоимости всех линков до корневого коммутатора. Если стоимость линков до корневого коммутатора совпадает, то выбор корневого порта происходит на основе меньшего Bridge ID коммутатора. Если и Bridge ID коммутаторов до корневого коммутатора совпадает, то тогда корневой порт выбирается на основе Port ID.

Коммутатор в сегменте сети, имеющий наименьшее расстояние до корневого коммутатора, называется назначенным коммутатором (мостом). Порт этого коммутатора, который подключен к рассматриваемому сегменту сети называется назначенным портом. Так же как и корневой порт выбирается на основе:

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



Изменениями топологии считается изменения ролей DP и RP.

Коммутатор, который обнаружил изменения в топологии отправляет Topology Change Notification (TCN) BPDU корневому коммутатору:

Если порт изменяет состояние с Blocking в Forwarding, то он должен пройти через два промежуточных состояния: Listening и Learning. Переход из Forwarding в Blocking может выполняться сразу.

  • Root Port — корневой порт коммутатора
  • Designated Port — назначенный порт сегмента
  • Nondesignated Port — неназначенный порт сегмента
  • Disabled Port — порт который находится в выключенном состоянии.
  • Blocking — блокирование
  • Listening — прослушивание
  • Learning — обучение
  • Forwarding — пересылка

Bridge Protocol Data Unit (BPDU) —

Название поля Размер поля Описание
Protocol Identifier 2 байта
Protocol Version Identifier 1 байт
BPDU Type 1 байт
Flags 1 байт
Root Identifier 8 байт
Root Path Cost 4 байта стоимость пути к корневому устройству. Чем меньше значение, тем выше приоритет
Bridge Identifier 8 байт идентификатор устройства. Чем меньше значение, тем больше приоритет
Port Identifier 2 байта идентификатор порта. Чем меньше значение, тем выше приоритет
Message Age 2 байта Specifies the amount of time elapsed since the Root Bridge (Root Switch) sent the configuration message on which the current configuration message is based.
Max Age 2 байта Indicates when the current configuration message should be deleted.
Hello Time 2 байта Provides the time period between Root Bridge (Root Switch) configuration messages
Forward Delay 2 байта Provides the length of time that bridges should wait before transitioning to a new state after a topology change.

  • Root
  • Designated
  • Alternate — альтернативный путь к корневому коммутатору. Путь отличается от того, который использует корневой порт.
  • Backup — запасной путь в сегмент.
  • Learning
  • Forwarding
  • Discarding

Соответствие между состояниями портов в STP и RSTP:

Состояние в STP (802.1d) Состояние в RSTP (802.1w)
Blocking Discarding
Listening Discarding
Learning Learning
Forwarding Forwarding

В RSTP нет отдельного BPDU для анонсирования изменений в топологии (topology change notification (TCN)). Протокол использует флаг topology change (TC) для того чтобы указать на изменения. Однако, для совместимости с коммутаторами, которые используют 802.1D, коммутаторы использующие RSTP обрабатывают и генерируют TCN BPDU.

Per-VLAN Spanning Tree (PVST) — проприетарный протокол компании Cisco Systems, который для каждого VLAN строит отдельное дерево. Он предполагает использование ISL для создания транков (тегированных портов) и позволяет порту быть заблокированным для одних VLAN и разблокированным для других.

Per-VLAN Spanning Tree Plus (PVST+) — проприетарный протокол компании Cisco Systems, с функциональностью аналогичной PVST. Однако, вместо ISL он использует 802.1Q.

Различают два вида протокола PVST+:

  • PVST+ — основан на протоколе STP, с некоторыми проприетарными усовершенствованиями Cisco,
  • Rapid PVST+ — основан на протоколе RSTP.

Проприетарные усовершенствования Cisco:

  • Backbone Fast Convergence — функция улучшает сходимость топологии spanning-tree из-за непрямых изменений топологии;
  • Loop Guard — функция проверяет, что корневой порт или альтернативный корневой порт получает BPDU. Если порт не получает BPDU, то loop guard переводит порт в состояние inconsistent, изолируя таким образом проблему и позволяя топологии spanning-tree перейти в другое состояние, до тех пор пока порт не начнет опять получать BPDU;
  • Portfast — функция позволяет порту пропустить состояния listening и learning и сразу же перейти в состояние forwarding. Настраивается на портах уровня доступа (там где подключены пользователи);
  • Portfast BPDU Guard — функция позволяет выключать порт при получении BPDU;
  • Root Guard — функция не позволяет порту стать корневым портом или заблокированным. Если порт получит BPDU от корневого коммутатора, то он перейдет в специальное заблокированное состояние, которое называется root-inconsistent;
  • Uplink Fast Convergence — функция позволяет быстро переключаться на избыточный uplink, в случае, если корневой порт выключился или пересчитывается топология spanning-tree;
  • Uplink Load Balancing — функция позволяет балансировать нагрузку между uplink-портами, непосредственно контролируя стоимость портов для VLAN на транковых (тегированых) портах.

Rapid PVST+ в каждом VLAN строит дерево. В каждом VLAN работает RSTP.

  • Root
  • Designated
  • Alternate — альтернативный путь к корневому коммутатору. Путь отличается от того, который использует корневой порт.
  • Backup — запасной путь в сегмент.
  • Master — provides connectivity from the Region to a CIST Root that lies outside the Region. The Bridge Port that is the CIST Root Port for the CIST Regional Root is the Master Port for all MSTIs.

Каждая MSTI работает на всех интерфейсах в регионе, независимо от того разрешен ли соответствующий VLAN на интерфейсе.

PVST несовместим с MSTP и при одновременной работе устройств Cisco с этими протоколами вызывает проблемы в сети, в частности, отключение downlink'овского порта корневого MSTP.

Для блокировки PVST на большинстве сетевых устройств других производителей приходится создавать MAC фильтр, поскольку в их BPDU фильтрах пакеты PVST неизвестны и могут проходить через эти устройства даже при отключенных STP.


Сеть является замкнутой и на первый взгляд кажется надежной. Ведь при обрыве одного из кабелей все устройства по прежнему будут «на связи». Однако в этом кроется потенциальная проблема.

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

Алиса отправляет данные Кате. Коммутатор А посылает кадры от Алисы на все порты, кроме того порта, от которого принял кадр, используя при этом широковещательную рассылку, то есть по адресу 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+.

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