Открыть сервис

Neighbor Discovery Protocol NDP

Neighbor Discovery Protocol (NDP) — это протокол стека TCP/IP, входящий в состав протокола IPv6 и определённый в стандарте RFC 4861. NDP предназначен для решения задач, связанных с взаимодействием узлов в локальной сети (канальном уровне), таких как автоматическая конфигурация адресов, обнаружение соседних устройств, определение доступности узлов и разрешение адресов канального уровня (MAC-адресов) по известным сетевым адресам IPv6. В отличие от IPv4, где аналогичные функции выполняют протоколы ARP (Address Resolution Protocol), ICMP Router Discovery и DHCP, в IPv6 все эти задачи объединены в рамках единого протокола NDP, работающего поверх ICMPv6 (Internet Control Message Protocol for IPv6).

История и стандартизация

Протокол NDP был разработан в рамках создания протокола IPv6 (Internet Protocol version 6) как замена устаревшим и функционально ограниченным механизмам IPv4. Первоначальная спецификация была опубликована в декабре 1998 года в документе RFC 2461 (Neighbor Discovery for IP Version 6 (IPv6)). Впоследствии стандарт был пересмотрен и уточнён: в сентябре 2007 года вышел RFC 4861, который заменил RFC 2461 и стал основной действующей спецификацией. Дополнительные расширения NDP описаны в последующих RFC, например, RFC 3971 (SEcure Neighbor Discovery, SEND) для обеспечения безопасности и RFC 5942 (IPv6 Neighbor Discovery for Prefix Delegation).

Разработка NDP была мотивирована необходимостью упростить администрирование сетей, уменьшить широковещательный трафик (по сравнению с ARP в IPv4) и обеспечить более надёжное обнаружение соседей. Протокол стал обязательным для всех узлов, работающих по IPv6.

Функции NDP

NDP выполняет пять ключевых функций, которые в IPv4 реализуются разными протоколами:

  1. Разрешение адресов (Address Resolution) — определение MAC-адреса узла по его IPv6-адресу (аналог ARP в IPv4).
  2. Обнаружение маршрутизаторов (Router Discovery) — поиск маршрутизаторов в локальной сети и получение от них информации о префиксах сети и параметрах конфигурации.
  3. Автоконфигурация адресов (Stateless Address Autoconfiguration, SLAAC) — автоматическое формирование IPv6-адреса узлом на основе префикса, полученного от маршрутизатора, и собственного MAC-адреса (или случайного идентификатора).
  4. Определение недоступности соседа (Neighbor Unreachability Detection, NUD) — проверка доступности узла-соседа на канальном уровне.
  5. Обнаружение дублирующихся адресов (Duplicate Address Detection, DAD) — проверка уникальности IPv6-адреса перед его использованием.

Типы сообщений NDP

NDP использует пять типов сообщений ICMPv6, которые передаются с определёнными кодами типа:

Механизм работы

Разрешение адресов

Когда узлу A необходимо отправить пакет узлу B, он сначала проверяет свою таблицу соседей (Neighbor Cache). Если записи нет, он отправляет Neighbor Solicitation на multicast-адрес запрашиваемого узла (сформированный на основе его IPv6-адреса). Узел B, получив NS, отвечает Neighbor Advertisement со своим MAC-адресом. После этого узел A сохраняет запись в таблице соседей.

Автоконфигурация адресов (SLAAC)

При включении узел отправляет Router Solicitation на multicast-адрес всех маршрутизаторов. Маршрутизатор отвечает Router Advertisement, содержащим один или несколько префиксов сети (например, 2001:db8::/64). Узел формирует свой IPv6-адрес, объединяя префикс с идентификатором интерфейса (обычно на основе MAC-адреса или случайно сгенерированным). Затем выполняется Duplicate Address Detection: узел отправляет NS с собственным предполагаемым адресом. Если никто не отвечает NA, адрес считается уникальным и используется.

Определение недоступности соседа (NUD)

Узел периодически проверяет доступность соседей, с которыми активно обменивается данными. Если пакет не доходит, узел отправляет NS. Если ответа нет после нескольких попыток, запись в таблице соседей помечается как недоступная, и узел может начать повторное разрешение адреса или выбрать другой маршрут.

Формат сообщений

Все сообщения NDP инкапсулируются в пакеты ICMPv6. Каждое сообщение содержит фиксированный заголовок и набор опций (TLV — Type-Length-Value). Примеры опций:

Безопасность и SEND

Базовый NDP не имеет встроенных механизмов защиты, что делает его уязвимым для атак, таких как подмена (spoofing) сообщений RA или NS (аналог ARP-spoofing в IPv4). Для решения этой проблемы был разработан протокол SEcure Neighbor Discovery (SEND), описанный в RFC 3971. SEND использует криптографические подписи на основе сертификатов (CGA — Cryptographically Generated Addresses) для аутентификации сообщений NDP. Однако SEND не получил широкого распространения из-за сложности внедрения и вычислительных затрат.

Сравнение с ARP в IPv4

ПараметрARP (IPv4)NDP (IPv6)
ПротоколОтдельный протокол (EtherType 0x0806)Часть ICMPv6 (типы 133–137)
АдресацияИспользует широковещательные (broadcast) запросыИспользует multicast-адреса (solicited-node)
Обнаружение маршрутизаторовНе встроено (требует DHCP или статической настройки)Встроено (RS/RA)
АвтоконфигурацияТребует DHCPВстроена (SLAAC)
Проверка доступностиОтсутствует (только ARP-кэш)Встроена (NUD)
БезопасностьНет встроенной защитыДополнительно — SEND

Применение и значение

NDP является обязательным компонентом любой сети IPv6. Он используется в:

Протокол значительно упрощает администрирование сетей, устраняя необходимость в ручной настройке адресов и маршрутизаторов. Однако его зависимость от multicast-трафика может создавать нагрузку в очень крупных сегментах (например, в сетях с тысячами узлов), что решается с помощью технологий, таких как ND Proxy или MLD snooping.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →