Назад | Перейти на главную страницу

Зачем вам нужен запрос соседа IPv6 для получения MAC-адреса?

Я разработчик программного обеспечения и только что получил бесплатную книгу о IPv6 на Techdays, которую я читаю для развлечения. Они отдали его, потому что это немного старая книга (W2008), так что, возможно, для других / новых ОС все по-другому, но я не понимаю, что Neighbor Discovery должен получать MAC-адрес.

Согласно книге, каждый узел автоматически получает локальный IP-адрес Link, который создается из MAC-адреса путем вставки FF-FE между 3-м и 4-м байтами и перевернув бит U / L, так что локальный IP-адрес канала для узла с MAC-адресом 00-AA-00-3F-2A-1C становится FE80::2AA:FF:FE:3F:2A1C.

Чтобы определить MAC-адрес канального уровня, на локальный для канала IP-адрес отправляется сообщение Neighbor Solicitation, которое отвечает сообщением, содержащим его MAC-адрес ... Но отправитель уже знает это, поскольку MAC закодирован в канале: локальный IP-адрес. Это похоже на отправку открытки кому-то с просьбой сообщить адрес.

Каждый узел автоматически генерирует локальный адрес ссылки, но:

  • Этот адрес может быть создан не в формате EUI-64, указанном в RFC 2464. Адреса IPv6 также могут быть криптографически сгенерированными адресами (RFC 3972), временные адреса конфиденциальности (RFC 4941), или в современных операционных системах, стабильные адреса конфиденциальности (RFC 7217).

  • Адрес, который выглядит так, как будто он имеет идентификатор интерфейса EUI-64, на самом деле может не соответствовать указанному MAC-адресу из-за явной настройки администратором.

Поскольку вы не можете просто «преобразовать адрес обратно» в MAC-адрес, вы должны отправить запрос соседа, чтобы определить MAC-адрес.

Есть и другие причины, по которым необходимы запросы соседей. Вот некоторые из них:

  • Обнаружение повторяющегося адреса (RFC 4862). Возможно, что какой-то другой хост мог (правильно или ошибочно) потребовать адрес, который хост хочет использовать.
  • Обнаружение недоступности соседей. Отсутствие ответа на запрос соседа является одним из индикаторов того, что сосед недоступен.

Книги все хороши, но очень устаревшие книги могут быть не так полезны. Даже IPv6 претерпел значительные изменения за последние десять лет. Лучшим источником истины являются соответствующие RFC, как исходные, так и любые, помеченные как обновленные или устаревшие. RFC указаны достаточно подробно, чтобы можно было написать соответствующие реализации. Вы можете узнать все подробности обнаружения соседей, прочитав RFC 4861.

Итак, вы либо неправильно поняли, либо были неверно информированы о некоторых вещах.

Используя SLAAC, хост может создать свою собственную IPv6-адресацию, используя свой MAC-адрес, но многие люди думали, что это было опасно, выдавая слишком много информации и позволяя отслеживать конкретный хост. На основе этого были разработаны расширения конфиденциальности и случайная адресация, которые используются ОС для обеспечения конфиденциальности / безопасности. Это означает, что хост может создавать свою собственную адресацию, а не на основе своего MAC-адреса.

Когда хосту необходимо узнать MAC-адрес соседа в IPv4, он использует ARP. ARP передает запрос, но IPv6 не передает. Вместо этого каждый хост должен присоединиться к группе многоадресной рассылки запрошенных узлов. Эта группа основана на последних 24 битах своего IPv6-адреса. Поскольку интерфейсы IPv6 могут иметь любое количество адресов IPv6, хост может присоединиться к нескольким группам многоадресной рассылки запрошенных узлов. Хост IPv6, который ищет MAC-адрес другого хоста, отправит многоадресный запрос группе многоадресной рассылки запрошенного узла целевого IPv6-адреса.

Это дает преимущество перед IPv4 ARP. Поскольку ARP использует широковещательную рассылку для запросов, он прерывает все хосты в широковещательном домене уровня 2. Поскольку группа многоадресной рассылки запрошенного узла использует последние 24 бита целевого IPv6-адреса, многоадресный запрос ND, вероятно, прервет только целевой узел или, возможно, один или два других узла в широковещательном домене уровня 2.