IPv6: зачем и как читать

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

IPv6 — новая версия протокола IP со 128-битными адресами. Их 2¹²⁸ (≈ 3,4×10³⁸) — практически неисчерпаемо, в отличие от 4,3 млрд адресов IPv4.

Зачем IPv6

IPv4-адреса физически закончились: их раздали все региональные регистраторы. NAT помог растянуть запас, но это костыль. IPv6 решает проблему радикально — адресов хватит, чтобы дать публичный IP буквально каждому устройству, песчинке и лампочке. Заодно убирается нужда в NAT для экономии адресов.

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

128 бит записывают восемью группами по 4 шестнадцатеричных цифры через двоеточие:

2001:0db8:0000:0000:0000:ff00:0042:8329

Это длинно, поэтому есть правила сокращения: ведущие нули в группе можно опускать, а одну самую длинную цепочку нулевых групп заменить на ::. Модуль ipaddress умеет и сжимать, и разворачивать адрес:

import ipaddress

addr = '2001:0db8:0000:0000:0000:ff00:0042:8329'
v6 = ipaddress.ip_address(addr)
print('Исходный:  ', addr)
print('Сжатый:    ', v6.compressed)
print('Полный:    ', v6.exploded)
print('Это IPv6:  ', v6.version == 6)
loop = ipaddress.ip_address('::1')
print('Loopback:  ', loop, '= localhost для IPv6')

Вывод:

Исходный:   2001:0db8:0000:0000:0000:ff00:0042:8329
Сжатый:     2001:db8::ff00:42:8329
Полный:     2001:0db8:0000:0000:0000:ff00:0042:8329
Это IPv6:   True
Loopback:   ::1 = localhost для IPv6

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

Специальные адреса

IPv6Аналог в IPv4Смысл
::1127.0.0.1loopback (этот же компьютер)
::0.0.0.0«любой адрес»
fe80::/10169.254.x.xlink-local (только в сегменте)

Сосуществование с IPv4

IPv4 и IPv6 несовместимы напрямую, поэтому работают параллельно — это называют dual stack: у устройства есть и IPv4-, и IPv6-адрес. В DNS адреса IPv4 хранятся в записях типа A, а IPv6 — в записях AAAA (о типах записей — в разделе про DNS). Браузер обычно сам выбирает, по какому протоколу идти.

Зачем это веб-разработчику

Вы встретите IPv6 в логах (адреса вида 2a03:...), при настройке серверов («слушать на :: вместо 0.0.0.0»), в DNS (запись AAAA). Знать, что ::1 — это localhost, и уметь прочитать сжатый адрес — практически полезный минимум.

Итог

  • IPv6 — 128-битные адреса, их фактически неограниченно.
  • Запись — 8 групп hex через двоеточие; нули сокращают, длинную цепочку нулей заменяют на :: (один раз).
  • ::1 — это localhost, аналог 127.0.0.1.
  • IPv4 и IPv6 сосуществуют в режиме dual stack; в DNS им соответствуют записи A и AAAA.
Проверьте себя
1. Сколько бит в IPv6-адресе?
A32
B64
C128
D256
2. Что означает :: в IPv6-адресе?
AКонец адреса
BЗамену одной самой длинной цепочки нулевых групп (можно использовать только раз)
CРазделитель портов
DПризнак приватного адреса
3. Какой IPv6-адрес соответствует localhost (127.0.0.1)?
A::0
B::1
Cfe80::1
Dff00::
Поддержать проект