Рассмотрим, допускается ли в Ethernet кольцевое соединение между коммутаторами. Например, в сети 4 коммутатора и они соединены 4 кабелями, так что образуется кольцо. Вопрос состоит в том, может ли работать такая сеть? К сожалению, такая сеть работать не может, потому что в ней возникает широковещательный шторм.
Широковещательный шторм
Рассмотрим, как образуется широковещательный шторм. Предположим, на верхний левый порт коммутатора 1 пришел кадр. И коммутатор 1 не знает, куда этот кадр передавать и у него нет соответствующей записи в таблице коммутации. В этом случае коммутатор 1 передает кадр на все порты, кроме того откуда этот кадр пришел.
Компьютеры, которые подключены к портам коммутатора увидят, что этот кадр предназначен не для них и просто отбросят их. А два порта на картинке ниже, подключены к другим коммутаторам и кадр через эти порты будет передан в другие коммутаторы 2 и 3.
Предположим, что у коммутаторов 2 и 3 тоже нет записей об адресе получателя этого кадра в таблице коммутации. Поэтому они вынуждены передавать этот кадр на все порты.
Как и на предыдущем этапе компьютеры отбросят кадры, которые предназначены не для них, а через соединение кадр будет передан на коммутатор 4.
Причем коммутатор 4 получит уже две копии одного и того же кадра. К сожалению, у коммутатора нет никакой возможности определить это две копии или это два разных кадра с одинаковыми адресами отправителя и получателя. Поэтому, каждый кадр также будет передан на все порты.
Кроме этого кадр 1 передастся в коммутатор 3, а кадр 2 передастся в коммутатор 2. Таким образом, кадры будут ходить по кругу и передаваться на все порты.
Через некоторое время таких кадров будет очень много и сеть окажется неработоспособной. Такая ситуация называется широковещательный шторм и из-за него кольцевое соединение в сети Ethernet невозможно.
Протокол STP
Протокол связующего дерева (Spanning Tree Protocol) или иногда называют протокол остовного дерева. Протокол STP позволяет отключать на программном уровне некоторые соединения между коммутаторами, чтобы не образовывалось кольцо.
Связующее дерево или остовное дерево, как его чаще называют в математике это подграф без циклов, содержащий все вершины исходного графа. Связующее дерево содержит все наши исходные коммутаторы, но при этом в нем циклов, т.е. Ethernet в такой конфигурации точно будет работать.
Протокол STP определен в стандарте IEEE 802.1D. Благодаря этому протоколу можно создавать несколько соединений между коммутаторами. Это повышает надежность работы сети. Если по какой-то причине одно соединение разорвется, то можно будет использовать другое соединение.
Еще одно преимущество протокола STP в том, что он защищает от случайных ошибок в конфигурации ethernet. Конечно же никто не хочет, чтобы вся его сеть ethernet остановилась, если по ошибке включили кабель не в тот коммутатор и случайно создали кольцо. Протокол STP защищает от такой ситуации.
Место протокола STP в модели OSI
В модели взаимодействия открытых систем протокол STP находится на канальном уровне, он реализуется на коммутаторах.
Работа протокола STP
Рассмотрим, как работает протокол STP. В примере с 4-мя коммутаторами одно из соединений (между коммутатором 3 и 4) будет отключено на программном уровне.
Кабель между коммутаторами есть, но он не используется для передачи данных. Таким образом широковещательный шторм не возникнет. В случае, если одно из существующих соединений разорвется.
Протокол STP может автоматически включить заблокированное соединение, и коммутатор по-прежнему сможет передавать данные в сеть.
Этапы работы протокола STP
Работа протокола STP состоит из трех этапов. На первом этапе выбирается корневой коммутатор. На втором этапе рассчитываются кратчайшие пути от всех коммутаторов в сети до корневого коммутатора. На 3 этапе отключаются все остальные соединения, кроме кратчайших.
Протокол STP придумала Ради Перлман и написала стихотворение, как протокол работает.
Сообщения протокола STP
Чтобы реализовать протокол STP, коммутаторы обмениваются между собой сообщениями, которые называются Bridge Protocol Data Units (BPDU). Протокол STP был разработан в 80-е годы, поэтому вместо термина коммутатор switch используется термин bridge мост, который был более популярен в то время.
Такие сообщения отправляют все коммутаторы в сети, которые поддерживают протокол STP каждые 2 секунды.
В качестве адреса получателя используется групповой МАК-адрес STP. Все Ethernet коммутаторы, которые поддерживают STP принимают и обрабатывают кадры, которые приходят на этот групповой адрес (01:80:С2:00:00:00).
Выбор корневого коммутатора
Подробно рассмотрим, как работает протокол STP. На первом этапе выполняется выбор корневого коммутатора. Выбор выполняется по идентификатору, в качестве корневого выбирается коммутатор, у которого этот идентификатор минимальный.
Сейчас в качестве идентификатора коммутаторов используется его МАК-адрес, но можно повлиять на значение идентификатора вручную, чтобы выбрать в качестве корневого наиболее мощный коммутатор в вашей сети, а не тот коммутатор, у которого случайно оказался самый маленький МАК-адрес.
Предположим, что в нашей сети коммутаторы используют в качестве идентификаторов простые, целые числа. У коммутатора 1 идентификатор 4, у коммутатора 2 BID=2 и так далее, смотри по картинке ниже. В качестве корневого по протоколу будет выбран коммутатор 4 с идентификатором 1.
Как происходит выбор корневого коммутатора? На первом этапе коммутаторы ничего не знают про всю остальную сеть, соответственно, каждый коммутатор считает себя корневым и рассылает всем своим соседям сообщение, что он корневой коммутатор. Коммутатор 1 отправит такие сообщения на коммутатор 2 и 3, а 2 и 3 отправят сообщение на коммутаторы 1 и 4. Получив сообщение от своих соседей, коммутаторы сравнивают идентификатор сообщений со своим идентификатором.
Например, коммутатор 2 получит сообщение от коммутаторов с идентификатором BID=4 и BID=1. Он поймет, что из его соседей и его самого, коммутатор с минимальным идентификатором это коммутатор 4.
И на следующем этапе коммутаторы будут рассылать сообщения не со своим номером, а с минимальным номером корневого коммутатора, который они узнали от своих соседей.
Например, коммутаторы 2 и 3 получили сообщение от четвертого, который меньший чем их идентификатор и рассылают, что теперь корневой коммутатор это коммутатор с номером 4 BID=1. Коммутатор 1 получил сообщение от коммутаторов 2 и 3, он выбрал минимальное значение BID=2 и теперь рассылает, что корневой коммутатор, по его мнению, это коммутатор с номером 2.
На следующем этапе информация о том, что корневой коммутатор это коммутатор с номером 4, доходит до 1 коммутатора в нашей сети и теперь все коммутаторы считают, что корневой коммутатор это коммутатор 4 с BID=1. На этом выбор корневого коммутатора заканчивается.
Видео о работе корневого коммутатора
Расчет кратчайших путей
Теперь необходимо рассчитать кратчайшие пути от всех коммутаторов до корневого коммутатора. Длина пути между коммутаторами определяется в зависимости от двух параметров:
- количество промежуточных коммутаторов;
- скорость соединений между промежуточными коммутаторами.
Расчет путей до корневого коммутатора реализуется по схеме похожей на выбор корневого коммутатора. Все коммутаторы рассылают на все порты управляющее сообщение протокола STP с расстоянием от них до корневого коммутатора.
Расстояние между коммутаторами определено в стандарте IEEE 802.1D. Предположим, что у нас соединение с коммутаторами 1 Гбит/с в этом случае в качестве значения расстояния мы используем число 4,как в таблице ниже.
На первом этапе, коммутаторы, которые подключены непосредственно к корневому коммутатору, определяют скорость соединения с этим коммутатором и выбирают соответствующее значение расстояния.
В нашем случае скорость соединения 1 Гбит/с значения расстояния равно 4.Затем это кратчайшее расстояние до корневого коммутатора рассылается в четвертый коммутатор. 4-эй коммутатор берет это значение 4, определяет скорость соединения с этими коммутаторами 1 Гбит/с расстояние 4 и суммарное расстояние 8. Теперь мы знаем расстояние от всех портов до корневого коммутатора.
Следующая задача отключить одно из соединений, чтобы не было кольца. Согласно правилам протокола STP, если у нас есть два пути до корневого коммутатора, мы должны выбрать тот путь, у которого расстояние минимально, а другой путь отключить. Но в нашем примере два пути с одинаковым расстоянием 8. В этом случае отключается тот путь, у которого больше значение порта.
Если порты нумеруются слева направо, то будет отключен порт справа.
На этом работа протокола STP завершена, у нас образовалось связующее дерево. Все четыре коммутатора соединены между собой и цикла нет. Если произойдет разрыв одного из соединений, то теперь у нас будет один путь у которого расстояние 8.
Поэтому мы имеем полное право его выключить использовать для передачи данных.
Состояние портов в STP
Если мы используем протокол STP, то при подключении устройства к коммутатору нельзя сразу же начать передавать данные, ведь там может оказаться другой коммутатор и новое соединение может привести к созданию кольца. Для того чтобы избежать этой проблемы, коммутаторы которые поддерживают протокол STP используют несколько режимов работы портов.
- На первом этапе, когда кабель только что подключен к порту коммутатора, порт работает в режиме Listening — порт обрабатывает управляющее сообщение протокола STP, но не передаёт никакие данные.
- На втором этапе, который называется Learning — порт принимает данные, но никуда их не передает. Из принятых кадров извлекаются адреса отправителей, которые используются для создания таблицы коммутации.
- На следующем этапе возможно два варианта. Если выяснилось, что к порту подключен компьютер или коммутатор без образования кольца, то порт переходит в состояние Forwarding — порт принимает и передает данные, а также принимает и передает управляющее сообщение протоколу STP.
- Но если оказалось, что к порту подключен коммутатор и образовалось кольцо, то порт переходит в состояние Blocking — порт блокируется на программном уровне для того, чтобы не было кольца.
- Кроме этого у администратора есть возможность принудительно выключить порт, переведя его в состояние Disabled. В этом случае данные не будут передаваться независимо от того, что подключено к порту компьютер, коммутатор, есть кольцо или нет.
Развитие STP
В протоколе STP переход от состояния, когда Вы только что включили кабель к состоянию Forwarding занимает достаточно долгое время, примерно 30 секунд. В 80-е годы, когда разрабатывали протокол это было допустимо. Но сейчас сети стали гораздо больше и изменяются чаще, поэтому ждать 30 секунд пока сработает STP уже нельзя.
Поэтому был предложен новый вариант протокола STP, который называется RSTP (Rapid Spanning Tree Protocol) – быстрый протокол связующего дерева. Он работает по похожим принципам, но срабатывает всего лишь за несколько секунд. Протокол RSTP определен стандартом IEEE 802.1w.
Кроме этого возможны проблемы при взаимодействии протокола STP с технологией VLAN. Вы можете попытаться создать несколько соединений между коммутаторами, которые будут принадлежать разным Vlan. Но STP в исходном варианте ничего не знает про vlan поэтому соединение между коммутаторами в разных vlan будут отключены.
Для того, чтобы можно было использовать технологию vlan совместно с протоколом STP необходимо, чтобы связующее дерево строилось для каждого vlan отдельно. Эту возможность реализовали в протоколе Multiple Spanning Tree Protocol (MSTP), который определен в стандарте 802.1s.