Получение IPv6 адреса с помошью EUI-64

Механизм EUI-64 позволяет хосту в IPv6 самостоятельно генерировать себе идентификатор интерфейса – то есть вторую половину IPv6 адреса. Перед прочтением этой статьи следует ознакомиться со структурой IPv6 адреса, так же, рекомендуется прочесть материал по автоматической конфигурации адресов в IPv6.

Когда устройство получает адрес в процессе автоматической конфигурации (SLAAC), оно получает не непосредственный готовый IP адрес, состоящий из 128 бит, а только префикс и сеть. Например, оно может получить следующую информацию:

  • Сеть 2001:0DB8:0001:0001:0000:0000:0000:0000
  • Префикс /64
  • Адрес шлюза 2001:0DB8:001:001:0000:0000:0000:0001

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

EUI-64

64 бита для идентификатора интерфейса формируются на основании MAC адреса устройства. MAC адрес состоит из 48 бит. Для получения из него 64-битного идентификатора, выполняется следующий алгоритм:

  1. MAC адрес делится на две части по 24 бита каждая.
  2. Между этими частями вставляются шестнадцатеричные цифры FFFE.
  3. Седьмой по порядку бит полученного адреса меняется на противоположный (1 – на 0, 0 – на единицу)

Пример

Устройство получило в процессе автоконфигурации информацию о том, что оно находится в сети 2001:0DB8:0001:0001::/64. Идентификатор интерфейса строится на основании MAC адреса. Допустим, MAC у устройства 1234.5678.9ABC. По приведённому выше алгоритму, адрес делится на две части (1234.56 и 78.9ABC), между ними вставляется FFFE – получаем адрес 1234:56FF:FE78:9ABC. В соответствии с третьим шагом, нам надо поменять седьмой бит. Каждая шестнадцатеричная цифра – это 4 бита, переведём первые две цифры (12) в двоичный вид, получится 0001 0010. В этой последовательности седьмой бит «1» поменяем на противоположный, получится 0001 0000, что соответствует шестнадцатеричным цифрам 10. Вернем цифры на место и получим готовый идентификатор интерфейса по EUI-64 – 1034:56FF:FE78:9ABC. Этот идентификатор вместе с полученной сетью и станет адресом нашего устройства в результате автоконфигурации. Итоговый адрес 2001:0DB8:0001:0001:1034:56FF:FE78:9ABC/64.

Тэги: 

Добавить комментарий