Зацикливание
К сожалению, поведение дистанционно-векторных протоколов (и в частности, протокола RIP) при изменении топологии системы не всегда корректно и предсказуемо.
Рассмотрим вышеописанную ситуацию с отсоединением узла ?
от сети А.
Рис. 4.2.1. Изменение состояния RIP-системы
Мы предполагали, что узел ?
не отправлял дейтаграмм через узел ?
(и, следовательно, изменение таблицы маршрутов в узле ?
не повлияло на таблицу узла ?
). Предположим теперь, что ?
отправлял дейтаграммы в сеть А через ?
, то есть таблица в узле ?
имела вид:
A=2a
?
B=1a
?
C=1a
?
D=2a
?
Е=1a
?
После отсоединения ?
от сети А узел ?
получает от ?
вектор (A=16,B=1,C=16,D=16,E=2). Проанализировав этот вектор, ?
делает вывод, что все указанные в нем расстояния больше значений, содержащихся в его маршрутной таблице, на основании чего этот вектор узлом ?
игнорируется.
В свою очередь узел ?
рассылает в сети В, С, Е вектор (A=2,B=1,C=1,D=2,E=1). Узел ?
получает этот вектор, увеличивает расстояния на 1: (А=3,В=2,С=2,D=3,E=2) и замечает, что расстояния А=3, С=2 и D=3 меньше бесконечности, следовательно, соответствующие записи таблицы маршрутов в узле ?
модифицируются и она принимает вид:
A=3a
?
B=1a
?
C=2a
?
D=3a
?
Е=2a
?
Очевидно, после этого содержимое таблиц узлов ?
и ?
стабилизируется.
Рассмотрим теперь записи о достижении сети А в таблицах маршрутизаторов ?
и ?
.
В узле ?
: A=3a
?
В узле ?
: A=2a
?
Таким образом, возникло зацикливание: данные, адресованные в сеть А, будут пересылаться между узлами ?
и ?
до тех пор, пока не истечет время жизни дейтаграмм и они не будут уничтожены.
Для того, чтобы избежать зацикливания, в алгоритм рассылки векторов расстояний вносятся следующие дополнения.
1. Если дейтаграммы, адресованные в сеть Х, посылаются через маршрутизатор G, находящийся в сети N, то в векторе расстояний, рассылаемом в сети N, расстояние до сети Х не указывается.
В нашем примере узел ?
будет рассылать в сети В вектор (B=1,C=1,D=2,E=1). Элемент А=2 не будет включен в этот вектор, потому что дейтаграммы в сеть А отправляются узлом ?
через узел ?
, а узел ?
находится в сети В. При рассылке узлом ?
вектора расстояний в другие сети элемент A=1 будет указан (но не будут указаны какие-то другие элементы).
2. Если маршрутизатор G объявляет новое расстояние до сети Х, то это расстояние вносится в таблицы маршрутов узлов, отправляющих дейтаграммы в сеть X через G, независимо от того, больше оно или меньше уже внесенного в таблицы расстояния.
В нашем примере это означает, что если в маршрутной таблице узла ?
записано А=1a
?
и ?
получает от ?
вектор с элементом А=16, то несмотря на то, что 1 меньше бесконечности, узел ?
модифицирует запись в таблице: А=16a
?
.
Очевидно, что при выполнении вышеуказанных условий зацикливания, рассмотренного в примере, не образуется и строятся корректные маршруты. Однако таким образом устраняются далеко не все случаи зацикливания.
Существует модификация дополнения 1, позволяющая ликвидировать более сложные особые ситуации, в том числе, некоторые случаи счета до бесконечности (см. также следующий пункт):
1А. Если дейтаграммы, адресованные в сеть Х, посылаются через маршрутизатор G, находящийся в сети N, то в векторе расстояний, рассылаемом в сети N, расстояние до сети Х полагается равным бесконечности.
Тем не менее и в этом случае особые ситуации все еще остаются.