Петля маршрутизации

Петля маршрутизации (англ. routing loop) — распространённая проблема, возникающая в различных типах сетей, особенно в компьютерных сетях. Петля маршрутизации образуется в случае сбоя в работе маршрутизирующего алгоритма, в результате чего в группе узлов маршрут к определённому назначению замыкается в круг[1].

В простейшем случае петли маршрутизации размером в два узла узел A считает, что путь к некоторому пункту назначения (обозначим его как C) лежит через соседний узел B. В то же время узел B уверен, что путь к C начинается с узла A.

Таким образом, когда трафик, предназначенный для C, поступает либо на A, либо на B, он будет бесконечно циркулировать между этими узлами, если не предусмотрен специальный механизм для предотвращения такого поведения.

Как формируется петля маршрутизации

Например, на данной иллюстрации узел A передаёт данные к узлу C через узел B. Если соединение между B и C обрывается, а B ещё не уведомил A о разрыве, то A продолжает отправлять данные B, считая, что маршрут A-B-C работает и имеет наименьшую стоимость. Узел B знает о разрыве и пытается отправить данные к C через A, возвращая исходные данные обратно на A. Затем A принимает собственные данные обратно от B и сверяется со своей таблицей маршрутизации. В ней всё ещё записан маршрут к C через B (так как A не уведомлен о разрыве), поэтому данные снова отправляются к B, создавая бесконечную петлю. Такая проблема маршрутизации также называется «петля на двух узлах».

Персистентность петли маршрутизации

Рассмотрим ситуацию, когда одновременно исчезают оба соединения: от A к C и от B к C (это возможно, если, например, узел C вышел из строя). В такой ситуации A предполагает, что C доступен через B, а B предполагает, что C доступен через A. В простом протоколе доступности, таком как EGP, петля маршрутизации может сохраняться бесконечно долго.

В наивном протоколе на основе вектор-расстояний, например, в протоколе маршрутизационной информации, петля будет существовать, пока метрика для C не достигнет «бесконечности» (максимальное количество маршрутизаторов, которые может пройти пакет в RIP, равно 15; значение 16 считается бесконечным и такой пакет отбрасывается).

Предотвращение и методы смягчения

В протоколах маршрутизации с отслеживанием состояния канала, таких как OSPF или IS-IS, петля маршрутизации исчезает, как только новая топология сети распространяется по всем маршрутизаторам в пределах области маршрутизации. При условии достаточно надёжной сети это происходит в течение нескольких секунд[2].

Новые протоколы маршрутизации типа вектор-расстояний, такие как EIGRP, DSDV и Babel, изначально содержат механизмы предотвращения петель: в них реализованы алгоритмы, гарантирующие невозможность даже кратковременного появления петель маршрутизации. Более старые протоколы, такие как RIP и IGRP, не поддерживают новейшие методы предотвращения петель и используют только смягчающие техники, такие как разделённая горизонталь, отравление маршрута и таймеры удержания (holddown timers).

Примечания