IP-дейтаграмма состоит из заголовка (часто 20 байт) и поля данных, максимальная длина пакета – заголовок + данные составляет 65535 байт, минимальная – определяется минимальным размером переносящего IP-пакет кадра канального уровня (для Ethernet 64 байта). Структура IP-пакета приведена на рис. 3.13.
Номер версии | Длина заголовка | Тип сервиса | Общая длина пакета | ||||||||||||||||||
Идентификатор пакета | Флаги 3 бита | Смещенные флаги 13 бит | |||||||||||||||||||
Время жизни | Протокол верхнего уровня | Контрольная сумма заголовка | |||||||||||||||||||
IP-адрес отправителя | |||||||||||||||||||||
IP-адрес получателя | |||||||||||||||||||||
Опции и выравнивание | |||||||||||||||||||||
Данные | |||||||||||||||||||||
Поле «Тип сервиса» | Поле «Флаги» | ||||||||||||||||||||
Приоритет | Задержка | Пропускная способность | Надежность доставки | Резерв (0) | Резерв (0) | Do not Fragment | More Fragment | ||||||||||||||
Поле «Протокол верхнего уровня» | |||||||||||||||||||||
Значение поля | 0=00Н | 1=01Н | 2=02Н | 4=04Н | 6=06Н | 8=08Н | 17=11Н | 88=58Н | 89=59Н | ||||||||||||
Протокол | Резерв | ICMP | IGMP | IP | TCP | EGP | UDP | IGRP | OSPF | ||||||||||||
Рис. 3.13. Структура IP-пакета
|
|
Поле Номер версии (Version) указывает версию протокола IP. Напомним, что в настоящее время широко используется 4 версия (IPv4) и начинается переход на 6 версию (IPv6) (формат заголовка IPv6 отличается от рассматриваемого заголовка IPv4).
Поле Длина заголовка (Header Length) указывает значение длины заголовка IP-пакета в 32-битных (четыр ехбайтовых) словах. Обычно длина заголовка составляет 5 таких слов (20 байт), но может быть больше за счет дополнительных байт в поле Опции (максимальная длина заголовка 60 байт = 15 четыр ехбайтовых слов).
Младшие три бита поля Тип сервиса (Type of Service) (биты 0-2) задают приоритет пакета от самого низкого 000 (нормальный пакет) до самого высокого 111 (пакет с управляющей информацией). Биты 3-5 определяют критерий выбора маршрута, используемый в протоколах маршрутизации OSPF и BGP. Выбор осуществляется между тремя альтернативами: малой задержкой передачи дейтаграмм (бит 3 Delay = 1), высокой пропускной способностью линии связи (бит 4 Throughput = 1) и высокой надежностью передачи дейтаграмм (бит 5 Reliability = 1). Обычно улучшение одного параметра вызывает ухудшение другого, следовательно, выбирается один критерий выбора маршрута. Хосты обычно не используют возможность определения типа сервиса отправляемой дейтаграммы и указывают значение этого поля 00Н.
Поле Общая длина (Total Length) содержит общую длину IP-пакета вместе с заголовком. Исходя из разрядности поля (2 байта), максимальная длина пакета составляет 65535 байт. Однако в большинстве случаев такие большие пакеты не используются, а размер пакета выбирается с учетом максимального поля данных несущего этот пакет кадра канального уровня (MTU). Для Ethernet MTU» 1500 байт, для FDDI MTU» 4096 байт.
|
|
При перенаправлении IP-пакета из одной сети в другую маршрутизатор может столкнуться с проблемой различных значений MTU в соседних сетях. В этом случае ему необходимо выполнить фрагментацию дейтаграммы (т.е. разбиение ее на несколько самостоятельных дейтаграмм) при передаче в сеть с меньшим значением MTU и дефрагментацию (то есть объединение нескольких дейтаграмм, полученных при фрагментации, в одну исходную) при передаче пакета в сеть с большим значением MTU. В целях распознавания пакетов, образованных в результате фрагментации используется поле Идентификатор пакета (Identification). Все фрагменты фрагментированного пакета имеют одинаковое значение этого поля.
Поле Флаги (Flags) содержит биты: 0 бит - резерв = 0, 1 бит - DF – Do not Fragment в случае установки в 1 запрещает фрагментацию пакета, 2 бит – MF – More Fragments в случае установки в 1 свидетельствует о том, что данная дейтаграмма является промежуточным (не последним) фрагментом.
В поле Смещение фрагмента (Fragment Offset) указывается смещение в 8-байтных блоках поля данных этого пакета-фрагмента от начала общего поля данных исходного пакета, подвергнутого фрагментации (8 байт х 213 = 216 – максимальный размер пакета). Первый фрагмент имеет значение этого поля, равное 0. На рис. 3.14 приведен пример фрагментации дейтаграммы длиной 472 байта при маршрутизации ее в сеть с MTU = 280 байт.
Идентификаторы исходного пакета и фрагментов одинаковы (111). Значение смещения фрагмента для первого фрагмента равно нулю. Длина поля данных первого фрагмента (рис. 3.14 б) = 276 байт (Общая длина пакета) – 20 байт (Длина заголовка) = 256 байт/8 = 32 8-байтовых блока, что и указано в поле Смещение фрагмента второго фрагмента. Значение флагов для первого фрагмента = 1 (001), то есть указывается, что этот фрагмент не последний. Для второго фрагмента значение флагов = 0 (000), то есть фрагмент последний.
Номер версии = 4 | Длина заголовка = 5 | Тип сервиса | Общая длина пакета = 472 | |
Идентификатор пакета = 111 | Флаги 3 бита = 0 | Смещение фрагмента 13 бит = 0 | ||
Время жизни = | Протокол верхнего уровня = 6 | Контрольная сумма заголовка | ||
IP-адрес отправителя | ||||
IP-адрес получателя | ||||
а) | ||||
Номер версии = 4 | Длина заголовка = 5 | Тип сервиса | Общая длина пакета = 276 | |
Идентификатор пакета = 111 | Флаги 3 бита = 1 | Смещение фрагмента 13 бит = 0 | ||
Время жизни = | Протокол верхнего уровня = 6 | Контрольная сумма заголовка | ||
IP-адрес отправителя | ||||
IP-адрес получателя | ||||
б) | ||||
Номер версии = 4 | Длина заголовка = 5 | Тип сервиса | Общая длина пакета = 216 | |
Идентификатор пакета = 111 | Флаги 3 бита = 1 | Смещение фрагмента 13 бит = 32 | ||
Время жизни = | Протокол верхнего уровня = 6 | Контрольная сумма заголовка | ||
IP-адрес отправителя | ||||
IP-адрес получателя |
в)
Рис. 3.14. Пример фрагментации дейтаграммы: а) IP-заголовок исходной
дейтаграммы; б) IP-заголовок первого фрагмента; в) IP-заголовок второго фрагмента
Поле Время жизни (Time To Live – TTL) указывает предельный срок времени, в течение которого дейтаграмма может перемещаться по сети. Это время задается отправителем дейтаграммы в секундах. При пересылке пакета через маршрутизатор значение TTL уменьшается на 1 (даже если время передачи через маршрутизатор менее 1 секунды). Поэтому иногда говорят, что это время измеряется в количестве переходов через маршрутизаторы (hops). При достижении этим значением 0 пакет далее не передается.
Поле Протокол верхнего уровня (Protocol) содержит идентификатор протокола, переносящего информацию, размещенную в поле данных IP-пакета. Наиболее популярными идентификаторами являются 06Н – для протокола управления транспортом (Transport Control Protocol – TCP), 11Н – для протокола пользовательских дейтограмм (User Datagram Protocol – UDP) и 01Н – для протокола управляющих сообщений Интернет (Internet Control Message Protocol – ICMP).
|
|
Поле Контрольная сумма (Header Checksum) рассчитывается только для заголовка IP-дейтаграммы. При каждом изменении полей заголовка промежуточными маршрутизаторами контрольная сумма заголовка пересчитывается. Алгоритм расчета – дополнение к сумме всех 16-битовых слов заголовка. При вычислении контрольной суммы значение самого поля «Контрольная сумма» выставляется в 0.
Поля IP-адрес отправителя (Source IP Address) и IP-адрес получателя (Destination IP Address) содержат соответствующие адреса.
Поле Опции (IP Options) является необязательным и обычно не используется. В нем могут указываться точный маршрут прохождения дейтаграммы, данные о безопасности, различные временные отметки и т.д. Поле может иметь произвольную длину в пределах от 0 до 40 байтов, для выравнивания размера дейтаграммы по 32-битной границе используется поле Выравнивание (Padding). Это поле, например, используется для дополнения размера дейтаграммы нулевыми байтами до минимального размера поля данных кадра канального уровня (для Ethernet 64 байта).