Протокол TCP формат заголовка и 9 полей флагов

В предыдущей статье была достаточно подробно рассмотрена логика работы протокола TCP, теперь можем перейти к рассмотрению формату TCP заголовка.

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

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

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

Например, байт 1000, байт 2460 или 3920. Если мы используем сеть Ethernet, то размер сегмента как правило составляет 1460 байт, чтобы с заголовком TCP и IP можно было поместиться в кадр Ethernet размером 1500 байт.

Следующее поле номер подтверждения, подтверждение используется для обеспечения гарантии доставки сообщений. Отправитель передает сегмент с указанием номера последовательности. Первый байт 1000, последний байт 1459. Получатель отправляет сегмент с подтверждением в которым он говорит, какие данные получены. Поле номер подтверждения используются для задания кумулятивного подтверждения, которая говорит о том, что получены все предыдущие байты. Особенности TCP в том, что в поле номер подтверждения указывается, не номер последнего байта, который получен в примере 2459, а номер следующего ожидаемого байта 2460.

Затем идет поле длина заголовка, как и в случае с IP, заголовок TCP состоит из двух частей, обязательной и необязательной. Длина обязательной части заголовка 20 байт, длина необязательный может быть разной в том числе и нулевой. Поэтому мы должны знать общую длину заголовка TCP.

Затем идут три зарезервированных бита, которые сейчас не используется. И 9 полей флагов:

  • Флаги NS, CWR и ECE используются для управления перегрузкой.
  • Флаг URG  указывает на то, что в сегменте содержатся срочные данные, которые необходимо быстро передать приложению. Этот флаг используется совместно с полем указатель на срочные данные, который содержит адрес этих данных. Сейчас этот флаг и поле указатель на срочные данные не используются.
  • Флаг ACK используются, если в поле номер подтверждения записаны осмысленные данным, то есть для подтверждения принятой ранее информации.
  • Флаг PSH указывает, что полученные данные необходимо полностью сразу передать приложение без промежуточной записи в буфер, также как и флаг URG этот флаг сейчас не используется.
  • Флаги RST и FIN используются для разрыва соединений, а флаг SYN синхронизация, используется для установки соединения.

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

Затем идет контрольная сумма, которая используется для проверки правильности доставки данных, если контрольная сумма рассчитанная получателем не совпадает с контрольной суммой в заголовке TCP, то этот сегмент отбрасывается.

Поле указатель на срочные данные, которую мы рассмотрели, завершают обязательную часть заголовка TCP.

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

Рассмотрим некоторые примеры параметров:

Параметры (Maximum Segment Size, MSS) максимальный размер сегмента, говорит о том сегмент какого размера может принять получатель, если используется Ethernet, то максимальный размер сегмента 1460 байт. Максимальный размер сегмента, задается отправителем и получателем при установке соединения.

Другой важный параметр это масштаб окна, поле размер окна в заголовке TCP позволяет указать максимальный размер доступных для получения байт 65535, но это маленький объем для современных высокоскоростных и территориально протяженных каналов. Если использовать размер окна такого размера то, скорость передачи данных будет низкая. Параметр масштаб окна позволяет увеличить размер окна до 1 ГБ.

Другой полезный параметр это выборочное подтверждение, позволяет получить подтверждение диапазонов принятых байт, а не всех данных до определенного байта. Выборочное подтверждение полезно, если потерян всего лишь один сегмент или небольшая порция в большом потоке данных.

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

Оцените статью
Все о технологиях, мобильных приложениях и тарифах на связь