logo
Varianty / SETI2

Протокол ip

Протокол IP (InternetProtocol, Протокол межсетевого взаимодействия) описан в RFC 791. Основная функция протокола IP – передача пакетов между узлами, принадлежащими к разным подсетям, через промежуточные подсети. Каждый пакет (дейтаграмма –datagram, в терминологии TCP/IP) обрабатывается независимо от других. Доставка дейтаграмм не гарантируется. Возможны потери дейтаграмм, доставка с ошибками, дублирование и нарушение порядка следования. Вторая функция протокола IP – выполнение фрагментации пакетов при передаче их между сетями с разным максимально допустимым размером поля данных кадра (MTU).

Существенное свойство протокола IP состоит в нетрадиционном порядке передачи битов: байт передается, начиная со старшего бита. Кроме того, нумерация битов в байте также начинается со старшего: самый старший бит имеет номер 0, самый младший – номер 7.

Дейтаграмма (IP-пакет) состоит из заголовка и поля данных.

Формат заголовка приведен на рис.13.2.

Номер версии

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

Тип сервиса

Общая длина

Идентификатор “большого пакета”

Флаги

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

Время жизни

Протокол

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

Адрес отправителя

Адрес получателя

Опции

(переменная длина)

Выравнивание до 32-битной границы (заполнение нулями)

Рис.13.2 Формат заголовка IP-пакета

Номер версии (Version) [4 бита] – указывает используемый формат заголовка. В настоящее время основная используемая версия имеет номер 4.

Длина заголовка (InternetHeaderLength) [4 бита] – длина заголовка в 32-битных словах, минимальное допустимое значение – 5 (соответствует длине заголовка в 20 байт). Максимальная длина заголовка – 60 байт.

Тип сервиса (Type of Service) [8 бит] – указывает на желаемые параметры качества обслуживания. Формат байта Типа сервиса приведен на рис.13.3.

0

1

2

3

4

5

6

7

Приоритет

D

T

R

0

0

Рис.13.3 Структура поля “Приоритет” заголовка IP-пакета

Поле Приоритета (Precedence) для обычных пакетов равно 0, остальные значения (от 1 до 7) используются для служебных целей, чем больше значение, тем выше приоритет.

Поля D (Delay– задержка), T (Throughput– пропускная способность) и R (Reliability– надежность) используются для указания наиболее важного для передающего узла параметра качества. Выбор происходит между малой задержкой, большой пропускной способностью и высокой надежностью. Соответствующий бит (биты) устанавливается в 1, остальные – в 0. Как правило, улучшение одного из параметров связано с ухудшением остальных.

Общая длина (Total Length) [16 бит] – длина дейтаграммы (заголовка и данных) в байтах. Хотя размер поля позволяет создавать дейтаграммы длиной до 65535 байт, стандарт требует, чтобы любой узел мог принимать, как минимум, 576-байтные дейтаграммы, а отправлять дейтаграммы большей длины только, будучи уверенным, что получатель может их принять.

Идентификатор “большого пакета” (Identification) [16 бит] – значение, одинаковое для всех дейтаграмм, содержащих фрагменты одного пакета (“большого пакета”).

Флаги (Flags) [3 бита] – флаги, управляющие фрагментированием:

0 бит – зарезервирован, должен быть равен 0

1 бит (DF, Don’tFragment) – “0” = можно фрагментировать, “1” = нельзя

фрагментировать

2 бит (MF, More Fragments) – “0” = последний фрагмент, “1” = еще

будут фрагменты

Смещение фрагмента (Fragment Offset) [13 бит] – указывает на место в “большом пакете”, с которого начинаются данные текущей дейтаграммы. Измеряется в 64-битных (8-байтных) словах. Например, Смещение фрагмента, равное 2, означает, что данные текущей дейтаграммы должны находиться в “большом пакете”, начиная с 16-го байта. Первый фрагмент имеет нулевое смещение.

Время жизни (Time to Live, TTL) [8 бит] – максимальное время, которое дейтаграмма может находиться в сети. Каждый маршрутизатор должен уменьшать это значение на единицу, и отбрасывать дейтаграммы со значением TTL = 0 (сообщив об этом отправителю). Наличие этого поля обеспечивает уничтожение “зациклившихся” или “заблудившихся” дейтаграмм. ПолеTTLтакже позволяет ограничить дальность распространения дейтаграммы (это удобно, например, при одновременной передаче множеству абонентов) и является основой для работы утилитыtraceroute.

Протокол (Protocol) [8 бит] – указывает, данные какого протокола верхнего уровня передаются в дейтаграмме. Возможные значения этого поля стандартизованы (RFC“AssignedNumbers”), приведем некоторые из них: 1 – ICMP, 4 – IP, 6 – TCP, 17 – UDP, 89 – OSPF.

Контрольная сумма заголовка (HeaderChecksum) [16 бит] – контрольная сумма всех полей заголовка, вычисляемая как дополнение суммы всех 16-битовых слов заголовка (с нулевыми битами в поле контрольной суммы). Поскольку некоторые поля заголовка (например, время жизни) изменяются при передаче дейтаграммы через сеть, контрольная сумма пересчитывается каждым маршрутизатором. Если получена дейтаграмма с неверной контрольной суммой, такая дейтаграмма отбрасывается.

Адрес отправителя (Source Address) [32 бита] – IP-адрес отправителя дейтаграммы.

Адрес получателя (Destination Address) [32 бита] – IP-адрес получателя дейтаграммы.

Опции (Options) [переменная длина] – необязательное поле, может содержать данные о безопасности, маршрут дейтаграммы (при маршрутизации от источника) и т.д. В одной дейтаграмме может быть несколько опций, каждая из которых состоит из кода опции (1 байт), длины опции (1 байт) и байтов данных опции. Если для опции не нужны дополнительные данные, она состоит из одного байта – кода опции.

Код опции состоит из трех полей:

0 бит (“Копировать”) – “0” = копировать опции во все фрагменты, “1” = копировать опции только в первый фрагмент

1-2 биты (“Класс опции”) – 0 = управление дейтаграммами/сетью, 2 = отладка сети, 1 и 3 = зарезервировано

3-7 биты (“Номер опции”) – номер опции внутри класса, так для класса 0 определено 7 номеров опций, несущих маршруты и данные о безопасности, а для класса 2 – только один номер опции 4, несущей временные метки, используемые при протоколировании следования дейтаграммы по маршруту.

Опции в настоящее время практически не используются.

Yandex.RTB R-A-252273-3