19. Сеть. Протокол IP4. Протокол ARP. Маршрутизация

IPv4

IP расшифровывается как Internet Protocol (протокол Интернет), и конкретно 4-ая версия этого протокола на текущий момент является наиболее распространенной. IPv4 определен через RFC 791.

В рамках OSI это протокол сетевого (3-го) уровня. Этот уровень, напоминаю, предназначен для определения пути передачи данных.

IPv4 использует коммутацию пакетов. При этом, исходное передаваемое сообщение разделяется на части небольшого размера (пакеты), которые передаются по сети независимо.

Кроме того, IPv4 не гарантирует доставку пакетов, или отсутсвие дубликатов. Это так называемая “best effort delivery” (в отличие от гарантированной доставки). Соответственно, эти задачи переходят к протоколам более высокого уровня, например, TCP.

Адресация

IPv4 идентифицирует отправителя и получателя при помощи 32-битного адреса, что ограничивает число возможных адресов 4 294 967 296. Из этого количества IPv4 резервирует специальные диапазоны адресов, называемые частными (~18 млн.) и мультикаст (~270 млн).

Адреса обычно записываются в виде четырех десятичных октетов через точку, например: 198.51.100.25 соответствует числу C633641916.

При использовании глобального пространства адресов, необходимо различать адреса, доступные в локальной физической сети, не требующие маршрутизации, и адреса, находящиеся физически в другой сети. В случае последних, пакеты направляются на маршрутизатор, который должен передать их дальше.

В первых версиях стандарта, первый октет использовался для идентификации сети, остальные – для идентификации узла. Довольно быстро стало ясно, что 256 сетей – это мало. Поэтому были введены классы сетей:

Класс Первые биты Длина адреса сети Длина адреса узла
A 0 8 24
B 10 16 16
C 110 24 8
D 1110 N/A N/A
E 1111 N/A N/A
Класс Начало диапазона Конец диапазона
A 0.0.0.0 127.255.255.255
B 128.0.0.0 191.255.255.255
C 192.0.0.0 223.255.255.255
D 224.0.0.0 239.255.255.255
E 240.0.0.0 255.255.255.255

Класс D зарезервирован для мультикаста, класс E – просто зарезервирован “на всякий случай”.

Длина адреса сети и длина адреса узла определялись первыми битами адреса. Примерно с 1985 года от этого тоже отказались. Причины этого в том, что многие организации требовали больше адресов, чем предоставляла сеть класса C и получали сеть класса B. Сеть класса B, однако, превышала требования организации в разы.

На смену классам сетей пришла маска сети. Это битовая маска, которая указывает, какие биты адреса относятся к сети, а какие – к узлу. По стандартному соглашению, маска должна заполняться слева направо, так, чтобы адрес сети всегда находился в старших битах. Это позволяет указывать только длину адреса сети, вместо маски сети целиком.

Например, 192.0.2.0/24 означает, что первые 24 бита (три октета) относятся к адресу сети, а остальные – к адресу узла. /24 эквивалентно маске сети 255.255.255.0.

Использование масок сетей описано в RFC 1517.

Многочисленные стандарты так же резервируют различные диапазоны адресов для специальных нужд.

Диапазон Описание RFC
0.0.0.0/8 Текущая сеть (адрес источника) 6890
10.0.0.0/8 Частная сеть 1918
100.64.0.0/10 Разделяемое адресное пространство CGN 6598
127.0.0.0/8 Loopback 6890
169.254.0.0/16 Автоконфигурация 3927
172.16.0.0/12 Частная сеть 1918
192.0.0.0/24 IETF Protocol Assignments 6890
192.0.2.0/24 Документация и примеры 1 5737
192.88.99.0/24 Релей ipv6 to ipv4 3068
192.168.0.0/16 Частная сеть 1918
198.18.0.0/15 Тестирование пропускной способности сети 2544
198.51.100.0/24 Документация и примеры 2 5737
203.0.113.0/24 Документация и примеры 3 5737
224.0.0.0/4 Мультикаст 5771
240.0.0.0/4 Зарезервировано 1700
255.255.255.255 Широковещательный запрос 919

