← Назад к вопросам

В чем разница между IPv4 и IPv6?

1.3 Junior🔥 81 комментариев
#REST API и HTTP

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные различия между IPv4 и IPv6

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

Формат адреса

IPv4 использует 32-битную адресацию, представленную четырьмя десятичными числами, разделёнными точками:

192.168.1.1

IPv6 использует 128-битную адресацию, представленную восемью шестнадцатеричными блоками по 16 бит, разделёнными двоеточиями:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

Пространство адресов

  • IPv4: Примерно 4,3 миллиарда уникальных адресов (2^32)
  • IPv6: Примерно 340 триллионов триллионов адресов (2^128)

Нехватка IPv4 адресов — главная причина миграции на IPv6.

Работа с адресами в Python

import ipaddress

# IPv4
ipv4 = ipaddress.ip_address(192.168.1.1)
print(ipv4.version)  # 4
print(ipv4.max_prefixlen)  # 32

# IPv6
ipv6 = ipaddress.ip_address(2001:db8::1)
print(ipv6.version)  # 6
print(ipv6.max_prefixlen)  # 128

# Проверка типа
if isinstance(ipv4, ipaddress.IPv4Address):
    print("Это IPv4 адрес")

Заголовок пакета

IPv4 заголовок:

  • Минимальный размер: 20 байт
  • Поддержка фрагментации на промежуточных маршрутизаторах
  • Контрольная сумма заголовка

IPv6 заголовок:

  • Фиксированный размер: 40 байт
  • Упрощённая структура
  • Фрагментация только на концах
  • Не требует контрольную сумму (проверяется на уровне данных)

Автоконфигурация

IPv6 поддерживает автоматическую конфигурацию адреса (SLAAC), позволяя устройствам получать адреса без DHCP сервера. IPv4 требует явной конфигурации или DHCP.

Безопасность

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

Практический пример

import socket

# Получение адреса хоста для обеих версий
hostname = socket.gethostname()
print(f"Имя хоста: {hostname}")

# IPv4
ipv4_addr = socket.gethostbyname(hostname)
print(f"IPv4: {ipv4_addr}")

# Получение информации для всех версий
results = socket.getaddrinfo(hostname, None)
for family, socktype, proto, canonname, sockaddr in results:
    if family == socket.AF_INET:
        print(f"IPv4: {sockaddr[0]}")
    elif family == socket.AF_INET6:
        print(f"IPv6: {sockaddr[0]}")

Итоговое сравнение

КритерийIPv4IPv6
Размер адреса32 бит128 бит
Количество адресов~4.3 млрд~340 триллионов триллионов
ФорматДесятичныйШестнадцатеричный
Заголовок20+ байт40 байт
ФрагментацияНа маршрутизаторахНа концах
БезопасностьОпциональная IPSecВстроенная IPSec

Для Python-разработчика важно использовать модуль ipaddress для корректной работы с адресами обеих версий и убедиться, что приложение поддерживает оба протокола.