Протокол NDP - Neighbor Discovery Protocol

10 minute read

Протокол Neighbor Discovery Protocol является ключевым при рассмотрении протокола IPv6. NDP - это механизм, позволяющий узлам узнавать друг о друге. Данный протокол обеспечивает следующие функции:

  • Router Discovery - позволяет узлу обнаружить локальный маршрутизатор без помощи протокола DHCP
  • Prefix Discovery - позволяет узлу обнаружить префикс(ы), которые заданы в канале
  • Parameter discovery - позволяет узлу обнаружить параметры, такие как MTU и hop limit, которые заданы в канале
  • Address autoconfiguration - позволяет узлу определить свой собственный полный адрес без помощи протокола DHCP
  • Address resolution - позволяет узлу обнаружить адреса канального уровня других узлов без помощи протокола ARP
  • Next-hop determination - позволяет узлу обнаружить адреса канального уровня next-hop узлов для сети назначения, будь то адрес назначения в локальной сети или адрес маршрутизатора для сети назначения
  • Neighbor unreachability detection - позволяет узлу определить когда соседнее устройство (какой-либо хост или маршрутизатор) более недоступны
  • Duplicate address detection - позволяет узлу, который хочет использовать адрес, узнать используется ли уже данный адрес каким-либо устройством в сети
  • Redirect - маршртизатор может оповещать устройства о лучшем next-hop устройстве для какой-либо сети, чем сам маршрутизатор. Данный функционал также есть в протоколе ICMP для прокотола IPv4, но в IPv6 этот функционал выведен как часть функционала протокола NDP

Сообщения NDP всегда отправляются на адреса link-local, для обеспечения безопасности все данные сообщения отправляются с параметром Hop Limit = 255. При получении устройством сообщения NDP со значением Hop Limit меньше 255 сообщение будет отброшено.

Сообщения NDP

Протокол NDP определён в RFC 2461, он использует протокол ICMPv6 для обмена сообщений, необходимых для функионирования протокола NDP. Всего используется 5 различных сообщений, каждое из которых используется для определенных целей. Эти сообщения описаны в таблице ниже, а после будут рассмотрены более подробно.

Тип сообщения Адрес источника Адрес назначения
Router Solicitation - ICMP type 133 Local interface адрес или :: в случае отсутствия адреса Multicast адрес всех маршрутизаторов - ff02::2
Router Advertisement - ICMP type 134 Link-Local адрес Multicast адрес всех узлов - ff02::1
Neighbor Solicitation - ICMP type 135 Local interface IP адрес или :: в случае отсутствия адреса Solicited-node multicast адрес - ff02::1:ffxx:xxxx
Neighbor Advertisement - ICMP type 136 Local interface адрес Multicast адрес всех узлов - ff02::1 или в ответ на NS - unicast адрес запрашивающего узла
Redirect - ICMP type 137 Link-Local адрес Unicast адрес запрашивающего узла

Router Solicitation

Router Solicitation - сообщение, инициируемое хостом, запрашивающее у маршрутизатора сообщение Router Advertisement.

ICMP type для данного сообщения равно 133, code - 0. Источником пакета IPv6 для данного сообщения выступает либо IPv6 адрес, назначенный на конкретный интерфейс, либо если адрес не назначен, то используется специальный unspecified адрес ::. Сообщения отсылаются на multicast адрес всех маршрутизаторов - ff02::2.

Скачать дамп с пакетом Router Solicitation можно здесь

Router Solicitation structure

Поле опции может содержать адрес канального уровня исходного интерфейса, если он известен. Однако, адрес источника канального уровня не должен быть включён, если адрес источника инкапсулированного пакета неопределён, например, когда отправитель запрашивает маршрутизатор во время автоматической настройки адреса.

Options

Router Advertisement

Router Advertisement - сообщение, инициируемое маршрутизатором, который анонсирует своё присутствие в сети, а также некоторые параметры специфичные для канальной среды (MTU, hop limit, prefix). Данные сообщения отсылаются периодически, а также в ответ на сообщение Router Solicitation.

Сообщения отсылаются на multicast адрес всех узлов - ff02::1. ICMP type для данного сообщения равно 134, code - 0. Источником пакета IPv6 для данного сообщения всегда выступает link-local адрес интерфейса, с которого посылается данное сообщение.

