RFC: 793
Оригинал: Transmission Control Protocol
Предыдущие версии: RFC 761
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых

3. Функциональная спецификация

3.1. Формат заголовка

Сегменты TCP передаются в дейтаграммах IP. Заголовок протокола IP содержит несколько информационных полей, включая адреса хостов отправителя и получателя [RFC791]. Заголовок TCP размещается вслед за заголовком IP и содержит информацию, относящуюся к протоколу TCP. Такое разделение позволяет использовать на уровне хоста протоколы, отличные от TCP.

Формат заголовка TCP

 0                   1                   2                   3   
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 3. Формат заголовка 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.

    Адрес отправителя
    Адрес получателя
    0PTCLРазмер TCP
  • Поле TCP Length содержит размер заголовка TCP и поля данных в октетах (это не явно передаваемое, а расчетное значение); 12-октетный псевдозаголовок при расчете длины не учитывается.
  • Urgent Pointer — указатель срочности: 16 битов
  • Это поле содержит указатель на срочные данные — позитивное смещение начала таких данных от порядкового номера данного сегмента. Это поле имеет смысл только для сегментов с установленным флагом URG.
  • Options — опции: переменная длина
  • Опции размещаются в конце заголовка TCP и могут занимать целое число октетов. Все опции учитываются при расчете контрольной суммы. Опции могут начинаться на любой границе октета. Существует два варианта форматирования опций:

    1. однооктетное поле признака опций.
    2. однооктетное поле признака опций, поле размера опций (1 октет) и собственно опции.

    Поле размера опций учитывает и 2 октета полей признака опций и самого поля длины, а также размер опций, как таковых. Протокол TCP должен поддерживать все опции.

    Определенные к настоящему моменту опции включают (признаки указаны восьмеричными значениями):

    ПризнакРазмерЗначение
    0-End of option listКонец списка опций
    1-No-OperationНет операции
    24Maximum 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.
2007 - 2017 © Русские переводы RFC, IETF, ISOC.