CISCO RIPng — простой протокол маршрутизации RIP для IPv6 с описанием особенностей и интересным примером реализации.
Зачем это нужно?
Зайдём на hh.ru, выполним поиск по запросу "rip". Нашлось 27 вакансий (для региона Москва), из них 23 по информационным технологиям. Понятно что это копипаст менеджеров и в реальности никакой RIP не нужен. Кстати по запросу "eigrp" 60 вакансий. Но на собеседовании могут, думаю, могут задать вопрос.
Изучение старого доброго CCNP Route начиналось именно с RIPng. С уходом R&S ушёл и RIP. Из всех новых треков циска RIP выпилила. Поскольку материал довольно-таки древний, отнесём его к рубрике CCNP R&S. Эта статья больше развлекательная, чем информативная.
History
Самый первый RIP (Routing Information Protocol) был разработан ещё в 1969 году (подумать страшно) и использовался для маршрутизации в ARPANET, военно-правительственной сети, которая появилась в США и стала основой для современного интернета. Круто да? Тот самый Мюнхгаузен..
Простой протокол, не значит плохой. Протокол был хорош для своего времени, но использовал широковещание для обмена пакетами, не поддерживал аутентификацию и бесклассовые сети.
Затем RIP был доработан до версии 2, а затем уже был выпущен RIPng (new generation) для IPv6 (описан в RFC2080). RIP не имеет разных фирменных механизмов, как например EIGRP и OSPF. Говорим про RIPv2 и RIPng, RIPv1 неприменим ни в каком виде. Тут подробнее.
Сравнение RIP с другими протоколами
RIP так же как и EIGRP и OSPF является внутренним протоколом маршрутизации. Что это значит? Он может быть развёрнут только внутри автономной системы, которая представляет собой сеть организации. Это может быть как сеть кампусного типа, включающая в себя здание или группу зданий, так и распределенная сеть, связанная туннелями (туннель должен уметь инкапсулировать мультикаст) и каналами.
Сходство OSPF и RIP: это открытые стандарты и могут использоваться в мультивендорной среде.
Отличия RIP от OSPF и EIGRP:
- RIP не ищет соседей и отношения смежности с соседними роутерами не устанавливаются;
- Обновления отправляются по таймеру, каждые 30 секунд и при изменении топологии, тогда как у OSPF и EIGRP отправка полного обновления при установке смежности и далее только обновления при изменении топологии;
- RIP никак не учитывает пропускную способность линков.
Отличия RIP от OSPF, оно же сходство с EIGRP: протокол RIP является дистанционно-векторным протоколом, у него нет полной карты сети, как у OSPF. Он добавляет маршруты в таблицу маршрутизации вслепую согласно своему алгоритму (алгоритм Беллмана-Форда), полностью полагаясь на алгоритм для обеспечения беспетельности. Это сходство с EIGRP (алгоритм DUAL).
RIPng
Требуется предварительное включение маршрутизации IPv6:
ipv6 unicast-routing ipv6 cef - включается вместе с IPv6 маршрутизацией ...
В отличие от RIP протокол RIPng активируется на интерфейсе.
interface GigabitEthernet0/0 ... ipv6 rip RIP1 enable
После этого:
- Создается процесс RIPng, если он ещё не был создан;
- Интерфейс начинает рассылать обновления RIPng на адрес FF02::9 (кроме маршрутов, которые были получены через этот интерфейс, правило Split Horizon);
- Интерфейс начинает принимать обновления RIPng;
- Все присоединённые маршруты, ну то есть маршруты, созданные IPv6 адресами на этом интерфейсе, начинают рассылаться через обновления RIPng (кроме link-local, /128)
Подробнее не буду заострять внимание на характеристиках протокола, это малоинтересно и рассказано миллион раз до меня. Переходим сразу к примеру.
Занимательный пример

