Что такое IPv4? Полное руководство
Содержание
Что такое IPv4
IPv4 — это четвертая версия интернет-протокола, которая лежит в основе сети с 1981 года. Описан в RFC 791. До сих пор это главный протокол, через него проходит больше 60% всего мирового трафика.
IPv4 использует 32-битные адреса, что теоретически дает 4 294 967 296 адресов. На практике меньше, потому что часть зарезервирована под служебные нужды.
Протокол работает на сетевом уровне модели OSI — занимается адресацией и маршрутизацией пакетов между устройствами.
История создания
IPv4 начали разрабатывать в 1970-х в рамках проекта ARPANET. Первая версия вышла в RFC 760 (1980 год), финальная — в RFC 791 (сентябрь 1981 года).
Когда создавали протокол, 32-битное адресное пространство казалось огромным — 4,3 миллиарда адресов на весь мир, где компьютеры были редкостью. Никто не думал, что через 30 лет каждый телефон, телевизор и холодильник захочет свой IP-адрес.
Внедрение IPv4 стало ключевым для роста интернета. Протокол пережил переход от ARPANET к NSFNET, появление WWW, бум доткомов и мобильную революцию.
Структура адреса IPv4
Адрес IPv4 — это 32 бита, которые записывают в десятичном виде с точками: четыре октета по 8 бит, разделенных точками:
192.168.1.1
Каждый октет может быть от 0 до 255. Адрес делится на две части:
- Сетевая часть — идентификатор сети (префикс)
- Хостовая часть — идентификатор устройства внутри сети
Граница между ними определяется маской подсети.
Классы адресов
Раньше адреса делили на классы (classful addressing):
- Класс A: диапазон 1.0.0.0 — 126.255.255.255, префикс /8, хостов ~16,7 млн — для крупных сетей
- Класс B: 128.0.0.0 — 191.255.255.255, /16, ~65 534 — для средних
- Класс C: 192.0.0.0 — 223.255.255.255, /24, 254 — для малых
- Класс D: 224.0.0.0 — 239.255.255.255 — multicast
- Класс E: 240.0.0.0 — 255.255.255.255 — экспериментальные
Классовая система была неудобной: класс C (254 хоста) слишком мал, класс B (65 534) слишком велик. Из-за этого адреса простаивали. В 1993 году придумали бесклассовую адресацию CIDR.
Маски подсети и CIDR
Маска подсети показывает, где граница между сетевой и хостовой частями адреса. Пишется в десятичном виде (255.255.255.0) или в CIDR-нотации (/24).
CIDR — бесклассовая адресация, внедренная в 1993 году (RFC 1518, 1519). Она позволяет выделять блоки любого размера, а не только /8, /16, /24.
Примеры масок:
- /24 — маска 255.255.255.0, хостов 254
- /16 — 255.255.0.0, 65 534
- /8 — 255.0.0.0, 16 777 214
- /30 — 255.255.255.252, 2
- /32 — 255.255.255.255, 1 (конкретный хост)
Первый адрес в подсети — адрес сети, последний — широковещательный (broadcast). Их устройствам не назначают.
Приватные и публичные адреса
Из-за дефицита адресов выделили приватные диапазоны (RFC 1918), которые не маршрутизируются в публичном интернете:
- 10.0.0.0 — 10.255.255.255, /8, ~16,7 млн
- 172.16.0.0 — 172.31.255.255, /12, ~1 млн
- 192.168.0.0 — 192.168.255.255, /16, 65 536
Также есть служебные диапазоны:
- 127.0.0.0/8 — loopback, адрес 127.0.0.1 указывает на само устройство
- 169.254.0.0/16 — link-local (APIPA), автоназначение, если нет DHCP
- 0.0.0.0/8 — "эта сеть", используется при инициализации
- 255.255.255.255 — ограниченный broadcast
NAT — трансляция сетевых адресов
NAT — технология, которая отсрочила исчерпание IPv4 на десятилетия. Описана в RFC 1631 (1994 год), потом обновлена в RFC 3022.
Как работает:
- Устройства внутри локальной сети используют приватные адреса
- При выходе в интернет NAT-шлюз подменяет приватный адрес на свой публичный
- При ответе шлюз возвращает приватный адрес получателя
Типы NAT:
- Static NAT — постоянное соответствие один-к-одному
- Dynamic NAT — адрес из пула на время сессии
- PAT (NAPT) — трансляция с портами (много устройств за одним IP)
- CGN (Carrier-Grade NAT) — NAT уровня провайдера, двойной NAT
У NAT есть недостатки: ломает принцип сквозной связности, усложняет пиринговые соединения, мешает работать некоторым протоколам (IPsec, FTP, SIP). Но именно NAT позволил интернету расти при ограниченном адресном пространстве IPv4.
Исчерпание адресного пространства
Проблему предсказали еще в конце 1980-х. Временные меры — CIDR, NAT, приватные адреса — отсрочили кризис, но не решили его.
Ключевые даты:
- 31 января 2011 года — IANA выделила последние два блока /8 регистратору APNIC
- 3 февраля 2011 года — IANA распределила последние пять блоков /8 (по одному каждому RIR)
- 15 апреля 2011 года — APNIC первым исчерпал свободные адреса
- 14 сентября 2012 года — RIPE NCC исчерпал пул
- 10 июня 2014 года — LACNIC исчерпал пул
- 24 сентября 2015 года — ARIN объявил о полном исчерпании
Единственный регистратор с остатком адресов — AfriNIC (Африка), но и его резервы заканчиваются.
Рынок IPv4-адресов
Когда бесплатные адреса кончились, появился вторичный рынок. Компании продают неиспользуемые блоки. Цена за один адрес IPv4 выросла с ~\\$5 (2011) до \\$25-30 (2021), в пике доходила до \\$60.
Крупнейшие сделки:
- MIT продал /8 (16,7 млн адресов) — одна из крупнейших продаж
- Merck продал /8 Amazon Web Services
- Рынок оценивается в сотни миллионов долларов в год
Получилась парадоксальная ситуация: IPv4-адреса стали дефицитным активом, который продают как недвижимость, а IPv6-адреса практически бесплатны и бесконечны.
Заголовок пакета IPv4
Заголовок IPv4 занимает 20 байт (без опций) и состоит из 14 полей:
- Version (4 бит) — версия протокола (4)
- IHL (4 бит) — длина заголовка в 32-битных словах
- DSCP/ECN (8 бит) — тип обслуживания, приоритет
- Total Length (16 бит) — полная длина пакета (макс. 65 535 байт)
- Identification (16 бит) — идентификатор для сборки фрагментов
- Flags (3 бит) — DF (Don't Fragment), MF (More Fragments)
- Fragment Offset (13 бит) — смещение фрагмента
- TTL (8 бит) — время жизни (макс. 255)
- Protocol (8 бит) — вышестоящий протокол (TCP=6, UDP=17)
- Header Checksum (16 бит) — контрольная сумма заголовка
- Source Address (32 бит) — IP-адрес отправителя
- Destination Address (32 бит) — IP-адрес получателя
Опции могут увеличить заголовок до 60 байт, но их редко используют.
Фрагментация
Если пакет больше MTU канала, его фрагментируют. В IPv4 фрагментацию может делать и отправитель, и промежуточный маршрутизатор.
Фрагменты собираются только на стороне получателя. Если потерян один фрагмент — весь пакет отбрасывается. Это создает проблемы: атаки типа "отказ в обслуживании" через фрагментированные пакеты, повышенная нагрузка на получателя.
Флаг DF (Don't Fragment) запрещает фрагментацию — используется в Path MTU Discovery, чтобы найти минимальный MTU на пути.
Контрольная сумма
IPv4 считает контрольную сумму только для заголовка, не для данных. Каждый маршрутизатор пересчитывает ее, потому что TTL уменьшается на каждом хопе.
Алгоритм: заголовок разбивается на 16-битные слова, вычисляется сумма с дополнением до единицы. Это нагружает маршрутизаторы. В IPv6 от контрольной суммы отказались.
TTL — время жизни пакета
TTL — счетчик, который ограничивает время жизни пакета в сети. Изначально
измерялся в секундах, но на практике каждый маршрутизатор уменьшает его на единицу. При TTL=0 пакет уничтожается, отправителю уходит ICMP Time Exceeded. Утилита traceroute построена именно на этом принципе — посылает пакеты с TTL=1,2,3 и смотрит от кого приходит ответ.