IPv6
Предпосылки: IP и маршрутизация (IP-адрес, маска, маршрутизация), NAT (частные адреса, CGNAT, исчерпание IPv4), DHCP (автоматическая конфигурация).
NAT и CGNAT — костыли, позволяющие IPv4 работать при нехватке адресов. Но у них есть цена: если сервер в интернете хочет связаться с вашим телефоном напрямую, это уже не вопрос адресации, а вопрос обхода NAT. P2P-приложения, звонки и игры вынуждены использовать дополнительные механизмы согласования. IPv6 решает именно корневую проблему: адресов становится достаточно, чтобы NAT перестал быть обязательным способом экономить публичные адреса.
Адресное пространство
IPv4: 32 бита = ~4.3 млрд адресов. IPv6: 128 бит = ~3.4 × 10³⁸ адресов. Для сравнения: на каждый квадратный метр поверхности Земли приходится ~6.7 × 10²³ IPv6-адресов.
Формат IPv6-адреса: восемь групп по четыре шестнадцатеричных символа, разделённых двоеточиями:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Правила сокращения: ведущие нули в группе опускаются (0db8 → db8), одна последовательность нулевых групп заменяется на :: (однократно):
2001:db8:85a3::8a2e:370:7334
Типы адресов
Global unicast — аналог публичного IPv4-адреса. Уникальный, маршрутизируемый в интернете. Начинается с 2000::/3.
Link-local (fe80::/10) — автоматически назначается каждому интерфейсу, работает только в пределах одного сегмента сети (как MAC-адрес по области видимости). Используется для служебного обмена между соседними устройствами — NDP, автоконфигурация.
Loopback (::1) — аналог 127.0.0.1 в IPv4.
SLAAC: автоконфигурация без отдельного сервера
В IPv4 адрес часто выдаёт DHCP-сервер. В IPv6 есть встроенный механизм — SLAAC (Stateless Address Autoconfiguration):
- Интерфейс поднимает link-local адрес в диапазоне
fe80::/10и проверяет его уникальность через NDP (Neighbor Discovery Protocol). - Узел отправляет Router Solicitation или просто ждёт Router Advertisement от роутера.
- Роутер сообщает префикс сети и флаги автоконфигурации, например
2001:db8:1::/64. - Узел сам строит один или несколько адресов внутри этого префикса. Идентификатор интерфейса может быть стабильным или временным/случайным — это уже зависит от реализации и настроек приватности.
Результат: узел может получить рабочий IPv6-адрес вообще без отдельного сервера выдачи адресов. Но это не значит, что DHCPv6 “не нужен”. DHCPv6 используется там, где сеть хочет централизованно раздавать адреса, DNS-параметры или даже делегировать префиксы дальше.
Dual-stack: сосуществование с IPv4
Полный переход на IPv6 невозможен одномоментно — слишком много инфраструктуры работает на IPv4. Стратегия перехода — dual-stack: устройства и сети поддерживают оба протокола одновременно.
В dual-stack каждый интерфейс имеет и IPv4, и IPv6 адрес. DNS возвращает оба типа записей: A (IPv4-адрес) и AAAA (IPv6-адрес). Приложение выбирает протокол: современные реализации используют Happy Eyeballs — параллельно пробуют IPv6 и IPv4, выбирая тот, который отвечает быстрее.
Альтернативы dual-stack (туннелирование IPv6 через IPv4, трансляция 6to4) существуют, но dual-stack остаётся доминирующим подходом.
Текущее состояние перехода
Переход идёт неравномерно. По статистике Google, IPv6 уже занимает заметную долю пользовательского трафика, но картина сильно зависит от региона и типа сети. Мобильные сети и крупные провайдеры продвинулись дальше; корпоративные сети, часть дата-центров и старые устройства часто по-прежнему живут в IPv4-мире.
Практический вывод для разработчика: приложения должны нормально работать в dual-stack среде. Библиотеки и фреймворки часто скрывают разницу, но при работе с сокетами, DNS, правилами доступа и сетевой конфигурацией нужно помнить, что у хоста может быть несколько IPv4- и IPv6-адресов одновременно.
Sources
- RFC 4862, IPv6 Stateless Address Autoconfiguration, 2007. https://www.rfc-editor.org/rfc/rfc4862
- RFC 8415, Dynamic Host Configuration Protocol for IPv6 (DHCPv6), 2018. https://www.rfc-editor.org/rfc/rfc8415
- RFC 8981, Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6, 2021. https://www.rfc-editor.org/rfc/rfc8981
- Google, IPv6 statistics. https://www.google.com/intl/en/ipv6/statistics.html