Скачать дамп с пакетом Router Advertisement можно тут

Router Advertisement structure

Hop Limit - 8-битное поле, указывает значение поля Hop Limit, которое узлы в данной канальной среде должны указывать в любом пакете, который они “выпустят” в данный канал. Если значение не указано, то значение поля устанавливается в 0

Hop Limit

M - Managed Address Configuration flag, одно из значение поля флагов. Если значение поля равно единице, то хосту следует использовать механизм автоконфигурации адреса с отслеживанием состояния через DHCPv6 (stateful address autoconfiguration via DHCPv6). Если значение установлено в ноль, то хост должен использовать механизм автоконфигурации адреса без сохранения состояния (stateless address autoconfiguration).

O - Other Stateful Configuration flag. Когда установлен данный флаг, то хост должен использовать DHCPv6 для получения всей другой информации.

Flags

Router Lifetime - 16-битное поле, в случае если поле имеет значение, отличное от 0, то исходный маршрутизатор является маршрутизатором по умолчанию. Поле определяет время жизни маршрутизатора по умолчанию в секундах. Максимально поле может принимать значение 2^16 секунд = 65536 секунд, это значение приблизительно равно 18,2 часа.

Router Lifetime

Reachable Time - 32-битное поле, используется функционалом Neighbor unreachability detection протокола NDP. Поле определяет время в миллисекундах в течении которого узел должен предполагать, что сосед доступен после того, как узел подтвердил доступность соседа

Reachable Time

Retransmit Timer - 32-битное поле, используется функционалом Address resolution и Neighbor unreachability detection протокола NDP. Данное поле определяет минимальное время между повторно переданными сообщениями Neighbor Solicitation.

Retransmit Timer

Options - поле переменной длины, содержит различные опции, среди которых:

  • Адрес канального уровня интерфейса с которого сообщение Router Advertisement было выпущено
  • MTU канала
  • Один или более префиксов, назначенных каналу. Данная информация существенна механизма автоконфигурации адреса без сохранения состояния (stateless address autoconfiguration)
Options

Neighbor Solicitation

Neighbor Solicitation - сообщение, инициируемое узлом, запрашивающее у другого узла адрес канального уровня, а также для функционирования механизмов Duplicate address detection и Neighbor unreachability detection.

ICMP type для данного сообщения равно 135, code - 0. Источником пакета IPv6 для данного сообщения выступает либо IPv6 адрес, назначенный на конкретный интерфейс, либо если производится проверка на дубликат адреса, то используется специальный unspecified адрес ::. Сообщения отсылаются либо на solicited-node multicast адрес, который соответствует адресу назначения, либо отправляется просто на адрес назначения.

Скачать дамп с пакетом Neighbor Solicitation можно отсюда

Neighbor Solicitation structure

Target Address - IPv6-адрес запрашиваемой цели. Адрес цели не может быть multicast адресом.

Target Address

Поле опций может содержать адрес канальной среды исходного интерфейса.

Options

Neighbor Advertisement

Neighbor Advertisement - сообщение, отсылаемое в ответ на сообщение Neighbor Solicitation. Когда узел меняет свой адрес канального уровня, он может отправить сообщение “незапрашиваемого”(unsolicited) Neighbor Advertisement для оповещения об изменении адреса.

ICMP type для данного сообщения равно 136, code - 0. Источником пакета IPv6 для данного сообщения всегда выступает IPv6 адрес, назначенный на конкретный интерфейс (или автосконфигурированный). Сообщения отсылаются либо на адрес источника сообщения пакета Neighbor Solicitation, либо отправляется на multicast адрес всех узлов - ff02::1.

Скачать дамп с пакетом Neighbor Advertisement, который является ответным сообщением для пакета Neighbor Solicitation сверху, можно тут

Neighbor Advertisement structure

R - Router флаг. Когда установлен данный флаг, то это означает, что источник пакета маршрутизатор. Данный флаг используется в механизме Neighbor unreachability detection когда маршрутизатор может измениться на конечное устройство.

S - Solicited флаг. Данный флаг устанавливается в случае, когда Neighbor Advertisement отправляется в ответ на запрос Neighbor Solicitation.

O - Override флаг. Когда выставлен данный флаг, информация из пакета Neighbor Advertisement должна будет перезаписать любую информацию в кэше соседа, а также обновит закэшированный адрес канальной среды. Если флаг не установлен, то перезапись производится не будет.

