Neighbor Discovery Protocol
Neighbor Discovery Protocol — это протокол сетевого уровня, используемый в сетях IPv6 для решения задач, связанных с обнаружением соседних узлов, разрешением адресов и автоматической настройкой сетевых параметров. Он определён в стандарте RFC 4861 (Neighbor Discovery for IP version 6) и частично заменяет функциональность протоколов ARP, ICMP Router Discovery и ICMP Redirect, применявшихся в IPv4. NDP обеспечивает взаимодействие между узлами в пределах одной локальной сети (канала передачи данных), работая поверх IPv6 с использованием сообщений ICMPv6 (Internet Control Message Protocol version 6). Протокол критически важен для работы IPv6-сетей, особенно в условиях автоматической настройки без участия администратора.
Функции и задачи
Основная цель NDP — обеспечение автоматической настройки и поддержания работоспособности соединений между узлами в локальной сети. В спектр его задач входят:
- Разрешение адресов — преобразование IPv6-адреса узла в его MAC-адрес (аналог ARP в IPv4).
- Обнаружение соседей — поиск доступных узлов в той же подсети и проверка их доступности.
- Автоконфигурация адресов — автоматическое присвоение IPv6-адресов без участия DHCP-сервера (SLAAC — Stateless Address Autoconfiguration).
- Обнаружение маршрутизаторов — получение информации о доступных маршрутизаторах и их параметрах (адреса, префиксы, время жизни).
- Обнаружение дубликатов адресов — проверка уникальности претендуемого адреса перед его использованием (DAD — Duplicate Address Detection).
- Перенаправление (Redirect) — информирование узла о более оптимальном маршруте к удалённому узлу (аналог ICMP Redirect в IPv4).
- Обнаружение недоступности соседей — мониторинг состояния соседних узлов для своевременного выявления их прекращения работы (NUD — Neighbor Unreachability Detection).
Сообщения NDP
Протокол использует пять типов сообщений ICMPv6, которые передаются с определёнными типами и кодами:
- Router Solicitation (RS) — отправляется узлом при подключении к сети для запроса объявлений от маршрутизаторов. Используется для инициализации автоконфигурации.
- Router Advertisement (RA) — периодические или ответные сообщения от маршрутизатора, содержащие префикс сети, время жизни, флаги для автоконфигурации и другую информацию.
- Neighbor Solicitation (NS) — запрос к соседнему узлу о его MAC-адресе или проверка его доступности. Аналог ARP-запроса в IPv4, но работает на уровне ICMPv6.
- Neighbor Advertisement (NA) — ответ на NS, содержащий MAC-адрес отправителя. Также может отправляться при изменении MAC-адреса (gratuitous NA).
- Redirect — сообщение от маршрутизатора об изменении маршрута для конкретного узла.
Каждое сообщение имеет универсальный заголовок ICMPv6 (8 байт: тип, код, контрольная сумма) и дополнительные поля в зависимости от типа. Например, NS и NA используют опции, такие как Source Link-Layer Address (MAC-адрес отправителя) и Target Link-Layer Address (MAC-адрес цели), а также Target Address (IPv6-адрес цели).
Механизмы работы
Разрешение адресов (Address Resolution)
Когда узел A хочет отправить пакет узлу B в той же локальной сети, но не знает его MAC-адрес, он отправляет Neighbor Solicitation на многоадресный адрес отправителя (широковещательный в IPv4 теперь заменён многоадресным). Целевой узел B, получая запрос, отвечает Neighbor Advertisement с указанием своего MAC-адреса. Пара адресов (IPv6 → MAC) сохраняется в кэше соседей (neighbor cache) на определённое время.
Автоконфигурация адресов (SLAAC)
При подключении к сети узел сначала пытается обнаружить маршрутизаторы с помощью Router Solicitation. В ответ маршрутизатор отправляет Router Advertisement, содержащее префикс сети (например, 2001:db8::/64) и параметры автоконфигурации. Узел генерирует свой IPv6-адрес, комбинируя префикс с собственным MAC-адресом (или случайным значением в современных реализациях согласно RFC 7217). Затем выполняется проверка на дубликаты (DAD): узел отправляет Neighbor Solicitation на претендуемый адрес. Если никто не отвечает, адрес считается уникальным и используется.
Обнаружение дубликатов адресов (DAD)
Этот механизм предотвращает конфликты адресов в сети. Узел, собирающийся использовать новый IPv6-адрес, отправляет Neighbor Solicitation с собственным адресом в поле цели (Target Address). Если кто-то отвечает или уже использует этот адрес, процесс прерывается, и узел генерирует новый адрес. DAD является обязательным этапом SLAAC.
Обнаружение недоступности соседей (NUD)
Протокол периодически проверяет, доступны ли узлы, занесённые в кэш соседей. Если узел не отвечает на NS-запросы или вышел из сети, запись удаляется (или помечается как недоступная). NUD позволяет адаптироваться к изменениям топологии.
Кэш соседей и кэш маршрутизаторов
Каждый узел IPv6 поддерживает две ключевые таблицы:
- Neighbor Cache — хранит пары (IPv6-адрес, MAC-адрес) и состояния соседей (INCOMPLETE, REACHABLE, STALE, DELAY, PROBE, FAILED). Состояния управляют процессом обнаружения и временем хранения записей.
- Destination Cache — хранит информацию о маршрутах к удалённым адресам (в том числе через маршрутизаторы).
Эти кэши обновляются динамически, что снижает количество служебных сообщений.
Атаки на протокол
NDP не защищён в первоначальной спецификации, что делает его уязвимым для атак в локальной сети:
- ARP-спуфинг — злоумышленник может отвечать на NS-запросы подложным NA, перенаправляя трафик.
- DAD-атака — ложные NS-сообщения могут блокировать присвоение адресов.
- RA-атака — подложные Router Advertisement могут переназначить маршруты или отключить автоконфигурацию.
- MitM (Man-in-the-Middle) — сочетание перехвата и подмены.
Для защиты разработан протокол Secure Neighbor Discovery (SEND), описанный в RFC 3971 и RFC 3972. SEND использует криптографические подписи на основе алгоритмов DSA (Digital Signature Algorithm) и ECDSA (Elliptic Curve Digital Signature Algorithm), а также сертификаты доверенных удостоверяющих центров (CGA — Cryptographically Generated Addresses). Однако на практике SEND редко внедряется из-за сложности управления сертификатами.
Отличия от IPv4 (ARP и ICMP)
NDP объединяет функции, которые в IPv4 распределялись между тремя протоколами: ARP (разрешение адресов), ICMP Router Discovery (обнаружение маршрутизаторов) и ICMP Redirect (перенаправление). В IPv6 все эти задачи решаются единым протоколом на основе ICMPv6. Ключевые отличия:
- NDP использует многоадресные (мультикастовые) запросы, а не широковещательные (broadcast), что снижает нагрузку на сеть.
- NDP поддерживает автоконфигурацию без DHCP.
- NDP включает проверку доступности соседей (NUD) и обнаружение дубликатов (DAD).
- NDP не требует отдельного протокола для разрешения адресов — всё встроено в ICMPv6.
Практическое применение
NDP работает на каждом узле IPv6, включая оконечные устройства, маршрутизаторы и серверы. Примеры использования:
- При включении компьютера с IPv6-стегом он отправляет RS, получает RA и автоматически настраивает IP-адрес.
- При передаче данных между двумя узлами в одной подсети NDP разрешает MAC-адрес получателя.
- Маршрутизаторы используют NDP для объявления о себе и перенаправления трафика.
Связанные стандарты
- RFC 4861 — Neighbor Discovery for IP version 6 (IPv6).
- RFC 4862 — IPv6 Stateless Address Autoconfiguration (SLAAC).
- RFC 3971 — SEcure Neighbor Discovery (SEND).
- RFC 3972 — Cryptographically Generated Addresses (CGA).
- RFC 4191 — Default Router Preferences and More Specific Routes.
- RFC 5942 — IPv6 Neighbor Discovery for Networks with Multiple Subnet Prefixes.
Источники
- RFC 4861 — Neighbor Discovery for IP version 6 (IPv6).
- RFC 4862 — IPv6 Stateless Address Autoconfiguration (SLAAC).
- IPv6 Essentials, Silvia Hagen, 3rd Edition (2014).
- Computer Networking: A Top-Down Approach, James F. Kurose, Keith W. Ross, 8th Edition (2021).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →