EIGRP – это дистанционно-векторный протокол маршрутизации, изначально разработанный Cisco. Одним из ключевых отличий от предшественника, IGRP, является использование DUAL – алгоритма, который позволяет исключить появление постоянных петель маршрутизации в топологии. Однако найти корректное определение одного из основных параметров DUAL, feasible distance (FD), оказывается подчас непростой задачей. Обратимся к определению на официальном сайте:

“Feasible distance is the best metric along a path to a destination network, including the metric to the neighbor advertising that path.“

Перевод: feasible distance – это наилучшее значение метрики до сети назначения, включающее значение метрики до соседа, который анонсирует соответствующий маршрут.

Такое определение справедливо для большинства случаев, но, к сожалению, далеко не для всех. Несмотря на то, что корректное определение можно найти на просторах интернета, попробуем выяснить, что именно не так с определением выше. Ниже лабораторная схема:

На каждом из маршрутизаторов настроен соответствующий loopback (например, на R1 – с адресом 1.1.1.1/32). В сети, очевидно, используется EIGRP в качестве протокола маршрутизации без каких-либо изысков в настройке:

R3#sho run | section router eigrp
router eigrp 1
 network 0.0.0.0

В рамках данной статьи основной интерес представляет маршрут до 3.3.3.3/32 с точки зрения R1:

R1#deb eigrp fsm
EIGRP Finite State Machine debugging is on

R1#sho ip eigrp topology 3.3.3.3/32
EIGRP-IPv4 Topology Entry for AS(1)/ID(1.1.1.1) for 3.3.3.3/32
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 158720
  Descriptor Blocks:
  192.168.12.2 (FastEthernet0/0), from 192.168.12.2, Send flag is 0x0
      Composite metric is (158720/156160), route is Internal
      Vector metric:
        Minimum bandwidth is 100000 Kbit
        Total delay is 5200 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 2
        Originating router is 3.3.3.3

По умолчанию существуют 2 способа повлиять на значение метрики EIGRP: изменить пропускную способность канала или же его задержку. В нашем случае изменение пропускной способности позволяет получить более предсказуемые результаты. Изменим метрику соединения между R2 и R3:

R2(config-if)#delay 100

Как и следовало ожидать, R1 теряет единственный маршрут до 3.3.3.3/32 и переводит префикс в состояние Active:

R1#
*Mar  2 20:17:07.655: EIGRP-IPv4(1): rcvupdate: 3.3.3.3/32 via 192.168.12.2 metric 181760/179200 on tid 0
*Mar  2 20:17:07.659: EIGRP-IPv4(1): Find FS for dest 3.3.3.3/32. FD is 158720, RD is 158720 on tid 0
*Mar  2 20:17:07.659: EIGRP-IPv4(1): 	192.168.12.2 metric 181760/179200 not found Dmin is 181760
*Mar  2 20:17:07.659: DUAL: AS(1) Peer total 1 stub 0 template 1 for tid 0
*Mar  2 20:17:07.659: DUAL: AS(1) Dest 3.3.3.3/32 entering active state for tid 0.
*Mar  2 20:17:07.659: EIGRP-IPv4(1): Set reply-status table. Count is 1.
*Mar  2 20:17:07.659: EIGRP-IPv4(1): Not doing split horizon
*Mar  2 20:17:07.759: EIGRP-IPv4(1): rcvreply: 3.3.3.3/32 via 192.168.12.2 metric 181760/179200 for tid 0
*Mar  2 20:17:07.759: EIGRP-IPv4(1): reply count is 1
*Mar  2 20:17:07.759: DUAL: AS(1) Clearing handle 0, count now 0
*Mar  2 20:17:07.759: DUAL: AS(1) Freeing reply status table
*Mar  2 20:17:07.759: EIGRP-IPv4(1): Find FS for dest 3.3.3.3/32. FD is 72057594037927935, RD is 181760 on tid 0 found
*Mar  2 20:17:07.759: DUAL: AS(1) RT installed 3.3.3.3/32 via 192.168.12.2

Значение FD также изменилось – теперь оно соответствует значению метрики до 3.3.3.3/32:

R1#sho ip eigrp topology 3.3.3.3/32
EIGRP-IPv4 Topology Entry for AS(1)/ID(1.1.1.1) for 3.3.3.3/32
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 181760
  Descriptor Blocks:
  192.168.12.2 (FastEthernet0/0), from 192.168.12.2, Send flag is 0x0
      Composite metric is (181760/179200), route is Internal
      Vector metric:
        Minimum bandwidth is 100000 Kbit
        Total delay is 6100 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 2
        Originating router is 3.3.3.3

