Настройка IPv6 с EUI-64 на Cisco
Второй метод, который мы можем использовать для настройки адреса, называется EUI-64 (расширенный уникальный идентификатор). Он может быть использован для того, чтобы заставить роутер генерировать свой собственный идентификатор интерфейса вместо того, чтобы вводить его самостоятельно.
Роутер будет принимать MAC-адрес своего интерфейса и использовать его в качестве идентификатора интерфейса. Однако MAC-адрес — это 48 бит, а идентификатор интерфейса-64 бит. Что мы будем делать с недостающими частями?
В первой части статьи мы рассказывали о стандартной настройке IPv6 на оборудовании Cisco
Вот что мы сделаем, чтобы заполнить недостающие биты:
- Мы берем MAC-адрес и делим его на две части;
- Мы вставляем «FFFE» между двумя частями, так что бы у нас получилось 64-битное значение;
- Мы инвертируем 7-й бит идентификатора интерфейса.
Например, если мой MAC-адрес 1234.5678.ABCD тогда, после преобразования идентификатор интерфейса получиться:
Выше вы видите, как мы разделяем MAC-адрес и помещаем FFFE в середину. «Инвертирование 7-го бита» не является заключительным шагом. Для этого вам нужно преобразовать первые два шестнадцатеричных символа первого байта в двоичный, найти 7-й бит и инвертировать его. Это означает, что если это 0, то вам нужно сделать его 1, а если это 1, то он должен стать 0.
7-й бит представляет собой «универсальный уникальны» бит. По умолчанию в MAC-адресе этот бит всегда будет установлен в 0. При изменении MAC-адреса этот бит должен быть установлен на 1. Обычно люди не меняют MAC-адрес этого роутера, что означает, что EUI-64 будет самостоятельно менять 7-й бит с 0 на 1. Вот как это выглядит:
Мы берем первые два шестнадцатеричных символа первого байта, которые являются «12», и преобразуем их обратно в двоичный код. Затем мы инвертируем 7-й бит от 1 до 0 и снова делаем его шестнадцатеричным.
Так что на самом деле мой идентификатор интерфейса EUI-64 будет выглядеть следующим образом:
Теперь давайте взглянем на конфигурацию EUI-64 на роутере! Я буду использовать 2001:1234:5678:abcd::/64 в качестве префикса:
OFF1(config)#interface fastEthernet 0/0 OFF1(config-if)#ipv6 address 2001:1234:5678:abcd::/64 eui-64
В этом случае настроен роутер с префиксом IPv6 и с использованием EUI-64 в конце. Именно так мы можем автоматически генерировать идентификатор интерфейса, используя mac-адрес. Теперь взгляните на IPv6-адрес, который он создал:
OFF1#show interfaces fastEthernet 0/0 | include Hardware Hardware is Gt96k FE, address is c200.185c.0000 (bia c200.185c.0000) OFF1#show ipv6 interface fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::C000:18FF:FE5C:0 No Virtual link-local address(es): Global unicast address(es): 2001:1234:5678:ABCD:C000:18FF:FE5C:0, subnet is 2001:1234:5678:ABCD::/64 [EUI]
Видите эту часть C000:18FF:FE5C:0? Это MAC-адрес, который разделен на 2, FFFE в середине и «2» в «C200» MAC-адреса были инвертированы, поэтому теперь он отображается как «C000». Когда вы используете EUI-64 на интерфейсе, который не имеет MAC-адреса, то он выберет MAC-адрес самого низкого нумерованного интерфейса на роутере.
При использовании EUI-64 вы должны ввести 64-битный префикс, а не полный 128-битный IPv6 адрес. Если вы сделаете это, вы не получите ошибку, но Cisco IOS будет только сохранять 64-битный префикс, и в любом случае сгенерирует идентификатор интерфейса.
Скорее всего вы, вероятно, не будете использовать EUI-64 на роутере для настройки интерфейса, но это очень полезный метод для обычных хостов, таких как компьютеры windows, linux или mac. Вы, возможно, настроите IPv6-адрес вручную на интерфейсе вашего роутера или используете метод автоконфигурации, такой как DHCP или SLAAC.
Когда вы внимательно посмотрите на выходные данные show ipv6 interface , вы можете заметить, что там есть еще один IPv6-адрес:
OFF1#show ipv6 interface fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::C000:18FF:FE5C:0
Кстати, про теоретические основы IPv6 можно изучить тут
Этот адрес называется локальным адресом связи (link-local address), и он имеет некоторые специальные цели для IPv6.
Каждое устройство с включенным IPv6 автоматически генерирует локальный адрес связи. Эти адреса являются одноадресными, не могут быть маршрутизированы и используются только в пределах подсети, поэтому они называются «link-local».
Некоторые протоколы используют локальные адреса связи вместо глобальных одноадресных адресов, хорошим примером является NDP (Neighbour Discovery Protocol), который используется для обнаружения MAC-адресов других устройств IPv6 в подсети (NDP заменяет ARP для IPv4).
Протоколы маршрутизации также используют эти локальные адреса связи для установления соседних областей, а также в качестве следующего перехода для маршрутов. Мы увидим это, когда будем говорить о маршрутизации IPv6.
Адресное пространство FE80:: / 10 было зарезервировано для link-local, которые охватывают FE8, FE9, FEA и FEB. Однако RFC, описывающий link-local, утверждает, что следующие 54 бита должны быть нулями, поэтому link-local всегда будут выглядеть так:
link-local всегда будет начинаться с FE80:0000:0000:0000, а ID можно настроить с помощью различных методов. Роутеры Cisco будут использовать EUI-64 для создания идентификатора интерфейса, в то время как другие операционные системы, такие как Microsoft, используют случайный метод для создания идентификатора интерфейса. В приведенном ниже примере вы можете видеть, что EUI-64 был использован для создания link-local:
OFF1#show interfaces fastEthernet 0/0 | include Hardware Hardware is Gt96k FE, address is c200.185c.0000 (bia c200.185c.0000) OFF1#show ipv6 interface fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::C000:18FF:FE5C:0
Первая часть-это FE80:: и вторая часть — это созданный идентификатор интерфейса EUI-64: C000:18FF:FE5C:0
Когда вы настраиваете IPv6-адрес на интерфейсе (глобальный одноадресный или уникальный локальный) или когда вы включаете IPv6 на интерфейсе, вы можете сделать это следующим образом:
OFF1(config)#interface fa0/0 OFF1(config-if)#ipv6 enable
Использование команды ipv6 enable роутеру создать link-local адрес.
OFF1#show ipv6 int fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::C000:15FF:FE94:0
По умолчанию Cisco IOS будет использовать EUI-64 для создания link-local адреса, но вы также можете настроить его самостоятельно. Просто убедитесь, что адрес начинается с FE80:: / 10 (FE8, FE9, FEA или FEB). Вот как вы можете настроить link-local адрес:
OFF1(config-if)#ipv6 address FE90:1234:5678:ABCD::1 link-local
Просто используйте ключевое слово link-local, чтобы сообщить роутеру, что это должен быть адрес link-local. Давайте проверим это:
OFF1#show ipv6 int fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE90:1234:5678:ABCD::1
Помимо link-local адресов существует еще один тип адресации, который мы должны обсудить, и это multicast.
Я надеюсь, вы обладаете званиями об одноадресных и широковещательных доменах. Когда хост отправляет широковещательную передачу, все остальные устройства в подсети получат ее независимо от того, хотят они этого или нет. Отправка широковещательных сообщений очень неэффективна, и они были удалены из IPv6.
Многоадресная рассылка также используется для отправки чего-то с одного хоста на несколько приемников, но разница заключается в том, что многоадресный трафик заканчивается только на хостах, которые хотят его получить. Каждый, кто прослушивает определенный адрес многоадресной рассылки, получит эти пакеты. Это просто как радиостанция, если вы хотите слушать. вы должны настроиться на нужную частоту.
IPv6 использует многоадресную рассылку по многим причинам. Узлы IPv6, которые хотят отправить что-то всем узлам, работающим под управлением IPv6, могут использовать адрес многоадресной рассылки FF02::1. Все, у кого включен IPv6, слушают этот адрес.
Когда роутер IPv6 хочет отправить что-то всем другим роутерам IPv6 (но не хостам!) он может отправить его в FF02:: 2.
Протоколы маршрутизации также используют многоадресные адреса. Например, EIGRP уже использует виде FF02::A и OSPF использует виде FF02::5 и виде FF02::6.
Многоадресный трафик маршрутизируется, но часть трафика должна оставаться в пределах подсети. Если это так, то эти адреса будут иметь link-local область, и они не будут перенаправляться роутерами из одной подсети в другую.
Диапазон FF00:: / 8 был зарезервирован для многоадресной рассылки IPv6, в то время как диапазон FF02::/16 зарезервирован для многоадресных адресов link-local области. На роутере Cisco вы можете видеть по интерфейсу, к которому многоадресные адреса роутер прослушивает:
OFF1#show ipv6 int fa0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE90:1234:5678:ABCD::1 No Virtual link-local address(es): No global unicast address is configured Joined group address(es): FF02::1 FF02::2 FF02::1:FF00:1
Этот конкретный роутер прослушивает адреса многоадресной рассылки «все хосты IPv6» и «все роутеры IPv6». Как только вы настроите OSPF или EIGRP для IPv6, вы заметите, что интерфейс присоединится к соответствующим адресам многоадресной рассылки.
Третий адрес, который у нас есть (FF02::1:FF00:1), называется адресом многоадресной рассылки запрошенного узла. Он используется для обнаружения соседей.
Многоадресный адрес запрашиваемого узла основан на одноадресном IPv6-адресе хоста, а если быть более точным. последние шесть шестнадцатеричных символов одноадресного адреса. Все хосты, имеющие одинаковые 6 шестнадцатеричных символов в своем одноадресном IPv6-адресе, в конечном итоге получат один и тот же адрес запрашиваемого узла.
Когда вы отправляете что-то на этот адрес запрашиваемого узла, все хосты с одним и тем же адресом получат пакеты. Это что-то вроде многоадресного адреса «все хосты IPv6», но на этот раз у нас есть отдельная комната, где единственными членами являются VIP-персоны, которые разделяют одни и те же последние 6 шестнадцатеричных символов.
Все адреса запрашиваемых узлов начинаются с FF02::1:FF, поэтому они выглядят следующим образом:
Мой маршрутизатор имеет запрошенный адрес узла FF02:: 1:FF00:1, а link-local адрес -FE90:1234:5678: ABCD:: 1.
Когда мы записываем link-local адрес полностью, это выглядит так:
FE90:1234:5678:ABCD:0000:0000:0000:0001
Возьмите последние 6 шестнадцатеричных символов из этого адреса:
00:0001
И поместите их за префиксом адреса запрашиваемого узла, чтобы получить полный адрес запрашиваемого узла:
FF02:0000:0000:0000:0000:0001:FF00:0001
Мы можем удалить некоторые нули, чтобы сделать его короче, и это будет выглядеть так:
Форматы адресов IPv6
Фиксируя длину идентификатора интерфейса, мы подразумевали, что теперь это поле сможет вместить в себя канальный адрес в формате EUI 64. Это было бы в высшей степени удобно, ведь адреса EUI 64 призваны быть глобально уникальными — по крайней мере, пока они получены у IEEE . Например, чтобы автоматически назначить интерфейсу уникальный внутриканальный адрес 1 Разумеется, ему достаточно уникальности в пределах канала. , в первом приближении будет достаточно соединить префикс FE80::/64. и адрес EUI 64 этого интерфейса. Например, интерфейс с адресом EUI 64 00-11-22-33-44-55-66-77 получил бы, по такой предварительной схеме, внутриканальный адрес FE80::11:2233:4455:6677.
Однако не все канальные адреса — EUI 64. Как быть, если канальный адрес интерфейса отвечает другому стандарту? Это тоже не беда, так как вполне можно сформулировать правило отображения таких адресов в EUI 64. Пока в исходном адресе меньше 64 битов, это отображение может быть инъективным; то есть разные исходные адреса могут быть отображены в разные адреса EUI 64. Простейший и наиболее удобный для нас вид такого отображения — это инкапсуляция исходного адреса в EUI 64. К примеру, ее правила уже заданы для адресов EUI 48 и MAC 48 2 http://standards.ieee.org/regauth/oui/tutorials/EUI64.html . Они очень просты — см. Табл. 3.
Тип адреса | Исходный вид | Отображение в EUI 64 |
---|---|---|
EUI 48 | xx-yy-zz-ww-vv-tt | xx-yy-zz-FF-FE-ww-vv-tt |
MAC 48 | xx-yy-zz-ww-vv-tt | xx-yy-zz-FF-FF-ww-vv-tt |
То есть между OUI и добавочным идентификатором возникают еще два байта с определенными значениями: FF-FE в случае EUI-48 и FF-FF в случае MAC 48. Например, из EUI-48 02-35-AB-00-64-C1 получится такой EUI 64: 02-35-AB-FF-FE-00-64-C1 (добавочные байты подчеркнуты).
По этой причине IEEE не разрешает производителям оборудования расходовать добавочные идентификаторы EUI-64, которые начинаются с FF-FE и FF-FF.
Постойте, а в чем состоит разница между EUI-48 и MAC -48? Пока мы не запутались в этом вопросе, давайте изучим его современную интерпретацию, потому что она нам сейчас же понадобится. Оба типа адресов находятся в ведении IEEE . По первоначальной задумке, MAC 48 служили канальными адресами IEEE 802, а EUI 48 — идентификаторами в прочих технологиях. Вначале IEEE даже допускал, что пространства этих адресов могут быть разными, несмотря на одинаковый формат.
Циник заметил бы, что IEEE хотел продать одни и те же байты дважды.
Однако сегодня из документов IEEE однозначно следует, что MAC -48 — это устаревший термин для подмножества EUI — 48 3 Guidelines for use of the 24-bit Organizationally Unique Identifiers (OUI). IEEE. http://standards.ieee.org/regauth/oui/tutorials/UseOfEUI.html . Так что мы вправе говорить » EUI-48 «, подразумевая » MAC -48 и Все-все-все». Кроме того, нам можно забыть о правиле преобразования MAC -48 в EUI -64 и пользоваться только правилом для EUI-48 .
Придирчивый читатель может заметить, что адрес и идентификатор — не одно и то же. Тем не менее, идентификатор может быть адресом при соблюдении дополнительных условий. Например, в классической технологии Ethernet идентификатор может быть адресом благодаря тому, что изначально Ethernet был широковещательной средой. В этих условиях адрес мог не обладать свойствами локатора; ему не нужно было отвечать на вопрос: «Где находится данный узел?» Эта особенность не могла не наложить отпечаток на последующее развитие коммутируемого Ethernet: именно из-за нее коммутаторам Ethernet приходится динамически изучать расположение станций на своих портах.
Отлично, теперь вернемся к нашим текущим делам и внимательнее посмотрим на свойства гипотетического адреса IPv6, автоматически полученного соединением префикса подсети и идентификатора EUI -64. Благодаря уникальности EUI -64, мы надеемся, что полученный адрес IPv6 окажется уникальным; но как мы сможем гарантировать, что на другом узле тот же самый адрес не будет назначен вручную?
Поясним наше опасение примером. Допустим, что к одному каналу подключены два узла IPv6, А и Б. Их интерфейсам требуются внутриканальные адреса. Узел А получает внутриканальный адрес от нас, а узел Б пытается выбрать его автоматически, располагая адресом EUI -64 на своем интерфейсе. Мы решили назначить узлу А адрес FE80::11:2233:4455:6677. Как нам удостовериться, что узел Б не выберет тот же самый адрес ? Заранее убедиться, что его EUI -64 не равен 00-11-22-33-44-55-66-77? Очевидно, что такая «автоматика» недорого стоит, потому что мы обеспечиваем ее работу вручную. Представьте, что таких узлов не два, а тысяча, и 999 из них выбирают адрес автоматически, на основе EUI -64. Неужели нам придется обойти все 999 узлов, чтобы правильно выбрать тысячный адрес ?
Чтобы разрешить это затруднение, нам надо вспомнить, что мы знаем об адресе MAC 48, он же EUI 48. Такой адрес обладает определенной структурой, и, к нашему счастью, она сохранилась в EUI 64 без изменений, с точностью до длины поля «добавочный идентификатор «, как это показано на рис. 2.5.
Рис. 2.5. Формат OUI и соответствие между разными типами EUI
Сейчас основной интерес для нас представляет бит U/L, он же u, который отличает адреса, выданные глобально (полученные из рук IEEE ), от адресов, назначенных локально ( по усмотрению администратора сети). Второй бит , который нам придется учитывать в дальнейшем, — бит I/G, он же g, — отличает групповые адреса от индивидуальных. Преобразование из EUI 48 в EUI 64 сохраняет эти биты. Благодаря биту U/L мы можем избежать конфликтов хотя бы с EUI -64, назначенными производителем аппаратуры. Например, в EUI -64 00-11-22-33-44-55-66-77 этот бит сброшен, а значит, это глобальный идентификатор , и нам следует избегать его. И наоборот, EUI -64 02-11-22-33-44-55-66-77 — локальный, так что мы можем выбрать его в качестве идентификатора интерфейса, не опасаясь конфликта с адресом какой-нибудь сетевой карты.
Обобщим эту мысль: идентификатор интерфейса в адресе IPv6 должен основываться на идентификаторе EUI -64 и наследовать его формат. Однако если мы перенесем этот формат без изменений, то окажется, что мы больше не вправе назначать интерфейсам простые, короткие номера: 2001:DB8::1, 2001:DB8::2 и т.д. Ведь если мы рассмотрим, к примеру, число 1 с позиций EUI -64, то это окажется 00-00-00-00-00-00-00-01 — глобально выданный идентификатор , и мы нарушим наше собственное правило. Иначе говоря, нам придется всегда устанавливать бит U/L в идентификаторах интерфейсов, которые мы выдумываем сами, например, 2001:DB8::1 нам придется заменить на 2001:DB8:0:0:200:0:0:1.
Как нам избежать этого неудобства? Возможный выход здесь — это задать взаимно однозначное отображение между настоящим EUI -64 и идентификатором интерфейса IPv6. Ведь нас никто не заставляет точно копировать формат EUI -64 — нам достаточно сохранить содержащуюся в нем информацию. Правило этого отображения очевидно: инвертировать бит U/L, с тем чтобы удобные короткие идентификаторы 1, 2, 3… стали доступны для локального назначения. В результате мы получаем так называемый модифицированный формат EUI -64 (modified EUI 64 format), который отличается от EUI 64 только интерпретацией значений бита U/L: теперь 0 означает «локальный», а 1 — «глобальный» [§2.5.1 и Приложение A RFC 4291].
Окончательное требование таково: идентификатор интерфейса в адресе IPv6 обязан отвечать модифицированному формату EUI-64. Это правило распространяется на все индивидуальные адреса IPv6 кроме блока ::/3, зарезервированного для особых целей [§2.5.1 RFС 4291].
Чтобы по этому правилу «изготовить» из EUI -64 адрес IPv6, надо сначала инвертировать бит U/L, а затем добавить перед полученной цепочкой битов (то есть в старших разрядах) данный префикс подсети.
Тогда аналогичный рецепт для EUI 48 ( MAC 48) может быть комбинацией двух уже известных нам шагов: сначала от EUI 48 к EUI 64, а затем от EUI 64 к IPv6:
- EUI 48EUI-64: а)вставить между третьим и четвертым байтами EUI 48 (то есть между OUI и добавочным идентификатором) последовательность двух байтов FF-FE
;
EUI 64IPv6: а)инвертировать бит U/L;
б)присоединить спереди префикс подсети.
Любителям истории будет небезынтересно узнать, что в те времена, когда разработчики IPv6 впервые сформулировали правила для работы с модифицированным форматом EUI 64, MAC 48 и EUI 48 считались разными сущностями. Тогда разработчики IPv6 допустили ошибку в прочтении документов IEEE и перепутали алгоритмы преобразования MAC 48 и EUI 48 в EUI 64: говоря о MAC 48, они привели алгоритм для EUI 48, который и вошел в реализации IPv6. (См. замечание в конце Приложения A RFC 4291.) Впоследствии были разговоры о том, не исправить ли эту [ошибку 4 См. обсуждение «RFC 3513 EUI-48/MAC-48 confusion» в списке рассылки IETF IPng: http://www.atm.tut.fi/list-archive/ipng/msg10039.html ], 5 См. обсуждение «why 0xFFFE is used in the modified EUI-64 format» в списке рассылки IETF IPv6: http://www.ietf.org/mail-archive/web/ipv6/current/msg06035.html но оказалось проще оставить все как есть. И, наконец, сегодня EUI-48 и MAC 48 слились воедино, и все неожиданно встало на свои места, а старая ошибка превратилась в мудрый выбор.
Вот несколько примеров прямого преобразования:
- Из EUI 64 00-11-22-33-44-55-66-77 и префикса 2001:DB8::/64 получается адрес IPv6 2001:DB8::211:2233:4455:6677.
- Из EUI 48 (или MAC 48) 10-20-30-40-50-60 и внутриканального префикса (FE80::/64) получается внутриканальный адрес IPv6 FE80::1220:30FF:FE40:5060.
Возможен и обратный анализ :
- Адрес IPv6 2001:DB8::D00F — назначен локально, так как бит U/L в идентификаторе интерфейса сброшен.
- Адрес IPv6 2001:DB8::200:FF:FE00:D00F — получен из глобального EUI 48 00-00-00-00-D0-0F.
- Адрес IPv6 2001:DB8::200:0:0:D00F — получен из глобального EUI 64 00-00-00-00-00-00-D0-0F.
Хотя большая часть локальных идентификаторов интерфейса (U/L = 0) доступна администраторам и пользователям для их собственных нужд, среди них есть несколько зарезервированных [ RFC 5453]. Объяснить, откуда они возникают, мы сможем позже. В частности, зарезервировано нулевое значение , 0000:0000:0000:0000.
В завершение раздела зададим себе такой вопрос: достаточно ли сформулированных нами правил, чтобы автоматически гарантировать уникальность адреса IPv6? Для ответа на него рассмотрим вот какой сценарий . Представим себе, что к одному каналу подключены два интерфейса, А и Б, причем интерфейсу А заранее назначен локальный EUI-64 02-00-00-00-00-00-00-01 — это вполне законно. Далее администратор сети назначает интерфейсу Б внутриканальный адрес IPv6 FE80::1. Он тоже имеет на это полное право, потому что такой адрес отвечает нашим требованиям. И наконец узел, управляющий интерфейсом А, автоматически назначает своему интерфейсу внутриканальный адрес IPv6 на основе уже доступного EUI 64. Как нетрудно видеть, это окажется то же самый адрес FE80::1, и в зоне данного канала возникнет конфликт адресов.
Корень проблемы здесь состоит в том, что локально назначенные идентификаторы интерфейсов IPv6 неявно занимают ячейки в подмножестве локальных идентификаторов EUI-64.
Вот мы и обнаружили как минимум один проблемный случай — применение локальных EUI -64. Это значит, что автоматическое назначение адресов IPv6 останется ненадежным, пока мы целенаправленно не поработаем над механизмом предотвращения конфликтов. Тем не менее, структура идентификатора интерфейса на основе EUI -64 сыграет роль хорошего фундамента для наших последующих разработок — в этом мы убедимся в §5.4.
Сетевые IPv6-адреса
Организация IEEE разработала расширенный уникальный идентификатор (EUI) или изменённый процесс EUI-64. Этот процесс использует 48-битный MAC-адрес Ethernet клиента и в середину этого адреса вставляет ещё 16 бит для создания 64-битного идентификатора интерфейса.
MАС-адреса Ethernet обычно представлены в шестнадцатеричном формате и состоят из двух частей:
- Уникальный идентификатор организации (OUI) — это 24-битный (шесть шестнадцатеричных цифр) код поставщика, назначенный IEEE.
- Идентификатор устройства — это уникальное 24-битное (6 шестнадцатеричных цифр) значение с общим уникальным идентификатором организации (OUI).
Идентификатор интерфейса в формате EUI-64 представлен в двоичном формате и состоит из трёх частей:
- 24-битный OUI на основе MAC-адреса клиента, в котором седьмой бит является обратным, т.е. если седьмой бит имеет значение 0, то он становится 1, и наоборот.
- В середину вставляется 16-битное значение FFFE (в шестнадцатеричной системе исчисления)
- 24-битный идентификатор устройства на основе MAC-адреса клиента
Процесс EUI-64 проиллюстрирован на рис. 1 с помощью MAC-адреса маршрутизатора R1 GigabitEthernet FC99:4775:CEE0.
Шаг 1: разделите MAC-адрес между OUI и идентификатором устройства.
Шаг 2: вставьте шестнадцатеричное значение FFFE в двоичном формате: 1111 1111 1111 1110.
Шаг 3: преобразуйте первые 2 шестнадцатеричных значения уникального идентификатора организации (OUI) в двоичный формат и отразите бит U/L (бит 7). В данном случае 0 в седьмом бите меняется на 1.
В результате генерируется следующий EUI-64 идентификатор интерфейса FE99: 47FF:FE75:CEE0.
Примечание. Использование обратного бита (U/L) и причины для отражения его значения описаны в документе RFC 5342.
Преимущество EUI-64 MAC-адреса Ethernet заключается в том, что его можно использовать для определения идентификатора интерфейса. Кроме того, сетевые администраторы могут легко отслеживать IPv6-адрес до конечных устройств с помощью уникального МАС-адреса. Однако это беспокоит других пользователей в связи с угрозой их конфиденциальности. Они обеспокоены тем, что их пакеты можно отследить до физического компьютера. Чтобы избежать таких осложнений, можно использовать случайно сгенерированный идентификатор интерфейса.
Случайно сгенерированные идентификаторы интерфейса
В зависимости от операционной системы устройство может использовать случайно сгенерированный идентификатор интерфейса вместо МАС-адресов и EUI-64. Например, начиная с Windows Vista в операционных системах Windows используется случайно сгенерированный идентификатор интерфейса вместо созданного через EUI-64. В ОС Windows XP и в предыдущих операционных системах Windows использовался EUI-64.
Как показано на рисунке, чтобы без труда определить, что адрес был создан с помощью EUI-64, нужно поместить FFFE в середину идентификатора интерфейса.
После установления идентификатора интерфейса либо с помощью EUI-64, либо через случайную генерацию его можно объединить с префиксом IPv6 для создания глобального индивидуального адреса или локального адреса канала.
- Глобальный индивидуальный адрес. При использовании SLAAC устройство получает свой префикс из объявления маршрутизатора ICMPv6 и объединяет его с идентификатором интерфейса.
- Локальный адрес канала. Локальный префикс начинается с FE80:: /10. Обычно в качестве префикса и длины префикса устройство использует FE80:: /64, за которым следует идентификатор интерфейса
Что такое MAC или физический адрес и стандарты MAC-48, EUI-48 и EUI-64
Все, кто хоть немного разбирается в сетях слышал о MAC-адресе и знает что это физический адрес сетевой карты «зашитый» в неё производителем. Естественно, многие знают что MAC можно почти всегда поменять в настройках сетевой карты в Windows и всегда в Linux. С появлением IPv6 возможно кто-то слышал про стандарт EUI-64. Но что это такое, откуда берется и для чего он нужен — знают не многие. Кроме этого еще существуют стандарты MAC-48 и EUI-48. Что это такое и для чего они нужны? Давайте разбираться.
МАС адрес (media access control address или MAC-48) – уникальный идентификатор, назначенный сетевому адаптеру, применяется в сетях стандартов IEEE 802, в основном Ethernet, Wi-Fi и Bluetooth. Появился при проектировании стандарта Ethernet. Используется для идентификации отправителя и получателя фрейма. Предполагается, что при появлении в сети нового компьютера (или другого устройства, способного работать в сети) пользователю не придётся настраивать этому компьютеру MAC-адрес вручную. Адрес имеет длину в 48 бит, т.е. 6 байт. Канонического формата записи нет или точнее их три. Записывается как шесть шестнадцатиричных чисел:
00-AB-CD-01-02-03 (Windows) 00:AB:CD:01:02:03 (Unix) 00AB.CD01.0203 (Cisco)
На текущий момент IEEE считает стандарт MAC-48 устаревшим частным случаем для сетей Ethernet и обязывает повсеместно использовать стандарт EUI-48. По своей сути эти идентификаторы идентичны и только имеют некоторые особенности при преобразовании в стандарт EUI-64.
Теперь разберемся в структуре MAC-адреса. Он состоит из двух 24-х битных частей где первые три октета (на схеме ниже октеты 0-2) называются OUI или уникальный идентификатор организации. Их производитель оборудования получает в IEEE и они являются уникальными для каждой организации. Остальные три октета производитель генирирует сам и прошивает в контроллеры при производстве.
Важным ньюансом для нас является то что в 0 октете под идентификатор организации используется только верхние 6 бит. Остальные два имеют специальное назначение:
- первый бит —самый младший бит зовётся Individual/Group, он же Multicast. Если он равен 0, то адресат – узел. Если 1 – то кадр с таким адресом назначения по умолчанию флудится на все порты.
- второй — соседний бит – Unique/Local. Определяет, считается ли этот адрес уникальным или локальным (читай: его придумал местный админ). Если бит равен 0, то адрес по идее соответствует какой-либо организации. Если 1 – скорее всего, сами придумали.
| EUI-48 | | OUI | дополнительный идентификатор | | Октет 0 | Октет 1 | Октет 2 | Октет 3 | Октет 4 | Октет 5 | | A C | D E | 4 8 | 0 1 | 0 2 | 0 3 | |1010 1100|1101 1110|0100 1000|0000 0001|0000 0010|0000 0011| || || |одиночный (0) или групповой/мультикаст (1) адресат | всегда 0 при использовании OUI или 1 если адрес назначен вручную
- 01:00:00:00:00:01 и 03:12:34:56:78:90 – multicast. На узлы их назначать нельзя
- 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 и так далее.
В реальной жизни EUI-64 сейчас практически не встречается, но он нужен для генерации IPv6 адресов на основе MACа и очень часто его можно увидеть в link-local адресе IPv6, это тот что начинается на FE80. По сути это тот же EUI-48, только больше бит достается компании производителю. Т.е. IEEE не заморачивался, уже были идентификаторы EUI-48, которые состоят из 24 бит OUI (ID фирмы) ии ещё 24 бит, которые фирма сама придумывает, как хочет. EUI-64 — это тоже 24 бит OUI + 40 бит на полёт фантазии производителя.
Но и тут все 40 бит не достались производителю. Так как первые 4 цифры в 16-ти ричной системе или первые 16 бит не должны равняться FFFF либо FFFE. Эти значения зарезервированы для обратной совместимости с EUI-48 и MAC-48. Так для преобразования MAC-48 в EUI-64 используется FFFF, а для преобразования EUI-48 в 64 используется FFFE. Вроде просто и понятно. Поэтому в IEEE решили чуточку усложнить, а на самом деле упростить и добавили инверсию второго бита из предыдущего раздела, тот что называется Unique/Local
Т.е. если сейчас у вас используется MAC скажем 02:00:00:00:00:01 (обратили внимание, первый октет не кратен 4м, т.е. мак мы придумали сами) и в EUI-64 оп преобразуется так:
- первые 24 бита OUI, у нас это 02:00:00
- инвертируем второй бит, при отсчете с 0 и получаем 00:00:00
- 16 бит преобразования — FF:FE (так как сейчас считается что мы все используем EUI-48)
- последние 24 бита — 00:00:01
И в итоге получим MAC — 00:00:00:FF:FE:00:00:01 в формате EUI-64.
Если же возьмем MAC 00:00:00:00:00:01, то в преобразованом виде он будет 02:00:00:FF:FE:00:00:01
И исходя из этого система сформирует динамический IPv6 link-local адрес:
- для 02:00:00:00:00:01 — FE80::FF:FE00:1
- для 00:00:00:00:00:01 — FE80::200:FF:FE00:1
Видно что для придуманных маков адрес короче и набирать его быстрей, про это и думали в IEEE добавляя пункт про инверсию бита в сестему преобразования.
На этом моменте буду заканчивать, это вроде все что я хотел вам рассказать о MACах. Дополнительно могу порекомендовать заглянуть в википедию сюда и сюда, а также почитать эту заметку на хабре вместе с комментариями. Этими источниками пользовался и я когда пробовал написать этот материал.
[Голосов: 0 Средний бал: 0 ]