К протоколам сетевого уровня относят 2 протокола: IP и ICMP. В этом уроке мы рассмотрим протокол IPv4.

Описание заголовка

IP (Internet Protocol) используется в качестве маршрутизируемого протокола, который перенаправляет пакеты от одного узла к другому, используя IP адреса. IP адрес представляет собой уникальный идентификатор сетевого устройства. С помощью данного идентификатора пакеты доставляются конечным узлам.

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

При поступлении сегмента с транспортного уровня добавляется 20-ти байтный заголовок, хотя в некоторых случаях его длина может достигать и 60:

Описание протокола IP

Версия — версия протокола, для IPv4 равен 4.

IHL (Internet Header Length) — длина заголовка IP. Длина заголовка может иметь размеры от 20 до 60 байт. Поэтому данное поле указывает принимающему узлу где заканчивается заголовок и начинаются данные. Длина указывается в единицах по 4 байта, то есть 1 единица = 4 байта, 5 единиц = 20 байт, то есть значение 5 указывает на минимальную длину заголовка.

Длина пакета (Total Length) — длина пакета в байтах, включая сам заголовок и данные.

Тип обслуживания (Type Of Service, ToS) — определяет приоритетность в обслуживании пакетов. То есть пакет с высшим приоритетом будет обслужен в первую очередь.

Идентификатор (Identification) — для передачи больших пакетов через сети с малой пропускной способностью пакеты разбиваются на более мелкие (фрагментация). Всем фрагментам одного большого пакета присваивается одинаковый номер, чтобы не перепутать их среди других фрагментов.

Флаги — используются для фрагментации. Первый бит всегда равен 0. Второй бит DF (don’t fragment) разрешает или запрещает фрагментацию. Третий бит MF (more fragments) указывает на то, последний ли это фрагмент или имеются еще.

Смещение фрагмента (Fragment Offset) — определяет позицию фрагмента в потоке. Иными словами указывает на номер фрагмента.

Время жизни (Time To Live, TTL) — количество маршрутизаторов, через которое проходит пакет. После прохождения пакета через маршрутизатор значение TTL уменьшается на 1. Если TTL окажется равным 0, то пакет уничтожается, а отправителю посылается сообщение Time Exceeded по протоколу ICMP.

Для чего нужен TTL?

Для предотвращения зацикливания при маршрутизации. При неправильной конфигурации пакет может блуждать по сети бесконечно, поэтому и ввели такой параметр. Максимальное значение равно 255, то есть пакет может пройти максимум через 255 маршрутизаторов.

Протокол (Protocol) — указывает на протокол верхнего уровня (TCP, UDP, ICMP).

Контрольная сумма заголовка (Checksum) — вычисляется для проверки на наличие ошибок.

Опции (Options) — дополнительные параметры. Именно за счет этих параметров длина заголовка может увеличиваться.

Выравнивание (Padding) — заполняющие нули для выравнивания длины заголовка.

Рассмотрим упрощенную схему работы протокола.

На передаче:

упрощенная схема работы протокола на передаче

 

На приеме:

упрощенная схема работы протокола на приеме

 

Описание фрагментации.

Протокол IP при необходимости может дробить большие пакеты на более мелкие. Обычно такая необходимость возникает на стыковке сетей с различными технологиями канального уровня, например, Ethernet, ATM, FDDI, Token Ring и так далее. Кадры данных технологий имеют различную длину, которая называется MTU (Maximum Transmission Unit) — максимальный объем данных, который может уместиться в одном кадре.

Например, в Ethernet MTU равен 1500, в FDDI — 4096.
Кадр FDDI не сможет поместиться в кадре Ethernet, поэтому на этот случай и предусмотрен механизм фрагментации пакетов на сетевом уровне.

Порядок фрагментации следующий:

1) Проверяется флаг DF. Если он равен 1, то фрагментация не происходит ни при каких обстоятельствах и пакет        уничтожается. Отправителю пакета посылается сообщение Fragmentation needed.

2) Если DF = 0, то исходный пакет делится на равные части. Последний фрагмент обычно меньше остальных.

3) Заголовок исходного пакета копируется в заголовки фрагментов, то есть все заголовки одинаковы.

4) В поле Identification всех фрагментов записывается уникальное и одинаковое число.

5) Во всех фрагментах, кроме последнего, флагу MF присваивается 1. В последнем фрагменте флаг MF равен 0.

6) В поле Fragment offset записывается положение фрагмента в общем потоке. В первом фрагменте это значение всегда     равно 0.

 

Рассмотрим фрагментацию на простом примере. Необходимо фрагментировать пакет длиной в 300 байт на 3 части длиной по 100 байт.

Вот как выглядит заголовок исходного пакета:

заголовок исходного пакета фрагментации

 

А вот как выглядят фрагменты после деления:

Первый фрагмент:

первый фрагмент после деления

Второй фрагмент:

второй фрагмент после деления

Третий фрагмент:

третий фрагмент после деления

 

На приеме для сборки пакетов сравниваются следующие параметры:

1) IP адрес отправителя — у всех должны совпадать

2) IP адрес получателя — у всех должны совпадать

3) Identification — у всех должны совпадать

4) MF — у всех, кроме последнего должна быть 1

5) Fragment Offset — у всех разная

Если первые 3 параметра совпадают, то фрагменты собираются.