This article is available in Russian only. English translation is not yet available.
Сети

IPv4 и IPv6: в чём разница

IPv4 и IPv6 различаются адресным пространством и работой протокола, а совместимость зависит от DNS, выбора адреса и реальной доступности сервера.

IPv4 и IPv6 — версии сетевого протокола, который задаёт формат пакетов, адресацию и доставку между узлами. Сам протокол не «выдаёт» адрес устройству. Адрес настраивается вручную или назначается механизмами вроде DHCP, SLAAC и средствами провайдера. IPv6 создавался прежде всего для значительно большего адресного пространства и обновлённой архитектуры протокола.

Обе версии одновременно используются в интернете. Поддержка IPv6 на сервере не означает, что IPv4 можно немедленно отключить, а наличие AAAA в DNS не доказывает, что маршрут и приложение работают. Для корректного вывода нужно отдельно проверить DNS, сетевую связность и конкретный сервис.

Формат и объём адресов

IPv4

IPv4-адрес содержит 32 бита и обычно записывается четырьмя десятичными октетами от 0 до 255:

192.0.2.1
203.0.113.45

Математически пространство содержит 2^32, то есть 4 294 967 296 значений. Не все они доступны как публичные адреса: существуют частные, служебные, многоадресные и другие специальные диапазоны. Дефицит публичного пространства привёл к широкому использованию NAT и совместного использования одного внешнего IPv4, но NAT не является обязательной частью самого IPv4.

Диапазоны 192.0.2.0/24, 198.51.100.0/24 и 203.0.113.0/24 зарезервированы RFC 5737 для документации. Адреса выше являются безопасными примерами, а не готовыми адресами серверов и не должны маршрутизироваться в публичном интернете.

IPv6

IPv6-адрес содержит 128 бит и записывается шестнадцатеричными группами:

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

Ведущие нули в группе опускают, а одну последовательность нулевых групп сокращают через :::

2001:db8::1

Пространство содержит 2^128, примерно 3,4 × 10^38 значений. Это не означает, что любой адрес можно произвольно назначить: провайдер или администратор выделяет префикс, а правила маршрутизации и область действия остаются обязательными. 2001:db8::/32 зарезервирован для документации и не является публично маршрутизируемой сетью.

Различия протоколов

Свойство IPv4 IPv6
Длина адреса 32 бита 128 бит
Обычная запись десятичные октеты с точками шестнадцатеричные группы с двоеточиями
Базовый заголовок от 20 байт, возможны опции фиксированные 40 байт, дополнительные extension headers
Контрольная сумма заголовка есть в базовом заголовке отсутствует
Фрагментация возможна на маршрутизаторе маршрутизаторы не фрагментируют пакет
Broadcast поддерживается broadcast отсутствует; применяются multicast и другие механизмы
NAT для экономии адресов широко используется, но не обязателен протоколом для экономии адресов не требуется; трансляция всё равно возможна

Упрощение заголовка не гарантирует, что IPv6 всегда быстрее. Реальная задержка зависит от маршрута, пиринга, MTU, firewall, DNS и приложения. Сравнивать версии нужно на одной услуге и из одной сети, а не по общему рекламному утверждению.

A, AAAA и выбор адреса

DNS-запись A содержит IPv4, а AAAA — IPv6. Для одного имени могут одновременно существовать несколько записей обоих типов:

dig example.com A +short
dig example.com AAAA +short

Посмотреть их можно через DNS-инструмент. Наличие записи означает только публикацию адреса. Оно не подтверждает маршрут, открытый порт, корректный сертификат или ответ веб-приложения.

Поведение клиента зависит от его сети:

  • IPv4-only клиент использует IPv4-адреса из A.
  • Dual-stack клиент обычно запрашивает A и AAAA и рассматривает адреса обоих семейств.
  • IPv6-only клиент использует IPv6; сеть с DNS64/NAT64 может синтезировать AAAA из A и перевести соединение к IPv4-only серверу.
  • IPv6-only клиент без AAAA и без подходящего переходного механизма не сможет обратиться к IPv4-only сервису.

Выбор в dual stack не сводится к правилу «всегда IPv6, затем IPv4». RFC 6724 сортирует адреса с учётом доступного источника и области действия. Реализации Happy Eyeballs по RFC 8305 запускают попытки с небольшой задержкой и используют соединение, которое успешно установилось. Поэтому рабочий IPv4 часто скрывает поломку IPv6 от пользователя, но не устраняет её.

Отсутствующая и сломанная AAAA — разные случаи

Если AAAA отсутствует, dual-stack-клиент обычно подключится по A. В IPv6-only сети DNS64 может создать синтетическую AAAA на основании A. Такое имя не считается автоматически неисправным.

Если AAAA опубликована, но ведёт на недоступный адрес, DNS64 обычно не подменяет её синтетическим значением. Причиной сбоя могут быть опечатка, отсутствие маршрута, закрытый firewall, неработающий слушатель или неправильный TLS. Happy Eyeballs способен временно скрыть проблему на dual-stack-клиенте переходом к IPv4, тогда как IPv6-only клиент останется без рабочего пути.

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

