Learning Platform
Глоссарий Troubleshooting
Урок 06.01 · 18 мин
Начальный
IPv4IP AddressingClassfulRFC 791

IPv4 — 32 бита, dotted decimal и почему адресов не хватает

Каждый раз, когда вы открываете сайт, ваш компьютер использует IP-адрес — 32 бита, записанные как 93.184.216.34. Эти 32 бита — основа интернета: уникальный идентификатор каждого подключённого устройства. В 1980-х казалось, что 4 миллиарда адресов хватит на всё человечество. В 2026 году нам не хватает.

В этом уроке разберём, что такое IPv4-адрес физически (32 бита), как читается dotted decimal, что были за классы A/B/C, как мир пришёл к проблеме исчерпания и почему NAT с одной стороны спас интернет, а с другой — сделал его сложнее. Понимать это нужно DE потому, что вся ваша работа крутится вокруг IP — от подключения к БД до VPC peering в AWS.


32 бита, четыре октета

IPv4-адрес — это 32-битное число. Оно может быть записано:

  • В десятичной форме: 1576036898.
  • В hex: 0x5DB8D822.
  • В бинарной: 01011101 10111000 11011000 00100010.
  • В dotted decimal: 93.184.216.34 — четыре десятичных числа от 0 до 255, разделённых точками.

Dotted decimal придумали для удобства человека. Алгоритм:

  1. Берём 32 бита.
  2. Делим на четыре части по 8 бит (октеты).
  3. Каждую часть преобразуем в десятичное (0-255).
  4. Соединяем точками.
32 бита -> 4 октета -> dotted decimal
0x5DB8D82232-битное число в hex. Удобно для парсинга машинами, неудобно для глаз
01011101 10111000 11011000 00100010Те же 32 бита в бинарном виде, разбитые на четыре октета по 8 бит
9301011101 в десятичной -- 93. Первый октет
18410111000 = 184. Второй октет
21611011000 = 216. Третий октет
3400100010 = 34. Четвёртый октет
93.184.216.34Финальная читаемая форма. Это адрес example.com

Несколько интересных моментов:

  • Каждый октет может быть 0-255. Адреса вроде 256.10.5.4 невозможны — 256 не влезает в 8 бит. Иногда видишь IP 999.10.5.4 в логах подделанных адресов или просто опечатках.
  • Адрес 0.0.0.0 — особый, означает «любой» (используется как wildcard при bind на сокете).
  • Адрес 255.255.255.255 — broadcast (всем в текущем сегменте).
  • Адреса 127.0.0.0/8 (любой адрес 127.X.X.X) — loopback (твоя собственная машина).

Всего адресов: 2^32 = 4,294,967,296. Около 4.3 миллиарда. Кажется много, пока не вспомнить, что в мире 8 миллиардов людей и десятки миллиардов устройств.


Преобразование октета в десятичное — быстрая шпаргалка

Каждый бит в октете имеет вес:

Бит1286432168421

Чтобы преобразовать октет вроде 10111000:

  • 1 в позиции 128 -> добавили 128
  • 0 в позиции 64 -> 0
  • 1 в позиции 32 -> добавили 32
  • 1 в позиции 16 -> добавили 16
  • 1 в позиции 8 -> добавили 8
  • 0 в позиции 4 -> 0
  • 0 в позиции 2 -> 0
  • 0 в позиции 1 -> 0
  • Итого: 128 + 32 + 16 + 8 = 184

Полезно запомнить степени двойки до 256: 1, 2, 4, 8, 16, 32, 64, 128, 256. Это нужно для subnetting в следующем уроке.

В Python это тривиально:

import ipaddress

# Создать IPv4-объект:
ip = ipaddress.IPv4Address('93.184.216.34')

# 32 бита как int:
print(int(ip))         # 1576036898

# Бинарная форма:
print(f'{int(ip):032b}')   # 01011101101110001101100000100010

# Hex:
print(hex(int(ip)))    # 0x5db8d822

# Обратно из int в адрес:
ipaddress.IPv4Address(1576036898)   # IPv4Address('93.184.216.34')

Исторические классы A, B, C, D, E

Когда в начале 1980-х спроектировали IP, никто не знал, как делить адреса между организациями. Решили разбить пространство на классы фиксированного размера. Класс определяется первыми битами адреса.

Классы IPv4 -- наивное деление 1980-х
Class AПервый бит = 0. Диапазон 0.0.0.0 - 127.255.255.255. Network = первый октет, hosts = оставшиеся 24 бита. ~16M хостов в одной сети. Получали гиганты (MIT, IBM, Apple)
Class BПервые биты = 10. Диапазон 128-191. Network = 2 октета, hosts = 2 октета. ~65K хостов в сети. Получали университеты и крупные компании
Class CПервые биты = 110. Диапазон 192-223. Network = 3 октета, hosts = 1 октет. 254 хоста в сети. Для мелких организаций
Class D1110xxxx (224-239). Multicast. Не используется для адресации хостов
Class E1111xxxx (240-255). Зарезервировано для экспериментов. Так до сих пор и неиспользуется

Проблема классового деления: разрыв слишком большой.

  • Class A: 16,777,214 хостов. Хорошо, если у вас IBM. Плохо, если у вас компания на 1000 человек — бессмысленно тратить.
  • Class B: 65,534 хостов. Идеально для крупного университета. Маленьким — много.
  • Class C: 254 хоста. Маленькая контора. Среднему бизнесу — мало.

Если у вас 500 пользователей — Class C мало (254), Class B много (65K). Что взять? Брали Class B, оставшиеся 64,500 адресов пропадали. Так выгорело огромное количество адресов.

Решение пришло в 1993 — CIDR (Classless Inter-Domain Routing), который мы изучим в следующем уроке. CIDR убрал классы и разрешил произвольные размеры подсетей. Сейчас классы — только историческое любопытство, ни одна современная сеть с ними не работает.


Проблема исчерпания и краткая хронология

Цифры по годам — что происходило в IANA (организация, распределяющая IP):

  • 1981. RFC 791 — стандарт IPv4. Прогноз: «адресов хватит надолго».
  • 1992. Стало ясно: классов мало. Спроектирован CIDR (RFC 1519).
  • 1993. Введён CIDR. Замедлило выгорание адресов лет на 20.
  • 1995. Появились приватные диапазоны (10/8, 172.16/12, 192.168/16, RFC 1918). Дома и в офисах перестали использовать публичные IP, начали использовать приватные за NAT.
  • 2011, 3 февраля. IANA выдала последние крупные блоки. Региональные интернет-регистраторы (RIR) получили по /8 каждому и больше IANA не раздаёт.
  • 2012-2017. RIR-ы по очереди исчерпали свои блоки. APNIC (Asia-Pacific) — 2011. RIPE NCC (Europe) — 2012. LACNIC (Lat. Am) — 2014. ARIN (N. Am) — 2015. AfriNIC (Africa) — 2017.
  • 2026. Новый блок IPv4 нельзя купить дёшево. Маленькие /24-блоки на вторичном рынке стоят $20K+. Цена /16 — миллионы.
WARNING

Когда говорят ‘IPv4 исчерпался’, это не значит что нет ни одного свободного адреса. Это значит, что RIR-ы не выдают новые блоки. Есть вторичный рынок — крупные старые получатели (университеты, корпорации) могут продавать неиспользуемые блоки. Цена — $40-50 за один адрес в 2026 году.


Как живём дальше — NAT, CGNAT, IPv6

Адресов не хватает, но интернет работает. За счёт чего?

1. NAT (Network Address Translation). Дома 50 устройств, у роутера один публичный IP. Все устройства внутри имеют приватные IP вроде 192.168.1.X. Когда они выходят в интернет, роутер заменяет приватный IP на свой публичный и запоминает, кому принадлежал пакет. Об этом отдельный урок в модуле 6.

2. CGNAT (Carrier-Grade NAT). То же, но на уровне провайдера. У вас от провайдера приватный IP вроде 100.64.X.X, провайдер делает NAT на свой публичный пул. Очень популярно у мобильных операторов — они получают за провайдера один публичный IP на сотни абонентов.

3. IPv6. Радикальное решение — 128 бит вместо 32. Адресов хватит на каждый атом в Солнечной системе. Внедрение идёт медленно (с 1995 года), но в 2026 году ~40% Google-трафика идёт по IPv6. Об IPv6 отдельный урок.

Три механизма выживания IPv4
Дом50 устройств за домашним роутером. Один публичный IP. Внутри 192.168.X.X через NAT
ISPПровайдер выдаёт клиентам публичные IP. Расход адресов: 1 на клиента -- разумно
МобильныйСотовый оператор. Тысячи абонентов за CGNAT. Расход адресов: 1 на сотни клиентов
ISP poolПровайдер тратит мало публичных IP. Минус: клиенты не могут хостить серверы из дома (нет dedicated IP)
IPv6128 бит. Адресов на любое количество устройств. Будущее, но медленно внедряется. Dual-stack -- работа в обоих

Какие IP я вижу в ip addr и почему

Когда вы делаете ip addr (или ifconfig на macOS), вы видите IP-адреса своего компьютера. Они могут быть разных видов:

ip addr show
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
#     inet 127.0.0.1/8 scope host lo
#     inet6 ::1/128 scope host
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
#     inet 192.168.1.42/24 brd 192.168.1.255 scope global dynamic eth0
#     inet6 fe80::a683:e7ff:fe1a:bbcc/64 scope link

