Зачем нужен EUI-64?
IPv6-адрес состоит из 128 бит. Обычно он делится на две части:
- Префикс сети (64 бита) — назначается провайдером или администратором
- Идентификатор интерфейса (64 бита) — уникальный адрес устройства в сети
EUI-64 (Extended Unique Identifier — расширенный уникальный идентификатор) — это алгоритм, который позволяет автоматически сгенерировать вторую часть IPv6-адреса из MAC-адреса сетевой карты.
Структура IPv6-адреса
|←──────────── 128 бит ────────────→|
|←── 64 бита ──→|←──── 64 бита ────→|
┌───────────────┬───────────────────┐
│ Префикс сети │ Идентификатор │
│ (от провайд.)│ интерфейса │
└───────────────┴───────────────────┘
↑
Генерируется
из MAC-адреса
по EUI-64
💡 Преимущество EUI-64
Устройство может само сформировать свой IPv6-адрес без DHCP-сервера! Достаточно знать префикс сети и свой MAC-адрес.
Структура MAC-адреса
Прежде чем разбирать алгоритм, вспомним, что такое MAC-адрес.
📚 MAC-адрес
MAC-адрес (Media Access Control) — это уникальный аппаратный адрес сетевого устройства, «прошитый» производителем.
- Размер: 48 бит (6 байт)
- Формат: AA:BB:CC:DD:EE:FF
- Пример: 00:1A:2B:3C:4D:5E
Структура MAC-адреса (48 бит)
|←─────────────── 48 бит ───────────────→|
|←─── 24 бита ───→|←──── 24 бита ────→|
┌─────────────────┬─────────────────────┐
│ OUI │ Уникальный номер │
│ (код произв.) │ устройства │
└─────────────────┴─────────────────────┘
AA:BB:CC DD:EE:FF
OUI = Organizationally Unique Identifier
(идентификатор производителя)
Проблема: MAC = 48 бит, а нужно 64 бита
MAC-адрес содержит 48 бит, а для идентификатора интерфейса в IPv6 нужно 64 бита. Где взять недостающие 16 бит?
Решение: вставить фиксированную последовательность FF:FE (16 бит) в середину MAC-адреса.
MAC (48 бит): AA:BB:CC : DD:EE:FF
↓ вставляем ↓
EUI-64 (64 бита): AA:BB:CC : FF:FE : DD:EE:FF
Алгоритм EUI-64: пошаговая инструкция
📝 Исходные данные для примера
MAC-адрес: 00:1A:2B:3C:4D:5E
1 Разделяем MAC-адрес на две половины
MAC: 00:1A:2B:3C:4D:5E
Первая половина: 00:1A:2B (OUI — код производителя)
Вторая половина: 3C:4D:5E (уникальный номер)
2 Вставляем FF:FE между половинами
00:1A:2B + FF:FE + 3C:4D:5E
Результат: 00:1A:2B:FF:FE:3C:4D:5E
Теперь у нас 64 бита (8 байт) вместо 48 бит (6 байт).
3 Инвертируем 7-й бит первого байта
Это самый сложный шаг. Нужно изменить один конкретный бит в первом байте.
Первый байт: 00 (в шестнадцатеричной системе)
Переводим в двоичную:
| До |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
| После |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
00000000 → 00000010 = 02 (hex)
Было: 00:1A:2B:FF:FE:3C:4D:5E
Стало: 02:1A:2B:FF:FE:3C:4D:5E
4 Записываем в формате IPv6
Группируем байты по два и добавляем двоеточия в стиле IPv6:
EUI-64: 02:1A:2B:FF:FE:3C:4D:5E
Группируем: 02:1A | 2B:FF | FE:3C | 4D:5E
IPv6 формат: 021A:2BFF:FE3C:4D5E
✓ Итоговый результат
MAC: 00:1A:2B:3C:4D:5E
EUI-64: 021A:2BFF:FE3C:4D5E
Если префикс сети 2001:db8:1:2, то полный IPv6-адрес:
2001:db8:1:2:021A:2BFF:FE3C:4D5E
Что такое 7-й бит и зачем его инвертировать?
7-й бит первого байта MAC-адреса называется U/L бит (Universal/Local — универсальный/локальный).
Структура первого байта MAC-адреса
Первый байт MAC-адреса:
Бит: 7 6 5 4 3 2 1 0
│ │ │ │ │ │ │ │
│ U/L │ │ │ │ │ │
│ │ │ │ │ │ │ │
I/G ─── остальные биты ─────────────
I/G = Individual/Group (одиночный/групповой)
U/L = Universal/Local (универсальный/локальный)
| Значение 7-го бита (U/L) |
Тип адреса |
Что означает |
0 |
Universal (глобальный) |
Адрес назначен производителем, уникален во всём мире |
1 |
Local (локальный) |
Адрес изменён администратором вручную |
💡 Почему инвертируем?
В MAC-адресах большинство карт имеют U/L = 0 (заводской адрес).
В IPv6 решили инвертировать этот бит, чтобы:
- Адреса, созданные из настоящих MAC, имели бит = 1
- Адреса, назначенные вручную, имели бит = 0
Это упрощает идентификацию: если видите 02, 06, 0A, 0E и т.д. в начале — скорее всего, адрес создан из MAC.
Быстрый способ инвертировать 7-й бит
Чтобы инвертировать 7-й бит, нужно выполнить XOR с числом 2 (в hex: 02).
Первый байт XOR 02 = Новый первый байт
Примеры:
00 XOR 02 = 02
02 XOR 02 = 00
0A XOR 02 = 08
C0 XOR 02 = C2
💡 Ещё проще: таблица изменений второй hex-цифры
7-й бит влияет на вторую цифру первого байта (при записи в hex):
| Было |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
| Стало |
2 |
3 |
0 |
1 |
6 |
7 |
4 |
5 |
A |
B |
8 |
9 |
E |
F |
C |
D |
Например: 00 → 02, 0C → 0E, 1A → 18
Ещё примеры
| MAC-адрес |
Шаг 1-2: вставили FF:FE |
Шаг 3: инверсия бита |
EUI-64 (IPv6 формат) |
00:1A:2B:3C:4D:5E |
00:1A:2B:FF:FE:3C:4D:5E |
02:1A:2B:FF:FE:3C:4D:5E |
021A:2BFF:FE3C:4D5E |
08:00:27:AB:CD:EF |
08:00:27:FF:FE:AB:CD:EF |
0A:00:27:FF:FE:AB:CD:EF |
0A00:27FF:FEAB:CDEF |
AC:DE:48:12:34:56 |
AC:DE:48:FF:FE:12:34:56 |
AE:DE:48:FF:FE:12:34:56 |
AEDE:48FF:FE12:3456 |
02:00:00:00:00:01 |
02:00:00:FF:FE:00:00:01 |
00:00:00:FF:FE:00:00:01 |
0000:00FF:FE00:0001 |
Как определить EUI-64 «на глаз»?
🔍 Признаки EUI-64 в IPv6-адресе
Если в идентификаторе интерфейса (последние 64 бита) вы видите:
FF:FE в середине — это почти наверняка EUI-64
- Группы 5 и 6 выглядят как
xxFF:FExx
Пример адреса: 2001:db8:1:2:021A:2BFF:FE3C:4D5E
└──────────────────┘
Это EUI-64: виден FF:FE
Обратная задача: извлечь MAC из EUI-64
📝 Пример: дан EUI-64, найти MAC
EUI-64: 021A:2BFF:FE3C:4D5E
2 Убираем FF:FE из середины
02:1A:2B:FF:FE:3C:4D:5E → 02:1A:2B:3C:4D:5E
3 Инвертируем 7-й бит обратно
02:1A:2B:3C:4D:5E → 00:1A:2B:3C:4D:5E
✓ Результат
MAC-адрес: 00:1A:2B:3C:4D:5E
Алгоритм EUI-64: краткая шпаргалка
📋 MAC → EUI-64
- Раздели MAC на две половины:
XX:XX:XX | YY:YY:YY
- Вставь
FF:FE между ними: XX:XX:XX:FF:FE:YY:YY:YY
- Инвертируй 7-й бит первого байта (XOR 02)
- Запиши в формате IPv6:
XXXX:XXFF:FEYY:YYYY