ping6.net
Основы

Основы IPv6: что это такое и почему это важно

В интернете заканчиваются адреса IPv4. IPv6 решает эту проблему с помощью 128-битных адресов и улучшенного дизайна. Вот что нужно знать.

ping6.net15 января 2024 г.7 min read
IPv6сетиосновыадресацияинтернет-протокол

Зачем нужен IPv6#

Адреса IPv4 закончились. Не «могут закончиться» или «скоро закончатся» — они уже закончились. IANA выделила последние блоки региональным регистраторам в 2011 году. К 2015 году большинство регионов исчерпали свои пулы.

TL;DR - Краткое резюме

Ключевые моменты:

  • IPv4 исчерпал свои 4,3 миллиарда адресов; IPv6 предоставляет 340 ундециллионов адресов
  • IPv6 имеет упрощённый 40-байтовый заголовок (против 20-60 байт в IPv4) для более быстрой маршрутизации
  • Автоконфигурация (SLAAC) и встроенный IPsec устраняют необходимость в DHCP и NAT
  • Адреса сжимаются удалением ведущих нулей и :: для последовательных нулей (используется только один раз)

Перейти к: Правила сжатия | IPv6 против IPv4 | Специальные адреса

32-битное адресное пространство IPv4 даёт нам около 4,3 миллиарда адресов. В 1981 году это казалось бесконечным. Но смартфоны, IoT-устройства, серверы и всё остальное, подключённое к интернету, потребляли эти адреса быстрее, чем кто-либо предполагал. Мы обходили это с помощью NAT, carrier-grade NAT и всё более сложных костылей. Эти костыли работают, но они добавляют задержки, нарушают end-to-end соединения и усложняют администрирование сетей.

IPv6 использует 128-битные адреса. Это 340 ундециллионов адресов — достаточно, чтобы дать каждому квадратному метру земной поверхности миллиарды адресов. Они не закончатся.

Формат 128-битного адреса#

IPv6-адрес выглядит так:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

Восемь групп из четырёх шестнадцатеричных цифр, разделённых двоеточиями. Каждая группа представляет 16 бит (4 шестнадцатеричные цифры × 4 бита на цифру = 16 бит). Восемь групп × 16 бит = 128 бит всего.

В шестнадцатеричной системе используются цифры 0-9 и буквы a-f. Регистр не важен — 2001:DB8::1 и 2001:db8::1 идентичны.

Правила сжатия#

Выписывать все 32 шестнадцатеричные цифры утомительно. В IPv6 есть два правила сжатия для укорачивания адресов.

Правило 1: отбрасывание ведущих нулей#

Вы можете удалить ведущие нули из любой группы:

2001:0db8:0000:0042:0000:8a2e:0370:7334

2001:db8:0:42:0:8a2e:370:7334

В каждой группе должна остаться хотя бы одна цифра. Нельзя сжать 0000 до пустоты — для этого есть правило 2.

Правило 2: замена последовательных нулей на ::#

Одну последовательность идущих подряд нулевых групп можно заменить на ::. Это работает только один раз на адрес. Двойное использование было бы неоднозначным — вы не смогли бы определить, сколько нулевых групп представляет каждый ::.

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

2001:db8::1

Выбирайте самую длинную последовательность нулей. Если у вас две одинаковые последовательности, сжимайте первую (хотя большинство инструментов сжимают левую по соглашению).

Один :: на адрес

Вы можете использовать :: только один раз. Адрес 2001::db8::1 некорректен, потому что невозможно определить, сколько нулевых групп представляет каждый ::.

Практические примеры#

Вот как работает сжатие на реальных адресах:

Полный адресСжатыйПримечания
2001:0db8:0000:0000:0000:0000:0000:00012001:db8::1Префикс документации с хостом 1
fe80:0000:0000:0000:0000:0000:0000:0001fe80::1Link-local обратная петля
0000:0000:0000:0000:0000:0000:0000:0001::1Глобальная обратная петля
0000:0000:0000:0000:0000:0000:0000:0000::Неопределённый адрес
2001:0db8:85a3:0000:0000:8a2e:0370:73342001:db8:85a3::8a2e:370:7334Нули в середине адреса

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


IPv6 против IPv4: не только размер#

Большинство сравнений фокусируется на адресном пространстве. Это справедливо — это главная причина существования IPv6. Но редизайн протокола исправил и другие проблемы.

ФункцияIPv4IPv6Влияние
Длина адреса32 бита128 бит340 ундециллионов против 4,3 миллиарда адресов
Формат адресаДесятичные с точкамиШестнадцатеричные с двоеточиямиПроще делить на подсети по границам ниблов
Размер заголовка20-60 байт (переменный)40 байт (фиксированный)Более быстрые решения по маршрутизации
Контрольная сумма заголовкаДаНетМаршрутизаторы делают меньше работы на пакет
ФрагментацияЛюбой маршрутизаторТолько источникМаршрутизаторы делают меньше работы, требуется path MTU discovery
Необходимость NATПочти повсеместноНе нуженВосстановлена end-to-end связность
IPsecДобавлен позжеРазработан изначальноПроще зашифрованная коммуникация
АвтоконфигурацияТребуется DHCPВстроенный SLAACУстройства могут настроить себя сами

