Ответы:
RFC 4291 содержит инструкции по созданию адреса EUI64:
Links or Nodes with IEEE 802 48-bit MACs
[EUI64] defines a method to create an IEEE EUI-64 identifier from an
IEEE 48-bit MAC identifier. This is to insert two octets, with
hexadecimal values of 0xFF and 0xFE (see the Note at the end of
appendix), in the middle of the 48-bit MAC (between the company_id
and vendor-supplied id). An example is the 48-bit IEEE MAC with
Global scope:
|0 1|1 3|3 4|
|0 5|6 1|2 7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+
where "c" is the bits of the assigned company_id, "0" is the value of
the universal/local bit to indicate Global scope, "g" is
individual/group bit, and "m" is the bits of the manufacturer-
selected extension identifier. The interface identifier would be of
the form:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+
А RFC 2373 обеспечивает «почему» за переключением 7-го бита:
The motivation for inverting the "u" bit when forming the interface
identifier is to make it easy for system administrators to hand
configure local scope identifiers when hardware tokens are not
available. This is expected to be case for serial links, tunnel end-
points, etc. The alternative would have been for these to be of the
form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler ::1,
::2, etc.
Но это немного глоток. Итак, проще говоря ... В архитектуре MAC-адреса 7-й бит обозначает, был ли MAC-адрес назначен универсально или локально. Значение 0 указывает, что адрес администрируется универсально. Например, когда IANA назначает уникальный идентификатор организации (OUI) поставщику карты NIC, 7-й бит будет равен 0, указывая, что OUI был назначен повсеместно. Если пользователь вручную изменит свой MAC-адрес, этот 7-й бит будет установлен в 1, указывая, что адрес Ethernet был локально администрирован .
На PacketLife также есть более подробная информация об этом .
Это делается для того, чтобы классифицировать назначенные вручную адреса, такие как prefix::1
и prefix::2
т. Д., Как локальные.
Предположим, что вы настраиваете сеть в префиксе 2001:db8:dead:beef::/64
. Вы, вероятно, будете использовать IP-адреса на основе MAC для большинства ваших узлов. Однако для некоторых узлов, таких как DNS-сервер, сервер каталогов и т. Д., Вы захотите использовать адреса, которые легче вводить и которые легче запомнить, чем адреса на основе MAC-адресов. Для DNS-сервера вы, вероятно, захотите использовать
2001:db8:dead:beef::53
Обратите внимание, что бит U / L установлен в 0, что из-за инверсии бита идентифицирует идентификатор хоста как локальный.
EUI 64 означает только MAC-адрес (48 бит), который имеет
..:FF:FE:..
в середине, чтобы заполнить все 64 бита. Отсюда и название EUI-64. Точнее говоря , вы имеете в виду модифицированный EUI-64, который означает EUI-64 в сочетании с бит-флипом 7-го бита.
Седьмой бит изменен, потому что в MAC-адресах этот седьмой бит указывает на разницу между локальным (0) и глобальным (1). Локальным в этом смысле является, например, последовательный интерфейс.
Поскольку все это заключается в автоматическом создании публичного адреса, который будет на глобальном интерфейсе (в терминах MAC), это приведет к 1 на 7-й позиции. Они изменили этот бит, так что вам не нужно записывать адрес дыры, и вы можете использовать сокращенную запись "::"
Пример (из RFC 2373):
...
The alternative would have been for these to be of the
form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler ::1,
::2, etc.
Краткий ответ Даже несмотря на то, что каждый MAC-адрес будет в конечном итоге иметь адрес IPv6, который будет иметь номер HEX больше 0 в некоторой позиции в адресе IPv6. Это позволяет иметь там нули, чтобы вы могли использовать сокращенную запись.