2.5.4. IP-пакет

Протокол Интернет (IP) является подсистемой доставки семейства протоколов TCP/IP. Протокол Интернет — это ненадежный, не ориентированный на соединение протокол, пользующийся датаграммами для доставки информации в сети TCP/IP. Датаграмма протокола IP называется IP-датаграммой. Все приложения TCP/IP передают информацию, упаковав ее предварительно в IP-датаграмму. IP-датаграмма состоит из заголовка и собственно данных.

Термины «IP-датаграмма» и «IP-пакет» являются синонимами. Независимо от того, какие и сколько сообщений переносится, датаграмма представляет собой «самодостаточный» блок данных, в отличие от потока байтов. Термин «датаграмма» характеризует тип службы доставки. Любой протокол использует либо датаграммы, либо поток байтов. Тип датаграммы, например IP или UDP, определяет ее формат и содержимое.

Более общий термин «пакет» обозначает просто блок данных. Термин «пакет» относится к данным, а термин «датаграмма» — к службе доставки.

Следуя сквозь сетевые уровни, блок данных изменяет свое название. Как правило, данные называются по названию сетевого модуля, через который они в данный момент проходят. Как только данные выходят из одного модуля и попадают в следующий, они меняют имя на новое.

Данные, проходящие между прикладным и транспортным уровнями, называются прикладными сообщениями. TCP и UDP пользуются потоковой и датаграммной службами доставки соответственно. Блок данных протокола TCP называется сегментом, а протокола UDP — датаграммой. Название соответствует блоку данных на пути между транспортным и сетевым уровнями. На рис. 2.7 показано, как изменяется название блока данных на пути сквозь стек протоколов TCP/IP.

Сегмент TCP иногда называется транспортным сообщением. В рамках Интернет термин «сообщение» всегда относится к данным определенного протокола или процесса виртуального соединения, или потока байтов. Сегменты TCP и датаграммы UDP превращаются в IP-пакеты на пути между модулем IP и уровнем соединения. Сеть TCP/IP инкапсулирует все сегменты TCP и датаграммы UDP в датаграммы IP, перемещая данные между сетевым уровнем и уровнем соединения. Все поступающие на уровень соединения данные называются IP-датаграммами или IP-пакетами.

Если применяется сеть технологии Ethernet, программное обеспечение инкапсулирует проходящие из уровня соединения на физический уровень данные в формат кадров Ethernet. В дальнейшем эти данные называются либо «кадр данных», либо «кадр Ethernet».

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

0                                                                                 15

16                                                    31

Версия

(VERS)

4бита

Длина заголовка

(HLEN)

4 бита

Тип службы

(TOS)

8 бит

Общая длина пакета в байтах

16 бит

Идентификатор фрагмента

16 бит

Флаги 3 бита

Смещение фрагмента 13 бит

Время существования

(TTL) 8 бит

Протокол

8 бит

Контрольная сумма заголовка

16 бит

IP-адрес источника 32 бита

IP-адрес получателя 32 бита

Опции (если есть)

Заполнение (если нужно)

Данные

Подпись: Рис. 2.8. Формат IP-датаграммы и поля заголовка в ней

Номер версии (VERS)

Протокол Интернет все время развивается. Первые четыре байта в IP-заголовке (поле «номер версии») обозначают версию протокола Интернет, который создал данную датаграмму. Все программное обеспечение IP обязано как минимум считывать информацию из этого поля. Когда формат данных протокола Интернет меняется, номер его версии в датаграмме увеличивается, позволяя, таким образом, другим модулям IP откидывать датаграммы, обработать которые они не в состоянии из-за устаревшего формата данных. Модуль IP, принявший IP-датаграмму версии, которую он не может обработать, может доложить о возникновении проблемы.

Длина заголовка (HLEN)

Следующие четыре бита IP-заголовка (поле «длина заголовка») задают длину заголовка в 32-битных словах. Длина IP-заголовка всегда кратна 32 битам. Длина IP-заголовка всегда равна 20 байтам, за исключением некоторых случаев. Данное поле обычно содержит число 5 (пять 32-битных слов равны 20 байтам). В двоичном виде это поле равно 0101.

Инкапсулированные данные начинаются сразу после IP-заголовка. Зная длину IP-заголовка, программное обеспечение всегда может определить, где искать начало инкапсулированных данных.

Начало_инкапсулированных_данных = Первый_байт_IP_датаграммы + (HLEN*4)

Тип службы (TOS)

Следующие восемь битов в IP-заголовке (поле «тип службы») определяют приоритет IP-пакета. Биты поля «тип службы» в IP-заголовке позволяют сетевому уровню принять обоснованное решение по поводу передачи пакетов, основываясь на их, возможно различных, приоритетах.

Поле «тип службы» разделено на пять подразделов.

Биты 0-2

3

4

5

6

7

Приоритет

Задержка

Производительность

Надежность

Стоимость

Не используется

Первые три бита поля «тип службы» образуют подраздел «приоритет». Подраздел «приоритет» может принимать значения от нуля до семи (от 000 до 111) и обозначает уровень «важности» переносимых данных.

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

Поле «тип службы»

В настоящее время нет широко известных приложений Интернет, которые бы обрабатывали значения этих подразделов. Однако существует описание метода, как это следовало бы делать: в RFC 1340 (Assigned Numbers, Reynolds and Postel, 1992) описано, как приложение Интернет должно устанавливать различные биты подразделов поля «тип службы»; в RFC 1349, «Тип службы в семействе протоколов Интернет» (Type of Service in the Internet Protocol Suite, Almquist, 1992).

