IPv4 (англ. Internet Protocol version 4) — четвёртая версия интернет-протокола (IP). Первая широко используемая версия. Протокол описан в RFC 791 (сентябрь 1981 года), заменившем RFC 760 (январь 1980 года).
IPv4 | |
---|---|
Название | Internet Protocol version 4 |
Уровень (по модели OSI) | Сетевой |
Семейство | TCP/IP |
Создан в | 1981 |
Назначение протокола | Адресация |
Спецификация | RFC 791 |
Основные реализации (клиенты) | реализации стека TCP/IP в Windows, Linux и BSD, Mac OS |
Основные реализации (серверы) | реализации стека TCP/IP в Windows, Linux и BSD |
Медиафайлы на Викискладе |
Представление адреса
править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-битное число в восьмеричной форме |
Адресация: хосты и подсети
правитьРанняя версия стандарта IP, согласно RFC 760 (англ.) (январь 1980), описывала жёсткое разделение адресного пространства на подсети и хосты. Первый октет обозначал адрес сети, за которым следовал локальный адрес хоста, занимавший оставшиеся три октета. Таким образом, стандарт допускал существование 28=256 сетей по 224=16 777 216 хостов в каждой.
Размер подсети фиксирован.
Классовая адресация
правитьОднако очень скоро выяснилось, что сетей слишком мало, они слишком большие, и адресация лишена гибкости. Поэтому уже в сентябре 1981 года вышел RFC 791 (англ.), который вводил так называемую классовую адресацию. Идея заключается в следующем: для гибкости в назначении адресов сетей и возможности использовать большое число малых и средних сетей адресное пространство было разделено на несколько логических групп и в каждой группе отводилось разное соотношение хостов и подсетей. Эти группы носят названия классов сетей и пронумерованы латинскими буквами: A, B, C, D и E. Деление основывается на старших битах адреса. Подробно адресация рассматривается в RFC 790 (англ.).
Класс А: 0.XXX.XXX.XXX — 127.XXX.XXX.XXX
Первый бит адреса равен нулю, таким образом, класс А занимает половину всего адресного пространства. Адрес сети занимает 7 бит, адрес узла — 24 бита, следовательно класс A содержит 128 подсетей по 16 777 216 адресов в каждой.
Например, подсеть 10.0.0.0 (класса А, содержит более 16,7 млн адресов от 10.0.0.0 по 10.255.255.255). По умолчанию зарезервирована, не маршрутизируется в интернете и используется для построения локальных и корпоративных сетей.
Класс B: 128.0.XXX.XXX — 191.255.XXX.XXX
Адрес начинается с битов 1,0, таким образом, класс B занимает четверть всего адресного пространства. Адрес сети занимает 14 бит, адрес узла — 16, следовательно класс B содержит 16 384 подсетей по 65 536 адресов в каждой
Например, сеть 169.254.X.X класса B с 65536 адресами. Зарезервирована для «канальных» адресов.
Класс C: 192.0.0.XXX — 223.255.255.XXX
Адрес начинается с битов 1,1,0, таким образом, класс C занимает 1/8 адресного пространства. Адрес сети занимает 21 бит, адрес узла — 8 бит, следовательно класс C содержит 2 097 152 сетей по 256 адресов в каждой.
Например, сеть 192.0.2.X имеет адреса с 192.0.2.0 по 192.0.2.255, зарезервирована для примеров в документации.
В 1990 году в RFC 1166 (англ.) описаны ещё два класса.
Класс D: 224.XXX.XXX.XXX — 239.XXX.XXX.XXX
Адрес начинается с битов 1,1,1,0. Класс D занимает 1/16 адресного пространства. Используется для многоадресной рассылки.
Класс Е: 240.XXX.XXX.XXX — 255.XXX.XXX.XXX.
Адрес начинается с битов 1,1,1,1. Такие адреса запрещены. Зарезервировано для использования в будущем.
Сравнительно размеры классов подсетей выглядят так:
классы: | A | B | C | D | E |
---|
При классовой адресации размер подсети вычисляется из ip адреса.
Бесклассовая адресация
правитьС ростом сети Интернет эта система оказалась неэффективной и была дополнена бесклассовой адресацией (CIDR). Была введена дополнительная метрика — маска подсети, определяющая, сколько бит адреса отводится на адрес сети, а сколько — на адрес узла.
Назначения подсетей
правитьНекоторые адреса 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] | Для использования в частных сетях. RFC 1918. | Глобальная маршрутизация запрещена. |
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, но ни один сервер не отвечает. Назначение осуществляется при помощи протокола APIPA (Automatic Private IP Addressing). | только в частных сетях |
172.16.0.0/12[4] | Для использования в частных сетях. RFC 1918. | Глобальная маршрутизация запрещена. |
192.0.0.0/24[6] | IETF Protocol Assignments | |
192.0.0.0/29 | Dual-Stack Lite (DS-Lite). RFC 6333. IPv6 transition mechanisms[англ.] | |
192.0.0.170/32 | NAT64[англ.] | |
192.0.0.171/32 | DNS64 | |
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] | Для использования в частных сетях. RFC 1918. | Глобальная маршрутизация запрещена. |
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. | Глобально разрешена только для подсетей 233.0.0.0/8 и 234.0.0.0/8. |
240.0.0.0/4[2] | Зарезервировано для использования в будущем. Существует мнение, что эта подсеть больше никогда не будет использована, так как есть множество оборудования, не способного посылать пакеты в эту сеть.[источник не указан 278 дней] | Запрещена |
255.255.255.255/32[11] | Ограниченный широковещательный адрес. Чаще всего используется как адрес назначения при поиске DHCP-серверов. | Запрещена |
все остальные | Распределяются региональными интернет-регистраторами. Могут быть провайдеро-независимыми. | Глобально разрешена |
Структура заголовка пакета
правитьЗаголовок пакета IP содержит 14 полей, из которых 13 являются обязательными. Четырнадцатое поле предназначено для необязательных опций. Поля используют порядок байтов от старшего к младшему, старшие биты идут первыми. Первый бит имеет номер 0. Таким образом, например, поле с версией находится в четырёх старших битах первого байта. При передаче многооктетных значений старший октет передаётся первым.
Отступ | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Бит | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 0 | Версия | Размер заголовка | Differentiated Services Code Point | Explicit Congestion Notification | Размер пакета (полный) | |||||||||||||||||||||||||||
4 | 32 | Идентификатор | Флаги | Смещение фрагмента | |||||||||||||||||||||||||||||
8 | 64 | Время жизни | Протокол | Контрольная сумма заголовка | |||||||||||||||||||||||||||||
12 | 96 | IP-адрес источника | |||||||||||||||||||||||||||||||
16 | 128 | IP-адрес назначения | |||||||||||||||||||||||||||||||
20 | 160 | Опции (если размер заголовка > 5) | |||||||||||||||||||||||||||||||
20 или 24+ | 160 или 192+ | Данные |
- Версия
- Первым полем заголовка пакета является версия протокола размером в четыре бита. Для 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 слов указывает на присутствие опций и необходимость их обработки.
- Замечание: Поля «копировать», «класс опции» и «номер опции» иногда называют одним восьмибитным полем «тип опции».
Copy | Class | Number | Value | Name | Reference |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | EOOL — End of Options List | RFC791[17] |
0 | 0 | 1 | 1 | NOP — No Operation | RFC791[17] |
1 | 0 | 2 | 130 | SEC — Security | [RFC1108] |
1 | 0 | 3 | 131 | LSR — Loose Source Route | RFC791[17] |
0 | 2 | 4 | 68 | TS — Time Stamp | RFC791[17] |
1 | 0 | 5 | 133 | E-SEC — Extended Security | [RFC1108] |
1 | 0 | 6 | 134 | CIPSO — Commercial Security | [draft-ietf-cipso-ipsecurity-01] |
0 | 0 | 7 | 7 | RR — Record Route | RFC791[17] |
1 | 0 | 8 | 136 | SID — Stream ID | RFC791[17][RFC6814][1] |
1 | 0 | 9 | 137 | SSR — Strict Source Route | RFC791[17] |
0 | 0 | 10 | 10 | ZSU — Experimental Measurement | [ZSu] |
0 | 0 | 11 | 11 | MTUP — MTU Probe | [RFC1063][RFC1191][1] |
0 | 0 | 12 | 12 | MTUR — MTU Reply | [RFC1063][RFC1191][1] |
1 | 2 | 13 | 205 | FINN — Experimental Flow Control | [Greg_Finn] |
1 | 0 | 14 | 142 | VISA — Experimental Access Control | [Deborah_Estrin][RFC6814][1] |
0 | 0 | 15 | 15 | ENCODE — ??? | [VerSteeg][RFC6814][1] |
1 | 0 | 16 | 144 | IMITD — IMI Traffic Descriptor | [Lee] |
1 | 0 | 17 | 145 | EIP — Extended Internet Protocol | [RFC1385][RFC6814][1] |
0 | 2 | 18 | 82 | TR — Traceroute | [RFC1393][RFC6814][1] |
1 | 0 | 19 | 147 | ADDEXT — Address Extension | [Ullmann IPv7][RFC6814][1] |
1 | 0 | 20 | 148 | RTRALT — Router Alert | [RFC2113] |
1 | 0 | 21 | 149 | SDB — Selective Directed Broadcast | [Charles_Bud_Graff][RFC6814][1] |
1 | 0 | 22 | 150 | В В В В В В В — Unassigned (Released 18 October 2005) | |
1 | 0 | 23 | 151 | DPS — Dynamic Packet State | [Andy_Malis][RFC6814][1] |
1 | 0 | 24 | 152 | UMP — Upstream Multicast Pkt. | [Dino_Farinacci][RFC6814][1] |
0 | 0 | 25 | 25 | QS — Quick-Start | [RFC4782] |
0 | 0 | 30 | 30 | EXP — RFC3692-style Experiment [2] | [RFC4727] |
0 | 2 | 30 | 94 | EXP — RFC3692-style Experiment [2] | [RFC4727] |
1 | 0 | 30 | 158 | EXP — RFC3692-style Experiment [2] | [RFC4727] |
1 | 2 | 30 | 222 | EXP — RFC3692-style Experiment [2] | [RFC4727] |
Исчерпание адресного пространства
правитьУже в 1980-е годы стало очевидно, что распределение адресного пространства происходит значительно более быстрыми темпами, чем было заложено в архитектуру IPv4. Это привело сначала к появлению классовой адресации, позднее бесклассовой адресации, и в конечном итоге к разработке нового протокола IPv6.
В феврале 2011 года IANA выделила 5 последних блоков адресов для RIR. Блоки свободных IP-адресов начали заканчиваться у региональных регистраторов с 2011 года[18].
25 ноября 2019 года были распределены последние свободные IPv4-адреса в Европе, странах бывшего СССР и на Ближнем Востоке[19]. Теперь получить IPv4-адрес можно будет, только если его освободит текущий владелец — например, закроется компания или какая-либо сеть освободит ненужный ей адресный ресурс.
См. также
правитьПримечания
править- ↑ 1 2 3 RFC3330: Special-use IPv4 addresses Архивная копия от 14 декабря 2011 на Wayback Machine (англ.); заменён RFC5735: Special-use IPv4 addresses Архивная копия от 15 мая 2013 на Wayback Machine (англ.)
- ↑ 1 2 3 RFC1700: Assigned Numbers Архивная копия от 1 января 2012 на Wayback Machine (англ.)
- ↑ RFC1122: Requirements for Internet Hosts — Communication Layers [section-3.2.1.3] Архивная копия от 15 сентября 2008 на Wayback Machine (англ.)
- ↑ 1 2 3 RFC1918: Address allocation for private internets Архивная копия от 2 декабря 2011 на Wayback Machine (англ.)
- ↑ RFC3927: Dynamic configuration of IPv4 link-local addresses Архивная копия от 19 января 2012 на Wayback Machine (англ.)
- ↑ RFC 6890: IANA IPv4 Special Purpose Address Registry Архивная копия от 17 октября 2012 на Wayback Machine (англ.)
- ↑ 1 2 3 RFC5737: IPv4 address blocks reserved for documentation Архивная копия от 9 ноября 2011 на Wayback Machine (англ.)
- ↑ RFC3068: An anycast prefix for 6to4 relay routers Архивная копия от 21 января 2012 на Wayback Machine (англ.)
- ↑ RFC2544: Benchmarking methodology for network interconnect devices Архивная копия от 9 ноября 2011 на Wayback Machine (англ.)
- ↑ RFC3171: IANA guidelines for IPv4 multicast address assignments Архивная копия от 15 мая 2012 на Wayback Machine (англ.)
- ↑ RFC919: Broadcasting internet datagrams Архивная копия от 26 ноября 2011 на Wayback Machine (англ.)
- ↑ Stefan Savage. Practical network support for IP traceback . Дата обращения: 6 сентября 2010.
- ↑ В качестве первоапрельской шутки предложен означать злонамеренность пакета (evil bit)
- ↑ Assigned Internet Protocol Numbers Архивная копия от 13 июня 2018 на Wayback Machine (англ.)
- ↑ Computing the Internet Checksum Архивная копия от 9 июня 2011 на Wayback Machine (англ.)
- ↑ IP OPTION NUMBERS . IANA. Дата обращения: 17 июня 2018. Архивировано 25 октября 2018 года.
- ↑ 1 2 3 4 5 6 7 RFC791: Internet Protocol Архивная копия от 30 июля 2019 на Wayback Machine (англ.)
- ↑ IPv4 Address Report . Дата обращения: 16 февраля 2011. Архивировано 1 апреля 2009 года.
- ↑ Publication date: 25 Nov 2019- news, ipv4, Ipv4 Depletion, ipv6, Press Release. The RIPE NCC has run out of IPv4 Addresses . RIPE Network Coordination Centre. Дата обращения: 27 ноября 2019. Архивировано 25 ноября 2019 года.