Файл: Все поля в заголовке ip пакета выравнены по границе 32а бита.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 17
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Все поля в заголовке IP пакета выравнены по границе 32-а бита, потому что так удобнее машине, а не человеку.
Версия (Version)
Самое первое поле в заголовке IP пакета – это версия, под него выделено четыре бита, для протокола IPv4 здесь всегда неизменное значение – 4. Хочу заметить, что в IPv4 четверка не связана с количество октетов в IP-адресе, просто такое совпадение.
Размер заголовка (Internet Header Length)
Поле размер заголовка нужно для того, чтобы маршрутизатор или конечный узел понимали: где заканчивается заголовок и начинаются данные. Также мы помним, что поле Опции не является обязательным, собственно из-за этого и появилась необходимость в поле «Размер заголовка», под это поле выделено четыре бита и оно служит для указания количества слов в заголовке. Таким образом получается, что минимальный размер заголовка IP-пакет равен пяти словам, каждое слово 32 бита, следовательно, обычный заголовок без дополнительных опций равен 160 бит или 20 байт. Максимальное количество слов в заголовке равно пятнадцати.
Тип обслуживания (Type of Service), DSCP и ECN
На самом деле на данный момент поля Type of Service в IP заголовке нет, изначально поле ToS использовалось для указания приоритетов при обработке трафика, сейчас это поле заменено на два:
-
DSCP (Differentiated Services Code Point), под которое выделено 6 бит, это поле используется для разделения трафика на классы обслуживания. Сейчас мы не будем сильно вдаваться в подробности, поскольку на самом деле это очень сложная тема, в которой даже инженеры с опытом могут вполне себе неплохо плавать. -
Не трудно посчитать, что для второго поля у нас остается два бита, и это поле называется ECN (Explicit Congestion Notification) или указатель перегрузки. Как понятно из названия, это поле может пригодится в тех ситуациях, когда пропускная способность канала связи меньше, чем трафик, который в текущий момент передается по каналу (виды взаимодействия в компьютерных сетях). Это поле будет задействовано только в том случае, когда передающая и принимающая сторона умеют с ним работать.
Размер пакета (Total Length)
Это поле позволяет обрабатывающему устройству понять полный размер пакета, то есть заголовок плюс данные. Минимальный размер IP-пакета равен 20 байт, то есть это заголовок без опций и данных, а максимальный размер равен 65535 байт. Тут стоит заметить, что одним из параметров канала связи является максимально возможный размер пакета (субъективные и объективные характеристики компьтюерной сети), который по этому каналу можно передавать. И, например, бывают ситуации, когда в канале связи можно передавать пакеты, размером, скажем (точные цифры сейчас не очень важны) 1000 байт, а узел генерирует пакеты размером 2000 байт, в этом случае перед отправкой данных в канал связи пакеты будут фрагментироваться, то есть разбиваться на более мелкие, это поведение по умолчанию в протоколе IP.
Идентификатор (Identification)
Чаще всего это поле используется в тех ситуация, когда пакет фрагментируется, чтобы принимающая сторона понимала, как из полученных кусочков правильно собрать пакет. У фрагментированных пакетов значение в этом поле должны быть одинаковыми.
Флаги (Flags)
Под поле флаги выделено три бита, этих три бита используются для контроля над фрагментацией пакетов. Немного отвлечемся непосредственно от флагов и заметим, что нумерация бит в поле начинается с нуля, крайний левый бит старший, а крайний правый – младший. Тогда у нас в поле Флаги получается следующая картина:
-
нулевой бит зарезервирован и должен быть всегда равен нулю; -
если значение первого бита ноль, то допускается фрагментация пакетов, если единица (бит DF или Do not Fragment), то устройства компьютерной сети не будут выполнять фрагментацию; -
второй бит служит для того, чтобы конечные узлы понимали, где начинается последовательность фрагментированных пакетов, а где она заканчивается, если значение этого бита равно единице (MF More Fragments), то узел понимает, что этот пакет не последний и нужно ждать еще пакеты, чтобы собрать изначально разделенный пакет.
Смещение фрагмента (Fragment Offset)
Это поле используется в тех случаях, когда выполняется фрагментация пакетов, размер этого поля равен 13 бит. Нетрудно посчитать, что максимально возможное значение, которое можно записать в этом поле равно два в тринадцатой степени или 65528, смещение задается в байтах, то есть это поле говорит узлу или маршрутизатору на сколько байт нужно выполнять смещение от нуля (это для пакетов без фрагментации, в этом случае все тринадцать бит имеют значение 0) до 65528 байт (в этом случае все тринадцать бит выставлены в единицу). В том случае, если фрагментация выполняется, то первый пакет последовательности также имеет смещение равное нулю. У числовых значений, записываемых в поле «Смещение фрагмента» есть одно ограничение — это значение должно быть всегда кратно восьми.
Время жизни (Time to Live, TTL)
Следующее поле имеет размер один байт или восемь бит и называется оно время жизни пакета, данное поле нужно, чтобы пакет не блуждал по сети до бесконечности в том случае, если конфигурация транзитных узлов некорректная и произошла петля маршрутизации. Для нас TTL – это число в диапазоне от 0 до 255, это число определяет максимально допустимое число узлов, через которое может пройти пакет перед тем, как он будет уничтожен. Время жизни для пакета задается узлом источником и изначально оно измерялось в секундах (то есть максимально возможное время жизни IP пакета раньше было 255 секунд), но дело в том, что современные маршрутизаторы обрабатывают пакеты гораздо быстрее, чем за секунду, поэтому сейчас TTL – это значение, которое определяет число транзитных узлов. Таким образом получается следующее: первый узел сформировал пакет и задал для него значение TTL равное 20, первый маршрутизатор, получивший этот пакет, вычтет единицу из двадцати, получит 19, запишет новое значение в поле TTL и отправит пакет дальше. Процесс вычитание и передачи будет происходить до тех пор, пока пакет не будет доставлен получателю, либо пока значение TTL не будет равным нулю, тот маршрутизатор, на котором TTL стало равным нулю, уничтожит пакет.
Протокол (Protocol)
Иначе еще это поле называют «Протокол верхнего уровня» (хотя такое название неверно отображает суть поля), для этого поля выделено 8 байт.
Вы же помните, что протокол IP используют в качестве транспорта протоколы транспортного уровня, в частности TCP и UDP, кроме того, в поле данных IP-пакета могут быть запакованы сообщения протоколов других уровней. Это поле нужно для того, чтобы конечный узел мог понять, какому процессу отдавать на обработку принятые IP-пакеты. И понятно, что в поле «Протокол» записывается не название протокола, а его цифровой код, таблицу кодов вложений в IP можно найти на сайте IANA.
Так, например, если внутри IP-пакета будет передаваться UDP-дейтаграмма, то в поле протокол будет записано значение 17 или 00010001 в двоичной системе счисления, а для протокола TCP используется десятичное число 6, в двоичной системе счисления 00000110.
Контрольная сумма заголовка (Header Checksum)
Под это поле выделено два байта и как понятно из названия: протокол IP не имеет механизма проверки целостности данных, поскольку поле «Контрольная сумма заголовка» не учитывает поле данных при проверке. Не забываем, что TTL меняется от узла к узлу, а это значит, что и контрольная сумма будет меняться от узла к узлу, то есть каждый транзитный маршрутизатор сперва принимает IP-пакет, вычисляет его контрольную сумму, сравнивает со значением, записанным в поле «Контрольная сумма заголовка», затем вычитает единицу из значения поля TTL, вычисляет новую контрольную сумму и отправляет пакет следующему соседу.
Стоит отметить, что если значение контрольной суммы, которую посчитал узел отличается от контрольной суммы, которая записана в пакете, то он просто отбрасывается.
IP-адрес источника
Поле IP-адрес источника имеет размер 32-а бита и не изменяется при передаче пакета по сети, для передачи пакетов без различного рода фильтраций трафика, это поле нужно только конечному узлу, когда маршрутизаторы принимают решение о том, куда отправить пакет, они смотрят лишь только на поле IP-адрес назначения.
А по полю IP-адрес источника узел-получатель сможет понять кому нужно ответить, тут, кстати, стоит отметить такой момент: поле IP-адрес назначения определяет каким маршрутом пойдет пакет «туда», а поле IP-адрес источника определяет каким маршрутом пакет пойдет «обратно». И далеко не всегда маршрут «туда» совпадает с маршрутом «обратно».
IP-адрес назначения
Данное поле имеет размер 4-е байта, в него записывается IP-адрес конечного узла, для которого пакет предназначен, роутеры смотрят на этот поле при принятии решения о том куда направлять пакет.
Поле данных в пакете IP и его размер (MTU)
Вообще, про MTU в протоколе IP у нас будет отдельная тема, сейчас на важно понять, что в поле данных IP пакета помещаются сообщения других протоколов, для которых IP является транспортом. Если учитывать, что максимально возможный размер IP пакета 65535 байт, то максимально возможный размер поля данных в IP пакете получается 65515 байт, следовательно, и наибольший MTU для протокола IP равен 65515 байт, хотя такое значение вы вряд ли встретите.