Статья Автор: Деникина Н.В., Деникин А.В.

IPv6 — адресация нового поколения. Структура

Почему появился IPv6?

Когда в 1981 году создавали IPv4, казалось, что 4,3 миллиарда адресов — это невероятно много. Но создатели не предвидели, что интернет станет массовым, а у каждого человека будет несколько устройств: смартфон, ноутбук, планшет, умные часы, телевизор, холодильник...

К 2011 году адреса IPv4 официально закончились. Решение — новый протокол IPv6 с огромным количеством адресов.

📦 IPv4
  • Размер: 32 бита
  • Адресов: 2³² ≈ 4,3 млрд
  • Формат: 4 числа через точку
  • Пример: 192.168.1.1
📦 IPv6
  • Размер: 128 бит
  • Адресов: 2¹²⁸ ≈ 3,4 × 10³⁸
  • Формат: 8 групп через двоеточие
  • Пример: 2001:0db8::1
🔢 Насколько велико число 3,4 × 10³⁸?

Это 340 ундециллионов адресов. Если бы мы раздавали по миллиарду адресов каждую секунду, нам потребовалось бы 10 миллиардов триллионов лет, чтобы раздать все.

Другая аналогия: на каждый квадратный метр поверхности Земли (включая океаны) приходится 6,5 × 10²³ адресов.


Структура IPv6-адреса

IPv6-адрес состоит из 128 бит, разделённых на 8 групп по 16 бит. Каждая группа записывается в шестнадцатеричной системе (hex) — 4 символа.

    Полный формат IPv6:
    
    XXXX : XXXX : XXXX : XXXX : XXXX : XXXX : XXXX : XXXX
    └─┬─┘ └─┬─┘  └─┬─┘   └─┬─┘ └─┬─┘  └─┬─┘  └─┬─┘  └─┬─┘
    
    Всего: 8 групп × 16 бит = 128 бит
💡 Шестнадцатеричная система

В hex используются цифры 0-9 и буквы A-F (или a-f):

Десятичное 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Hex 0 1 2 3 4 5 6 7 8 9 A B C D E F

Правила сокращения IPv6

Полный IPv6-адрес очень длинный и неудобный для записи. Поэтому существуют правила сокращения.

📝 Исходный адрес для примеров
2001:0db8:0000:0000:0000:0000:0000:0001
1 Убираем ведущие нули в каждой группе

Нули в начале группы можно не писать. Но хотя бы один символ должен остаться!

До:     2001 : 0db8 : 0000 : 0000 : 0000 : 0000 : 0000 : 0001
             ↓      ↓      ↓      ↓      ↓      ↓      ↓
После:  2001 :  db8 :    0 :    0 :    0 :    0 :    0 :    1

Результат: 2001:db8:0:0:0:0:0:1   
2 Заменяем последовательность нулевых групп на ::

Если несколько групп подряд состоят только из нулей, их можно заменить на двойное двоеточие.

До:     2001:db8: 0:0:0:0:0 :1
                 └────┬────┘
                 6 нулевых групп подряд
                      ↓
После:  2001:db8:    ::     1

Результат: 2001:db8::1
      
⚠️ Главное правило: :: можно использовать только ОДИН раз!

Почему? Потому что иначе невозможно понять, сколько нулей скрыто в каждом месте.

Адрес: 2001:0000:0000:0042:0000:0000:0000:0001

❌ Неправильно:  2001::42::1
   Непонятно: сколько нулей слева от 42? Сколько справа?

✓ Правильно:   2001:0:0:42::1
   или:        2001::42:0:0:0:1
   
   Выбираем вариант, где :: заменяет БОЛЬШЕ нулей.
   В данном случае лучше: 2001:0:0:42::1

Примеры сокращения

Полный адрес Шаг 1: убираем нули Шаг 2: используем ::
2001:0db8:0000:0000:0000:0000:0000:0001 2001:db8:0:0:0:0:0:1 2001:db8::1
fe80:0000:0000:0000:0000:0000:0000:0001 fe80:0:0:0:0:0:0:1 fe80::1
0000:0000:0000:0000:0000:0000:0000:0001 0:0:0:0:0:0:0:1 ::1
0000:0000:0000:0000:0000:0000:0000:0000 0:0:0:0:0:0:0:0 ::
2001:0db8:0000:0042:0000:0000:0000:0001 2001:db8:0:42:0:0:0:1 2001:db8:0:42::1

Специальные IPv6-адреса

Адрес Полная форма Назначение
:: 0000:0000:...:0000 Неопределённый адрес (аналог 0.0.0.0)
::1 0000:0000:...:0001 Локальный хост — loopback (аналог 127.0.0.1)
fe80:: fe80:0000:...:xxxx Link-local — адрес только для локальной сети
2001:db8:: 2001:0db8:...:xxxx Зарезервировано для документации и примеров

Как восстановить полный адрес из сокращённого?

📝 Пример: восстановим 2001:db8::42:1
1 Считаем группы

Видим группы: 2001, db8, ::, 42, 1
Без :: у нас 4 группы. Всего должно быть 8.
Значит, :: скрывает 8 - 4 = 4 группы нулей.

2 Вставляем нули

2001:db8:0:0:0:0:42:1

3 Дописываем ведущие нули

2001:0db8:0000:0000:0000:0000:0042:0001

Частые ошибки

❌ Неправильно ✓ Правильно Почему?
2001:db8::1::2 2001:db8::1:0:0:2 Двойное двоеточие можно использовать только один раз
2001:db8:0000::1 2001:db8::1 Если используем ::, не нужно писать 0000
2001:DB8::1 2001:db8::1 Технически оба верны, но рекомендуется нижний регистр
2001:db8:0:0:0:0:0:1 2001:db8::1 Не ошибка, но лучше использовать :: для краткости

Сравнение записи IPv4 и IPv6

Параметр IPv4 IPv6
Разделитель Точка . Двоеточие :
Система счисления Десятичная Шестнадцатеричная
Количество групп 4 8
Бит в группе 8 16
Символов в группе 1-3 1-4
Сокращение нулей Нельзя Можно (:: и ведущие нули)
📝 Итог: алгоритм сокращения IPv6
  1. Убери ведущие нули в каждой группе (0042 → 42, 0000 → 0)
  2. Найди самую длинную последовательность нулевых групп
  3. Замени её на :: (только один раз!)
  4. Если есть несколько одинаковых последовательностей — заменяй первую
Печать