Так же резервируются адреса узлов, в двоичном представлении состоящий из нулей (обозначает всю сеть, зарезервирован) и единиц (широковещательный запрос для данной сети).

Например, 203.0.113.0 означает (в тексте) сеть 203.0.113.0/24, а 203.0.113.255 – широковещательный запрос в эту сеть.

Формат пакета

Пакет состоит из заголовка и данных. IP не предполагает никакой проверки целостности. Нижележащий протокол (скажем, Ethernet) уже обеспечивает проверку целостности на канальном уровне, а вышележащий (скажем, TCP)– на уровне данных.

Версия, 4 бита
Первое поле заголовка. В IPv4 имеет значение 00102, т.е. 4.
Длина заголовка, 4 бита
Количество 32-битных слов в заголовке. Минимальное значение 5, что соответствует длине заголовка 20 байт. Максимальное – 15, длина заголовка 60 байт.
DSCP или ToS – тип сервиса, 6 бит
Определяет приоретизацию, скажем, для VoIP.
ECN, 2 бита
Флаг явного указания перегруженности сети. Требует поддержки с обеих сторон (принимающей и передающей). При получении этого флага, понижается скорость передачи. Если поддержки флага нет, пакеты просто отбрасываются.
Полная длина, 16 бит
Полная длина пакета в байтах, включая заголовок и данные. Минимальная длина – 20, максимальная – 65535.
Идентификация, 16 бит
Служит для уникальной идентификации датаграммы. Поскольку при передачи по различным сетям может быть необходимо разделить пакет на более мелкие части, это поле служит для идентификации частей, принадлежащих одному пакету.
Флаги, 3 бита

Битовые флаги:

  1. Зарезервирован, всегда 0
  2. Не фрагментировать. Если дальнейшая передача пакета требует фрагментации, пакет отбрасывается.
  3. Больше фрагментов. Для фрагментированных пакетов, у всех, кроме последнего, этот флаг установлен в 1.
Сдвиг, 13 бит
Сдвиг фрагмента относительно начала датаграммы, измеряемый в блоках по 64 бита. Первый фрагмент имеет сдвиг 0. Максимальный сдвиг – 65528 байт, что превышает максимальную длину пакета 65515 (за вычетом 20-байтного заголовка).
Время жизни (TTL), 8 бит
Когда пакет проходит через маршрутизатор, это поле уменьшается на 1. Если это поле равно нулю, маршрутизатор отбрасывает его.
Протокол, 8 бит

Протокол содержащихся в пакете данных. На данный момент зарегистрировано 143 протокола. Основные:

  • 1 - ICMP
  • 6 - TCP
  • 17 - UDP
Контрольная сумма заголовка, 16 бит
Считается сумма 16-битных слов в заголовке, кроме, собственно, контрольной суммы. Эта сумма так же суммируется блоками по 16 бит, пока не останется один. Затем к результату побитово применяется отрицание.
Адрес отправителя, 32 бита
Тут все ясно
Адрес получателя, 32 бита
Тут тоже все ясно.
Опции (опциональное поле)

Используется редко. Состоит из блоков заголовок-данные. Заголовок опции имеет длину 8-16 бит и состоит из полей:

  • Тип опции, 8 бит – поле, определяющее, что это за опция. Значение “0” означает окончание списка опций. Всего зарегистрированно 26 кодов.
  • Длина, 8 бит – размер всей опции в битах, включая заголовок. Для некоторых типов опций может отсутствовать.

ARP

IP определяет логические адреса. Однако, чтобы отправить пакет в сети Ethernet, необходимо так же знать физический адрес целевого узла (либо маршрутизатора). Для сопоставления одного с другим используется протокол ARP.

ARP (Протокол резолюции адресов) – это формально протокол сетевого (3-го) уровня в модели OSI, хотя фактически обеспечивает взаимодействие 2-го и 3-го уровней. ARP реализован для различных пар протоколов 2-го и 3-го уровней.