Попробуем теперь другое значение, предварительно сбросив предыдущие изменения. Задержка для интерфейса f0/1 на R2:

R2#sho int f0/1
FastEthernet0/1 is up, line protocol is up 
  Hardware is i82543 (Livengood), address is ca02.0ebd.0006 (bia ca02.0ebd.0006)
  Internet address is 192.168.23.2/24
  MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec,
<output omitted>

В прошлый раз мы назначили задержку, равную 1000 мкс (значение указывает в десятках микросекунд), что значительно больше значения по умолчанию. Теперь используем минимально настраиваемое значение в 110 мкс:

R2(config-if)#delay ?     
  <1-16777215>  Throughput delay (tens of microseconds)

R2(config-if)#delay 11

Известен небольшой трюк, позволяющий не ошибиться с единицами измерения значений в командах: перед вводом значения символ ‘?’ вызывает контекстную подсказку, которая среди прочего указывает и ожидаемые единицы измерения; такая привычка подчас экономит массу времени, исключая ошибки по невнимательности (в конце концов десятки микросекунд – не самая очевидная единица измерения на мой взгляд). Проверим, что происходит в этот момент на R1:

R1#
*Mar  2 20:25:40.227: EIGRP-IPv4(1): rcvupdate: 3.3.3.3/32 via 192.168.12.2 metric 158976/156416 on tid 0
*Mar  2 20:25:40.231: EIGRP-IPv4(1): Find FS for dest 3.3.3.3/32. FD is 158720, RD is 158720 on tid 0
*Mar  2 20:25:40.231: EIGRP-IPv4(1): 	192.168.12.2 metric 158976/156416 found Dmin is 158976
*Mar  2 20:25:40.239: DUAL: AS(1) RT installed 3.3.3.3/32 via 192.168.12.2

Отладочный вывод в этот раз существенно меньше. Что насчёт значения FD?

R1#sho ip eigrp topology 3.3.3.3/32
EIGRP-IPv4 Topology Entry for AS(1)/ID(1.1.1.1) for 3.3.3.3/32
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 158720
  Descriptor Blocks:
  192.168.12.2 (FastEthernet0/0), from 192.168.12.2, Send flag is 0x0
      Composite metric is (158976/156416), route is Internal
      Vector metric:
        Minimum bandwidth is 100000 Kbit
        Total delay is 5210 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 2
        Originating router is 3.3.3.3

FD не совпадает с метрикой! В чём же соль? Внимательный читатель мог заметить разницу между рассматриваемыми случаями помимо разных значений задержек. Рассмотрим, что происходило после изменения метрики щаг за шагом:

Delay 1100

Delay 110

Шаг 1

R1 получает обновление о 3.3.3.3/32

Шаг 2

R1 ищет feasible successor for 3.3.3.3/32

Шаг 3

R1 не удалось найти FS, что приводит к запуску DUAL

R1 находит FS и устанавливает маршрут в таблицу маршрутизации

Шаг 4

По завершении DUAL R1 выбирает наилучший маршрут и устанавливает его в таблицу маршрутизации

Ключевое отличие заключается в запуске R1 процесса DUAL. Большая задержка на R2 (100) изменяет метрику таким образом, что результирующий маршрут не удовлетворяет условию feasibility condition, что, в свою очередь, вынуждает R1 инициировать DUAL. Малое же изменение задержки позволяет префиксу соответствовать feasibility condition (изменение задержки меньше задержки канала R1-R2), что даёт возможность избежать времязатратного DUAL. Отладочный вывод включает в себя значение FD, используемое для поиска feasible successor в определённый момент; значение FD после окончания DUAL равно бесконечности. Получается, что FD – исторически минимальное значение метрики; оно сбрасывается, как только маршрут переходит в состояние Active.

В обсуждениях Cisco Community можно найти точное определение FD:

“Feasible Distance is the lowest distance to the destination experienced since the last time the route went from Active to Passive state”

Перевод: FD – это минимальное значение метрики до сети назначения с момента последнего перехода префикса из состояния Active в Passive.

Хотя практическая польза этого знания может показаться несущественной, наличие строгих определений позволяет избежать разночтений, что положительно влияет на понимание используемой технологии.

Помогали редактировать статью: Анастасия Куралёва, Максим Климанов.