IPv4 () — четвёртая версия интернет-протокола (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-битное число в восьмеричной форме
Адресация: хосты и подсети Ранняя версия стандарта 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 BCDE
При классовой адресации размер подсети вычисляется из ip адреса.
Бесклассовая адресация
С ростом сети Интернет эта система оказалась неэффективной и была дополнена бесклассовой адресацией (CIDR). Была введена дополнительная метрика — маска подсети, определяющая, сколько бит адреса отводится на адрес сети, а сколько — на адрес узла.
Назначения подсетей Некоторые адреса IPv4 зарезервированы для специальных целей и не предназначены для глобальной маршрутизацииRFC3330: Special-use IPv4 addresses ; заменён RFC5735: Special-use IPv4 addresses . Список подсетей специального назначения определён RFC 6890. В таблице ниже приведены основные (список не полный).
Подсеть Назначение Маршрутизация 0.0.0.0/8RFC1700: Assigned Numbers Адреса источников пакетов «этой» («своей») сетиRFC1122: Requirements for Internet Hosts — Communication Layers [section-3.2.1.3] .Запрещена 0.0.0.0/32 В сокетах с состоянием «listening» обозначает любые IP отправителя или любые сети получателя на текущем хосте. Может посылаться в сеть только в качестве адреса источника, если хосту ещё не назначен IP-адрес (обычно по протоколу DHCP). Не может быть использован как адрес назначения в сети. В маршрутизаторах Cisco при попытке отправить пакет на адрес 0.0.0.0 он будет отправлен на широковещательный адрес наименьшей подсоединённой подсети (connected в таблице маршрутизации).Запрещена 10.0.0.0/8RFC1918: Address allocation for private internets Для использования в частных сетях. RFC 1918.Глобальная маршрутизация запрещена. 100.64.0.0/10 Shared Address Space. RFC 6598. Для использования в сетях сервис-провайдера.Глобальная маршрутизация запрещена. 127.0.0.0/8 Подсеть для коммуникаций внутри хоста (см. localhost). Используется сетевая подсистема, но в действительности такие пакеты не проходят через сетевую карту. Если пакет с таким адресом назначения был получен из сети, то должен быть отброшен.Запрещена 169.254.0.0/16RFC3927: Dynamic configuration of IPv4 link-local addresses Канальные адреса. Подсеть используется для автоматического назначения IP операционной системой в случае, если настроено получение адреса по DHCP, но ни один сервер не отвечает. Назначение осуществляется при помощи протокола APIPA (Automatic Private IP Addressing).только в частных сетях 172.16.0.0/12 Для использования в частных сетях. RFC 1918. Глобальная маршрутизация запрещена. 192.0.0.0/24RFC 6890: IANA IPv4 Special Purpose Address Registry IETF Protocol Assignments 192.0.0.0/29 Dual-Stack Lite (DS-Lite). RFC 6333. 192.0.0.170/32 192.0.0.171/32 DNS64 192.0.2.0/24RFC5737: IPv4 address blocks reserved for documentation Для примеров в документации.Запрещена 192.88.99.0/24 Используются для рассылки ближайшему узлу. RFC 3068Глобальная маршрутизация запрещена. 192.88.99.1/32 Применяется в качестве ретранслятора при инкапсуляции IPv6 в IPv4 (6to4)RFC3068: An anycast prefix for 6to4 relay routers . Иными словами, этот IP не уникален. Его анонсируют многие компании. Пакет на этот адрес пойдёт до ближайшего хоста с этим IP, который распакует пакет и отправит его дальше по IPv6-маршрутизации.Глобальная маршрутизация запрещена. 192.168.0.0/16 Для использования в частных сетях. RFC 1918. Глобальная маршрутизация запрещена. 198.51.100.0/24 Для примеров в документации. Запрещена 198.18.0.0/15RFC2544: Benchmarking methodology for network interconnect devices Для стендов тестирования производительности. Только для тестов 203.0.113.0/24 Для примеров в документации. Запрещена 224.0.0.0/4RFC3171: IANA guidelines for IPv4 multicast address assignments Используются для многоадресной рассылки. Полный актуальный список зарезервированных блоков на сайте IANA . Разъяснения по зарезервированным мультикастовым подсетям RFC 5771. Глобально разрешена только для подсетей 233.0.0.0/8 и 234.0.0.0/8. 240.0.0.0/4 Зарезервировано для использования в будущем. Запрещена 255.255.255.255/32RFC919: Broadcasting internet datagrams Ограниченный широковещательный адрес. Чаще всего используется как адрес назначения при поиске DHCP-серверов.Запрещенавсе остальные Распределяются региональными интернет-регистраторами. Могут быть провайдеро-независимыми. Глобально разрешена
Структура заголовка пакета Заголовок пакета IP содержит 14 полей, из которых 13 являются обязательными. Четырнадцатое поле предназначено для необязательных опций. Поля используют порядок байтов от старшего к младшему, старшие биты идут первыми. Первый бит имеет номер 0. Таким образом, например, поле с версией находится в четырёх старших битах первого байта. При передаче многооктетных значений старший октет передаётся первым.
+IPv4 Header Format Смещение Октет 0 1 2 3 Октет Бит01234567012345670123456701234567 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 байт, но современные реализации обычно поддерживают гораздо больший размер. Пакеты большего размера, чем поддерживает канал связи, фрагментируются.
Идентификатор Преимущественно используется для идентификации фрагментов пакета, если он был фрагментирован. Существуют эксперименты по его использованию для других целей, таких как добавление информации о трассировке пакета для упрощения отслеживания пути пакета с подделанным адресом источника.
Флаги Поле размером три бита, содержащее флаги контроля над фрагментацией. Биты, от старшего к младшему, означают: 0: Зарезервирован, должен быть равен 0В качестве первоапрельской шутки предложен означать злонамеренность пакета (evil bit). 1: Не фрагментировать 2: У пакета ещё есть фрагменты Если установлен флаг «не фрагментировать», то в случае необходимости фрагментации такой пакет будет уничтожен. Может использоваться для передачи данных хостам, не имеющим достаточных ресурсов для обработки фрагментированных пакетов. Флаг «есть фрагменты» должен быть установлен в 1 у всех фрагментов пакета, кроме последнего. У нефрагментированных устанавливается в 0 — такой пакет считается собственным последним фрагментом.
Смещение фрагмента Поле размером в 13 бит, указывает смещение поля данных текущего фрагмента относительно начала поля данных первого фрагментированного пакета в блоках по 8 байт. Позволяет задать до (213−1)×8=65528 байт смещения. При учёте размера заголовка итоговое смещение может превысить максимальный размер пакета (65528 + 20 = 65548 байт). Первый фрагмент в последовательности имеет нулевое смещение.