2.3. Протокол spt для мостов и коммутаторов
Функции обучения, фильтрации и передачи основаны на существовании одного логического пути между любыми двумя узлами сети. Наличие нескольких путей между устройствами, известных также как «активные петли», создает проблемы для сетей, построенных на основе мостов и коммутаторов. Под «активными петлями» понимаются логические и физические петли. Логические петли могут создаваться администратором сети специально для образования резервных связей.
Протокол STP [2] (в некоторых технических документах может встретиться название Spanning Tree Algorithm - STA) был разработан Digital Equipment Corporation, а впоследствии опубликован комитетом IEEE 802 в спецификации IEEE 802.1d. Основная цель разработки протокола была в устранении логических и физических петель в сетях, построенных с использованием мостов. Кроме того, протокол автоматически переконфигурирует сетевую топологию в случае обрывов линий связи или при аппаратных ошибках оборудования.
Основные определения
В сети определяется корневой коммутатор (root switch), от которого строится дерево.
Для каждого коммутатора определяется корневой порт (root port) - это порт, который имеет кратчайшее из всех портов данного коммутатора расстояние до корневого коммутатора (точнее, до любого из портов корневого коммутатора).
Расстояние до корня (root path cost) определяется как суммарное условное время на передачу данных от порта данного коммутатора до порта корневого коммутатора. Условное время сегмента (designated cost) рассчитывается как время, затрачиваемое на передачу одного бита информации в 10-наносекундных единицах между непосредственно связанными по сегменту сети портами. Так, для сегмента Ethernet это время равно 10 условным единицам, а для сегмента Token Ring 16 Мб/с - 6.25.
Для каждого логического сегмента сети выбирается так называемый назначенный коммутатор (designated switch), один из портов которого будет принимать пакеты от сегмента и передавать их в направлении корневого коммутатора через корневой порт данного коммутатора, а также принимать пакеты для данного сегмента, пришедшие на корневой порт со стороны корневого коммутатора. Такой порт называется назначенным портом (designated port). Назначенный порт сегмента имеет наименьшее расстояние до корневого коммутатора, среди всех портов, подключенных к данному сегменту. Назначенный порт у сегмента может быть только один. У корневого коммутатора все порты являются назначенными, а их расстояние до корня полагается равным нулю. Корневого порта у корневого коммутатора нет.
Можно доказать, что если определить каким-либо образом корневой коммутатор, то зная пропускную способность каждого сегмента и связи между портами коммутаторов и сегментов, можно однозначно определить по расстоянию до корня корневые порты коммутаторов и назначенные порты сегментов, и если все остальные порты коммутаторов, кроме корневых и назначенных, заблокировать, то получится дерево без петель.
Для того, чтобы коммутаторы могли идентифицировать себя и своих ближних и дальних соседей по сети, каждой коммутатор, поддерживающий STA, имеет уникальный идентификатор. Этот идентификатор состоит из двух частей. Младшую часть составляет MAC-адрес коммутатора (не отдельного порта коммутатора, а всего коммутатора в целом, порты коммутаторов MAC-адресов не имеют), имеющий длину 6 байтов. Старшая часть, имеющая длину 2 байта, является приоритетом данного коммутатора, и его может изменять администратор сети по своему усмотрению (напомним, что MAC-адрес устанавливается производителем для обеспечения его всемирной уникальности).
Идентификатор коммутатора играет определяющую роль при выборе корневого коммутатора. Приоритет имеет преимущественное значение в этом выборе - корневым выбирается коммутатор, имеющий наименьшее значение идентификатора, а так как поле приоритета находится в старших разрядах, то его значение подавляет значение MAC-адреса. Если же администратор назначил всем коммутаторам равный приоритет (то есть не захотел влиять на выбор корневого коммутатора), то корневым будет выбран коммутатор с наименьшим значением MAC-адреса.
Порты внутри каждого коммутатора также имеют свои идентификаторы. Идентификатор порта состоит из 2 байтов, первый из которых (старший) может изменяться администратором и является приоритетом порта, а второй представляет собой порядковый номер порта для данного коммутатора (номера портов начинаются с единицы). Идентификатор порта используется при выборе корневого и назначенного порта коммутатора - если несколько портов имеют одинаковое расстояние до корня, то выбирается тот порт, идентификатор которого меньше. Аналогично случаю с идентификатором коммутатора, приоритет порта может быть задан администратором для того, чтобы данный порт получил преимущество перед другими.
