seerozha (seerozha) wrote,
seerozha
seerozha

ИТ: О генерации адресов IPv6

"
В этой небольшой статье (ещё раз) объясняется, зачем в IPv6 адреса генерируются таким странным, на первый взгляд, образом.




Тех, кто понимает смысл процедуры EUI-48 -> EUI-64 -> Modified EUI-64, статья вряд ли обогатит новыми знаниями. Остальные – добро пожаловать под кат.

По роду деятельности часто приходится слышать комментарий «ЗАЧЕМ?!» по поводу механизма генерации IPv6-адресов с использованием EUI-64. Новичкам в IPv6 кажется, что он назначается так: берём MAC-адрес, добавляем день изготовления устройства, почтовый индекс Уругвая и температуру за бортом, кидаем всё в миксер и получаем уникальный IPv6. Но на самом деле все процедуры имеют вполне простое и понятное объяснение.

Начнём с добавления FFFE.


MAC-адреса. Используются во многих протоколах (почти все IEEE 802-точка), в том числе в 802.3 (aka Ethernet) и 802.11 (aka WiFi). 48 бит, шестнадцатеричный формат, все дела.

IEEE считает, что название MAC-48 уже не отражает сути, поэтому правильно говорить «EUI-48».

Кроме 48-битных идентификаторов используются и 64-битные, т.н. EUI-64. Примеры протоколов: FireWire, ZigBee, 802.15.4, 6LoWPAN и, ожидаемо, IPv6.

Плюсы? Например, больше адресов (48 бит кончатся к 2100, бида-бида), а ещё можно включить EUI-48 как подмножество.

Собственно, первый шаг не имеет к IPv6 никакого отношения. IEEE заранее зарезервировал EUI-64 вида [24 бит] FF FE [24 бит] под адреса, полученные из EUI-48. Отсюда и механизм генерации: распилить MAC пополам и между половинками записать FFFE.

Таким образом, на шаге 1 мы просто делаем из EUI-48 (читай, MAC) более длинный EUI-64, который и используется в IPv6.

Шаг 2 – инверсия бита


И снова экскурсия в MAC-адреса. Возьмём двоичное представление адреса. Нам важен первый байт, а точнее – младший и следующий за ним биты. Поскольку по сети они будут передаваться задом-наперед, их с одинаковым успехом можно называть «первый» и «второй», либо «седьмой» и «восьмой».

image
За картинку спасибо Wikipedia

Самый младший бит зовётся Individual/Group, он же Multicast. Если он равен 0, то адресат – узел. Если 1 – то кадр с таким адресом назначения по умолчанию флудится на все порты.

Пример:

Адреса 01:00:00:00:00:01 и 03:12:34:56:78:90 – multicast. На узлы их назначать нельзя.



Соседний бит – Unique/Local. Определяет, считается ли этот адрес уникальным или локальным (читай: его придумал местный админ). Если бит равен 0, то адрес по идее соответствует какой-либо организации (список, например). Если 1 – скорее всего, сами придумали.

Пример:

Адрес 02:00:00:AB:CD:EF мы придумали сами (U/L бит равен 1), а вот адрес 04:DA:D2:AB:CD:EF, наиболее вероятно, принадлежит какой-то железке от Cisco.



Следствие:

Почти все уникальные MAC-адреса будут иметь первый байт, кратный 4 (04, 08, 0С, 10, 14 и т.д.). У придуманных адресов, соответственно, чётный, но не кратный 4, то есть 02, 06, 0A и так далее.



Классно, но зачем инвертировать бит U/L?

А это как раз для удобства.

Возьмём два роутера. Один постираем обычным порошком будет использовать уникальный MAC, который ему достался в наследство от дедушки-Xerox, а на другой мы назначим свой «блатной» MAC-адрес согласно воле левой пятки админа.

R1-unique#show interfaces Fa0/0
FastEthernet0/0 is administratively down, line protocol is down
  Hardware is Gt96k FE, address is 0000.0000.0001 (bia 0018.1845.f0e2)

!U/L бит равен 0, значит адрес уникальный (из адресов Xerox)



R2-local#show interfaces Fa0/0
FastEthernet0/0 is administratively down, line protocol is down
  Hardware is Gt96k FE, address is 0200.0000.0001 (bia 0018.1845.f0e2)

!U/L  бит равен 1, значит адрес локально назначен



Включаем IPv6 на интерфейсе и чувствуем разницу:

R1-unique#sh ipv6 interface brief
FastEthernet0/0            [administratively down/down]
    FE80::200:FF:FE00:1



R2-local#show ipv6 interface brief
FastEthernet0/0            [administratively down/down]
    FE80::FF:FE00:1



Из-за лишнего хекстета админ первого роутера всё время матерился набирал руками больше символов и вынужден был выйти на пенсию по состоянию здоровья из-за истирания кончиков пальцев об клавиатуру, а второй админ жил долго и счастливо.

Как видим, благодаря инвертированию бита на втором роутере в адресе «сокращается» дополнительный хекстет. Уникальным адресам от инверсии обычно ни жарко, ни холодно, потому что они крайне редко бывают «красивыми». А вот локально назначаемые MAC-адреса позволят таким образом генерировать более удобные IPv6-адреса.

Резюмируя, в IPv6 для получения идентификатора интерфейса MAC-адрес сначала преобразуется к EUI-64 (распил пополам, между половинками вставляется FFFE), а затем для нашего же удобства инвертируется U/L-бит. И теперь понятно, зачем.

Ложка дёгтя:
Механизм получения адреса по EUI-64 можно ещё назвать «NSAкина радость»: в любой сети независимо от префикса он будет давать один и тот же достаточно уникальный идентификатор, по которому легко будет проследить перемещение устройства. Поэтому, приватности ради и безопасности для, современные ОС на конечных устройствах генерируют адреса случайным образом.

IPv6 хоть и кажется на первый взгляд пришельцем из космоса, на самом деле является достаточно логичным и даже, о чудо, удобным. Надеюсь, изложенная информация была полезной. И если звёзды сойдутся нужным образом, а лень самопобедится, я постараюсь написать ещё статей на тему IPv6.
"

Источник
Tags: ipv6, ИТ
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments