среда, 13 февраля 2008 г.

О заголовке IP-пакета и назначении его полей.

Немножко перевода из RFC, а также про TTL и фрагментацию.


(RFC 791)

Заголовок пакета может занимать от 20 до 60 байт.








VersionIHLType Of ServiceTotal Lenght
IdentificationFlagsFragment Offset
Time To LiveProtocolHeader CheckSum
Source Address
Destination Address
OptionsPadding


Поле Version (4 бита) - указывает на версию протокола IP, которой соответствует пакет. В настоящее время пакеты с таким заголовком содержат только значение "4".

IHL (4 бита) - Длина заголовка пакета - используется для определения границы, на которой заканчивается заголовок IP-пакета и начинаются данные, которые он переносит. Длина указывается в 32-битных словах.

Type Of Service (8 бит) - указывает на абстрактные параметры желаемого качества обслуживания для пакета. Может быть использовано маршрутизаторами и другими устройствами 3-го уровня для определения наиболее подходящего по параметрам маршрута. Основной выбор состоит между низкой задержкой, высокой надежностью или высокой пропускной способностью. При этом биты 0-2 указывают на приоритет пакета, бит 3 - на уменьшение задержки при доставке, бит 4 - на выбор маршрута с высокой надежностью доставки, бит 5 - выбор маршрута с наибольшей пропускной способностью, биты 6-7 - зарезервированы. На самом деле используется только внутри одной сети и может не сыграть вообще никакой роли при передаче пакета через Internet, так как политики обработки пакетов устанавливаются конкретной организацией, управляющей автономной системой.

Total Lenght (16 бит) - общая длина IP-пакета в байтах.

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

Дело в том, что в различных протколах канального уровня максимальный размер кадра может отличаться, а это значит, что максимальный размер IP-пакета ограничен этим самым размером, который называется MTU - Maximum Transfer Unit. Но так как при прохождении очередного маршрутизатора пакет может попасть в сеть с меньшим MTU, чем в той, в которой он был создан, он может быть разбит на меньшие части. При этом в заголовке каждой части будет указано одинаковое значение ID, которое говорит о том, к какому пакету эти части относились.

Flags - 3 бита - Поле флагов. Первый бит зарезервирован и всегда должен быть установлен в 0. Второй бит, при установке в значение "1" указывает на то, что фрагментация пакета запрещена (и если она понадобится, пакет не будет доставлен). Третий бит указывает на наличие или отсутствие следующего фрагмента этого пакета. Иными словами, установлен в 0 может быть либо, если пакет не фрагментирован, или если это - последний фрагмент пакета.

Fragment Offser - значение смещения начала фрагмента внутри оригинального пакета, единица в этом поле одначает 64 бита. Смещение первого фрагмента всегда равно 0.

Time To Live - используется для решения проблемы "count to infinity" и помогает маршрутизаторам "пристрелить" пакет, который слишком долго находится в сети. Уменьшается на единицу каждым маршрутизатором при пересылке пакета. Таким образом, даже если в сети есть маршрутная петля, пакет не будет пересылаться от одного маршрутизатора к другому и обратно вечно, а будет уничтожен, как только поле TTL примет значение 0.

Protocol - указывает номер протокола, PDU которого вложен внутрь этого IP-пакета.

Header Checksum - контрольная сумма заголовка пакета. Пересчитывается каждый раз при смене заголовка - например, если он проходит через очередной маршрутизатор.

Source Address (4 байта) - IP-адрес источника, отославшего пакет.

Destination Address (4 байта) - IP-адрес назначения, куда был послан пакет.

Поле опций (Options) - может появляться или не появляться в заголовке. Довольно-таки интересное поле. )
Опции могут быть двух типов - однобайтовые и многобайтовые. Многобайтовая опция состоит из полей "Тип опции", "Длина опции" и, собственно "данные опции". При этом "длина опции" - это общая длина поля, включая тип опции и поле длины.

Поле "Тип опции" содержит флаги - 1-й бит - нужно ли копировать опцию в каждый фрагмент пакета при фрагментации. 2-й бит - класс опции. 3-й бит - номер опции.

Классы опций - управляющая (0), зарезервировано (1), отладочная - (2) и опять зарезервированная (3).
Определены следующие номера опций:








КлассНомерДлинаОписание
00-Конец списка опций.
01-Поле-заполнитель, используемое для дополнения поля опций до кратной 32 бит границы заголовка
03varВключение мягкой маршрутизации от источника. Позволяет задавать маршрут пакета при его отправке.
09varСтрогая маршрутизация от источника.
07varЗапись маршрута. Включает запись адресов исходящих интерфейсов маршрутизаторов внутрь поля опций при пересылке пакетов.
24varТайм-стамп опция. Включает запись временной метки на каждом маршрутизаторе, через который проходит пакет, при его пересылке.


Подробно об опциях можно почитать в RFC 791.

Комментариев нет:

Отправить комментарий