Bridge Protocol Data Unit (BPDU)
Вычисление структуры связующего дерева происходит при включении коммутатора и при изменении топологии. Эти вычисления требуют периодического обмена информацией между коммутаторами связующего дерева, что достигается при помощи специальных кадров, называемых блоками данных протокола моста – BPDU (Bridge Protocol Data Unit).
Коммутатор отправляет BPDU, используя уникальный МАС-адрес порта в качестве адреса-отправителя и групповой МАС-адрес протокола STP 01-80-C2-00-00-00 в качестве адреса-получателя. Кадры BPDU помещаются в поле данных кадров канального уровня, например кадров Ethernet.
Внимание: иногда, в целях повышения безопасности, администраторам необходимо отключать возможность передачи кадров BPDU на граничные коммутаторы сети, чтобы избежать получения случайных кадров BPDU клиентскими портами, которые могут распространить вычисления STP по клиентским сетям. Управляемые коммутаторы D-Link поддерживают возможность включения и отключения передачи кадров BPDU для каждого порта. |
Существует три типа кадров BPDU:
● Configuration BPDU (CBPDU) – конфигурационный кадр BPDU, который используется для вычисления связующего дерева (тип сообщения: 0x00).
● Topology Change Notification (TCN) BPDU – уведомление об изменении топологии сети (тип сообщения: 0x80).
● Topology Change Notification Acknowledgement (TCA) – подтверждение о получении уведомления об изменении топологии сети.
Коммутаторы обмениваются BPDU через равные интервалы времени (по умолчанию 2 с), что позволяет им отслеживать состояние топологии сети.
Рис. 6.16 Формат кадра BPDU
Кадр BPDU состоит из следующих полей:
● Идентификатор протокола (Protocol Identifier) – занимает 2 байта, значение всегда равно 0.
● Версия протокола STP (Protocol VersionIdentifier) – 1 байт, значение всегда равно 0.
● Тип BPDU (BPDU Type) – 1 байт, значение «00» – конфигурационный BPDU, «01» – изменение топологии.
● Флаги (Flags) – 1 байт. Бит 1 – флаг изменения топологии, бит 8 – флаг подтверждения изменения топологии.
● Идентификатор корневого моста (Root Identifier) – 8 байт. Идентификатор текущего моста.
● Расстояние до корневого моста (Root Path Cost) – 2 байта. Суммарная стоимость пути до корневого моста.
● Идентификатор моста (Bridge Identifier) – 8 байт. Идентификатор текущего моста.
● Идентификатор порта (Port Identifier) – 2 байта. Уникальный идентификатор порта, который отправил этот BPDU.
● Время жизни сообщения (Message Age) – 2 байта. Нефиксированный временной интервал в секундах, прошедший с момента отправки BPDU корневым мостом. Служит для выявления устаревших сообщений BPDU. Первоначальное значение равно 0. По мере передачи кадра BPDU по сети, каждый коммутатор, добавляет ко времени жизни сообщения время его задержки данным коммутатором. По умолчанию оно равно 1 с. Значение параметра Message Age должно быть меньше значения таймера Max Age.
● Максимальное время жизни сообщения (Max Age) – 2 байта. Временной интервал в секундах, определяющий максимальное время хранения конфигурации STP, прежде чем коммутатор ее отбросит.
● Время приветствия (Hello Time) – 2 байта. Временной интервал в секундах, через который посылаются кадры BPDU.
● Задержка смены состояний (Forward Delay) – 2 байта. Временной интервал в секундах, в течение которого порт коммутатора находится в состояниях «Прослушивание» и «Обучение».
Состояния портов
В процессе построения топологии сети каждый порт коммутатора проходит несколько стадий:
● Blocking(«Блокировка») – при инициализации коммутатора все порты (за исключением отключенных) автоматически переводятся в состояние «Блокировка». В этом случае порт принимает и обрабатывает только кадры BPDU. Все остальные кадры отбрасываются.
● Listening(«Прослушивание») – в этом состоянии порт продолжает принимать, обрабатывать и ретранслировать только кадры BPDU. Из этого состояния порт может перейти в состояние «Блокировка», если получит BPDU с лучшими параметрами, чем его собственные (стоимость пути, идентификатор моста или порта). В противном случае по истечении периода, установленного таймером задержки смены состояний (Forward Delay), порт перейдет в следующее состояние – «Обучение».
● Learning(«Обучение») – порт начинает принимать все кадры и на основе МАС-адресов источника строить таблицу коммутации. В этом состоянии порт все еще не передает кадры, но продолжает участвовать в работе алгоритма STP и при поступлении BPDU с лучшими параметрами, переходит в состояние «Блокировка». В противном случае по истечении периода, установленного таймером смены состояний, порт перейдет в следующее состояние – «Продвижение».
● Forwarding(«Продвижение») – в этом состоянии порт может обрабатывать кадры данных в соответствии с построенной таблицей коммутации, а также принимать, передавать и обрабатывать кадры BPDU.
● Disable(«Отключен») – в это состояние порт переводит администратор. Отключенный порт не участвует ни в работе протокола STP, ни в продвижении кадров данных. Порт можно также включить вручную, и он перейдет в состояние «Блокировка».
Рис. 6.17 Состояния портов при работе STP
В процессе нормальной работы корневой мост продолжает генерировать служебные кадры BPDU, а остальные коммутаторы продолжают их принимать своими корневыми портами и ретранслировать назначенными. Если по истечении максимального времени жизни сообщения (по умолчанию – 20 с) корневой порт любого коммутатора сети не получит служебный кадр BPDU, то он инициализирует новую процедуру построения связующего дерева.
Таймеры STP
Для того чтобы все коммутаторы сети имели возможность получить точную информацию о конфигурации связующего дерева, в протоколе STP используются следующие таймеры.
● Hello Time – интервал времени, через который корневой мост отправляет конфигурационные BPDU. Значение таймера Hello Time, настроенное на корневом мосту, будет определять значения таймеров Hello Time на всех некорневых коммутаторах, так как они просто пересылают конфигурационные BPDU, когда получают их от корневого. Значение таймера Hello Time по умолчанию 2 секунды, диапазон возможных значений от 1 до 10 секунд.
● Forward Delay – интервал времени, в течение которого порт коммутатора находится в состояниях «Прослушивание» и «Обучение». Такая задержка смены состояний необходима, чтобы исключить возможность временного возникновения альтернативных маршрутов при неодновременной смене состояний портов во время реконфигурации. Значение таймера Forward Delay по умолчанию 15 секунд, диапазон возможных значений от 4 до 30 секунд.
● Max Age – это интервал времени, в течение которого коммутатор хранит параметры текущей конфигурации связующего дерева. Значение таймера Max Age устанавливается корневым мостом и позволяет гарантировать, что все коммутаторы сети обладают одинаковой информацией о времени хранения конфигурации STP. Если период времени, определенный таймером истек, а коммутатор за это время не получил кадр BPDU от корневого моста, то он начинает считать себя корневым мостом и рассылает свои собственные BPDU всем коммутаторам сети, инициируя новую процедуру построения связующего дерева. Значение таймера Max Age по умолчанию 20 секунд, диапазон возможных значений от 6 до 40 секунд.
Значения таймеров Hello Time, Forward Delay и Max Age могут быть вручную настроены администратором на коммутаторе. Обычно эти настройки выполняются только на коммутаторе, являющемся корневым для данной топологии связующего дерева. При настройке важно помнить, что неправильно подобранные значения таймеров могут значительно увеличить время сходимости топологии STP и снизить производительность сети, поэтому рекомендуется использовать значения таймеров по умолчанию.
Изменение топологии
Коммутатор отправляет BPDU с уведомлением об изменении топологии (Topology Change Notification BPDU, TCN BPDU) в случае возникновения одного из следующих событий:
● некорневой мост получает сообщение TCN BPDU на свой назначенный порт;
● после истечения времени, определенного таймером Forward Delay, порт переходит в состояние Forwarding, но коммутатор уже имеет назначенный порт для данного сегмента;
● порт, находившийся в состоянии Forwarding или Listening, переходит в состояние Blocking (в случае проблем с каналом связи);
● коммутатор становится корневым мостом.
TCN BPDU отправляется коммутатором в тот сегмент сети, к которому подключен его корневой порт. Эти BPDU будут передаваться через интервал Hello Time до тех пор, пока коммутатор не получит подтверждение Topology Change Notification Acknowledgement (TCN-ACK) от вышестоящего коммутатора. Соседний коммутатор продолжит трансляцию TCN BPDU через свой корневой порт в направлении корневого моста сети, используя такую же процедуру. Этот процесс будет продолжаться до тех пор, пока TCN BPDU не достигнет корневого моста.
Когда корневой мост получает TCN BPDU или сам изменяет топологию, он устанавливает во всех передаваемых конфигурационных BPDU флаг изменения топологии (Topology Change, TC) на период времени, равный сумме значений таймеров Forward Delay и Max Age. Когда нижележащие коммутаторы получат конфигурационные BPDU с флагом Topology Change, они установят значения таймеров старения записей адресных таблиц (Aging Timer) равными длительности таймера задержки передачи Forward Delay.
Рис. 6.18 Процесс уведомления об изменении топологии
Управляемые коммутаторы D-Link при настройке функции STP позволяют включать и отключать на каждом порте возможность приема TCN BPDU с помощью параметра restricted_tcn. По умолчанию параметр restricted_tcn отключен. Использование данного параметра позволяет избежать сетевых атак, связанных с отправкой ложных кадров TCN BPDU.
Настройка STP
Рассмотрим пример настройки протокола STP на коммутаторах D-Link серии DGS-1210-28/ME в сети, показанной на рисунке 6.19.
Рис. 6.19 Схема сети
Внимание: по умолчанию протокол STP на коммутаторах D-Link отключен. |
Настройка коммутатора 1
Активизировать протокол STP глобально на коммутаторе и установить наименьшее значение приоритета, чтобы он был выбран корневым мостом (приоритет по умолчанию = 32768). Выбрать Spanning Tree → STP Bridge Global Settings. В открывшемся окне установить STP State → Enabled, в выпадающем меню STP Version выбрать STP, в открывающемся меню Bridge Priority выбрать 4096 и нажать кнопку Apply (рисунок 6.20).
Рис. 6.20 Настройка протокола STP на коммутаторе 1
Настройка коммутатора 2
Активизировать протокол STP глобально на коммутаторе. Выбрать Spanning Tree → STP Bridge Global Settings. В открывшемся окне установить STP State → Enabled, в выпадающем меню STP Version выбрать STP и нажать кнопку Apply (рисунок 6.21).
Рис. 6.21 Настройка протокола STP на коммутаторе 2