У роутера R1 один интерфейс Gi0/0 соединён с интерфейсом Gi0/0 роутера R2, соответственно другой интерфейс Gi0/1 с интерфейсом Gi0/1 роутера R3. Настроен IPv6. Между роутерами R1 и R2 процесс RIP1, между роутерами R1 и R3 процесс RIP2. Для R1:
! interface GigabitEthernet0/0 no ip address duplex auto speed auto media-type rj45 ipv6 address FE80::1 link-local ipv6 address 2001:ACAD:DB8::1/64 ipv6 rip RIP1 enable ! interface GigabitEthernet0/1 no ip address duplex auto speed auto media-type rj45 ipv6 address FE80::1 link-local ipv6 address 2001:ACAD:DB9::1/64 ipv6 rip RIP2 enable ... ! ipv6 router rip RIP1 ! ipv6 router rip RIP2
Информация RIP:
R1# show ipv6 rip RIP process "RIP1", port 521, multicast-group FF02::9, pid 245 Administrative distance is 120. Maximum paths is 16 Updates every 30 seconds, expire after 180 Holddown lasts 0 seconds, garbage collect after 120 Split horizon is on; poison reverse is off Default routes are not generated Periodic updates 36, trigger updates 1 Full Advertisement 0, Delayed Events 0 Interfaces: GigabitEthernet0/0 Redistribution: None RIP process "RIP2", port 521, multicast-group FF02::9, pid 256 Administrative distance is 120. Maximum paths is 16 Updates every 30 seconds, expire after 180 Holddown lasts 0 seconds, garbage collect after 120 Split horizon is on; poison reverse is off Default routes are not generated Periodic updates 33, trigger updates 1 Full Advertisement 0, Delayed Events 0 Interfaces: GigabitEthernet0/1 Redistribution: None
Чётко видно что это разные процессы, у них разный PID. Для R2, R3 аналогично, но только один процесс. Отличие в том, что тут есть еще интерфейс Loopback0 (который выполняет эмуляцию подсети):
R2: interface Loopback0 no ip address ipv6 address FE80::2 link-local ipv6 address 2001:ACAD:2::1/64 ipv6 rip RIP1 enable ! R3: interface Loopback0 no ip address ipv6 address FE80::3 link-local ipv6 address 2001:ACAD:3::1/64 ipv6 rip RIP2 enable !
Всё работает. R2 и R3 не знают о подсетях на интерфейсах Loopback0 друг-друга, так как разные процессы на R1. Вывод для R1, R2, R3:
R1# show ipv6 rip database RIP process "RIP1", local RIB 2001:ACAD:2::/64, metric 2, installed GigabitEthernet0/0/FE80::2, expires in 163 secs 2001:ACAD:DB8::/64, metric 2 GigabitEthernet0/0/FE80::2, expires in 163 secs RIP process "RIP2", local RIB 2001:ACAD:3::/64, metric 2, installed GigabitEthernet0/1/FE80::3, expires in 177 secs 2001:ACAD:DB9::/64, metric 2 GigabitEthernet0/1/FE80::3, expires in 177 secs R2# show ipv6 rip database RIP process "RIP1", local RIB 2001:ACAD:DB8::/64, metric 2 GigabitEthernet0/0/FE80::1, expires in 176 secs R3# show ipv6 rip database RIP process "RIP2", local RIB 2001:ACAD:DB9::/64, metric 2 GigabitEthernet0/1/FE80::1, expires in 146 secs
Изменение конфигурации
Затем на интерфейсах роутера R1 добавляется второй процесс, так чтобы в конфе роутера R1 стало:
interface GigabitEthernet0/0 ipv6 rip RIP1 enable ipv6 rip RIP2 enable ... interface GigabitEthernet0/1 ipv6 rip RIP1 enable ipv6 rip RIP2 enable
Какой будет эффект? Самый неожиданный, сначала вот так:
R1# show ipv6 rip database RIP process "RIP1", local RIB 2001:ACAD:2::/64, metric 2, installed GigabitEthernet0/0/FE80::2, expires in 164 secs 2001:ACAD:3::/64, metric 2 GigabitEthernet0/1/FE80::3, expires in 169 secs 2001:ACAD:DB8::/64, metric 2 GigabitEthernet0/0/FE80::2, expires in 164 secs 2001:ACAD:DB9::/64, metric 2 GigabitEthernet0/1/FE80::3, expires in 169 secs RIP process "RIP2", local RIB 2001:ACAD:3::/64, metric 2, installed GigabitEthernet0/1/FE80::3, expires in 98 secs 2001:ACAD:DB9::/64, metric 2 GigabitEthernet0/1/FE80::3, expires in 98 secs
Потом таймеры в процессе RIP2 истекают и получается:
R1# show ipv6 rip database RIP process "RIP1", local RIB 2001:ACAD:2::/64, metric 2, installed GigabitEthernet0/0/FE80::2, expires in 177 secs 2001:ACAD:3::/64, metric 2, installed GigabitEthernet0/1/FE80::3, expires in 153 secs 2001:ACAD:DB8::/64, metric 2 GigabitEthernet0/0/FE80::2, expires in 177 secs 2001:ACAD:DB9::/64, metric 2 GigabitEthernet0/1/FE80::3, expires in 153 secs RIP process "RIP2", local RIB 2001:ACAD:3::/64, metric 16, expired, [advertise 97/hold 0] GigabitEthernet0/1/FE80::3
Ждём ещё немного и наконец:
R1# show ipv6 rip database RIP process "RIP1", local RIB 2001:ACAD:2::/64, metric 2, installed GigabitEthernet0/0/FE80::2, expires in 157 secs 2001:ACAD:3::/64, metric 2, installed GigabitEthernet0/1/FE80::3, expires in 163 secs 2001:ACAD:DB8::/64, metric 2 GigabitEthernet0/0/FE80::2, expires in 157 secs 2001:ACAD:DB9::/64, metric 2 GigabitEthernet0/1/FE80::3, expires in 163 secs RIP process "RIP2", local RIB
То есть процесс RIP1 поглотил процесс RIP2 и забрал его маршруты в свою DB. 🙂 Соотвественно для R2, R3 ожидаемо:
R2# show ipv6 route rip ... R 2001:ACAD:3::/64 [120/3] via FE80::1, GigabitEthernet0/0 R 2001:ACAD:DB9::/64 [120/2] via FE80::1, GigabitEthernet0/0 R3# show ipv6 route rip ... R 2001:ACAD:2::/64 [120/3] via FE80::1, GigabitEthernet0/1 R 2001:ACAD:DB8::/64 [120/2] via FE80::1, GigabitEthernet0/1
Что это, почему так происходит, попытаемся разобраться:
..RIPng process name has local significance.. Implementing Cisco IP Routing (ROUTE) Foundation Learning Guide DianeTeare, Bob Vachon, Rick Graziani
Из-за чего один процесс RIPng сожрал другой инфы не нашёл, но поскольку R2 и R3 не знают какой именно процесс RIPng шлёт им маршрутную информацию, им это неважно, то информация успешно принимается. То что назвал процессы на R2, R3 зеркально R1, просто уловка, их можно было называть как угодно.
Помотрим через Wireshark на интерфейсе Gi0/1 R1 (в сторону R3):

Действительно, никакой инфы о процессе в пакете обновления нет. Последнее тут: такой вопрос мог бы запросто встретиться вам на экзамене CCNP Route. Смогли бы?