Основы IPv6: что это такое и почему это важно
В интернете заканчиваются адреса IPv4. IPv6 решает эту проблему с помощью 128-битных адресов и улучшенного дизайна. Вот что нужно знать.
Зачем нужен 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:0001 | 2001:db8::1 | Префикс документации с хостом 1 |
fe80:0000:0000:0000:0000:0000:0000:0001 | fe80::1 | Link-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:7334 | 2001:db8:85a3::8a2e:370:7334 | Нули в середине адреса |
Попробуйте разные форматы с нашим валидатором IPv6, чтобы увидеть, как работает сжатие.
IPv6 против IPv4: не только размер#
Большинство сравнений фокусируется на адресном пространстве. Это справедливо — это главная причина существования IPv6. Но редизайн протокола исправил и другие проблемы.
| Функция | IPv4 | IPv6 | Влияние |
|---|---|---|---|
| Длина адреса | 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.
Неопределённый: ::#
Представляет «нет адреса» или «любой адрес». Вы увидите его, когда устройство ещё не имеет адреса, или в конфигурациях слушающих сокетов для привязки ко всем интерфейсам.
Link-Local: fe80::/10#
Каждый интерфейс 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 — Изучите unicast, multicast, anycast и специальные диапазоны, которые вы будете использовать в своих сетях
- Руководство по разбиению IPv6 на подсети — Узнайте, как разделить ваше IPv6-пространство на меньшие сети проще, чем в IPv4
Проверьте своё понимание
Используйте наш валидатор IPv6 для практики написания и сжатия IPv6-адресов. Он покажет вам канонический формат и поймает распространённые ошибки.