Каковы ключевые различия между протоколами IPv4 и IPv6?

Ответ

IPv4 (Internet Protocol version 4) и IPv6 (Internet Protocol version 6) — это разные версии основного сетевого протокола интернета. IPv6 был разработан как преемник IPv4, в первую очередь для решения проблемы исчерпания адресов.

Характеристика IPv4 IPv6
Длина адреса 32 бита (4 байта) 128 бит (16 байт)
Формат адреса Десятичный с точками: 192.168.1.1 Шестнадцатеричный с двоеточиями: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 (сокращённо 2001:db8:85a3::8a2e:370:7334)
Примерное кол-во адресов ~4.3 миллиарда ~3.4×10³⁸ (практически неисчерпаемо)
Конфигурация адреса Вручную или через DHCP Автоконфигурация без состояния (SLAAC) или DHCPv6
Заголовок пакета Сложный (20+ байт, переменные поля, checksum) Упрощённый, фиксированный (40 байт, нет checksum — это задача более высоких уровней)
Фрагментация Выполняется и маршрутизаторами, и отправителем Только отправителем
Безопасность IPSec — опциональное дополнение IPSec встроен в стандарт (обязателен для реализации)
Поддержка multicast Есть, но используется редко Встроена и эффективна, заменяет broadcast

Практический пример: проверка и работа с IP-адресами в Python:

import ipaddress

# Создание и проверка объектов IP
ipv4 = ipaddress.ip_address('192.168.1.1')
ipv6 = ipaddress.ip_address('2001:db8::1')

print(f"IPv4: {ipv4}, версия: {ipv4.version}")  # версия: 4
print(f"IPv6: {ipv6}, версия: {ipv6.version}")  # версия: 6

# Проверка, входит ли адрес в подсеть
network_v4 = ipaddress.ip_network('192.168.0.0/16')
print(ipv4 in network_v4)  # True

# Итерация по хостам в подсети (осторожно с большими сетями!)
small_net = ipaddress.ip_network('192.168.1.0/28')
for host in small_net.hosts():
    print(host)  # Выведет адреса с 192.168.1.1 по 192.168.1.14

Переход на IPv6 критически важен для развития интернета из-за исчерпания IPv4-адресов, однако миграция идёт медленно из-за необходимости обновления сетевой инфраструктуры и приложений.

Ответ 18+ 🔞

А, слушай, вот это тема, блядь! Сидим тут, пьём чай, а мир-то на пороге цифрового апокалипсиса, ёпта! Речь про IP-адреса, эти цифровые прописки для каждого утюга в сети.

Ну, IPv4 — это наш старый-добрый дедок, который всё помнит и всё может, но у него, сука, квартир на всех не хватает! Всего-то 4.3 миллиарда адресов. Типа 192.168.1.1. Красиво, точки, всё понятно. Но, блядь, они кончились! Овердохуища устройств, а адресов — как говна за баней.

А тут выходит IPv6, такой молодой и дерзкий, в рот меня чих-пых! У него адрес — это уже не циферки, а целая шестнадцатеричная поэма: 2001:db8::8a2e:370:7334. Длина? 128 бит, Карл! Это примерно 340 ундециллионов адресов. Можно каждой песчинке на пляже, каждой молекуле в твоём пиве и ещё каждой твоей глупой мысли в голове по адресу выдать, и всё равно останется!

Вот смотри, как они отличаются, эти два зверя:

Что сравниваем IPv4 (Старичок) IPv6 (Молодой и злой)
Длина адреса 32 бита — коротковато, да? 128 бит — вот это размах, блядь!
Как выглядит 192.168.1.1 (нормально, по-человечески) 2001:db8::8a2e:370:7334 (выглядит, как серийный номер звездолёта)
Сколько их ~4.3 млрд (маловато будет, все уже разобрали) ~3.4×10³⁸ (это число, от которого мозг сворачивается в трубочку)
Как настроить Вручную или DHCP (ну помучайся) Сам настраивается (SLAAC), почти как живой!
Заголовок пакета Сложный, 20+ байт, с checksum (лишняя работа) Упрощённый, 40 байт, фиксированный. Checksum? Да похуй, пусть вышележащие протоколы думают!
Безопасность IPSec — это как опция, доплатишь — будет IPSec вшит в стандарт! Безопасность с рождения, а не как довесок, ёпта!

А теперь, чтобы не быть просто болтуном, вот тебе практика на Python, как с этим чудом работать:

import ipaddress

# Берём адреса, как есть
ipv4 = ipaddress.ip_address('192.168.1.1')
ipv6 = ipaddress.ip_address('2001:db8::1')

print(f"IPv4: {ipv4}, версия: {ipv4.version}")  # Выведет: версия: 4
print(f"IPv6: {ipv6}, версия: {ipv6.version}")  # Выведет: версия: 6

# Проверяем, наш ли это человек (адрес в нашей сети)
network_v4 = ipaddress.ip_network('192.168.0.0/16')
print(ipv4 in network_v4)  # True — свой парень!

# Перебираем хосты в маленькой подсети (с большой не делай — комп взвоет!)
small_net = ipaddress.ip_network('192.168.1.0/28')
for host in small_net.hosts():
    print(host)  # Построчно выдаст все адреса от 192.168.1.1 до 192.168.1.14

И вот главная трагедия, блядь: переходить на IPv6 надо было ещё вчера, потому что IPv4-адреса — это как квартиры в Москве, их нет, а если есть, то стоят, как крыло от боинга. Но миграция идёт, сука, со скоростью пьяного улиткодрона! Всё упирается в старое железо, лень и в этот вечный принцип «работает же — не трогай». А потом все удивляются, почему интернет тормозит и всё через NATы и костыли.

Короче, IPv6 — это наше светлое будущее, где у каждого чайника будет свой уникальный адрес. Будущее, которое нихуя не наступает.