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

Важно!

Приоритет и безопасность

Коммуникация данных

Состояния соединения

Соединения протокола TCP переходят из одного состояния в другое в ответ на определенные события — запросы клиента, приход сегментов с флагами SYN, ACK, RST, FIN — или по истечении заданного времени. Соединение может находиться в одном из следующих состояний:

- LISTEN — ожидание запроса на соединение со стороны внешних (чужих) портов и внешних (чужих) программ TCP.

- SYN-SENT — ожидание парного запроса на установление соединения (со стороны отправителя запрос уже сделан).

- SYN-RECEIVED — ожидание подтверждения после того, как запрос на установление соединения уже принят и отправлен.

- ESTABLISHED — соединение установлено. Принимаемые от приложения данные можно передать пользователю.

- FIN-WAIT-1 — ожидание запроса от чужой программы TCP или подтверждение ранее отправленного запроса на закрытие соединения.

- FIN-WAIT-2 — ожидание запроса на закрытие соединения со стороны чужой программы TCP.

- CLOSE-WAIT — ожидание запроса на закрытие соединения со стороны своего клиента.

- CLOSING — ожидание подтверждения запроса о закрытии соединения со стороны чужой программы TCP.

- LAST-ACK — ожидание ответного запроса на закрытие соединения на посланный запрос о закрытии соединения, который был ранее отправлен чужой программе TCP.

- TIME-WAIT — соединение находится в этом состоянии на протяжении времени, достаточного для того, чтобы быть уверенным, что чужая программа TCP получила подтверждение своего запроса на закрытие соединения.

- CLOSED — соединение закрыто.

Основное состояние соединения — ESTABLISHED (соединение установлено). В этом состоянии происходит обмен данными между абонентами.

Набор данных, передаваемых по соединению, можно рассматривать как поток октетов. Пользователь, отправляющий данные, указывает при запросе по посылку, следует ли данные, отправляемые при этом запросе, немедленно проталкивать через сеть к получателю. Указание осуществляется установкой флага PUSH (проталкивание).

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

Во время установления или инициализации какого-либо соединения обе программы протокола TCP должны синхронизировать друг с другом первоначальные номера очередей. Это осуществляется посредством обмена сегментами, устанавливающими соединения, несущими контрольный бит, называемый "SYN" (for synchronize - для синхронизации), несущими исходные номера для очередей. Для краткости, сегменты, несущие бит SYN, также называются SYN сегментами. Следовательно, решение проблемы требует приемлемого механизма для подбора первоначального номера очереди и немногочисленных сигналов подтверждения при обмене номерами ISN.

Синхронизация требует, чтобы каждая сторона, участвующая в соединении, посылала свой собственный первоначальный номер очереди, а также получала подтверждение на это от напарника. Каждая сторона должна также получить первоначальный номер очереди от напарника и послать подтверждение.

Состояние A Значения флагов Состояние B
CLOSED - LISTEN
SYN-SENT сигнал SYN: мой номер очереди X -> R SYN-RECEIVED
ESTABLISHED <- SYN, ACK мой номер очереди Y; ваш номер очереди X+1 S SYN-RECEIVED
ESTABLISHED ACK, мой номер очереди X+1, ваш номер очереди Y+1 -> R ESTABLISHED
ESTABLISHED Данные ESTABLISHED

Завершение соединения

Состояние A Значения флагов Состояние B
ESTABLISHED   ESTABLISHED
FIN-WAIT 1 FIN, ACK; мой номер Z, ваш номер T -> R CLOSE-WAIT
FIN-WAIT 2 <- ACK, мой номер T, ваш номер Z+1 S CLOSE-WAIT
TIME-WAIT <- FIN, ACK, мой номер T, ваш номер Z+1 S LAST-ACK
TIME-WAIT ACK, мой номер Z+1, ваш номер T+1 -> R CLOSED
CLOSED   CLOSED

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: поле срочного указателя задействовано

ACK: поле подтверждения задействовано

PSH: функция проталкивания

RST: перезагрузка данного соединения

SYN: синхронизация номеров очереди

FIN: нет больше данных для передачи

Window (окно) 16 бит - количество октетов данных, начиная с октета, чей номер указан в поле подтверждения. Количество октетов, получения которых ждет отправитель настоящего сегмента.

Checksum (контрольная сумма) 16 бит - поле контрольной суммы - это 16-битное дополнение суммы всех 16-битных слов заголовка и текста. Если сегмент содержит в заголовке и тексте нечетное количество октетов, подлежащих учету в контрольной сумме, последний октет будет дополнен нулями справа с тем, чтобы образовать для предоставления контрольной сумме 16-битное слово. Возникший при таком выравнивании октет не передается вместе с сегментом по сети. Перед вычислением контрольной суммы поле этой суммы заполняется нулями. Контрольная сумма, помимо всего прочего, учитывает 96 бит псевдозаголовка, который для внутреннего употребления ставится перед TCP заголовком. Этот псевдозаголовок содержит адрес отправителя, адрес получателя, протокол и длину TCP сегмента. Такой подход обеспечивает защиту протокола TCP от ошибшихся в маршруте сегментов. Эту информацию обрабатывает Internet протокол. Она передается через интерфейс протокол TCP/локальная сеть в качестве аргументов или результатов запросов от протокола TCP к протоколу IP.

Адрес отправителя

Адрес получателя

нули PTCL длина TCP

Длина TCP сегмента - это длина TCP заголовка и поля данных, измеренная в октетах. Это не является точным указанием количества передаваемых по сети октетов, она не учитывает 12 октетов псевдозаголовка, но тем не менее расчет этого параметра все же производится.

Urgent Pointer (срочный указатель) 16 бит - это поле сообщает текущее значение срочного указателя. Последний является положительной величиной - смещением относительно номера очереди данного сегмента. Срочный указатель сообщает номер очереди для октета, следующего за срочными данными. Это поле интерпретируется только в том случае, когда в сегменте выставлен контрольный бит URG.

Options (опции) длина переменная - опции могут располагаться в конце TCP заголовка, а их длина кратна 8 бит. Все опции учитываются при расчете контрольной суммы. Опции могут начинаться с любого октета. Они могут иметь два формата:

однооктетный тип опций;

октет типа опции, октет длины опции и октеты данных

рассматриваемой опции.

В октете длины опции учитываются октет типа опции, сам октет длины, а также все октеты с данными.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: