
Checksum
Urgent Pointer
Data Offset
Window
Reserved
URG
ACK
PSH
RST
SYN
FIN
Source Port
Destination Port
Sequence Number
Acknowledgment Number
Данное поле сейчас мы обсуждать пока не будем, скажем лишь, что это поле используют
вместе с флагом URG, который мы пока тоже не рассматривали.
После стационарной части заголовка могут следовать опции, очевидно, что длина опций
должна быть кратна четырем байтам. Отметим, что опции в TCP заголовке могут отсутствовать,
однако, в отличие от заголовка IP, в котором крайне редко используют опции, в заголовке TCP
опции применяют достаточно часто.
Сейчас нам необходимо познакомиться с принципами формирования опций для того, чтобы
когда в процессе изучения тех или иных функций TCP нам понадобится рассмотреть ту или иную
опцию, Вы уже были знакомы с форматом поля опции. Поэтому сегодня мы рассмотрим, каким
образом формируется поле опций и рассмотрим простейшие опции выравнивания, такие как EOOL
и NOOP.
Начинаем с того, как формируется поле опций заголовка TCP. Как уже было сказано ранее,
поле опций может присутствовать в заголовке TCP но может и отсутствовать. Длина данного поля
не может превысить 40 байт, так как самое большое значение, которое принимает поле Data Offset
составляет 15 четырехбайтовых слов, т.е. 60 байт, а стационарная часть заголовка TCP составляет
20 байт, так же ясно, что длина TCP опций должна быть кратна 4 байтам. Отметим, что в RFC793
описаны лишь три опции, однако в более поздних RFC описан еще ряд важнейших TCP опций,
которые будут нами изучены. Формат TCP опций полностью идентичен формату IP опций, TCP
опции делятся на два вида:
• опции, состоящие из единственного байта типа (kind) опции
• опции, состоящие из одного байта типа опции, одного байта длины опции (длина, как и в
случае с опциями IP учитывает и поле kind и поле длины) и собственно тела опции
переменной длины, принимающая сторона вычисляет длину тела опции, вычитая из
значения поля «Длина опции» два байта (байт kind и байт поля длины)
Отличие опций TCP от опций IP с точки зрения формирования заголовка состоит разве что в
том, что TCP опции по понятным причинам не делятся на копируемые и не копируемые, кроме того
не длятся на четыре класса (управление, измерение и два зарезервированных), а байт kind
соответственно является неструктурированным.
Как и в случае с протоколом IP опций первого вида, состоящих из единственного байта kind
всего две и они служат целям выравнивания точно так же, как это реализовано в протоколе IP.
Опция с полем kind = 00 называется Конец Поля Опций (End of Option List) и
устанавливается после последней опции и только в том случае, если опции без применения данной
опции не закончились на четырехбайтовой границе. В том случае, если использование данной
опции приводит к выравниванию поля опций по четырехбайтовой границе, после данной опции
следуют данные протокола TCP, если же при использовании данной опции выравнивание снова не
достигнуто, то после этой опции используется необходимое количество байтов заполнителя (1 либо
2) для достижения выравнивания поля опций по четырехбайтовой границе, в качестве заполнителя
используется байт 00. Еще раз подчеркнем, что при отсутствии необходимости использования
опций в заголовке TCP никакая опция, в том числе и опция EOOL не используется, после Data
Offset принимает значение 5 и сразу после поля Urgent Pointer передаются полезные данные
заголовка TCP (если они есть).