|
Этой статьей авторы хотели бы не столько объяснить, что такое Spanning Tree Protocol, сколько рассказать о недокументированных возможностях его применения, которые, возможно, не принимались во внимание разработчиками протокола. Поэтому, несмотря на то, что в статье в общих чертах приводится описание протокола Spanning Tree и его назначения, она не претендует на статус материала, который следует использовать для изучения этого протокола с нуля - предполагается, что вы уже читали какие-либо материалы на эту тему, а это введение лишь освежит вашу память. Если же вы вообще не знакомы с этим протоколом и (или) это введение показалось вам недостаточно вразумительным - рекомендуем обратиться к многочисленным описаниям STP в литературе, на сайтах ведущих компаний производителей интеллектуальных LAN-устройств (например, поискать материалы на http://www.cisco.com) и, разумеется, к IEEE стандарту, описывающему этот протокол [1]. Также в разделе "ссылки" есть, возможно, достаточный для составления полной картины набор url. Основное назначение протокола Spanning Tree - построение топологии ЛВС без избыточного дублирования соединений или закольцовывания, недопустимых в силу логики построения ЛВС. STP позволяет организовать в сети, построенной при помощи мостов (bridges), отказоустойчивую архитектуру.
Используя STP, вы можете построить сеть, в которой существует несколько параллельных путей, и гарантировать при этом, что:
Например, на рисунке 1 показана сеть, построенная на четырех коммутаторах, поддерживающих протокол STP. Это обстоятельство позволяет соединить их избыточным количеством линков, которые в обычных условиях создали бы петли и привели к неработоспособности сети. Однако, при инициализации сети STP обнаруживает дублирующие пути и оставляет на каждое направление только один, переводя остальные задействованные в линках порты в состояние "blocking" (на рисунке соответствующие линки зачеркнуты). При нарушении основного канала передачи (например, в следствие отключения одного из коммутаторов), STP обнаруживает этот факт и задействует запасной маршрут.
Протокол разработан в начале 90-х годов XX века (ANSI/IEEE 802.1D 1993 Edition) и дорабатывался в 1996 и 1998 годах. В качестве модели используется граф в виде дерева. Построение дерева сети начинается с корня (root) -- устройства, выигравшего выборы корневого (designated root). Designated root -- это просто отправная точка для построения активной незакольцованной топологии, в которой физические кольца не дают логических колец (см. главы 8 и 9 [1]). Иными словами, это логическое понятие. Важно заметить, что Spanning Tree Protocol определен для различных сред передачи данных (MAC, Media Access Control). Далее в тексте рассматриваются примеры сетей в основном на базе Ethernet, как наиболее распространенной. BPDU - это именно пакеты, а не фреймы. Это ясно из [1], 8.3.2, стр.61. BPDU пакеты инкапсулируются в используемый данной топологией тип фрейма с мультикастным MAC адресом в поле назначения, что обуславливает передачу этих пакетов через неинтеллектуальное оборудование, не знающее о существовании Spanning Tree. Работа STP подразумевает выполнение следующих условий:
Designated root присутствует всегда, даже когда топология не содержит физических колец. Если в сети только одно STP-совместимое устройство - до тех пор, пока STP не выключен, оно будет анонсировать себя. Каждое STP-совместимое устройство начинает работу, считая себя designated root, так что в сети с единственным STP-совместимым устройством оно и является Designated Root Bridge.
Если же в сети присутствует более устройства, поддерживающего STP, то Designated Root Bridge выбирается путем голосования (выборов) на основе значения параметра Bridge Identifier, обычно являющегося комбинацией уникального MAC-адреса моста и устанавливаемого для моста приоритета (см. [1], главы 8 и 9). На роль Designated Root Bridge назначается мост с наименьшим значением Bridge Identifier. Для всех остальных мостов в сети определяется Root Port, т.е. порт моста, ближайший к Root Bridge. От других портов, соединенных с root bridge непосредственно или через другие мосты, он отличается своим идентификатором, который содержит его номер и "вес", который может быть задан администратором. Другой величиной, влияющей на процесс выборов, является Root Path Cost. Она состоит из стоимости пути до Root Port данного моста плюс стоимость путей до Root Port мостов по всему маршруту до Root Bridge. Помимо Designated Root Bridge в STP вводится логическое понятие Designated Bridge. Владелец этого статуса считается главным в обслуживании данного сегмента ЛВС. Статус Designated Bridge также является выборным и может переходить от одного устройства к другому. Аналогичным образом вводится выборное логическое понятие Designated Port - порта, который обслуживает данный сегмент сети. Для Designated Port вводится понятие Designated cost, описывающее стоимость пути ([1], 8.5.5.5). В зависимости от содержимого получаемых от соседних устройств конфигурационных пакетов то или иное устройство перестает оспаривать статус Designated Root Bridge и начинает анонсировать устройство, выигравшее этот статус в процессе выборов. Так происходит до тех пор, пока ситуация не придет к завершающей стадии, которая характеризуется следующим образом:
Как уже говорилось, корень не несет на себе иных обязанностей, кроме анонса своих параметров согласно спецификации Spanning Tree протокола, а это, в частности, значит, что в сети, не содержащей физических колец или избыточных соединений, от изменения владельца статуса Designated Root Bridge пути пакетов, пересылаемых между двумя произвольными станциями не изменится. Спецификация протокола [1] не накладывает ограничений на время, в которое могут начаться выборы того или иного параметра, а лишь описывает необходимые для этого условия. К числу ситуаций, в которых возникают выборы как минимум одного из параметров, относятся:
В качестве параметров при выборах используются следующие величины:
Величины bridge identifier и port identifier являются составными и образуются из поля приоритета (может устанавливаться администратором) и поля, присваиваемого производителем (некоторые устройства могут поддерживать установку этих идентификаторов целиком). Согласно спецификации выборные величины, в зависимости от контекста, могут принимать участие в различных выборах, например, designated cost может принимать участие как в выборах назначенного моста, так и в выборах корневого моста.
Таблица 1. Структура C-BPDU
Таблица 2. Структура TCN-BPDU
Во время работы устройства анонсируют себя и параметры своих портов через Configuration BPDU (далее называемые c-bpdu). Формат c-bpdu приведен в таблице 1 (согласно [1], 9.3.1, рисунок 9-1) и на рисунке 2 (согласно [1], 8.9.1). Для сообщения об изменениях в топологии используются topology change notification BPDUs, формат которых приведен в таблице 2 и на рисунке 3 (согласно [1], параграф 8.3.5, стр. 63, последний абзац). Собственно информации передается совсем немного - только статус. По факту прихода такого BPDU любой коммутатор уменьшает время жизни записей в своей таблице коммутации до минимума, определенного стандартом [1]. В момент получения конфигурационного bpdu STP-совместимый мост может определить, что пришедшая информация должна обновить имеющуюся у него информацию. В этом случае устройство изменяет содержимое анонсируемых им bpdu так, чтобы анонсировать выигравшее устройство, а не себя. Обратите внимание, что BPDU не проходят сквозь устройства, которые поддерживают STP - они лишь, при определенных условиях, инициируют на "промежуточном" устройстве посылку собственных BPDU ([1], 8.3.2) и/или изменение содержимого BPDU посылаемых "промежуточным" устройством. В момент обновления конфигурации STP-совместимое устройство изменяет состояние своих портов - они поочередно принимают одно из следующих возможных значений ([1], 8.4):
Время, на которое порт попадает в то или иное состояние, определяется значениями пауз, которые передаются посредством C-BPDU вместе с остальными параметрами (см. раздел 6.4.7). Согласно стандарту, во время нахождения в состояниях Blocking, Listening и Learning пересылка не-STP пакетов не разрешена ([1], 8.4.1-8.4.3). В то же время, bpdu-пакеты не обрабатываются только в случае если порт выключен администратором ([1], 8.4.5). Это говорит о том, что если порты находятся в режимах Blocking, Listening или Learning - сеть работает только на STP протокол, но не на пользователя. Этим можно воспользоваться для организации атаки "отказ в обслуживании" (Denial of Service, DoS), в терминах [3]. Собственно, причина, по которой протокол работает именно таким образом ([1], 8.3.4), проста - все так организовано для того, чтобы избежать хаотичного дублирования и/или размножения пакетов в различные сегменты сети в момент перестройки ее топологии. Дублирование и/или размножение пакетов возможно, например, за счет возникновения временных колец, возникающих в процессе переключения состояния того или иного линка. Описание DoS атаки, а также величины параметров, необходимые для максимальной ее эффективности, см. в разделе 6. В силу того, что топология сети определяется при участии протокола STP возможна атака по схеме ложный объект РВС с навязыванием ложного пути (в терминологии [3]). Подробности см. в разделе 6.5. Следует отметить, что стандарт не уточняет термин LAN-сегмент в данном контексте, что еще раз указывает, что это вещь весьма относительная, так что состав соответствующих сетей будет меняться в зависимости от выбранной точки подключения. Вообще говоря, описываемые на примере Ethernet уязвимости протокола относятся (часть может быть применена практически без изменений алгоритма) к любым топологиям, на которых может работать STP. Как следствие, протокол и рассматриваемые атаки, требующие включенной поддержки STP, могут быть применены на любых сетевых топологиях, не допускающих логических колец). В [1] специально обращено внимание на то, что STP может ходить не только поверх Ethernet, но и поверх других сетей с другим принципом MAC. Для большей наглядности и лучшего понимания работы STP авторы включили примеры, изображенные на рисунках 1 и 4. Комментарии к рисунку 1 расположены в самом начале этой главы. Рассмотрим теперь работу STP более подробно, для чего обратимся к рисунку 2.
Каждый порт каждого моста имеет свою величину Path Cost, обозначенную как PC=XXX. Мост A является Root Bridge, т.к. имеет наименьшее значение Bridge Identifier. Для сети A (LAN A) Designated Bridge Port является порт 1 моста А. Один из портов каждого из четырех оставшихся мостов является Root Port (это порт, ближайший к Root Bridge). Мосты X и B предоставляют доступ к сети B с одинаковым параметром Path Cost. Однако, в данном случае, порт моста B выбран в качестве Designated Bridge Port, т.к. этот мост имеет меньшее значение Bridge Identifier. Порт моста C выбран в качестве Designated Bridge Port для сети C, т.к. он предоставляет более "дешевый" доступ к этой сети (стоимость пути через мосты C и B равна 200, а через мосты Y и B - 300).
В стабильном состоянии все мосты ожидают периодической посылки Root
Bridge специальных пакетов - Hello BPDU. Если в течение промежутка
времени, определяемого значением Max Age Time, таких пакетов от
Root Bridge не поступает, мост считает, что либо между ним и Root
Bridge нарушена связь, либо последний отключен. В этом случае мост
инициирует реконфигурацию топологии сети. Путем установки
соответствующих параметров можно регулировать, насколько быстро
мосты будут обнаруживать изменения в топологии и задействовать
запасные маршруты. На практике с регулировкой значений STP приходится
сталкиваться в основном в двух случаях - если в силу обстоятельств STP
переводит в режим "запасного" более быстрый линк и если сеть имеет
плохую сходимость на значениях по умолчанию из-за большого количества
устройств.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|