Чем сложнее сеть, тем выше требования к надежности ее работы. Одно из решений этой проблемы - использование протокола Spanning Tree для повышения "живучести" сетей, построенных на базе мостов и коммутаторов.
Компания IDC дает следующее определение коммутатора для локальных сетей: "коммутатор - это устройство, конструктивно выполненное в виде сетевого концентратора и действующее как высокоскоростной многопортовый мост; встроенный механизм коммутации позволяет осуществить сегментирование локальной сети и выделить полосу пропускания конечным станциям в сети".
Эти устройства появились в конце 80-х годов и использовались на уровне предприятия. Внедрение коммутаторов резко повысило пропускную способность сети за счет равномерного распределения полосы пропускания между пользователями и приложениями. Первоначальная стоимость коммутаторов была довольно высока. Тем не менее они оказались проще в применении и дешевле маршрутизаторов. В последнее время использование коммутаторов вышло за пределы применения на уровне предприятия. Так, применение коммутаторов на уровне подразделений становится все популярней. Такое положение дел объясняется тем, что коммутаторы позволяют повысить отдачу от существующей сети, при этом повышение производительности может быть достигнуто без замены существующей кабельной системы и оборудования конечных пользователей.
Дальнейшее развитие технологии коммутации привело к появлению и реализации идеи виртуальных локальных сетей (VLAN).
Применение коммутаторов на уровне подразделений и рабочих групп заставило производителей принимать меры по значительному повышению надежности сети. Одним из способов поддержки работоспособности сети является использование протокола Spanning Tree Protocol (STP).
ПУТЕВОДНОЕ ДРЕВО
Протокол STP (в некоторых технических документах может встретиться название Spanning Tree Algorithm, STA) был разработан фирмой Digital Equipment Corporation, а впоследствии опубликован комитетом IEEE 802 (Institute of Electrical and Electronic Engineers) в виде спецификации IEEE 802.1d. Основная цель разработки протокола заключалась в устранении логических и физических петель в сетях, построенных с использованием мостов. Кроме того, протокол автоматически переконфигурирует сетевую топологию в случаях обрывов линий связи или аппаратных ошибок оборудования.
В настоящее время многие производители коммутаторов включают поддержку стандарта IEEE 802.1d в свои изделия. Таким образом, появился мощный механизм построения устойчивых к сбоям и отказам локальных сетей. Это достигается сознательным введением в топологию локальной сети дополнительного оборудования, которое будет заблокировано при нормальной работе и задействовано при сбоях и отказах.
В ОЖИДАНИИ ШТОРМА
Прежде чем рассмотреть принцип действия протокола STP, необходимо сделать допущение - будем считать, что в качестве сетевых устройств используют гипотетические коммутаторы, имеющие три порта и работающие по стандарту IEEE 802.1d. Принцип работы протокола STP на примере коммутаторов с более чем тремя действующими портами сложнее для понимания, однако приводит практически к тем же результатам.
Для демонстрации необходимости применения протокола STP рассмотрим ситуацию, изображенную на Рисунке 1.
Рисунок 1.
Передача сообщений в сети на базе коммутаторов с избыточными путями.
Предположим, что станция А генерирует широковещательное сообщение. Оно будет получено коммутаторами Б и В и передано соответственно друг другу, как показано стрелками. После получения сообщения эти коммутаторы вновь перешлют его коммутатору А, и весь цикл, образуя "шторм" из широковещательных сообщений, повторится вновь.
Похожая проблема возникает и в случае нешироковещательного трафика. Предположим, станция А передает сообщение станции Б и коммутаторы еще не построили своих адресных таблиц. В этом случае, согласно стандарту IEEE 802.1d, сообщение будет передано на все порты, исключая порт, принявший его. В результате коммутаторы Б и В получат данное сообщение от А, изменят свою таблицу маршрутов, пометив, на какой порт принято сообщение, а затем передадут его друг другу, вновь изменят свои адресные таблицы и т. д. В итоге, кроме генерации избыточного трафика, содержимое адресных таблиц не будет соответствовать истине.
Как видно, образование логических и физических петель в сети с коммутаторами отрицательно сказывается на нормальном функционировании локальной сети. Решить проблему можно, удалив все петли из сетевой топологии и оставив только один путь между двумя станциями.
В результате работы протокола Spanning Tree происходит переконфигурация сети с исключением всех возможных петель и созданием только одного пути передачи данных между любыми станциями, подключенными к узловым коммутаторам.
Для того чтобы протокол STP построил свободную от петель сетевую топологию, необходима поддержка стандарта IEEE 802.1d всеми коммутаторами, работающими в сети.
ВАМ ПАКЕТ!
Для функционирования протокола STP коммутаторы должны иметь возможность обмениваться информацией. Это достигается с помощью пакетов Bridge Protocol Data Unit (BPDU), помещаемых внутрь передаваемых по сети кадров канального уровня. Формат пакета показан на Рисунке 2.
Рисунок 2.
Протокол BPDU обеспечивает обмен информацией между коммутаторами в
сети.
Поля имеют следующие значения:
- Протокол ID (Protocol Indetifier) - идентификатор протокола. Поле имеет нулевое значение;
- Версия (Version) - поле версии протокола. Оно также имеет нулевое значение;
- Тип сообщения (Message Type) - поле имеет нулевое значение при нормальной работе протокола. Оно задается равным 80h при извещениях об изменениях в сетевой топологии;
- Флаги (Flags) используют только два бита. Первый бит сигнализирует об изменениях в сетевой топологии и обозначается TC (Topology Change). Восьмой бит применяется для подтверждения приема пакета BPDU с установленным битом TC и обозначается TCA (Topolygy Change Acknowledgment). Остальные шесть битов этого байта не используются;
- Корневой ID (Root ID) - идентификатор корневого коммутатора. Поле состоит из восьми байт. Два первых байта - идентификатор коммутатора, оставшиеся шесть байтов - его MAC-адрес;
- Стоимость пути до корня (Root Path Cost) характеризует суммарную стоимость пути до корневого коммутатора;
- ID коммутатора (Switch ID) - Идентификатор отправившего сообщение коммутатора;
- Идентификатор порта (Port ID) - идентификатор порта коммутатора, с которого отправлено сообщение;
- Возраст сообщения (Message Age) - время, прошедшее с момента отправки корневым коммутатором сообщения об обнаружении изменений в сетевой топологии;
- Максимальный возраст (Maximum Age) - время удаления из обращения текущего сообщения;
- Время приветствия (Hello Time) - промежуток времени между рассылками сообщений корневым коммутатором;
- Задержка перехода (Forward Delay) - задержка, которую коммутаторы должны выждать перед переходом в новое состояние после изменений сетевой топологии.
КОРНИ И КРОНА
Для построения предполагаемой топологии сетевой администратор должен задать два параметра: идентификатор коммутатора (ID) и стоимость портов (ports cost).
Идентификатор коммутатора - это уникальное восьмибайтовое число, в котором первые два байта устанавливаются сетевым администратором, а последние шесть байт составляет МАС-адрес коммутатора.
Стоимость портов может назначаться сетевым администратором либо автоматически, либо по умолчанию. Сетевой администратор может назначить любое число в пределах от 0 до 65535. По умолчанию это число устанавливается обратно пропорционально поддерживаемой скорости передачи и вычисляется по следующей формуле:
Стоимость порта = 1000/(Скорость передачи порта в Мбит/с)
Для примера - стоимость портов с интерфейсами Ethernet 802.3 будет равна 100. В Таблице 1 приведены стоимости портов в зависимости от используемых типов интерфейсов.
ТАБЛИЦА 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Первым шагом работы протокола STP является выбор корневого коммутатора. Это достигается широковещательной рассылкой всеми коммутаторами пакетов BPDU на все свои порты. Сначала каждый коммутатор рекламирует самого себя в качестве корневого, помещая свой идентификатор в два поля: "Корневой ID" и "ID коммутатора" (см. Рисунок 2). При получении каким-либо коммутатором пакета, содержащего меньший идентификатор поля "Корневой ID", чем его собственный, данный коммутатор перестает рассылать свой идентификатор и начинает рассылать пакеты, имеющие меньший идентификатор. В ситуации, показанной на Рисунке 3, корневым становится коммутатор А, как имеющий наименьший идентификатор.
Рисунок 3.
Обмен пакетами BPDU между коммутаторами.
После выбора корневого коммутатора, он начинает рассылку пакетов BPDU на все свои порты. В этих пакетах, в поле "Стоимость пути до корня", содержится информация о цене портов. Корневой коммутатор при рассылке устанавливает содержимое этого поля равное нулю, а следующие коммутаторы добавляют свои стоимости портов к этому числу и рассылают пакеты дальше. Данные пакеты воспринимаются корневыми портами (root ports) коммутаторов. В их качестве выступают порты, через которые можно попасть в корневой коммутатор с наименьшей суммарной стоимостью.
В нашем примере коммутаторы Б и В добавляют свои стоимости портов - числа 25 и 30, соответственно, - и пересылают сообщения друг другу. После анализа этих сообщений коммутатор с наибольшей стоимостью пути до корня переводит свой порт в блокированное состояние. В нашем примере этим коммутатором является коммутатор В с портом 2. Порт, находящийся в блокированном состоянии, не передает кадры через себя, однако он продолжает принимать и обрабатывать пакеты BPDU. У коммутатора Б порт 2 становится назначенным (designate port), и кадры передаются в подключенный сегмент сети только через него. Таким образом, хотя коммутатор Б продолжит передачу кадров канального уровня через свой порт 2, они не пройдут дальше коммутатора В, который будет их отсекать, устраняя петлю, существовавшую ранее. Необходимо отметить, что у корневого коммутатора все порты являются назначенными.
Вообще у коммутатора, работающего по стандарту IEEE 802.1d, порт может находиться в одном из четырех состояний.
1. Блокирование (Blocking State) - порт не участвует в нормальных операциях обучения, фильтрации и передачи. Пользовательский трафик не передается от коммутатора в сегмент, подключенный к данному порту, и обратно. Корневые и назначенные порты никогда не помещаются в блокированное состояние. Порт в этом состоянии воспринимает пакеты BPDU, не передавая их далее; если порт не получит сообщения в заданный период времени, он переходит в состояние прослушивания.
2. Прослушивание (Listening State) - порт слушает пакеты BPDU для определения необходимости перехода в блокированное состояние или в состояние обучения. В этом состоянии порт не участвует в узнавании места расположения станций, фильтрации или передаче пользовательской информации. Данное состояние предназначено для минимизации получения некорректной информации о расположении станций, когда происходит переконфигурация протокола STP. Время нахождения порта в этом состоянии равно значению параметра поля "Задержка перехода" и по умолчанию составляет 15 секунд.
3. Обучение (Learning State) - порт готовится к переходу в состояние передачи. Коммутатор запоминает расположение станций и обновляет адресную таблицу. Длительность периода обучения порта равно длительности периода прослушивания.
4. Передача (Forwarding State) - порт участвует во всех действиях коммутатора; узнавание расположения станций в сети, фильтрация данных и передача пользовательского трафика. Трафик может передаваться от коммутатора в сегмент, и обратно. Только корневые и назначенные порты коммутаторов могут находиться в этом состоянии.
На Рисунке 4 показана последовательность перехода состояний порта, а на Рисунке 5 - сетевая топология, полученная в результате работы протокола STP в локальной сети из вышеприведенного примера.
Рисунок 4.
Переход состояний портов коммутатора, работающего по протоколу Spanning
Tree.
Рисунок 5.
Состояние сети при обрыве связи между двумя коммутаторами.
После создания новой сетевой топологии корневой коммутатор начинает периодическую рассылку пакетов BPDU. Интервал между рассылками задается администратором при настройке и помещается в поле "Время приветствия" (по умолчанию 2 секунды). Остальные коммутаторы, получая данные пакеты, увеличивают содержимое поля "Возраст сообщения" и передают их дальше по сети. Если это содержимое достигнет значения поля "Максимальный возраст", также задаваемого администратором, то сообщение будет удалено из обращения. Хотя после выбора корневого коммутатора остальные работают с его временными настройками, лучше, когда у всех коммутаторов в сети эти значения одинаковы.
На Распечатке 1 в качестве примера приведены конкретные настройки параметров протокола STP для маршрутизатора 3Com NetBuilder II, работающего в режиме моста и выбранного корневым.
Протокол STP будет производить переконфигурацию сетевой топологии в случаях выхода из строя корневого коммутатора или обрыва линии связи.
Если корневой коммутатор вышел из строя, остальные коммутаторы своевременно не получат пакеты BPDU на свои корневые порты. Каждый коммутатор ожидает получить хотя бы одно сообщение от корневого коммутатора до окончания его временной настройки - "Максимальный Возраст". По истечении этого времени будет произведена переконфигурация сетевой топологии с выбором нового корневого коммутатора.
Если произошел обрыв линии связи, коммутаторы на "дальнем" конце сети сообщат о том, что пакеты BPDU не были получены на их корневые порты. В результате работы протокола STP "отрезанное" обрывом линии оборудование устанавливает связь с остальной частью локальной сети при условии наличия резервных линий связи.
Протокол STP может также производить переконфигурацию при следующих условиях:
- если у корневого порта коммутатора истекло время ожидания, другой порт может быть выбран корневым;
- если своевременно не обновляется информация от текущего корневого коммутатора, один из коммутаторов сделает попытку стать корневым;
- если у некорневого порта коммутатора истекло время ожидания, то порт будет пытаться стать назначенным для сегмента, который к нему подключен. Данный коммутатор начнет передавать пакеты BPDU, полученные от корневого коммутатора в этот сегмент.
Таким образом, в случае выхода из строя коммутатора или обрыва линии связи, протокол STP произведет переконфигурацию сетевой топологии. Все коммутаторы перестают передавать кадры, очищают свои адресные таблицы, перевыбирают корневой коммутатор, определяют корневые, назначенные и блокированные порты и вновь начинают нормально функционировать. Приостановка передачи кадров во время переконфигурации производится во избежание образования временных петель коммутации. Время приостановки передачи определяется значением параметра в поле "Задержка перехода".
Проиллюстрируем это на примере. Предположим, что произошел обрыв линии связи между коммутаторами А и Б, как показано на Рисунке 5 . В данном случае коммутатор Б своевременно не получит на свой корневой порт сообщения от корневого коммутатора и активизирует процесс переконфигурации, рассылая пакеты BPDU с содержимым поля "Тип сообщения" равным 80h, означающим Topology Change Notification (TCN). Далее процессы выбора корневого коммутатора, назначенных и блокированных портов коммутаторов повторятся вновь, но уже с учетом отсутствия связи между коммутаторами А и Б. В результате переконфигурации мы получим последовательное соединение коммутаторов А, В и Б (см. Рисунок 6).
Рисунок 6.
Переконфигурация сети в случае обрыва линии связи между двумя коммутаторами.
ЗАПАС КАРМАН НЕ ТЯНЕТ
В практике проектирования сетей можно использовать два метода, предполагающих введение либо резервных линий связи, либо резервных коммутаторов.
Для рассмотрения этих методов обозначим коммутаторы числами 1, 2, ...n. Корневые порты помечены буквой R, назначенные - буквой D, а блокированные - B. Резервные линии связи отмечены штрих пунктирной линией.
На Рисунке 7 показан самый простой пример. Два коммутатора связываются двумя линиями связи, одна из которых автоматически становится резервной и задействуется в случае обрыва рабочей.
Рисунок 7.
Введение резервной линии связи между двумя коммутаторами.
Во втором примере мы рассмотрим ситуацию, возникающую при построении сети в многоэтажном здании. Коммутаторы на этажах сводятся к центральному коммутатору с подключенными серверами (см. Рисунок 8). Для обеспечения устойчивости к сбоям и отказам сети вводятся дополнительные связи между коммутаторами на этажах, которые при нормальной работе сети запрещены, но в случае обрыва любой рабочей линии связи будут задействованы. Как видно из Рисунка 8, коммутаторы на этажах используют дополнительные порты, что и нужно учитывать при проектировании. Еще одну резервную связь можно установить между коммутаторами 2 и 4, что обеспечит работоспособность сети в случаях обрыва рабочей и резервной линий связи для данных коммутаторов, хотя это и займет еще по одному порту.
Рисунок 8.
Введение резервных линий связи при построении сети в многоэтажном здании.
На Рисунке 9 приведен пример введения резервных коммутаторов. Такая схема характерна при построении локальной сети с большими расстояниями между узлами. В этом случае коммутаторы выполняют функцию повторителей с поддержкой протокола STP. В примере резервным для коммутаторов 2 и 3 является коммутатор 6.
Рисунок 9.
Построение сети с резервными связями при больших расстояниях между
узлами.
Оба метода могут быть использованы на практике. Все зависит от создавшейся ситуации и поставленных перед проектировщиком задач.
ВИРТУАЛЬНО ИЛИ РЕАЛЬНО?
Протокол STP вполне применим и в виртуальных сетях. Однако традиционный алгоритм работы протокола оказывается несостоятельным по мере развития архитектуры виртуальных сетей. Это связано с тем, что единственный путь, регламентированный протоколом STP, не может удовлетворить всему множеству виртуальных сетей в данной физической топологии. Фирма Cisco реализовала возможность работы протокола STP для каждой виртуальной сети. Данный метод называется Autonomous Spanning Tree; он призван повысить гибкость и расширяемость виртуальных сетей, т. к. виртуальные сети могут использовать разные пути передачи данных из конца в конец. Коммутаторы виртуальных сетей фирмы Cisco могут быть связаны между собой несколькими линиями связи. При этом без поддержки механизма виртуальных сетей протокол STP автоматически отключит все линии связи, кроме одной, устраняя таким образом возможные петли. Включение механизма виртуальных сетей приведет к применению протокола STP к каждому пути каждой виртуальной сети в отдельности. Эти рассуждения остаются верны и в случае виртуальных сетей с использованием параллельных линий передачи и асинхронного режима передачи данных (ATM). Учитывая, что в настоящее время стандарт на виртуальные сети еще не принят, рассмотрение принципов работы протокола STP в среде виртуальных сетей носит чисто гипотетический характер.
ПОДВОДЯ ИТОГИ
Из вышеприведенного материала следует, что использование протокола STP имеет как свои достоинства, так и недостатки. Протокол STP удобен тем, что он:
- позволяет создавать большие и сложные сети с применением коммутаторов;
- предоставляет только один путь передачи данных между любыми двумя станциями, который:
- гарантирует доставку данных в порядке их отправления;
- устраняет размножение широковещательных пакетов;
- устраняет бесконечную циркуляцию широковещательных пакетов;
- устраняет циркуляцию пакетов с неизвестным адресом назначения;
- позволяет строить устойчивые к сбоям и отказам локальные сети из коммутаторов;
- работает прозрачно для конечных станций;
- использует небольшой процент полосы пропускания;
- не привязан к одному производителю оборудования;
- применим в виртуальных сетях.
Однако не следует забывать и о недостатках, в качестве которых можно отметить следующие моменты:
- цена коммутаторов, поддерживающих протокол STP, довольно высока;
- для введения резервных линий связи должны быть задействованы дополнительные порты коммутатора;
- введение резервного оборудования существенно увеличивает стоимость сети в целом;
- в моменты переконфигурации топологии сеть становится не работоспособной;
- между двумя любыми станциями в сети может быть не более семи коммутаторов.
В заключение необходимо отметить, что протокол STP разработан довольно давно. Однако, как показала практика использования данного протокола, он не потерял актуальность и в настоящее время. Подтверждением этому может служить включение его поддержки в такой современной области применения коммутаторов, как построение виртуальных сетей. Применение протокола носит узкий характер, в основном он используется в тех сетях, где требования к надежности передачи данных и сохранению информации являются основополагающими.
Максим Владимирович Кульгин - менеджер по проектам компании ComputerLand/St. Petersburg. С ним можно связаться по телефонам: (812) 224-1622, 224-0217, 224-2329 или через Internet по адресу: mk@cml.spb.su.
РАСПЕЧАТКА 1
NetBuilder# Show -STP CONFiguration Bridge Identifier = %8000 %080002013EB0 - Идентификатор моста Bridge Priority = %8000 - Приоритет моста Time Since Last Topology Chg = % 0004 Days:16 Hours:19 Mins:22 Secs Topology Chg Count = 2 - Количество изменений Top Change = FALSE - Изменение происходит сейчас Designate Root = %8000 %080002013EB0 - Идентификатор корневого моста Root Cost = 0000 - Стоимость пути до корня Root Port = NO PORT - Номер корневого порта Max Age = 20 Secs - | Hello Time = 02 Secs - |Значения получены от корневого Fwd Delay = 15 Secs - |моста Bridge Max Age = 20 Secs - | Bridge Hello Time = 02 Secs - |Значения установлены сетевым Bridge Fwd Delay = 15 Secs - |администратором Spanning Tree Protocol = ON - Признак включения STP