Flags

Target Address - используется когда Neighbor Advertisement отправляется в ответ на запрос Neighbor Solicitation - значение в поле адреса назначения Neighbor Solicitation. Если NA не запрашивается (то есть отправляется для объявления об изменении адреса уровня связи отправителя), целевым адресом является адрес отправителя.

Target Address

Поле опции пакета Neighbor Advertisement может содержать адрес канальной среды отправителя пакета Neighbor Advertisement.

Redirect

Redirect - такое же сообщение как и сообщение Redirect в ICMP для протокола IPv4.

ICMP type для данного сообщения равно 137, code - 0. Источником пакета IPv6 для данного сообщения всегда выступает link-local IPv6 адрес интерфейса с которого данное сообщение отсылается. Сообщения отсылаются на адрес источника пакета, который “вызвал” перенаправление.

Redirect Structure

Target Address - адрес лучшего маршрутизатора - обычно link-local адрес маршрутизатора в канале.

Destination Address - IPv6 адрес назначения для которого будет перенаправление на target address.

Поле опций может содержать адрес канальной среды лучшего маршрутизатора.

Для каждого из пяти сообщений NDP поле опций содержит информацию, которая заключена в понятие TLV - Type, Length, Value. Каждый TLV состоит из 8-битного поля Type, определяющего тип информации, которое содержится в поле Value, из 8-битного поля Length, определяющего длину поля Value, а также из поля переменной длины Value.

В таблице ниже представлены возможные типы и значения для поля опций сообщений NDP

Type Value
1 Source Link-Layer Address
2 Target Link-Layer Address
3 Prefix Information
4 Redirect Header
5 MTU
Type 1
Type 2
Type 3
Type 5

Address autoconfiguration

Когда IPv6 хост впервые становится активным в канале, он может самостоятельно сконфигурировать себе адрес на интерфейс. Первым шагом в данной настройке является определение порции Interface ID для адреса (64 бит). В бродкаст интерфейсах применяется механизм конвертации MAC-to-EUI64. Данный механизм берет 48 бит MAC-адреса интерфейса и конвертирует их в 64 бита Interface ID, вставляя зарезервированное 16 битное значение 0xFFFE в середину MAC-адреса, а также инвентируя U/L бит MAC-адреса в 1.

Допустим, есть MAC-адрес 0000:A39C:D84F. Для преобразования данного адреса в 64 бита Interface ID вставляем 0xFFFE в середину MAC-адреса - получим 0000:A3FF:FE9C:D84F. А после этого инвентируем U/L бит - 7 бит. Итоговый результат: 64 бит Interface ID - 0200:A3FF:FE9C:D84F.

Оставшиеся 64 бита для префикса можно взять из зарезервированного диапазона link-local адресов 0xFE80::/10. Таким образом используя префикс 0xFE80::/64 и полученный ранее Interface ID, можно получить итоговый IPv6-адрес - FE80::0200:A3FF:FE9C:D84F.

Вот еще один практический пример с уже назначенным IPv6-адресом

MAC-EUI64

В примере выше MAC-адрес равен 4A16:40B9:A9DD. Шаг первый: добавляем 0xFFFE в середину адреса, получаем 4A16:40FF:FEB9:A9DD. Шаг второй: инвертируем U/L бит. Значение 4A16 переводим в двоичный вид - 0100 1010 0001 0110, затем инвертируем 7 бит. Получим двоичный результат 0100 1000 0001 0110 - 4816. Шаг третий: добавляем префикс FE80::/64. Итоговый результат: FE80::4816:40FF:FEB9:A9DD/64.

Если устройство собирается коммуницировать с устройствами в том же канале, на котором назначен данный адрес, то этого адреса будет достаточно. В случае когда требуется коммуникация за пределами канала, то необходим глобальный IPv6-адрес. Его можно получить двумя способами: stateful и stateless address autoconfiguration.

Stateful address autoconfiguration

Если хост использует механизм автоконфигурации адреса с отслеживанием состояния (stateful), то он использует DHCPv6 сервер для получения необходимой информации. Хост может быть преднастроен для поиска DHCPv6 сервера либо получить сообщение Router Advertisement с флагом М для того чтобы использовать механизм автоконфигурации адреса с отслеживанием состояния.

Stateless address autoconfiguration

