Почему IPv6 существует

IPv4 имеет примерно 4,3 миллиарда адресов (2^32). Это казалось неисчерпаемым в 1980-х и теперь давно исчерпано в реестрах. IPv6, определённый для адресации в RFC 4291, расширяет адрес с 32 битов до 128 битов, что составляет 2^128 адресов, число достаточно большое, чтобы дефицит перестал быть проектным ограничением. Практический эффект в том, что подсети становятся огромными, а трюки экономии адресов вроде больше не требуются для базовой связности.

128-битная структура

Адрес IPv6 — это 128 битов, записываемых как восемь групп по четыре шестнадцатеричные цифры, разделённых двоеточиями. Каждая группа — это 16-битное значение:

2001:0db8:0000:0000:0008:0800:200c:417a

Эта полностью записанная форма — развёрнутое представление. Поскольку она длинна и полна нулей, текстовая форма имеет правила сжатия.

Запись адреса: правила сжатия

Два правила сокращают текст, и RFC 5952 делает результат каноническим (один адрес, одно предпочтительное написание):

  • Подавите ведущие нули в каждой группе: 0db8 становится db8, 0000 становится 0.
  • Замените один прогон последовательных полностью-нулевых групп на ::. Двойное двоеточие может появиться самое большее один раз, и оно представляет одну или более 16-битных групп нулей. Когда существует несколько прогонов равной длины, сжимается первый.

Применение обоих к адресу выше даёт его каноническую форму:

2001:db8::8:800:200c:417a

RFC 5952 добавляет несколько завершающих правил, чтобы инструменты согласовались: шестнадцатеричные цифры в нижнем регистре, и :: не используется, чтобы «сжать» одну нулевую группу (это не сократило бы ничего значимого). Инструмент IPv6 показывает и каноническую сжатую форму, и полностью развёрнутую форму бок о бок, так что вы можете увидеть точно, что представляет ::.

Особый случай: адрес может нести встроенный IPv4 хвост в своих последних 32 битах, записанный в точечно-десятичном виде. Самая распространённая — IPv4-сопоставленная форма, где RFC 5952 рекомендует смешанную нотацию ::ffff:192.0.2.128, а не чистый шестнадцатеричный.

Префиксы и арифметика префиксов

Как и в IPv4, префикс IPv6 записывается адрес/длина, где длина считает ведущие сетевые биты:

2001:db8::/64

/64 означает, что первые 64 бита — это сеть, а оставшиеся 64 — идентификатор интерфейса. /64 — стандартный размер для одной LAN, и он один вмещает 2^64 адреса, около 18 квинтиллионов. Инструмент вычисляет адрес сети (первый), последний адрес, и счёт для любого префикса, который вы ему дадите, маскируя хост-биты в ноль, чтобы найти сеть, даже если вы ввели адрес с установленными хост-битами.

Типы адресов и области

Старшие биты адреса помещают его в категорию. Самые важные, из RFC 4291 и реестра :

  • Глобальный unicast (2000::/3) — это маршрутизируемое публичное пространство, эквивалент IPv6 публичного адреса IPv4.
  • Уникальный локальный, или ULA (fc00::/7) — это пространство приватного использования (RFC 4193), аналогичное RFC 1918 в IPv4. Оно не маршрутизируется в публичном интернете.
  • Link-local unicast (fe80::/10) действителен только на одном канале и настраивается автоматически на каждом интерфейсе IPv6. Маршрутизаторы никогда его не пересылают. Его область — локальный канал.
  • Multicast (ff00::/8) адресует группу, а не один хост. Поле области внутри адреса говорит, как далеко он достигает: interface-local, link-local, admin-local, site-local, organization-local, или global. Например ff02::1 — это link-local группа всех-узлов.
  • Loopback (::1/128) — это эквивалент IPv6 для 127.0.0.1, а неуказанный адрес (::/128) означает «никакого адреса», используется как заполнитель во время настройки.
  • Документация (2001:db8::/32) зарезервирована RFC 3849 для примеров и письма, что и есть причина, почему почти каждый пример IPv6, который вы видите, включая канонический в самом RFC 4291, его использует.

Инструмент IPv6 сообщает соответствующий тип и конкретный префикс, который он сопоставил, плюс область для адресов multicast и link-local.

Идентификаторы интерфейса и EUI-64

В типичном /64 нижние 64 бита — это идентификатор интерфейса. Один исторический способ его построения был модифицированный (RFC 4291, Приложение A): возьмите 48-битный MAC-адрес, вставьте байты ff:fe в середину, и переверните седьмой бит (бит universal/local). Это делало id интерфейса выводимым из аппаратного адреса. Когда инструмент видит выдающий ff:fe в середине id интерфейса, он обращает процесс и показывает вам исходный MAC. Современные системы часто предпочитают вместо этого рандомизированные или приватные идентификаторы интерфейса, именно потому что вывод id из MAC утекает аппаратный адрес.

Обратный DNS: ip6.arpa

Обратные запросы (адрес в имя) для IPv6 живут под доменом ip6.arpa. Адрес развёртывается до своих 32 шестнадцатеричных полубайтов, эти полубайты переворачиваются, и каждый становится меткой. Так 2001:db8::1 становится именем, оканчивающимся на ...8.b.d.0.1.0.0.2.ip6.arpa. Инструмент генерирует это имя для любого адреса, что и есть точное значение, которое вы поместили бы в запись PTR.

Замечание о том, что делает инструмент

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