CISCO RIPng

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)

Подробнее не буду заострять внимание на характеристиках протокола, это малоинтересно и рассказано миллион раз до меня. Переходим сразу к примеру.


Занимательный пример

CISCO RIPng

У роутера 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):

CISCO RIPng

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

Добавить комментарий