IPv4 (англ. Internet Protocol version 4) — четвёртая версия интернет протокола (IP). Первая широко используемая версия. Протокол описан в RFC 791 (сентябрь 1981 года), заменившем RFC 760 (январь 1980 года).
Представление адреса
IPv4 использует 32-битные (четырёхбайтные) адреса, ограничивающие адресное пространство 4 294 967 296 (232) возможными уникальными адресами.
Традиционной формой записи IPv4 адреса является запись в виде четырёх десятичных чисел (от 0 до 255), разделённых точками. Через дробь указывается длина маски подсети.
Форма записи |
Пример |
Преобразование из десятичной нотации с точками |
Десятичная с точками (англ.) |
192.0.2.235 |
— |
Шестнадцатеричная с точками |
0xC0.0x00.0x02.0xEB |
Каждый октет преобразуется в шестнадцатеричную форму |
Восьмеричная с точками |
0300.0000.0002.0353 |
Каждый октет преобразуется в восьмеричную форму |
Шестнадцатеричная |
0xC00002EB |
Конкатенация октетов из шестнадцатеричной нотации с точками |
Десятичная |
3221226219 |
32-битное число в десятичной форме |
Восьмеричная |
030000001353 |
32-битное число в восьмеричной форме |
Назначения подсетей
Некоторые адреса IPv4 зарезервированы для специальных целей и не предназначены для глобальной маршрутизации[1]. Список подсетей специального назначения определён RFC 6890.
Подсеть |
Назначение |
Маршрутизация |
0.0.0.0/8[2] |
Адреса источников пакетов «этой» («своей») сети.[1][3] |
0.0.0.0/32 |
В сокетах с состоянием «listening» обозначает любые IP отправителя или любые сети получателя на текущем хосте. Может посылаться в сеть только в качестве адреса источника, если хосту ещё не назначен IP адрес (обычно по протоколу DHCP). Не может быть использован как адрес назначения в сети.
В маршрутизаторах Cisco при попытке отправить пакет на адрес 0.0.0.0 он будет отправлен на широковещательный адрес наименьшей подсоединённой подсети (connected в таблице маршрутизации).
|
|
запрещена |
10.0.0.0/8[4] |
Для использования в частных сетях. |
только в частных сетях |
100.64.0.0/10 |
Shared Address Space. RFC 6598. Для использования в сетях сервис-провайдера. |
127.0.0.0/8[2] |
Подсеть для коммуникаций внутри хоста (см. localhost). Используется сетевая подсистема, но в действительности такие пакеты не проходят через сетевую карту. Если пакет с таким адресом назначения был получен из сети, то должен быть отброшен. |
запрещена |
169.254.0.0/16[5] |
Канальные адреса. Подсеть используется для автоматического назначения IP операционной системой в случае, если настроено получение адреса по DHCP, но ни один сервер не отвечает. |
только в частных сетях |
172.16.0.0/12[4] |
Для использования в частных сетях. |
только в частных сетях |
|
192.0.2.0/24[7] |
Для примеров в документации. |
запрещена |
192.88.99.0/24[1] |
Используются для рассылки ближайшему узлу. RFC 3068 |
192.88.99.1/32 |
Применяется в качестве ретранслятора при инкапсуляции IPv6 в IPv4 (6to4)[8]. Иными словами этот IP не уникален. Его анонсируют многие компании. Пакет на этот адрес пойдёт до ближайшего хоста с этим IP, который распакует пакет и отправит его дальше по IPv6 маршрутизации. |
|
глобально разрешена |
192.168.0.0/16[4] |
Для использования в частных сетях. |
только в частных сетях |
198.51.100.0/24[7] |
Для примеров в документации. |
запрещена |
198.18.0.0/15[9] |
Для стендов тестирования производительности. |
только для тестов |
203.0.113.0/24[7] |
Для примеров в документации. |
запрещена |
224.0.0.0/4[10] |
Используются для многоадресной рассылки. Полный актуальный список зарезервированных блоков на сайте IANA [1]. Разъяснения по зарезервированным мультикастовым подсетям RFC 5771. Выделение мультикастовых адресов описано в RFC 5771. |
224.0.0.0/24 |
Local Network Control Block. Как правило только для известных протоколов. RFC 3171 для этого блока требует выставления TTL=1.
224.0.0.1 — все системы в подсети. 224.0.0.2 — все маршрутизаторы в подсети. 224.0.0.5, 224.0.0.6 — OSPF 224.0.0.9 — RIPv2 224.0.0.10 — IGRP 224.0.0.13 — PIM 224.0.0.18 — VRRP 224.0.0.19, 224.0.0.20, 224.0.0.21 — IS-IS 224.0.0.22 — IGMP 224.0.0.102 — HSRP 224.0.0.251 — Multicast DNS 224.0.0.252 — LLMNR (англ.) 224.0.0.253 — Teredo и другие
|
224.0.1.0 по 238.255.255.255 |
Globally Scoped Addresses
224.0.1.0/24 — Internetwork Control Block 224.0.2.0 — 224.0.255.255 — AD-HOC Block I 224.1.0.0/16 — Зарезервировано 224.0.2.0/16 — SDP/SAP Block. RFC 2974. Для приема и передачи анонсов мультимедийных сеансов. Используется Session Announcement Protocol[en]. 224.3.0.0/16, 224.4.0.0/16 — AD-HOC Block II 224.5.0.0 по 224.251.255.255 — Зарезервировано 224.252.0.0/14 — DIS Transient Groups 225.0.0.0 — 231.255.255.255 Зарезервировано 232.0.0.0/8 — Source-Specific Multicast[en] Block (SSM). RFC 4607. Модель, где данные передаются только получателям с явно заданной группой. 233.0.0.0/8 — GLOP адреса. Для организаций, у которых есть присвоенная 16-битная автономная система (AS), выделяется подсеть /24. RFC 3180 233.252.0.0/14 — AD-HOC Block III 234.0.0.0/8 — Блок мультистовых адресов, основанных на IPv4-unicast. RFC 6034. Например, если организации выделено 192.0.2.0/24, глобальным multicast адресом этой организации будет 234.192.0.2/32.
|
239.0.0.0/8 |
Для частных мультикаст-доменов/организаций (пользовательские адреса). Могут динамически использоваться протоколами.
239.255.255.250 — SSDP.
|
|
Глобально разрешена только для подсетей 233.0.0.0/8 и 234.0.0.0/8.
В пиринговых сетях, например в MSK-IX разрешена для подсети 239.0.0.0/8 Однако не все провайдеры поддерживают мультикаст связность.
|
240.0.0.0/4[2] |
Зарезервировано для использования в будущем. Существует мнение, что эта подсеть больше никогда не будет использована, так как есть множество оборудования, не способного посылать пакеты в эту сеть. |
255.255.255.255/32[11] |
Ограниченный широковещательный адрес. Чаще всего используется как адрес назначения при поиске DHCP серверов. |
|
запрещена |
все остальные |
Распределяются региональными интернет-регистраторами. Могут быть провайдеро-независимыми (англ. Provider-independent address space). |
глобально разрешена |
Структура пакета
Пакет IP содержит 14 полей, из которых 13 являются обязательными. Четырнадцатое поле предназначено для необязательных опций. Поля используют порядок байтов от старшего к младшему, старшие биты идут первыми. Первый бит имеет номер 0. Таким образом, например, поле с версией находится в четырёх старших битах первого байта. При передаче многооктетных значений старший октет передаётся первым.
- Версия
- Первым полем пакета является версия протокола размером в четыре бита. Для IPv4 это 4.
- Размер заголовка (Internet Header Length)
- Следующие четыре бита содержат размер заголовка пакета в 32-битных словах. Поскольку число опций не постоянно, указание размера важно для отделения заголовка от данных. Минимальное значение равно 5 (5×32=160 бит, 20 байт), максимальное — 15 (60 байт).
- Differentiated Services Code Point (DSCP)
- Изначально называлось «тип обслуживания» (Type of Service, ToS), в настоящее время определяется RFC 2474 как «Differentiated Services». Используется для разделения трафика на классы обслуживания, например для установки чувствительному к задержкам трафику, такому как VoIP, большего приоритета.
- Указатель перегрузки (Explicit Congestion Notification, ECN)
- Предупреждение о перегрузке сети без потери пакетов. Является необязательной функцией и используется только если оба хоста её поддерживают.
- Размер пакета
- 16-битный полный размер пакета в байтах, включая заголовок и данные. Минимальный размер равен 20 байтам (заголовок без данных), максимальный — 65535 байт. Хосты должны поддерживать передачу пакетов размером до 576 байт, но современные реализации обычно поддерживают гораздо больший размер. Пакеты большего размера, чем поддерживает канал связи, фрагментируются.
- Идентификатор
- Преимущественно используется для идентификации фрагментов пакета, если он был фрагментирован. Существуют эксперименты по его использованию для других целей, таких как добавление информации о трассировке пакета для упрощения отслеживания пути пакета с подделанным адресом источника.[12]
- Флаги
- Поле размером три бита содержащее флаги контроля над фрагментацией. Биты, от старшего к младшему, означают:
- 0: Зарезервирован, должен быть равен 0.[13]
- 1: Не фрагментировать
- 2: У пакета ещё есть фрагменты
- Если установлен флаг «не фрагментировать», то в случае необходимости фрагментации такой пакет будет уничтожен. Может использоваться для передачи данных хостам, не имеющим достаточных ресурсов для обработки фрагментированных пакетов.
- Флаг «есть фрагменты» должен быть установлен в 1 у всех фрагментов пакета, кроме последнего. У нефрагментированных устанавливается в 0 — такой пакет считается собственным последним фрагментом.
- Смещение фрагмента
- Поле размером в 13 бит, указывает смещение поля данных текущего фрагмента относительно начала поля данных первого фрагментированного пакета в блоках по 8 байт. Позволяет (213−1)×8=65528 байт смещения. При учёте размера заголовка итоговое смещение может превысить максимальный размер пакета (65528 + 20 = 65548 байт). Первый фрагмент в последовательности имеет нулевое смещение.
- «Время жизни» (Time to Live, TTL) пакета
- Определяет максимальное количество маршрутизаторов на пути следования пакета. Наличие этого параметра не позволяет пакету бесконечно ходить по сети. Каждый маршрутизатор при обработке пакета должен уменьшить значение TTL на единицу. Пакеты, время жизни которых стало равно нулю, уничтожаются, а отправителю посылается сообщение ICMP Time Exceeded. На отправке пакетов с разным временем жизни основана трассировка их пути прохождения (traceroute). Максимальное значение TTL=255. Обычное начальное значение TTL=64 (зависит от ОС).
- Протокол
- Указывает, данные какого протокола IP содержит пакет (например, TCP или ICMP). Присвоенные номера протоколов можно найти на сайте IANA.[14]
- Контрольная сумма заголовка
- 16-битная контрольная сумма, используемая для проверки целостности заголовка. Каждый хост или маршрутизатор сравнивает контрольную сумму заголовка со значением этого поля и отбрасывает пакет, если они не совпадают. Целостность данных IP не проверяет — она проверяется протоколами более высоких уровней (такими, как TCP или UDP), которые тоже используют контрольные суммы.
- Поскольку TTL уменьшается на каждом шаге прохождения пакета, сумма тоже должна вычисляться на каждом шаге. Метод пересчёта контрольной суммы определён в RFC 1071.[15]
- Адрес источника
- 32-битный адрес отправителя пакета. Может не совпадать с настоящим адресом отправителя из-за трансляции адресов.
- Адрес назначения
- 32-битный адрес получателя пакета.
- Опции
- За адресом назначения может следовать поле дополнительных опций, но оно используется редко. Размер заголовка в этом случае должен быть достаточным, чтобы вместить все опции (с учётом дополнения до целого числа 32-битных слов). Присвоенные номера опций размещаются на сайте IANA.[16]
- Если список опций не является концом заголовка, он должен оканчиваться опцией 0x00. Опции имеют следующий формат:
Поле |
Размер в битах |
Описание |
Копировать |
1 |
Устанавливается в 1 если требуется копировать опции в заголовки всех фрагментов. |
Класс опции |
2 |
0 для «управляющих» опций и 2 для опций «измерений и отладки». 1 и 3 зарезервированы. |
Номер опции |
5 |
Указывает опцию. |
Размер опции |
8 |
Указывает размер опции (с учетом этого поля). Может не указываться для опций без аргументов. |
Аргументы опции |
Переменный |
Дополнительные данные, используемые опцией. |
- Замечание: Размер заголовка более 5 слов указывает на присутствие опций и необходимость их обработки.
- Замечание: Поля «копировать», «класс опции» и «номер опции» иногда называют одним восьмибитным полем «тип опции».
Исчерпание адресного пространства
Основная статья: Исчерпание IPv4-адресов
Уже в 1980-е годы стало очевидно, что распределение адресного пространства происходит значительно более быстрыми темпами, чем было заложено в архитектуру IPv4. Это привело сначала к появлению классовой адресации, позднее бесклассовой адресации, и в конечном итоге к разработке нового протокола IPv6.
В феврале 2011 года IANA выделила 5 последних блоков адресов RIRам. Блоки свободных IP-адресов начали заканчиваться у региональных регистраторов с 2011 года.[17]
См. также
Примечания
- ↑ 1 2 3 RFC3330: Special-use IPv4 addresses (англ.); заменён RFC5735: Special-use IPv4 addresses (англ.)
- ↑ 1 2 3 RFC1700: Assigned Numbers (англ.)
- ↑ RFC1122: Requirements for Internet Hosts — Communication Layers [section-3.2.1.3] (англ.)
- ↑ 1 2 3 RFC1918: Address allocation for private internets (англ.)
- ↑ RFC3927: Dynamic configuration of IPv4 link-local addresses (англ.)
- ↑ RFC 6890: IANA IPv4 Special Purpose Address Registry (англ.)
- ↑ 1 2 3 RFC5737: IPv4 address blocks reserved for documentation (англ.)
- ↑ RFC3068: An anycast prefix for 6to4 relay routers (англ.)
- ↑ RFC2544: Benchmarking methodology for network interconnect devices (англ.)
- ↑ RFC3171: IANA guidelines for IPv4 multicast address assignments (англ.)
- ↑ RFC919: Broadcasting internet datagrams (англ.)
- ↑ Stefan Savage. Practical network support for IP traceback (неопр.). Дата обращения 6 сентября 2010.
- ↑ В качестве первоапрельской шутки предложен означать злонамеренность пакета (evil bit)
- ↑ Assigned Internet Protocol Numbers (англ.)
- ↑ Computing the Internet Checksum (англ.)
- ↑ IP OPTION NUMBERS (неопр.). IANA.
- ↑ IPv4 Address Report