Что такое IP-адрес и адресация: IPv4, IPv6, подсети и маски

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

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

Чтобы не путать близкие понятия, держите короткий словарь:

  • IP-адрес — логический адрес интерфейса, назначается настройкой или DHCP, может меняться.
  • MAC-адрес — аппаратный адрес сетевой карты (48 бит, вида 00:1A:2B:3C:4D:5E), работает в пределах одного сегмента, обычно не меняется.
  • Номер сети и номер хоста — две части одного IP-адреса; где проходит граница, задает маска.
  • Маска подсети и префикс (/24) — два способа записать одно и то же: сколько старших бит отведено под сеть.

Из чего состоит IPv4-адрес

Самый распространенный формат — IPv4. Это 32 бита, записанные как четыре десятичных числа (октета) через точку: 192.168.1.130. Каждый октет — это 8 бит, поэтому его значение лежит в диапазоне от 0 до 255. Всего адресное пространство IPv4 — это 2 в степени 32, около 4,29 млрд адресов.

Адрес делится на две части: старшие биты — номер сети, младшие — номер хоста. Важно: граница между ними НЕ фиксирована на «трех октетах». Ее задает маска подсети, и в современных сетях она может проходить в любом месте, хоть посреди октета.

Маска подсети и префикс CIDR

Маска подсети — это тоже 32 бита. В старших разрядах стоят единицы (это биты сети), в младших — нули (биты хоста). Например, маска 255.255.255.0 в двоичном виде — это 24 единицы и 8 нулей. Короткая запись того же самого — префикс /24 (число единиц в маске). Такую запись называют CIDR (Classless Inter-Domain Routing).

Префикс Маска Бит под хост Адресов всего Доступно хостам
/24 255.255.255.0 8 256 254
/25 255.255.255.128 7 128 126
/26 255.255.255.192 6 64 62
/30 255.255.255.252 2 4 2

Из общего числа адресов в сети два всегда служебные: младший — адрес сети (все биты хоста нули), старший — широковещательный (все биты хоста единицы). Поэтому под реальные устройства остается на два меньше. Для /30 это 2 адреса — ровно на канал между двумя маршрутизаторами.

Как маска делит адрес: операция логического И

Чтобы получить номер сети, устройство выполняет побитовое логическое И между IP-адресом и маской. Проверим это на реальном примере через модуль ipaddress из стандартной библиотеки Python.

import ipaddress

ip = ipaddress.ip_address("192.168.1.130")
mask = ipaddress.ip_address("255.255.255.0")

# побитовое И даст адрес сети
network = ipaddress.ip_address(int(ip) & int(mask))
print("Адрес сети:", network)

net = ipaddress.ip_network("192.168.1.0/26")
print("Диапазон /26:", net.network_address, "-", net.broadcast_address)
print("Доступно хостам:", net.num_addresses - 2)

Вывод:

Адрес сети: 192.168.1.0
Диапазон /26: 192.168.1.0 - 192.168.1.63
Доступно хостам: 62

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

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

Не каждый IP-адрес виден из интернета. Часть диапазонов зарезервирована под приватные сети (RFC 1918) — они используются внутри дома или офиса и не маршрутизируются в глобальной сети.

Диапазон Префикс Назначение
10.0.0.0 — 10.255.255.255 /8 крупные приватные сети
172.16.0.0 — 172.31.255.255 /12 средние приватные сети
192.168.0.0 — 192.168.255.255 /16 домашние и офисные сети
127.0.0.0 — 127.255.255.255 /8 loopback (само устройство)
169.254.0.0 — 169.254.255.255 /16 link-local (адрес не выдал DHCP)

Проверить принадлежность к приватному диапазону можно тем же модулем:

import ipaddress

for addr in ["10.0.0.1", "192.168.1.1", "8.8.8.8", "127.0.0.1"]:
    a = ipaddress.ip_address(addr)
    print(addr, "приватный" if a.is_private else "публичный",
          "loopback" if a.is_loopback else "")

Вывод:

10.0.0.1 приватный 
192.168.1.1 приватный 
8.8.8.8 публичный 
127.0.0.1 приватный loopback