Сам протокол построен на простой схеме запрос-ответ. Рассмотрим на конкретном примере.

Если узел сети, скажем, A с логическим адресом 198.51.100.1 (в сети 198.51.100.0/24) хочет отправить пакет узлу B с логическим адресом 198.51.100.2, он посылает широковещательный запрос протокола второго уровня (в данном случае Ethernet) с инкапсулированным сообщением ARP, спрашивающим узлы сети – какой физический адрес у узла с логическим адресом 198.51.100.2, и содержащим логический и физический адреса узла А. Узел B, увидев собственный логический адрес в запроссе, посылает ответ узлу A по полученным в запросе логическому и физическому адресу. Результаты запросов кешируются.

Сообщения ARP имеют следующую структуру:

Физический протокол (HTYPE), 2 байта
Используемый протокол 2 уровня. Ethernet имеет идентификатор 1.
Логический протокол (PTYPE), 2 байта
Используемый протокол 3 уровня. Соответствует типам EtherType. IPv4 имеет идентификатор 0x0800.
Длина физического адреса (HLEN), 1 байт
Длина физического адреса в октетах, для Ethernet – 6
Длина логического адреса (PLEN), 1 байт
Длина логического адреса в октетах, для IPv4 – 4
Операция (OPER), 2 байта
1 для запроса, 2 для ответа, и множество других вариантов для расширений протокола.
Физический адрес отправителя (SHA), HLEN байт
В запросе – адрес запрашивающего. В ответе – адрес запрошенного узла.
Логический адрес отправителя (SPA), PLEN байт

Физический адрес получателя (THA), HLEN байт
В запросе игнорируется. В ответе – адрес запрашиваюшего.
Логический адрес получателя (TPA), PLEN байт

Обычно узлы сети так же посылают ARP-сообщения при смене IP-адреса или при включении. Обычно это реализуется как APR-запрос, в котором TPA=SPA , а THA=0. Другой вариант – ARP-ответ, в котором TPA=SPA и THA=SHA.

Кроме того, ARP может быть использован для детектирования конфликта логических адресов (при этом SPA=0).

Существуют расширения протокола, производящие обратные операции, InARP (Inverse ARP), получающий L3-адрес по L2-адресу и RARP, получающий L3-адрес запрашивающего узла.

RARP использовался для автоконфигурирования L3-адресов. Впоследствии заменен протоколом BOOTP, а затем DHCP.

Маршрутизация в сетях IPv4

Основной алгоритм маршрутизации в сетях IPv4 называется алгоритмом пересылки.

Если есть целевой адрес D и префикс сети N, то

  • Если N совпадает с префиксом сети текущего узла, послать данные по локальной связи.
  • Если в таблице маршрутизации есть маршрут для N, послать данные next-hop маршрутизатору.
  • Если есть маршрут по умолчанию, послать данные next-hop маршрутизатору по умолчанию
  • Иначе – ошибка.

Таблица маршрутизации представляет собой таблицу сопоставления адресов сетей и адресов next-hop маршрутизаторов для этих сетей. Так, например узел с адресом 198.51.100.54/24 может иметь такую таблицу маршрутизации: 203.0.113.0/24

Destination Gateway Device
198.51.100.0/24 0.0.0.0 eth0
203.0.113.0/24 198.51.100.1 eth0
0.0.0.0/0 203.0.113.1 eth0

Принципиально, маршрут так же привязывается к сетевому устройству, с которого должны быть отправлены данные.

Если узел может быть достигнут по нескольким маршрутам, выбирается маршрут с более длинной маской сети (т.е. более конкретный). Маршрут по умолчанию может быть только один.

Например, узел 198.51.100.54/24 имеет таблицу маршрутизации:

Destination Gateway Device
198.51.100.0/24 0.0.0.0 eth0
203.0.113.0/24 198.51.100.1 eth0
203.0.113.224/27 198.51.100.5 eth0

Если отправить пакет на адрес 203.0.113.144, будет выбран next-hop 198.51.100.1, а на адрес 203.0.113.248 – 198.51.100.5.