Что такое MAC или физический адрес и стандарты MAC-48, EUI-48 и EUI-64

Все, кто хоть немного разбирается в сетях слышал о 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ах. Дополнительно могу порекомендовать заглянуть в википедию сюда и сюда, а также почитать эту заметку на хабре вместе с комментариями. Этими источниками пользовался и я когда пробовал написать этот материал.