Поля пакета BPDU перечислены ниже.
• Идентификатор версии протокола STA — 2 байта. Коммутаторы должны поддерживать одну и ту же версию протокола STA, иначе может установиться активная конфигурация с петлями.
• Тип BPDU — 1 байт. Существуют два типа BPDU — конфигурационный BPDU,
то есть заявка на возможность стать корневым коммутатором, на основании
которой происходит определение активной конфигурации, и BPDU уведомления о реконфигурации, которое посылается коммутатором, обнаружившим событие, требующее проведения реконфигурации — отказ линии связи, отказ порта,
изменение приоритетов коммутатора или портов.
• Флаги — 1 байт. Один бит содержит флаг изменения конфигурации, второй —
флаг подтверждения изменения конфигурации.
• Идентификатор корневого коммутатора — 8 байт.
• Расстояние до корня — 2 байта.
• Идентификатор коммутатора — 8 байт.
• Идентификатор порта — 2 байта.
• Время жизни сообщения — 2 байта. Измеряется в единицах по 0,5 с, служит для
выявления устаревших сообщений. Когда пакет BPDU проходит через коммутатор, тот добавляет ко времени жизни пакета время его задержки данным коммутатором.
• Максимальное время жизни сообщения — 2 байта. Если пакет BPDU имеет время жизни, превышающее максимальное, то он игнорируется коммутаторами.
• Интервал hello, через который посылаются пакеты BPDU.
• Задержка смены состояний — 2 байта. Задержка определяет минимальное время перехода портов коммутатора в активное состояние. Такая задержка необходима, чтобы исключить возможность временного возникновения петель при
неодновременной смене состояний портов во время реконфигурации.
У пакета BPDU уведомления о реконфигурации отсутствуют все поля, кроме
двух первых.
Идентификаторы коммутаторов состоят из 8 байт, причем младшие 6 являются
МАС-адресом блока управления коммутатора. Старшие 2 байта в исходном состоянии заполнены нулями, но администратор может изменить значение этих байтов,
тем самым назначив определенный коммутатор корневым.
После инициализации каждый коммутатор сначала считает себя корневым.
Поэтому он начинает через интервал hello генерировать через все свои порты сообщения BPDU конфигурационного типа. В них он указывает свой идентификатор в
качестве идентификатора корневого коммутатора (и в качестве идентификатора
данного коммутатора также), расстояние до корня устанавливается в 0, а в качестве идентификатора порта указывается идентификатор того порта, через который
передается BPDU.
Как только коммутатор получает BPDU, в котором имеется
идентификатор корневого коммутатора, со значением, меньшим его собственного,
он перестает генерировать свои собственные кадры BPDU, а начинает ретранслировать только кадры нового претендента на звание корневого коммутатора.
При ретрансляции кадров каждый коммутатор наращивает расстояние до корня,
указанное в пришедшем BPDU, на условное время сегмента, по которому принят
данный кадр. Тем самым в кадре BPDU, по мере прохождения через коммутаторы,
накапливается расстояние до корневого коммутатора.
Ретранслируя кадры, каждый коммутатор для каждого своего порта запоминает минимальное расстояние до корня, встретившееся во всех принятых этим портом кадрах BPDU. При завершении процедуры установления конфигурации
покрывающего дерева (по времени) каждый коммутатор находит свой корневой
порт — это порт, для которого минимальное расстояние до корня оказалось меньше, чем у других портов.
Кроме корневого порта коммутаторы распределенным образом выбирают для
каждого сегмента сети назначенный порт. Для этого они исключают из рассмотрения свой корневой порт (для сегмента, к которому он подключен, всегда существует другой коммутатор, который ближе расположен к корню), а для всех своих
оставшихся портов сравнивают принятые по ним минимальные расстояния до корня
с расстоянием до корня своего корневого порта.
Если у какого-либо своего порта
принятые им расстояния до корня больше, чем расстояние маршрута, пролегающего через свой корневой порт, то это значит, что для сегмента, к которому подключен данный порт, кратчайшее расстояние к корневому коммутатору ведет именно
через данный порт. Коммутатор делает все свои порты, у которых такое условие
выполняется, назначенными.
Если в процессе выбора корневого порта или назначенного порта несколько
портов оказываются равными по критерию кратчайшего расстояния до корневого
коммутатора, то выбирается порт с наименьшим идентификатором.
Затем все порты, кроме корневого и назначенных, переводятся каждым коммутатором в заблокированное состояние. На этом построение покрывающего дерева
заканчивается.
В процессе нормальной работы корневой коммутатор продолжает генерировать
служебные кадры BPDU, а остальные коммутаторы продолжают их принимать
своими корневыми портами и ретранслировать назначенными.
Если у коммутатора нет назначенных портов, то они все равно продолжают принимать участие в работе протокола Spanning Tree, принимая служебные
кадры корневым портом. Если по истечении тайм-аута корневой порт любого коммутатора сети не получает служебный кадр BPDU, то он инициализирует новую
процедуру построения покрывающего дерева, оповещая об этом другие коммутаторы BPDU уведомления о реконфигурации. Получив такой кадр, все коммутаторы начинают снова генерировать BDPU конфигурационного типа, в результате
чего устанавливается новая активная конфигурация.
Коммутаторы могут выполнять трансляцию одного протокола канального уровня
в другой, например Ethernet в FDDI, Fast Ethernet в Token Ring и т. п. При этом
они работают по тем же алгоритмам, что и транслирующие мосты, то есть в соответствии со спецификациями IEEE 802.1Н и RFC 1042, определяющими правила
преобразования полей кадров разных протоколов.
Трансляцию протоколов локальных сетей облегчает тот факт, что наиболее сложную работу, которую при объединении гетерогенных сетей часто выполняют маршрутизаторы и шлюзы, а именно работу по трансляции адресной информации, в
данном случае выполнять не нужно. Все конечные узлы локальных сетей имеют
уникальные адреса одного и того же формата независимо от поддерживаемого протокола. Поэтому адрес сетевого адаптера Ethernet понятен сетевому адаптеру FDDI,
и они могут использовать эти адреса в полях своих кадров не задумываясь о том,
что узел, с которым они взаимодействуют, принадлежит сети, работающей по другой технологии.
Поэтому при согласовании протоколов локальных сетей коммутаторы не строят таблиц соответствия адресов узлов, а переносят адреса назначения и источника
из кадра одного протокола в кадр другого.
Кроме изменения порядка бит при передаче байт адреса трансляция протокола Ethernet (и Fast Ethernet, который использует формат кадров Ethernet) в протоколы FDDI и Token Ring включает выполнение перечисленных ниже (возможно, не
всех) операций.
• Вычисление длины поля данных кадра и помещение этого значения в поле Length
при передаче кадра из сети FDDI или Token Ring в сеть Ethernet 802.3 (в кадрах
FDDI и Token Ring поле длины отсутствует).
• Заполнение полей статуса кадра при передаче кадров из сети FDDI или Token
Ring в сеть Ethernet. Кадры FDDI и Token Ring имеют два бита, устанавливаемые станцией, которой предназначался кадр, — бит распознавания адреса А и
бит копирования кадра С. При получении кадра станция должна установить
эти два бита, чтобы кадр, вернувшийся по кольцу к сгенерировавшей его станции, принес данные обратной связи. При передаче коммутатором кадра в другую сеть нет стандартных правил для установки бит А и С в кадре, который
возвращается по кольцу к станции-источнику. Поэтому производители коммутаторов решают эту проблему по своему усмотрению.
• Отбрасывание кадров, передаваемых из сетей FDDI или Token Ring в сеть
Ethernet с размером поля данных большим, чем 1500 байт, так как это максимально возможное значение поля данных для сетей Ethernet. В дальнейшем, не
дождавшись ответа от станции назначения из сети Ethernet, протокол верхнего
уровня станции из сети FDDI, возможно, уменьшит размер передаваемых в
одном кадре данных, и тогда коммутатор сможет передавать кадры между этими станциями. Другим вариантом решения проблемы является поддержка
коммутатором IP-фрагментации, но это требует, во-первых, реализации в коммутаторе протокола сетевого уровня, а во-вторых, поддержки протокола IP взаимодействующими узлами транслируемых сетей.
• Заполнение поля Type (тип протокола в поле данных) кадра Ethernet II при
приходе кадров из сетей, поддерживающих кадры FDDI или Token Ring, в
которых это поле отсутствует, зато имеются поля DSAP и SSAP, выполняющие то же назначение, но с другими кодами для обозначения протоколов. Для
упрощения трансляции спецификация RFC 1042 предлагает всегда использовать в сетях FDDI и Token Ring кадры с заголовками LLC/SNAP, которые
имеют то же поле Type и с теми же значениями, что и кадры Ethernet II. При
преобразовании кадров значение из поля Type заголовка LLC/SNAP переносится в поле Type кадра Ethernet II, и наоборот. Если в сети Ethernet имеются форматы кадров, отличные от Ethernet II, то они также должны иметь заголовок LLC/SNAP.
• Пересчет контрольной суммы кадра в соответствии со сформированными значениями служебных полей кадра.
Многие коммутаторы позволяют администраторам задавать дополнительные условия фильтрации кадров наряду со стандартными условиями их фильтрации в
соответствии с информацией адресной таблицы. Пользовательские фильтры предназначены для создания дополнительных барьеров на пути кадров, которые ограничивают доступ определенных групп пользователей к определенным службам
сети.
Наиболее простыми являются пользовательские фильтры на основе МАС-адресов станций. Так как МАС-адреса — это та информация, с которой работает коммутатор, то он позволяет задавать такие фильтры в удобной для администратора форме,
возможно, проставляя некоторые условия в дополнительном поле адресной таблицы, подобно тем, которые были указаны в адресной таблице моста System 3000 на
рис. 4.20 — например, отбрасывать кадры с определенным адресом. При этом пользователю, работающему на компьютере с данным МАС-адресом, полностью запрещается доступ к ресурсам другого сегмента сети.
Часто администратору требуется задать более тонкие условия фильтрации,
например запретить некоторому пользователю печатать свои документы на определенном сервере печати NetWare чужого сегмента, а остальные ресурсы этого сегмента сделать доступными. Для реализации такого фильтра нужно запретить передачу
кадров с определенным МАС-адресом, в которых вложены пакеты IPX, в поле «номер сокета» которых будет указано значение, соответствующее службе печати NetWare.
Коммутаторы не анализируют протоколы верхних уровней, такие как IPX, поэтому
администратору приходится для задания условий такой фильтрации вручную определять поле, по значению которого нужно осуществлять фильтрацию, в виде пары
«смещение - размер» относительно начала поля данных кадра канального уровня, а
затем еще указать в шестнадцатеричном формате значение этого поля для службы
печати.
Обычно условия фильтрации записываются в виде булевых выражений, формируемых с помощью логических операторов AND и OR.
Наложение дополнительных условий фильтрации может снизить производительность коммутатора, так как вычисление булевых выражений требует проведения дополнительных вычислений процессорами портов.
Построение сетей на основе коммутаторов позволяет использовать приоритезацию
графика, причем делать это независимо от технологии сети. Эта новая возможность (по сравнению с сетями, построенными целиком на концентраторах) является следствием того, что коммутаторы буферизуют кадры перед их отправкой на
другой порт.
Коммутатор обычно ведет для каждого входного и выходного порта
не одну, а несколько очередей, причем каждая очередь имеет свой приоритет обработки. При этом коммутатор может быть сконфигурирован, например, так, чтобы передавать один низкоприоритетный пакет на каждые 10 высокоприоритетных
пакетов.
Поддержка приоритетной обработки может особенно пригодиться для приложений, предъявляющих различные требования к допустимым задержкам кадров и
к пропускной способности сети для потока кадров.
Приоритезация графика коммутаторами сегодня является одним из основных
механизмов обеспечения качества транспортного обслуживания в локальных сетях.
Это, естественно, не гарантированное качество обслуживания, а только механизм
best effort — «с максимальными усилиями». К каким уровням задержек приводит
приписывание того или иного уровня приоритета кадру, какую пропускную способность обеспечивает приоритет потоку кадров — схема приоритезации не говорит.
Выяснить последствия ее применения можно только путем проведения натурных
экспериментов или же с помощью имитационного моделирования. Ясно только
одно — более приоритетные кадры будут обрабатываться раньше менее приоритетных, поэтому все показатели качества обслуживания у них будут выше, чем у менее приоритетных. Остается вопрос — насколько?
Гарантии качества обслуживания
дают другие схемы, которые основаны на предварительном резервировании качества обслуживания. Например, такие схемы используются в технологиях глобальных сетей frame relay и ATM или в протоколе RSVP для сетей TCP/IP. Однако для
коммутаторов такого рода протоколов нет, так что гарантий качества обслужива
ния они пока дать не могут.
Основным вопросом при приоритетной обработке кадров коммутаторами является вопрос назначения кадру приоритета. Так как не все протоколы канального
уровня поддерживают поле приоритета кадра, например у кадров Ethernet оно
отсутствует, то коммутатор должен использовать какой-либо дополнительный механизм для связывания кадра с его приоритетом.
Наиболее распространенный способ — приписывание приоритета портам коммутатора. При этом способе коммутатор
помещает кадр в очередь кадров соответствующего приоритета в зависимости от
того, через какой порт поступил кадр в коммутатор. Способ несложный, но недостаточно гибкий — если к порту коммутатора подключен не отдельный узел, а
сегмент, то все узлы сегмента получают одинаковый приоритет.
Многие компании, выпускающие коммутаторы, реализовали в них ту или иную
схему приоритетной обработки кадров. Примером фирменного подхода к назначению приоритетов на основе портов является технология РАСЕ компании 3Com.
Более гибким является назначение приоритетов кадрам в соответствии с достаточно новым стандартом IEEE 802.1р.
Этот стандарт разрабатывался совместно со
стандартом 802.10, который рассматривается в следующем разделе, посвященном
виртуальным локальным сетям. В обоих стандартах предусмотрен общий дополнительный заголовок для кадров Ethernet, состоящий из двух байт. В этом дополнительном заголовке, который вставляется перед полем данных кадра, 3 бита
используются для указания приоритета кадра. Существует протокол, по которому
конечный узел может запросить у коммутатора один из восьми уровней приоритета кадра.
Если сетевой адаптер не поддерживает стандарт 802.1р, то коммутатор
может назначать приоритеты кадрам на основе порта поступления кадра. Такие
помеченные кадры будут обслуживаться в соответствии с их приоритетом всеми
коммутаторами сети, а не только тем коммутатором, который непосредственно
принял кадр от конечного узла. При передаче кадра сетевому адаптеру, не поддерживающему стандарт 802.1р, дополнительный заголовок должен быть удален.