Формат заголовка пакета протокола TCP
N | Поле | Число бит | |||
1 | Source Port | 16 | |||
2 | Destination Port | 16 | |||
3 | Sequence Number | 32 | |||
4 | Acknowledgment Number | 32 | |||
5 | Data Offset | 4 | |||
6 | Reserved | 6 | |||
7 | Control Bits | 6 | |||
8 | Window | 16 | |||
9 | Checksum | 16 | |||
10 | Urgent Pointer | 16 | |||
11 | Options | ||||
12 | Padding |
Далее следуют октеты пользовательских данных;
3) Source Port - номер порта отправителя;
4) Destination Port - номер порта назначения;
5) Sequence Number - порядковый номер. Порядковый номер первого октета данных в сегменте при отсутствии флага SYN. Если в сегменте присутствует бит SYN, поле номера содержит значение начального порядкового номера (ISN), а первый октет данных имеет номер ISN+1;
6) Acknowledgment Number - номер подтверждения. Если бит АСК установлен, это поле содержит значение следующего порядкового номера, который отправитель сегмента ожидает получить. После организации соединения это значение передается всегда;
7) Data Offset - смещение данных. Число 32-битовых слов в заголовке TCP. Это значение указывает начало данных в сегменте. Заголовок TCP (даже при наличии опций) имеет длину, кратную 32 битам;
8) Reserved - резервное поле. Зарезервировано для использования в будущем и имеет нулевое значение;
9) Control Bits - биты управления:
URG - указывает на значимость поля Urgent Pointer;
АСК - указывает на значимость поля Acknowledgment Number;
PSH - функция Push;
RST - сброс (Reset) соединения;
SYN - синхронизация порядковых номеров;
FIN - у отправителя больше нет данных;
10) Window - окно. Число октетов данных, начиная с указанного в поле подтверждения, которые отправитель данного сегмента ожидает принять;
11) Checksum - контрольная сумма. Контрольная сумма представляет собой число единиц в заголовке и данных, просуммированное по модулю 16 с добавлением 1. Если сегмент содержит в заголовке и данных нечетное число октетов, справа добавляется октет нулей для выравнивания по 16-битовой границе. Биты заполнения не передаются как часть сегмента и используются только для расчета контрольной суммы. При расчете контрольной суммы значение поля Checksum принимается нулевым. Контрольная сумма учитывает также 96-битовый псевдозаголовок, предществующий заголовку TCP. Этот псевдозаголовок содержит адреса отправителя и получателя, тип протокола и длину опций TCP. Перечисленные поля помогают защитить TCP против сегментов с ошибочной маршрутизацией. Эта информация транспортируется протоколом IP и передается через интерфейс TCP-сетевой уровень в качестве аргументов или результатов вызовов из TCP на уровень IP. Поле "длина опций TCP" содержит размер заголовка TCP и поля данных в октетах (это не явно передаваемое, а расчетное значение); 12-октетный псевдозаголовок при расчете длины не учитывается;
12) Urgent Pointer - указатель срочности. Это поле содержит указатель на срочные данные - позитивное смещение начала таких данных от порядкового номера данного сегмента. Это поле имеет смысл только для сегментов с установленным флагом URG;
13) Options - опции.
Опции размещаются в конце заголовка TCP и могут занимать целое число октетов. Все опции учитываются при расчете контрольной суммы. Опции начинаются на любой границе октета. Существует два варианта форматирования опций:
1) однооктетное поле признака опций;
2) однооктетное поле признака опций, поле размера опций (1 октет) и собственно опции.
Поле размера опций учитывает и 2 октета полей признака опций и самого поля длины, а также размер опций, как таковых. Поле опций может быть короче, чем указывает поле смещения данных. Неиспользуемые биты поля опций заполняются нулями. В протоколе TCP используются следующие опции: End of Option List, No-Operation, Maximum Segment Size.
End of Option List (0). Этот код означает завершение списка опций. Конец списка опций может не совпадать с концом заголовка TCP, заданным полем Data Offset. Код используется как индикатор завершения всех опций, а не какой-то конкретной и использование его требуется лишь в тех случаях, когда конец опций не совпадает с концом заголовка TCP.
No-Operation (1). Этот код может использоваться между опциями (например, для их выравнивания по границе слова). Не существует гарантий использования этой опции отправителем, поэтому получатель должен быть готов к обработке опций, начало которых не совпадает с границей слова.