К сожалению, поведение дистанционно-векторных протоколов (и в частности, протокола 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 не будет включен в этот вектор, потому что дейтаграммы в сеть А отправляются узлом ?