IP-адрес и протокол IP: IPv4, IPv6, подсети и NAT

IP-адрес и протокол IP: IPv4, IPv6, подсети и NAT Полезное

Протокол IP (Internet Protocol) — это протокол сетевого уровня, который отвечает за адресацию узлов и маршрутизацию пакетов между разными сетями. IP-адрес — это числовой идентификатор сетевого интерфейса, по которому протокол находит нужный узел. Это разные вещи: протокол — правила доставки, адрес — конкретный номер получателя. Ниже разберем формат IPv4 и IPv6, размер адресного пространства, приватные диапазоны, маску и CIDR, статику против DHCP и коротко NAT.

Протокол IP и IP-адрес — разводим термины

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

  • Протокол IP — набор правил: как упаковать данные в пакет (датаграмму), как проставить адреса отправителя и получателя, как маршрутизаторы передают пакет от сети к сети. IP не гарантирует доставку: пакеты могут потеряться, продублироваться или прийти не по порядку. За надежность отвечает транспортный уровень (TCP), а не IP.
  • IP-адрес — значение в заголовке пакета, которое идентифицирует интерфейс. Адрес привязан к сетевому интерфейсу, а не к устройству целиком: у хоста с двумя интерфейсами будет два адреса.
  • Версия протокола (IPv4 или IPv6) определяет формат адреса и заголовка. IPv4 и IPv6 — это два разных формата, а не «старый и новый адрес одного вида».

IPv4: формат и размер адресного пространства

IPv4 использует 32-битные адреса. Запись — четыре десятичных числа (октета) от 0 до 255, разделенные точками, например 192.168.1.10. Каждый октет — один байт адреса.

Размер адресного пространства — 2 в степени 32, то есть 4 294 967 296 адресов. Часть из них зарезервирована (приватные, loopback, служебные), поэтому публично маршрутизируемых меньше. Именно исчерпание этого пространства стало главной причиной перехода на IPv6.

Адрес делится на сетевую и хостовую части. Сетевая часть общая для всех узлов одной сети, хостовая различает узлы внутри нее. Где проходит граница — задает маска или префикс (см. раздел про CIDR).

IPv6: формат и размер адресного пространства

IPv6 использует 128-битные адреса. Запись — восемь групп по четыре шестнадцатеричных цифры через двоеточие, например 2001:0db8:0000:0000:0000:0000:0000:0001. Правила сокращения:

  • незначащие ведущие нули в группе опускаются: 0db8 пишется как db8;
  • одну самую длинную цепочку групп из нулей заменяют на :: (двойное двоеточие), но только один раз в адресе;
  • в URL адрес берут в квадратные скобки, а порт указывают после них: [2001:db8::1]:443.

С учетом сокращений адрес выше записывается как 2001:db8::1. Размер пространства — 2 в степени 128, это примерно 3,4 на 10 в степени 38 адресов: запас, снимающий дефицит IPv4. IPv6 — не «версия адреса», а отдельный протокол с собственным форматом заголовка фиксированной длины 40 байт.

Публичные и приватные адреса

Публичный (белый) адрес маршрутизируется в интернете и уникален глобально. Приватный (серый) используется только внутри локальной сети и в интернете не маршрутизируется — такие пакеты выходят наружу через NAT. Приватные диапазоны IPv4 закреплены в RFC 1918:

Диапазон (CIDR) Границы Число адресов Типичное применение
10.0.0.0/8 10.0.0.0 — 10.255.255.255 16 777 216 крупные корпоративные сети
172.16.0.0/12 172.16.0.0 — 172.31.255.255 1 048 576 средние сети
192.168.0.0/16 192.168.0.0 — 192.168.255.255 65 536 домашние и офисные сети

Отдельно стоит помнить про 127.0.0.0/8 — это loopback (петля на сам узел, 127.0.0.1), не приватная сеть в смысле RFC 1918, и про 169.254.0.0/16 — link-local, который узел назначает себе сам, когда не получил адрес по DHCP. В IPv6 роль приватных играют ULA (fc00::/7, практически fd00::/8) и link-local (fe80::/10).

Подсети, маска и CIDR

Подсеть — логическое деление сети на меньшие части. Границу между сетевой и хостовой частью задает маска подсети — двоичная маска, где единицы стоят на битах сетевой части, а нули — на битах хостовой. Для 192.168.1.0 с 24 сетевыми битами маска — 255.255.255.0.

CIDR (бесклассовая маршрутизация) пишет длину сетевой части после адреса через слеш — в БИТАХ, не в байтах: 192.168.1.0/24 значит 24 сетевых бита. Это заменило старую классовую адресацию (A, B, C), где размер сети был жестко привязан к первому октету.