Ключевые улучшения помимо адресного пространства#

Упрощённый заголовок#

Заголовок IPv4 имеет 12 обязательных полей и опции, которые расширяют его до 60 байт. Маршрутизаторы должны обрабатывать всё это для каждого пакета. Заголовок IPv6 всегда 40 байт с 8 полями. Дополнительные заголовки обрабатывают всё остальное, но большинству пакетов они не нужны. Маршрутизаторы обрабатывают пакеты быстрее.

NAT не требуется#

В IPv4 почти каждая домашняя и офисная сеть скрывается за NAT. NAT ломает протоколы, которые встраивают IP-адреса (например, SIP для VoIP), усложняет peer-to-peer соединения и добавляет состояние в маршрутизаторы. С достаточным количеством IPv6-адресов для всего устройства могут иметь глобально маршрутизируемые адреса. Ваш ноутбук, телефон и умный холодильник могут быть доступны end-to-end, если вы этого хотите. (Файрволы всё ещё существуют — вы можете блокировать входящий трафик без NAT.)

Автоконфигурация (SLAAC)#

Устройства IPv6 могут настроить себя сами с помощью SLAAC (Stateless Address Autoconfiguration). Маршрутизатор анонсирует сетевой префикс, а устройства генерируют свои собственные адреса. DHCP-сервер не требуется. Вы всё ещё можете использовать DHCPv6 для централизованного управления, но базовая связность работает без него.

Встроенный IPsec#

IPv4 добавил IPsec спустя годы после развёртывания. IPv6 включил его с самого начала. Дизайн чище. (IPsec теперь рекомендован, а не обязателен, но интеграция всё равно лучше, чем в IPv4.)

Производительность в реальном мире

На практике IPv6 часто работает лучше, чем IPv4. Facebook сообщил о 10-15% более быстрых соединениях для пользователей IPv6, потому что трафик IPv6 идёт по более прямым путям — нет carrier-grade NAT, меньше промежуточных устройств, меньше сложности.


Специальные адреса, которые вы встретите#

Обратная петля: ::1#

Адрес обратной петли IPv6. Та же цель, что у 127.0.0.1 в IPv4 — трафик на этот адрес остаётся на локальной машине. В IPv6 только один адрес обратной петли вместо целого блока 127.0.0.0/8 в IPv4.

Неопределённый: ::#

Представляет «нет адреса» или «любой адрес». Вы увидите его, когда устройство ещё не имеет адреса, или в конфигурациях слушающих сокетов для привязки ко всем интерфейсам.

Каждый интерфейс IPv6 автоматически генерирует link-local адрес, начинающийся с fe80::. Эти адреса работают только в локальном сегменте сети — маршрутизаторы не будут их пересылать. Они необходимы для обнаружения соседей, анонсов маршрутизатора и локальной коммуникации. Ваш интерфейс может быть fe80::1 или fe80::a4b2:c3d4:e5f6:7890, в зависимости от того, как генерируется суффикс.

Документация: 2001:db8::/32#

Зарезервирован для примеров и документации. Любой адрес, начинающийся с 2001:db8:, гарантированно никогда не будет назначен в реальном интернете. Поэтому вы видите его в туториалах, RFC и этих примерах. Если вы пишете документацию, используйте префиксы 2001:db8::, чтобы читатели случайно не настроили production-адреса.

IPv6 в URL#

IPv6-адреса в URL нуждаются в квадратных скобках. Без них двоеточия в адресе конфликтовали бы с разделителем порта:

http://[2001:db8::1]/
http://[2001:db8::1]:8080/
https://[2001:db8:85a3::8a2e:370:7334]/api/endpoint

Скобки чётко показывают, где заканчивается адрес и начинается порт. Вы будете использовать эту нотацию в URL браузера, конфигурационных файлах и везде, где комбинируется IPv6-адрес с другими компонентами.


Где мы сейчас#

Внедрение IPv6 реально, но неравномерно. Google сообщает, что около 40% их трафика приходит через IPv6. Основные облачные провайдеры (AWS, Google Cloud, Azure), CDN (Cloudflare, Akamai) и провайдеры (Comcast, T-Mobile, Deutsche Telekom) имеют хорошую поддержку IPv6. Мобильные сети часто работают только на IPv6 с трансляцией обратно в IPv4 при необходимости.

Корпоративные сети отстают. Множество внутренних инструментов и security-устройств всё ещё рассматривают IPv6 как опциональный. Это меняется, но медленно.

Хорошая новость: IPv4 и IPv6 работают бок о бок. Dual-stack сети поддерживают оба. Не нужно переключать выключатель и конвертировать всё за одну ночь. Но если вы создаёте новые системы, проектируйте их для IPv6 с самого начала. Добавить это позже сложнее.

Связанные статьи#

Проверьте своё понимание

Используйте наш валидатор IPv6 для практики написания и сжатия IPv6-адресов. Он покажет вам канонический формат и поймает распространённые ошибки.