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.
Хотя практическая польза этого знания может показаться несущественной, наличие строгих определений позволяет избежать разночтений, что положительно влияет на понимание используемой технологии.
Помогали редактировать статью: Анастасия Куралёва, Максим Климанов.
ссылка на оригинал статьи https://habr.com/ru/post/546022/
Добавить комментарий