Для сети /24 доступно 256 адресов, из них два служебных: 192.168.1.0 — адрес самой сети, 192.168.1.255 — широковещательный (пакет всем узлам сети). Под хосты остается 254 адреса — от .1 до .254. Общее правило: у сети с префиксом /n число адресов равно 2 в степени (32 минус n), а под хосты в IPv4 обычно на два меньше (сеть плюс broadcast). Чем длиннее префикс, тем меньше сеть.

Как выбрать префикс на практике: считайте нужное число хостов и берите ближайшую большую степень двойки. Для двух узлов «точка-точка» подойдет /30 (4 адреса, 2 под хосты); для сегмента на сотню машин — /24 (254 хоста); для объединения нескольких подсетей в одну запись маршрутизации — короткий префикс вроде /16 (65 536 адресов). Именно так CIDR позволяет нарезать пространство под задачу, а не под фиксированный класс.

Статические и динамические адреса, DHCP

Статический адрес назначается вручную и не меняется — его берут для серверов, принтеров, шлюзов, которые всегда должны быть по одному адресу. Динамический адрес узел получает автоматически на время (аренду) и при следующем подключении может получить другой.

Раздает динамические адреса DHCP (Dynamic Host Configuration Protocol). Упрощенно обмен идет в четыре шага (DORA): клиент шлет Discover (ищет сервер), сервер отвечает Offer (предлагает адрес), клиент шлет Request (просит именно его), сервер подтверждает Ack. Вместе с адресом DHCP обычно выдает маску, шлюз по умолчанию и адреса DNS. Это упрощенная схема; детали (продление аренды, релеи между подсетями) выходят за рамки статьи.

NAT кратко

NAT (Network Address Translation) — трансляция адресов: пограничный маршрутизатор подменяет приватный адрес отправителя на свой публичный, чтобы устройства локальной сети выходили в интернет через один белый адрес. В домашних роутерах работает разновидность с учетом портов (PAT, она же NAT overload): по номеру порта роутер различает, какому внутреннему узлу вернуть ответ.

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

Практика на Python (ipaddress)

Модуль ipaddress из стандартной библиотеки Python разбирает адреса и сети без сторонних пакетов. Пример проверен на Python 3.12; вывод указан в комментариях.

import ipaddress

net = ipaddress.ip_network("192.168.1.0/24")
print(net.netmask)            # 255.255.255.0
print(net.num_addresses)      # 256
print(net.network_address)    # 192.168.1.0
print(net.broadcast_address)  # 192.168.1.255

hosts = list(net.hosts())
print(hosts[0], hosts[-1], len(hosts))  # 192.168.1.1 192.168.1.254 254

addr = ipaddress.ip_address("192.168.1.10")
print(addr.is_private)  # True
print(addr in net)      # True
print(ipaddress.ip_address("8.8.8.8").is_private)  # False

Тот же модуль сокращает IPv6-адрес и раскрывает его обратно:

import ipaddress

v6 = ipaddress.ip_address("2001:0db8:0000:0000:0000:0000:0000:0001")
print(v6.compressed)  # 2001:db8::1
print(v6.exploded)    # 2001:0db8:0000:0000:0000:0000:0000:0001

Выводы

  • Протокол IP — это правила адресации и маршрутизации пакетов; IP-адрес — идентификатор интерфейса. Это разные сущности, не синонимы.
  • IPv4 — 32 бита (около 4,29 млрд адресов), IPv6 — 128 бит (примерно 3,4 на 10^38): IPv6 решает дефицит адресов IPv4.
  • Приватные диапазоны IPv4: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16; в интернете не маршрутизируются, наружу выходят через NAT.
  • Маска и префикс CIDR (длина в битах) делят адрес на сетевую и хостовую части; у /24 под хосты остается 254 адреса.
  • Статику задают вручную для постоянных узлов, динамику раздает DHCP на время аренды; NAT дает выход в интернет через один публичный адрес.

Где применяется / связь с практикой

Адресация, подсети, DHCP и NAT — базовый инструментарий любого, кто настраивает и диагностирует сети: от домашнего роутера до корпоративной инфраструктуры. На практике это планирование адресного плана, деление на подсети, настройка маршрутизации и трансляции адресов.

Освойте тему на практике

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

FAQ

Может ли у одного устройства быть несколько IP-адресов?
Да. Адрес привязан к интерфейсу, поэтому у устройства с несколькими интерфейсами (или с IPv4 и IPv6 одновременно) будет несколько адресов.

Приватный адрес виден в интернете?
Нет. Приватные адреса не маршрутизируются в интернете; наружу узел выходит под публичным адресом роутера через NAT.

Нужно ли отключать IPv4, если включен IPv6?
Нет. Большинство сетей работают в режиме dual-stack — IPv4 и IPv6 одновременно, узел выбирает версию под доступность собеседника.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)