Что означает dual stack на сервере

Dual stack означает поддержку IPv4 и IPv6 одним узлом или сервисной архитектурой. Это не требование слушать ровно на двух адресах. Приложение может использовать отдельные IPv4- и IPv6-сокеты, конкретные адреса, wildcard-адреса или один IPv6-сокет с платформенно-зависимой поддержкой IPv4-mapped адресов.

Для Nginx распространён вариант с отдельными директивами:

listen 443 ssl;
listen [::]:443 ssl;

Это пример, а не универсальная конфигурация. Нужно учитывать версию Nginx, параметры ipv6only, контейнерную сеть, балансировщик и уже существующие блоки server. После изменения проверьте фактические слушатели и не предполагайте, что IPv4-правила firewall автоматически покрывают IPv6.

Раздельная проверка подключения

Запускайте тесты из сети, где действительно доступны обе версии:

curl -4 https://example.com -I
curl -6 https://example.com -I

Успешный curl -4 и неуспешный curl -6 задают направление диагностики, но не называют причину. Ошибка может находиться на тестовом клиенте, в маршруте, DNS, firewall, балансировщике, TLS или приложении. Сначала сохраните точный текст ошибки и адрес, к которому выполнялась попытка.

Проверка сайта показывает найденные A/AAAA и выполняет одну внешнюю HTTPS-проверку, но не доказывает работу каждого семейства отдельно. HTTP-запрос использует один выбранный адрес. Для подтверждения нужны независимые curl -4 и curl -6 или мониторинг из явно разделённых IPv4- и IPv6-точек.

Практическая диагностика IPv6

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

  1. Запросите A и AAAA и запишите все адреса, а не только первый.
  2. Убедитесь, что AAAA принадлежит текущей инфраструктуре, а не старому серверу после миграции.
  3. Проверьте наличие глобального адреса и маршрута на сервере или балансировщике.
  4. Выполните curl -6 из внешней IPv6-сети и отдельно проверьте порт 443.
  5. Сверьте IPv6-правила firewall, security group и reverse proxy.
  6. Проверьте, что сертификат и виртуальный хост выбираются по доменному имени.
  7. После исправления повторите тест для каждого опубликованного AAAA.

Если AAAA ещё нет, не добавляйте её до завершения шагов с адресом и приложением. Сначала можно протестировать прямой маршрут в контролируемой среде, не публикуя неработающий адрес всем клиентам.

Типичные ошибки

  • Считать, что отсутствие AAAA ломает доступ всем пользователям с IPv6.
  • Публиковать AAAA до настройки маршрута, firewall и HTTPS.
  • Проверять только первый адрес при нескольких A или AAAA.
  • Отключать IPv4 сразу после первого успешного IPv6-теста.
  • Ожидать одинаковые правила wildcard-сокетов на всех системах.
  • Считать успешное разрешение DNS доказательством доступности сервиса.
  • Путать link-local диапазон fe80::/10 с глобально маршрутизируемым адресом.
  • Использовать документационные адреса как готовую конфигурацию сервера.

Частые вопросы

Нужно ли отключать IPv4 при включении IPv6?

Нет. При dual stack IPv4 и IPv6 работают параллельно, поэтому клиенты могут использовать доступное семейство. Отключать IPv4 следует только после отдельной оценки аудитории, зависимостей и переходных механизмов, а не сразу после публикации AAAA.

Почему сайт работает по IPv4, но не открывается у IPv6-клиентов?

Причиной может быть неверная AAAA, отсутствие маршрута, firewall, веб-сервер или TLS. Отсутствие AAAA само по себе не мешает dual-stack-клиенту использовать A, а IPv6-only сеть может применять DNS64/NAT64. Проверяйте DNS и подключение curl -6 раздельно.

Чем отличается A-запись от AAAA?

A содержит IPv4-адрес, а AAAA — IPv6-адрес. Обе записи могут существовать одновременно. Dual-stack-клиент обычно получает оба типа и выбирает порядок попыток; DNS64 также может синтезировать AAAA из A для IPv6-only сети.

Check it in practice

Related terms

Sources

  1. RFC 791: Internet Protocol
  2. RFC 8200: Internet Protocol, Version 6 Specification
  3. RFC 4291: IP Version 6 Addressing Architecture
  4. RFC 3596: DNS Extensions to Support IP Version 6
  5. RFC 6724: Default Address Selection for IPv6
  6. RFC 8305: Happy Eyeballs Version 2
  7. RFC 6147: DNS64
  8. RFC 5737: IPv4 Address Blocks Reserved for Documentation
  9. RFC 3849: IPv6 Address Prefix Reserved for Documentation

Как узнать IP-адрес сайта

IP-адрес сайта получают из DNS, но один домен может вести на несколько узлов, а CDN способен менять ответ в зависимости от сети пользователя.

Как проверить DNS-записи домена

Разбираем, где смотреть DNS-записи, как отличить авторитетный ответ от кешированного и какие ошибки не следует принимать за поломку DNS.