Сегменты TCP передаются в дейтаграммах IP. Заголовок протокола IP содержит несколько информационных полей, включая адреса хостов отправителя и получателя [RFC791]. Заголовок TCP размещается вслед за заголовком IP и содержит информацию, относящуюся к протоколу TCP. Такое разделение позволяет использовать на уровне хоста протоколы, отличные от TCP.
Формат заголовка TCP
- Source Port — порт отправителя: 16 битов
- Номер порта отправителя.
- Destination Port — порт назначения: 16 битов
- Номер порта получателя.
- Sequence Number — порядковый номер: 32 бита
- Порядковый номер первого октета данных в сегменте при отсутствии флага SYN. Если в сегменте присутствует бит SYN, поле номера содержит значение начального порядкового номера (ISN), а первый октет данных имеет номер ISN+1.
- Acknowledgment Number — номер подтверждения: 32 бита
- Если бит ACK установлен, это поле содержит значение следующего порядкового номера, который отправитель сегмента ожидает получить. После организации соединения это значение передается всегда.
- Data Offset — смещение данных: 4 бита
- Число 32-битовых слов в заголовке TCP. Это значение указывает начало данных в сегменте. Заголовок TCP (даже при наличии опций) имеет длину, кратную 32 битам.
- Reserved — резервное поле: 6 битов
- Зарезервировано для использования в будущем и должно иметь нулевое значение.
- Control Bits — биты управления: 6 битов (слева направо):
- URG: указывает на значимость поля Urgent Pointer
- ACK: указывает на значимость поля Acknowledgment Number
- PSH: функция Push
- RST: сброс (Reset) соединения
- SYN: синхронизация порядковых номеров
- FIN: у отправителя больше нет данных
- Window — окно: 16 битов
- Число октетов данных, начиная с указанного в поле подтверждения, которые отправитель данного сегмента ожидает принять.
- Checksum — контрольная сумма: 16 битов
-
Контрольная сумма представляет собой число единиц в заголовке и данных, просуммированное по модулю 16 с добавлением 1. Если сегмент содержит в заголовке и данных нечетное число октетов, справа добавляется октет нулей для выравнивания по 16-битовой границе. Биты заполнения не передаются как часть сегмента и используются только для расчета контрольной суммы. При расчете контрольной суммы значение поля Checksum принимается нулевым.
Контрольная сумма учитывает также 96-битовый псевдозаголовок, предшествующий заголовку TCP. Этот псевдозаголовок содержит адреса отправителя и получателя, тип протокола и длину опций TCP. Перечисленные поля помогают защитить TCP против сегментов с ошибочной маршрутизацией. Эта информация транспортируется протоколом IP и передается через интерфейс TCP-сетевой уровень в качестве аргументов или результатов вызовов из TCP на уровень IP.
Адрес отправителя |
Адрес получателя |
0 |
PTCL |
Размер TCP |
- Поле TCP Length содержит размер заголовка TCP и поля данных в октетах (это не явно передаваемое, а расчетное значение); 12-октетный псевдозаголовок при расчете длины не учитывается.
- Urgent Pointer — указатель срочности: 16 битов
- Это поле содержит указатель на срочные данные — позитивное смещение начала таких данных от порядкового номера данного сегмента. Это поле имеет смысл только для сегментов с установленным флагом URG.
- Options — опции: переменная длина
-
Опции размещаются в конце заголовка TCP и могут занимать целое число октетов. Все опции учитываются при расчете контрольной суммы. Опции могут начинаться на любой границе октета. Существует два варианта форматирования опций:
- однооктетное поле признака опций.
- однооктетное поле признака опций, поле размера опций (1 октет) и собственно опции.
Поле размера опций учитывает и 2 октета полей признака опций и самого поля длины, а также размер опций, как таковых. Протокол TCP должен поддерживать все опции.
Определенные к настоящему моменту опции включают (признаки указаны восьмеричными значениями):
Признак |
Размер |
Значение |
0 |
- |
End of option list |
Конец списка опций |
1 |
- |
No-Operation |
Нет операции |
2 |
4 |
Maximum Segment Size |
Максимальный размер сегмента |
- Определения опций
-
- End of Option List
-
+--------+
|00000000|
+--------+
признак=0
Этот код говорит о завершении списка опций. Конец списка опций может не совпадать с концом заголовка TCP, заданным полем Data Offset. Код используется как индикатор завершения всех опций, а не какой-то конкретной и использование его требуется лишь в тех случаях, когда конец опций не совпадает с концом заголовка TCP.
- No-Operation
-
+--------+
|00000001|
+--------+
признак=1
Этот код может использоваться между опциями (например, для их выравнивания по границе слова). Не существует гарантий использования этой опции отправителем, поэтому получатель должен быть готов к обработке опций, начало которых не совпадает с границей слова.
- Maximum Segment Size
-
+--------+--------+---------+--------+
|00000010|00000100| max seg size |
+--------+--------+---------+--------+
признак=2 размер=4
- Maximum Segment Size — максимальный размер сегмента: 16 битов
- Если эта опция присутствует, она задает максимальный размер принимаемого сегмента для той стороны TCP, которая передает данный сегмент. Это поле должно передаваться только с начальным запросом организации соединения (сегмент с флагом SYN). Если эта опция не задана, допускается использование сегментов любого размера.
- Padding — заполнение: переменная длина
- Заполнение заголовка TCP используется для выравнивания размера заголовка по 32-битовой границе. Для заполнения неиспользуемых битов служит 0.
|