Все, кто хоть немного разбирается в сетях слышал о MAC-адресе и знает что это физический адрес сетевой карты «зашитый» в неё производителем. Естественно, многие знают что MAC можно почти всегда поменять в настройках сетевой карты в Windows и всегда в Linux. С появлением IPv6 возможно кто-то слышал про стандарт EUI-64. Но что это такое, откуда берется и для чего он нужен — знают не многие. Кроме этого еще существуют стандарты MAC-48 и EUI-48. Что это такое и для чего они нужны? Давайте разбираться.
- MAC-address или MAC-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)
- EUI-48 и его состав
На текущий момент 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 и его генерация
В реальной жизни 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ах. Дополнительно могу порекомендовать заглянуть в википедию сюда и сюда, а также почитать эту заметку на хабре вместе с комментариями. Этими источниками пользовался и я когда пробовал написать этот материал.