Здесь на помощь приходит NAT (Network Address Translation). Домашний роутер имеет один публичный адрес от провайдера, а все устройства за ним живут на приватных адресах. При выходе в интернет роутер подменяет приватный адрес отправителя на свой публичный и запоминает соответствие, чтобы вернуть ответ нужному устройству. Так десятки устройств делят один публичный IPv4-адрес. Это упрощенное описание самого частого сценария (NAT для исходящих подключений); входящие подключения к устройству за NAT требуют отдельной настройки (проброс портов).

Классы адресов: почему это уже история

Раньше границу между сетью и хостом определяли не маской, а классом адреса — по старшим битам первого октета. Класс A отдавал под сеть первый октет, B — два, C — три. Эта модель (classful addressing) официально вытеснена подходом CIDR еще в 1993 году, потому что жестко фиксированные размеры сетей быстро исчерпывали адреса.

Термины «класс C» иногда встречаются в разговоре как синоним /24, но настраивать современные сети по классам не нужно: маска или префикс задаются явно и могут быть любыми. Если видите «класс C» в старой документации — читайте это как приблизительный синоним /24.

IPv6: зачем он нужен и как записывается

Свободные IPv4-адреса закончились: пул IANA был исчерпан еще в 2011 году, региональные регистраторы раздали остатки позже. Ответ на это — IPv6: адрес длиной 128 бит, что дает 2 в степени 128 комбинаций — запас, несопоставимый с IPv4.

IPv6 записывается как восемь групп по четыре шестнадцатеричные цифры через двоеточие. Разрешены сокращения: ведущие нули в группе отбрасываются, а одна цепочка нулевых групп заменяется на :: (не более одного раза в адресе).

import ipaddress

v6 = ipaddress.ip_address("2001:0db8:0000:0000:0000:0000:0000:0001")
print("Сжатая форма: ", v6.compressed)
print("Полная форма: ", v6.exploded)

Вывод:

Сжатая форма:  2001:db8::1
Полная форма:  2001:0db8:0000:0000:0000:0000:0000:0001

Сравнение двух версий кратко:

Признак IPv4 IPv6
Длина адреса 32 бита 128 бит
Запись 4 октета, десятичные 8 групп, шестнадцатеричные
Пример 192.168.1.1 2001:db8::1
Разделитель точка двоеточие
NAT часто обязателен как правило не нужен

IPv4 и IPv6 работают параллельно (dual stack): устройство может иметь адреса обеих версий. Полностью отказаться от IPv4 пока нельзя, потому что часть ресурсов доступна только по нему.

Выводы

  • IP-адрес всегда состоит из двух частей: номера сети и номера хоста; где проходит граница, определяет маска, а не число октетов.
  • Маска подсети и префикс CIDR (/24) — это одна и та же информация в разной записи; два адреса в одной сети, если их номера сети после наложения маски совпадают.
  • Приватные диапазоны (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) не видны из интернета; выход наружу дает NAT через один публичный адрес.
  • Классовая адресация устарела с 1993 года; современные сети описываются префиксом.
  • IPv6 (128 бит) решает проблему нехватки IPv4-адресов и постепенно вытесняет его, работая параллельно.

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

Расчет подсетей, планирование адресного пространства, настройка NAT и переход на IPv6 — повседневные задачи сетевого инженера и системного администратора. Ошибка в маске приводит к тому, что устройства «не видят» друг друга или не выходят в интернет, поэтому умение вручную посчитать границы подсети ценится на собеседованиях.

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

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

FAQ

Может ли у одного устройства быть несколько IP-адресов?
Да. У каждого сетевого интерфейса свой адрес, а на одном интерфейсе можно настроить несколько адресов; плюс устройство обычно имеет и IPv4, и IPv6.

В чем разница между статическим и динамическим IP-адресом?
Статический назначается вручную и не меняется. Динамический выдает сервер DHCP на время (аренда), и при переподключении он может смениться.

Почему в сети /24 доступно 254 адреса, а не 256?
Два адреса зарезервированы: младший — это адрес самой сети, старший — широковещательный. Под устройства остаются оставшиеся 254.

OTUS Журнал