Расшифровка:

  • 127.0.0.1/8 — loopback. Любой адрес 127.X.X.X ссылается на сам компьютер. Используется для локальных сервисов (база на 127.0.0.1:5432).
  • 192.168.1.42/24 — приватный IP в локальной сети. Назначен DHCP (dynamic). /24 значит «маска 24 бита» (про это в следующем уроке).
  • brd 192.168.1.255 — broadcast-адрес подсети.
  • scope global — адрес виден за пределами интерфейса.
  • fe80::... — IPv6 link-local. Каждый интерфейс с IPv6 имеет такой, для общения внутри сегмента.

Полезные команды:

# Узнать ваш публичный IP (через внешний сервис):
curl ifconfig.me
# или:
curl ipinfo.io/ip
# или:
dig +short myip.opendns.com @resolver1.opendns.com

# Сравнить с локальным IP (из ip addr) -- обычно разные:
ip addr show | grep 'inet '

Локальный IP — то, что присвоено вашему интерфейсу (часто приватный 192.168.X.X). Публичный IP — то, с чего вы видны интернету (IP вашего роутера/провайдера). Они почти всегда разные, благодаря NAT.


Reserved / специальные адреса

Помимо классов, в IPv4 есть много специальных диапазонов, которые нельзя использовать как обычные публичные адреса:

  • 0.0.0.0/8 — «текущая сеть», особый wildcard.
  • 127.0.0.0/8 — loopback (16M адресов на одну машину! используется обычно только 127.0.0.1).
  • 10.0.0.0/8 — приватный диапазон (16M адресов).
  • 172.16.0.0/12 — приватный (1M адресов).
  • 192.168.0.0/16 — приватный (65K адресов).
  • 169.254.0.0/16 — link-local (если DHCP не сработал, ОС сама назначает себе адрес отсюда — APIPA на Windows, Avahi на Linux).
  • 224.0.0.0/4 — multicast.
  • 240.0.0.0/4 — reserved.

Об этих диапазонах будет отдельный урок.


Попробуй сам

# 1. Посмотреть свои IP:
ip addr show     # Linux
ifconfig         # macOS / устаревший Linux
ipconfig         # Windows

# 2. Узнать публичный IP:
curl ifconfig.me
curl ipinfo.io
# Сравнить с локальным -- увидите, как ваш приватный IP скрывается за NAT провайдера

# 3. Преобразовать IP в число и обратно (Python):
python3 -c "import ipaddress; print(int(ipaddress.IPv4Address('192.168.1.1')))"
# 3232235777

python3 -c "import ipaddress; print(ipaddress.IPv4Address(3232235777))"
# 192.168.1.1

# 4. Глянуть на класс адреса (исторический):
# 10.X.X.X = class A приватный
# 172.16.0.0 = class B приватный
# 192.168.0.0 = class C приватный
# 8.8.8.8 = class A публичный (Google DNS)

# 5. Узнать, кому принадлежит публичный IP (через whois):
whois 93.184.216.34
# увидите info о Edgecast/Verizon

# 6. Сколько уникальных адресов в /8?
python3 -c "print(2**24)"
# 16777216 -- ~16 миллионов

# 7. Сколько вообще IPv4-адресов?
python3 -c "print(2**32)"
# 4294967296 -- 4.3 миллиарда

Запомните: whois 8.8.8.8 сразу показывает, что это Google. Это полезно при дебаге — видишь незнакомый IP в логах, делаешь whois, понимаешь к кому он принадлежит.


Docker VPC и приватные IP-диапазоны: 172.17/16 в действии Kubernetes pod CIDR: приватные IP для каждого pod
Проверка знанийKnowledge check
Junior спрашивает: 'Если в мире 4 миллиарда IPv4-адресов и 8 миллиардов людей, как мы вообще ещё пользуемся интернетом? Где скрываются эти лишние устройства?'
ОтветAnswer
Магия в том, что подавляющее большинство устройств НЕ имеет собственного публичного IPv4-адреса. Когда вы дома сидите со смартфона и ноутбука, они оба имеют приватные адреса (например 192.168.1.10 и 192.168.1.11) внутри вашей домашней сети. У домашнего роутера есть один публичный IP от провайдера, и через NAT (Network Address Translation) роутер переписывает заголовки уходящих пакетов так, что для интернета все запросы выглядят как идущие от одного публичного IP. Когда ответ приходит -- роутер по таблице соответствий (NAT table, основанной на портах) определяет, к какому именно устройству он относится. Это эффективно мультиплексирует тысячи устройств на один публичный адрес. У мобильных провайдеров идёт CGNAT (Carrier-Grade NAT) -- даже сам ваш мобильный телефон не получает публичного IP, ваш IP "100.64.X.X" приватен на уровне ISP, и провайдер уже его NATит на свой пул. Плюс, IPv6 потихоньку решает проблему фундаментально -- его 128 бит дают практически бесконечное количество адресов, и около 40% трафика Google в 2026 году идёт уже по IPv6. Но IPv4 ещё долго будет жить параллельно из-за legacy совместимости.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Сколько уникальных адресов содержит всё IPv4-пространство?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5