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 | Смысл |
::1 | 127.0.0.1 | loopback (этот же компьютер) |
:: | 0.0.0.0 | «любой адрес» |
fe80::/10 | 169.254.x.x | link-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.