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

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, которые передаются с определёнными кодами типа:

  • Тип 133 — Router Solicitation (RS) — запрос от узла к маршрутизатору с просьбой немедленно отправить Router Advertisement. Используется при включении узла или при подключении к новой сети.
  • Тип 134 — Router Advertisement (RA) — периодическое (или в ответ на RS) сообщение от маршрутизатора, содержащее префиксы сети, флаги конфигурации (например, использование SLAAC или DHCPv6), MTU канала и время жизни префиксов.
  • Тип 135 — Neighbor Solicitation (NS) — запрос от узла к соседу для получения его MAC-адреса или для проверки доступности. Адресуется на multicast-адрес запрашиваемого узла.
  • Тип 136 — Neighbor Advertisement (NA) — ответ на NS, содержащий MAC-адрес узла. Также может отправляться асинхронно при изменении MAC-адреса.
  • Тип 137 — Redirect — сообщение от маршрутизатора, указывающее узлу более оптимальный маршрут к определённой цели (например, к другому маршрутизатору).

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

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

Когда узлу 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). Примеры опций:

  • Source Link-Layer Address — MAC-адрес отправителя.
  • Target Link-Layer Address — MAC-адрес цели.
  • Prefix Information — префикс сети, время жизни, флаги.
  • MTU — максимальный размер пакета для канала.
  • Redirected Header — заголовок пакета, вызвавшего перенаправление.

Безопасность и 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. Он используется в:

  • Локальных сетях (LAN) — для общения между узлами в одном сегменте.
  • Беспроводных сетях (Wi-Fi) — для автоматической конфигурации мобильных устройств.
  • Интернете вещей (IoT) — в протоколах 6LoWPAN и Thread, где NDP адаптирован для работы с ограниченными ресурсами.
  • Центрах обработки данных — для автоматизации развёртывания виртуальных машин и контейнеров.

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

Источники

  • RFC 4861 — Neighbor Discovery for IP version 6 (IPv6)
  • RFC 3971 — SEcure Neighbor Discovery (SEND)
  • RFC 5942 — IPv6 Neighbor Discovery for Prefix Delegation
  • RFC 2461 — Neighbor Discovery for IP Version 6 (IPv6) (заменён)
  • Стивенс, У. Р. (2002). TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley.
  • Хейг, Т. (2012). IPv6 Essentials, 3rd Edition. O'Reilly Media.

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

На главную BFOmetr →