Петля коммутации
Петля коммутации (англ. Switching loop), также известная как бриджевая петля (англ. Bridging loop), — это опасная ситуация в коммутируемых компьютерных сетях (или при использовании нескольких сетевых мостов), которая в большинстве случаев приводит к полной остановке работы сети из-за её перегрузки. Петля коммутации возникает, когда два сетевых порта одного и того же коммутатора напрямую соединены между собой, либо между двумя коммутаторами установлены две и более активных связи. Такая петля приводит к существенной перегрузке сети путём постоянного дублирования пакетов несколькими способами.
Принцип работы и возникающие проблемы
Петля коммутации может вызывать ошибки в сети двумя основными способами, причём это происходит в течение долей секунды или нескольких секунд.
Если порты B и C одного коммутатора соединены между собой с помощью патч-корда, и от устройства A на любой из портов поступает широковещательный пакет второго уровня (который достаточно часто встречается, например, при разрешении адресов через ARP), происходит следующее: пакет должен быть отправлен на все устройства сети, то есть по всем портам, кроме порта, на который он пришёл. Таким образом, пакет (с адресом назначения FF:FF:FF:FF:FF:FF, то есть адресованный всем устройствам) будет также отправлен по двум соединённым друг с другом портам, а затем неизбежно вернётся обратно на коммутатор через ту же петлю. Таким образом, появляются две копии этого пакета с широковещательным адресом, которые нужно снова распространить по всем (прочим) портам. Все такие широковещательные пакеты продолжают с удвоением циркулировать по сети, быстро накапливаясь. Как только количество циркулирующих пакетов превышает возможности петли по «запасанию», внутренние буферы коммутатора начинают переполняться, после чего новые входящие пакеты вынужденно отбрасываются. Значимая полезная передача составляет лишь малую часть от общего потока пакетов, вероятность успешной доставки данных резко уменьшается. Обычно в течение нескольких секунд подключённая к коммутатору сеть оказывается полностью затопленной широковещательными пакетами. Эта ситуация получила название широковещательный шторм (broadcast storm).
Аналогичная ситуация возможна, если два коммутатора соединить между собой двумя или более кабелями без логической агрегации каналов или использования протокола «дерева связей». То же справедливо для петель, проходящих через несколько коммутаторов.
Коммутатор ведёт таблицу соответствия сетевых устройств и связанных с ними портов, чтобы передавать каждому только предназначенные ему пакеты.
Дублированные широковещательные пакеты из предыдущего примера всегда содержат MAC-адрес отправителя A. В результате этого коммутатор будет очень часто переопределять для соединённых портов соответствие физического адреса (MAC-адрес) — так как оба порта получают пакеты с одного и того же адреса отправителя, коммутатор считает, что устройство A физически подключено к ним обоим. Это приводит к случайному направлению всех пакетов, адресованных A, к портам B и C с вероятной потерей пакетов для самого A.
Аналогичная ситуация возможна и при использовании нескольких сетевых мостов, так как коммутатор логически представляет собой шину с мостом на каждый порт. Здесь действует правило: если между двумя точками есть несколько путей, возникает петля. Объясняется это тем, что мосты прозрачно пересылают широковещательные пакеты, а при совпадении MAC-адресов на обоих сторонах могут их дублировать.
Методы предотвращения
Более продвинутые коммутаторы поддерживают обнаружение петель на LLDP-уровне или предотвращают их с помощью протокола «дерева связей» или Shortest Path Bridging. Многие производители реализуют и собственные механизмы «Loop Protection», которые при помощи специальных контрольных кадров способны обнаруживать замкнутую петлю и при её выявлении автоматически отключать соответствующий порт. В противном случае единственный способ избежать появления петли коммутации — строго контролировать топологию сети и не создавать замыканий.
Распространённые заблуждения
Неверно полагать, что пакеты в петле коммутации будут циркулировать только до истечения TTL. На втором уровне модели OSI (Ethernet) поле TTL отсутствует. Введённое на третьем уровне (сетевом) поле TTL здесь не используется, так как коммутаторы (в отличие от маршрутизаторов) не анализируют содержимое пакета на этом уровне.
Литература
- Рюдигер Шрайнер. Компьютерные сети. От основ к приложениям. Carl Hanser Verlag, Мюнхен, 2009. С. 57 и далее.