Neighbor Discovery (обнаружение соседей IPv6)
В IPv4 за адрес соседа отвечал ARP, за адрес шлюза — DHCP или ручная настройка, за обход неисправного маршрутизатора — ничего. В IPv6 всё это собрано в один протокол поверх ICMPv6 — Neighbor Discovery.
Обновлено Редакция GAW
Neighbor Discovery (NDP, протокол обнаружения соседей) — часть IPv6, описанная в RFC 4861. Пятью сообщениями ICMPv6 узлы одного канала находят маршрутизаторы и префиксы, узнают канальные (MAC) адреса соседей, проверяют их доступность, обнаруживают дубликаты адресов и получают указания о лучшем маршруте. В IPv4 за это отвечали ARP, ICMP Router Discovery и ICMP Redirect (разд. 3.1); адрес шлюза по умолчанию там обычно приносил DHCP.
Пять сообщений
| Тип ICMPv6 | Сообщение | Кто шлёт и зачем |
|---|---|---|
| 133 | Router Solicitation (RS) | хост при включении интерфейса — просит маршрутизаторы ответить сразу, не ждать очередного RA |
| 134 | Router Advertisement (RA) | маршрутизатор периодически и в ответ на RS: префиксы, MTU, рекомендуемый Hop Limit, флаги M и O, Router Lifetime — срок, на который отправитель годится в маршрутизаторы по умолчанию |
| 135 | Neighbor Solicitation (NS) | узел — чтобы узнать канальный адрес соседа, проверить его доступность или выполнить DAD |
| 136 | Neighbor Advertisement (NA) | ответ на NS; без запроса — объявить смену канального адреса |
| 137 | Redirect | маршрутизатор — сообщить хосту лучший первый переход к адресату |
У всех пяти сообщений Hop Limit равен 255: пакет, прошедший хотя бы один маршрутизатор, будет иметь меньше, и его отбросят (разд. 3.1). RS уходят на FF02::2 (все маршрутизаторы), RA — на FF02::1 (все узлы); NS для разрешения адреса идёт на solicited-node адрес FF02::1:FFxx:xxxx, образованный из младших 24 бит искомого адреса (RFC 4291 разд. 2.7.1). Так запрос обрабатывает почти только нужный узел, а не весь сегмент, как при широковещательном ARP. Подробнее о группах — в термине «Групповые адреса IPv6».
Что несёт Router Advertisement
- Префиксы с флагами L (on-link) и A (можно строить адрес по SLAAC) и временами жизни — поэтому в IPv6 не нужна отдельная настройка маски.
- Router Lifetime — сколько секунд отправитель считается маршрутизатором по умолчанию; 0 означает «не шлюз», при отправке значение не превышает 9000 с (разд. 4.2).
- Флаги M и O — адреса или только дополнительные параметры (например DNS) доступны через DHCPv6. Если M установлен, O избыточен.
- Cur Hop Limit, Reachable Time, Retrans Timer и опция MTU — параметры, которые хосты берут из RA, 0 — «не задано».
Маршрутизатор рассылает RA с интервалом от MinRtrAdvInterval до MaxRtrAdvInterval (4…1800 с, по умолчанию 600 с и треть от него, разд. 6.2.1). Хост при включении шлёт до 3 RS через 4 с, перед первым — случайная пауза до 1 с (разд. 6.3.7, 10).
Проверка доступности соседа
Запись о соседе в кеше проходит состояния INCOMPLETE → REACHABLE → STALE → DELAY → PROBE (разд. 7.3.2). После подтверждения доступности узел считает соседа доступным ReachableTime — по умолчанию 30 000 мс со случайным множителем 0,5…1,5. Потом запись становится STALE и ничего не происходит, пока соседу не понадобится что-то отправить: тогда 5 с (DELAY_FIRST_PROBE_TIME) даётся верхним протоколам, например TCP, подтвердить связь своими подтверждениями, и лишь затем уходят unicast NS каждые RETRANS_TIMER = 1000 мс, до 3 штук (разд. 10). Если ответа нет, узел ищет другой маршрутизатор или заново разрешает адрес. В ARP ничего подобного нет: устаревшая запись живёт до таймаута кеша.
На микроконтроллере
Стеки lwIP и Zephyr выполняют ND сами; в Zephyr оно и MLDv2 включены по умолчанию, размер кеша соседей задаётся при сборке. Для прошивки важно одно: сразу после подключения к сети у устройства есть только link-local адрес, а глобальный появится после первого RA — то есть через случайную задержку, RS и ответ маршрутизатора.
Частые вопросы
Чем Neighbor Discovery отличается от ARP?
По RFC 4861 (разд. 3.1) ND заменяет сразу три протокола IPv4: ARP, ICMP Router Discovery и ICMP Redirect. Запрос адреса соседа идёт не широковещательно, а на solicited-node multicast-адрес, которых 2^24, поэтому его обрабатывает почти только нужный узел. ND работает на уровне ICMPv6, а не поверх Ethernet, и умеет то, чего в ARP нет: находить маршрутизаторы, узнавать префиксы и MTU, проверять доступность соседа и переключаться на другой маршрутизатор, если текущий молчит.
Как узел IPv6 находит шлюз по умолчанию?
Из Router Advertisement. Маршрутизаторы рассылают RA периодически (по умолчанию MaxRtrAdvInterval = 600 с, RFC 4861 разд. 6.2.1), а хост при включении интерфейса шлёт до 3 Router Solicitation с интервалом 4 с на FF02::2, чтобы не ждать. RA с ненулевым Router Lifetime добавляет отправителя в список маршрутизаторов по умолчанию; RA с Router Lifetime = 0 означает «я не шлюз, но вот префиксы и параметры».
Почему у сообщений ND Hop Limit всегда 255?
Это защита: маршрутизатор уменьшает Hop Limit на каждом переходе, поэтому пакет с 255 мог прийти только из того же канала. Узел отбрасывает ND-сообщение с меньшим значением, и подделать RA или Redirect снаружи сегмента нельзя (RFC 4861 разд. 3.1 и форматы сообщений в разд. 4).
Источники
- IETF. T. Narten, E. Nordmark, W. Simpson, H. Soliman. Neighbor Discovery for IP version 6 (IPv6). RFC 4861, September 2007 — разд. 3: задачи — Router Discovery, Prefix Discovery, Parameter Discovery (MTU, hop limit), автоконфигурация, разрешение адресов, выбор next-hop, Neighbor Unreachability Detection, DAD, Redirect; пять типов ICMP: RS, RA, NS, NA, Redirect; NS к solicited-node multicast, ответ NA unicast; NUD по подтверждениям от верхних протоколов или unicast NS; разд. 3.1: соответствует ARP, ICMP Router Discovery и ICMP Redirect из IPv4; RA несут link-layer адрес, префиксы (не нужна маска), MTU; multicast разрешения адресов распределён по 2^24 адресам; Hop Limit 255 защищает от сообщений извне канала; разд. 4.1–4.5: типы 133 RS, 134 RA, 135 NS, 136 NA, 137 Redirect, Hop Limit 255; разд. 4.2: поля RA — Cur Hop Limit, флаги M (адреса через DHCPv6) и O (прочие параметры через DHCPv6), Router Lifetime 16 бит в секундах (0 — не маршрутизатор по умолчанию, при отправке не больше 9000), Reachable Time и Retrans Timer 32 бита в мс, 0 — не задано; разд. 6.2.1: MaxRtrAdvInterval 4…1800 с, по умолчанию 600 с; MinRtrAdvInterval по умолчанию 0,33·MaxRtrAdvInterval; AdvReachableTime не больше 3 600 000 мс; разд. 6.3.7: до MAX_RTR_SOLICITATIONS запросов RS с интервалом RTR_SOLICITATION_INTERVAL, перед первым случайная задержка до MAX_RTR_SOLICITATION_DELAY; разд. 7.3.2: состояния записи кеша соседей INCOMPLETE, REACHABLE, STALE, DELAY, PROBE; разд. 10: MAX_RTR_SOLICITATION_DELAY 1 с, RTR_SOLICITATION_INTERVAL 4 с, MAX_RTR_SOLICITATIONS 3, MAX_MULTICAST_SOLICIT 3, MAX_UNICAST_SOLICIT 3, REACHABLE_TIME 30 000 мс, RETRANS_TIMER 1000 мс, DELAY_FIRST_PROBE_TIME 5 с, MIN/MAX_RANDOM_FACTOR 0,5/1,5, MAX_RA_DELAY_TIME 0,5 с, MIN_DELAY_BETWEEN_RAS 3 с, MAX_INITIAL_RTR_ADVERTISEMENTS 3
- IETF. R. Hinden, S. Deering. IP Version 6 Addressing Architecture. RFC 4291, February 2006 — разд. 2.7.1: FF02::1 — все узлы канала, FF02::2 — все маршрутизаторы канала; solicited-node адрес — младшие 24 бита unicast-адреса к префиксу FF02:0:0:0:0:1:FF00::/104, узел обязан вступить в такие группы для всех своих адресов
- Zephyr Project. Zephyr Project Documentation (latest): Networking — Overview — Supported Features: Neighbor Discovery (RFC 4861) и MLDv2 (RFC 3810) включены по умолчанию; кеш соседей настраиваемого размера; адреса DNS из RA (RDNSS, RFC 8106)
Нашли ошибку? ·
Смотрите также
- ARPПоиск MAC-адреса по IP-адресу: запрос, ответ, таблица ARP, конфликт адресов
- SLAAC (автоконфигурация IPv6)Узел сам формирует адрес IPv6 из префикса RA и идентификатора интерфейса, проверяя уникальность через DAD
- Link-local адрес (169.254.x.x)Адрес 169.254.0.0/16, назначаемый без DHCP; действует только в своём сегменте
- Шлюз по умолчаниюМаршрутизатор для пакетов за пределы подсети; адрес из той же подсети
- Групповые адреса IPv6Формат FF00::/8: флаги, область действия, известные группы FF02::1 и FF02::2, solicited-node адрес
- Hop Limit / TTL8-битный счётчик переходов в заголовке IP: уменьшается на каждом маршрутизаторе, при нуле пакет отбрасывается
- DHCPv6Серверная выдача адресов и параметров IPv6: порты 546/547, DUID, IA_NA, IA_PD, stateless-режим
- MAC-адрес48-битный адрес интерфейса: OUI, биты I/G и U/L, MAC у ESP32