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

Duplicate Address Detection

Duplicate Address Detection (DAD) — это механизм, используемый в компьютерных сетях для проверки уникальности IPv6-адреса в локальной сети (подсети) перед его назначением интерфейсу. Он является обязательной частью протокола Neighbor Discovery Protocol (NDP) для IPv6 и служит для предотвращения конфликтов адресов, когда два или более устройства пытаются использовать один и тот же IP-адрес. В отличие от IPv4, где проверка уникальности часто не производится (используется протокол ARP для разрешения адресов, но не для их предварительной проверки), DAD является стандартной процедурой для большинства типов IPv6-адресов, включая автоконфигурируемые адреса на основе MAC-адреса (EUI-64), временные адреса и адреса, назначенные вручную.

Принцип работы

DAD реализуется на этапе, когда интерфейс получает или генерирует потенциальный IPv6-адрес, но ещё не начинает его использовать для обычной передачи данных. Процесс основан на отправке и приёме специальных сообщений NDP — Neighbor Solicitation (NS) и Neighbor Advertisement (NA).

Инициализация

Когда хост (компьютер, маршрутизатор, смартфон) хочет назначить интерфейсу новый IPv6-адрес (например, после включения, подключения к сети или изменения конфигурации), он временно переводит этот адрес в состояние tentative (предварительный). В этом состоянии адрес не считается активным: хост не отвечает на запросы, адресованные этому адресу, и не использует его в качестве источника для исходящих пакетов, за исключением самого процесса DAD.

Отправка запроса

Хост отправляет Neighbor Solicitation сообщение, в котором:

Это сообщение фактически является вопросом: «Есть ли в этой сети устройство, которое уже использует адрес X?».

Ожидание ответа

После отправки запроса хост ожидает ответ в течение определённого времени (обычно 1 секунда, но может настраиваться). Если за это время приходит Neighbor Advertisement от другого узла, в котором указан проверяемый адрес, это означает, что адрес уже занят. Если приходит другой Neighbor Solicitation с тем же целевым адресом (от другого узла, который также проходит DAD), это также считается конфликтом.

Результаты

Тайминги и параметры

Процесс DAD регулируется несколькими параметрами, определёнными в RFC 4862 (IPv6 Stateless Address Autoconfiguration) и RFC 4861 (Neighbor Discovery for IP version 6):

Таким образом, общее время ожидания составляет примерно DupAddrDetectTransmits * RetransTimer. При стандартных настройках (1 отправка, таймер 1 с) DAD занимает около 1 секунды.

Применение в IPv6

DAD применяется для всех типов IPv6-адресов, за исключением нескольких специальных случаев:

  1. Адреса, полученные по SLAAC: Хост генерирует адрес на основе префикса сети и своего идентификатора (например, EUI-64) и обязательно выполняет DAD.
  2. Временные адреса (Privacy Extensions): Случайные адреса, генерируемые для повышения конфиденциальности, также проходят DAD.
  3. Статические адреса: При ручном назначении адреса администратором операционная система также выполняет DAD, чтобы убедиться, что адрес не конфликтует с другими.
  4. Anycast-адреса: Для anycast-адресов (которые могут быть назначены нескольким интерфейсам) DAD не выполняется, так как множественное использование одного адреса является нормой.

В IPv4 аналогом DAD является Gratuitous ARP (беспричинный ARP), но он используется не столько для проверки уникальности перед назначением, сколько для обновления ARP-таблиц других узлов после смены адреса. В IPv6 DAD является строго обязательным для unicast-адресов.

Ограничения и проблемы

Несмотря на свою полезность, DAD имеет несколько ограничений:

Историческая справка

Механизм DAD был впервые определён в RFC 1971 (1996 год) как часть протокола IPv6 Stateless Address Autoconfiguration. Позже он был уточнён и включён в RFC 2462 (1998 год) и окончательно стандартизирован в RFC 4862 (2007 год). Основной протокол NDP, в рамках которого работает DAD, описан в RFC 4861 (2007 год). До появления DAD в IPv4 для обнаружения конфликтов адресов использовались нестандартные методы, такие как отправка ARP-запросов для собственного адреса, но эта практика не была обязательной и часто игнорировалась.

Сравнение с IPv4

ХарактеристикаIPv4 (Gratuitous ARP)IPv6 (DAD)
ОбязательностьНеобязателен, часто не используетсяОбязателен для unicast-адресов
ЦельОбновление ARP-таблиц, редко — проверка уникальностиПроверка уникальности перед назначением
СообщенияARP-запрос/ответNeighbor Solicitation/Advertisement
Адрес источникаСобственный IP-адресНеопределённый адрес (::)
Состояние адресаНе определеноTentative

Источники

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

На главную BFOmetr →