В случае использования механизма автоконфигурации адреса без сохранения состояния (stateless). Хост может получить один или несколько префиксов из сообщений Router Advertisement. Затем данные префиксы добавляются по тому же механизму, что и в случае с link-local префиксами к части Interface ID и получается итоговый global unique IPv6-адрес.

Рассмотрим простую схему из двух устройств

Схема

Ниже приведены настройки на устройстве XRv с использованием технологии MAC-EUI64 и технологии SLAAC для устройства CSR 1000v.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
------
MAC-EUI64
------
RP/0/0/CPU0:ios#
RP/0/0/CPU0:ios#conf t
RP/0/0/CPU0:ios(config)#interface gi0/0/0/0
RP/0/0/CPU0:ios(config-if)#ipv6 enable
RP/0/0/CPU0:ios(config-if)#ipv6 address 2001:db8::/64 eui-64       
RP/0/0/CPU0:ios(config-if)#no shutdown
RP/0/0/CPU0:ios(config-if)#commit
RP/0/0/CPU0:Nov 18 21:20:00.533 : ifmgr[228]: %PKT_INFRA-LINK-3-UPDOWN : Interface GigabitEthernet0/0/0/0, changed state to Down 
RP/0/0/CPU0:Nov 18 21:20:00.573 : ifmgr[228]: %PKT_INFRA-LINK-3-UPDOWN : Interface GigabitEthernet0/0/0/0, changed state to Up 
RP/0/0/CPU0:ios(config-if)#end
RP/0/0/CPU0:ios#show ipv6 interface brief
MgmtEth0/0/CPU0/0      [Shutdown/Down]
    unassigned                                    
GigabitEthernet0/0/0/0 [Up/Up]
    fe80::5200:ff:fe04:1                          
    2001:db8::5200:ff:fe04:1                      
GigabitEthernet0/0/0/1 [Shutdown/Down]
    unassigned                                    
GigabitEthernet0/0/0/2 [Shutdown/Down]
    unassigned                                    
RP/0/0/CPU0:ios#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
------
SLAAC
------
Router>
Router>enable
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ipv6 unicast-routing 
Router(config)#int gi1
Router(config-if)#ipv6 enable
Router(config-if)#ipv6 address autoconfig default 
Router(config-if)#no shut   
Router(config-if)#end
*Nov 18 21:23:07.073: %LINK-3-UPDOWN: Interface GigabitEthernet1, changed state to up
*Nov 18 21:23:08.074: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1, changed state to up
Router#show ipv6 interface brief
GigabitEthernet1       [up/up]
    FE80::5200:FF:FE01:0
    2001:DB8::5200:FF:FE01:0
GigabitEthernet2       [administratively down/down]
    unassigned
GigabitEthernet3       [administratively down/down]
    unassigned
GigabitEthernet4       [administratively down/down]
    unassigned
Router#show ipv6 route          
IPv6 Routing Table - default - 4 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, R - RIP, H - NHRP, I1 - ISIS L1
       I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
       EX - EIGRP external, ND - ND Default, NDp - ND Prefix, DCE - Destination
       NDr - Redirect, RL - RPL, O - OSPF Intra, OI - OSPF Inter
       OE1 - OSPF ext 1, OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1
       ON2 - OSPF NSSA ext 2, la - LISP alt, lr - LISP site-registrations
       ld - LISP dyn-eid, lA - LISP away, le - LISP extranet-policy
       a - Application
ND  ::/0 [2/0]
     via FE80::5200:FF:FE04:1, GigabitEthernet1
NDp 2001:DB8::/64 [2/0]
     via GigabitEthernet1, directly connected
L   2001:DB8::5200:FF:FE01:0/128 [0/0]
     via GigabitEthernet1, receive
L   FF00::/8 [0/0]
     via Null0, receive
Router#

Команда ipv6 address autoconfig default позволяет автоматически получить адрес на интерфейс из сообщения Router Advertisement, опция default добавляет default route в таблицу маршрутизации.

Stateless DHCPv6

Address resolution и Neighbor unreachability detection

Duplicate address detection

P.S. вся информация представленная здесь используется исключительно в образовательных целях. Все совпадения с реальными объектами, адресами, именами и т.д. случайна и не несёт цели получить от этого выгоду или причинить кому-либо вред.

Back to top ↑

Leave a comment