Длина пакета

Следующее поле IP-заголовка — поле «длина пакета». Оно имеет длину в шестнадцать битов и задает длину IP-пакета, включая сам заголовок. Стандарт предписывает считать длину пакета в байтах, а не в 32-разрядных словах, как это было в поле «длина заголовка». Данные из этих двух полей позволяют легко найти начало и конец инкапсулированных данных, а также подсчитать их длину:

Начало_данных = Первый_байт_ IP-датаграммы + (HLEN*4)

Конец_данных = Первый_байт_ IP-датаграммы + Длина_пакета

Длина_данных = Длина_пакета — Начало_данных

Для поля «длина пакета» отведено 16 битов, а это значит, что максимальная длина пакета равна 65 535 байтов. Каждая сетевая технология оговаривает максимальную длину пакета данных. Такая длина называется «максимальный размер пакета» (maximum transfer unit, MTU). Спецификация Ethernet ограничивает длину пакета величиной 1500 байтов. Максимальная длина пакета технологии Token Ring равна          4464 байта. В других сетях MTU может быть всего 128 байтов или даже меньше.

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

Идентификация

Наличие ноля идентификации в IP-заголовке обусловлено часто случающейся фрагментацией пакетов в Интернет. Сетевые компьютеры используют поле идентификации с целью однозначно идентифицировать каждый посланный ими пакет данных. Когда сетевой компьютер получает пакет, он определяет, к какой датаграмме относится определенный фрагмент при помощи поля идентификации.

Флаги и смещение фрагмента

Как правило, информация, содержащаяся в полях идентификации, флагов и смещения фрагмента, позволяет правильно собрать фрагментированный IP-пакет.

Время существования (TTL)

Восьмибитовое поле «время существования» (Time-to-Live, TTL) задает срок существования пакета в сети. Назначение этого поля — не дать пакету безвозвратно затеряться в киберпространстве.

Первым делом протокол TCP/IP предписывает каждому маршрутизатору на пути между отправителем и получателем уменьшать значение поля «время существования» пакета.

Далее, каждый маршрутизатор должен контролировать время появления IP-пакета. Отправляя пакет дальше, маршрутизатор уменьшает поле «время существования» на количество секунд, которое пакет ждал внутри буфера (если, разумеется, пакет был задержан).

Если поле «время существования» становится равным нулю до того, как пакет достигнет места назначения, протокол TCP/IP уничтожит его и предупредит компьютер-источник пакета об этом печальном событии, пользуясь услугами протокола управляющих сообщений Интернет ICMP.

Правильная работа концепции "время существования» совершенно не зависит от синхронности таймеров или часов в компьютерах сетевого сообщества.

Протокол

Транспортный уровень TCP/IP состоит из двух протоколов: протокола управления транспортировкой и протокола пользовательских датаграмм. Они оба используют IP для доставки данных. Восьмибитовое поле «протокол» в IP-заголовке указывает на протокол-источник данных, инкапсулированных в IP-датаграмму.

Сетевой уровень пользуется значением в поле «протокол» при передаче данных на транспортный уровень. Значение поля указывает на определенный модуль транспортного уровня, которому принадлежат данные IP-пакета.

Таблица 2.3

Возможные значения поля протокол

в IP-заголовке

Протокол

Десятичное

Двоичное

ICMP

1

00000001

IGMP

2

00000010

TCP

6

00000110

UDP

17

00

Контрольная сумма заголовка

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

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

Компьютер, принявший датаграмму, подсчитывает новую контрольную сумму, в том числе и с полем старой контрольной суммы, подсчитанной ранее при передаче. Если заголовок не изменился, то есть повреждения не произошло, новая контрольная сумма должна быть «все единицы». Если это не так, то есть произошла ошибка при передаче, TCP/IP просто отбрасывает датаграмму. При этом никакого сообщения компьютеру-источнику датаграммы не передается.

IP-адрес источника и получателя

32-битное поле «адрес источника» содержит IP-адрес компьютера-отправителя данных (вернее, адрес его сетевого интерфейса). Это поле никогда не изменяется, сколько бы маршрутизаторов ни находилось на пути следования пакета. Поле «адрес источника» всегда содержит адрес первоначального отправителя пакета. Так же, как и адрес источника, адрес получателя является стандартным 32-битным IP-адресом пункта назначения пакета. Он может быть либо индивидуальным, либо состоять из единиц в случае широковещательной передачи.

Опции IP

Восьмибитное поле опций IP позволяет тестировать и отлаживать разнообразные сетевые приложения. Опции IP управляют фрагментацией и маршрутизацией сетевых пакетов. Поле опций IP состоит из трех подразделов: «копирование» (Copy), «класс опции» (Option Class) и «номер опции» (Option Number)

Биты

0

1-2

3-7

Копирование
Класс опций
Номер опции

8 бит

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

Таблица 2.4

Подраздел класс опции поля опций в заголовке IP-пакета

Класс опции

Биты

Назначение опции

0

00

Управление датаграммами или сетью

1

01

Зарезервировано (не используется)

2

10

Отладка и измерение

3

11

Зарезервировано (не используется)

Значение подраздела «номер опции» определяет назначение опции в рамках конкретного класса.

Таблица 2.5

Возможные значения опций IP и их краткое описание

Класс

Номер

Длина

Описание

0

2

11

Безопасность

0

7

переменная

Запись маршрута

0

3

переменная

Управление маршрутизацией, приблизительное

0

9

переменная

Управление маршрутизацией, строгое

2

4

переменная

Временная метка Интернет

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