Транспортные протоколы

Протоколы транспортного уровня обеспечивают контроль над передачей данных между межсетевыми протоколами и приложениями уровня операционной системы. Транспортные протоколы предписывают способ передачи сообщений между узлами. Наиболее популярными из транспортных протоколов являются протокол управления передачей (TCP) и протокол пользовательских датаграмм (UDP).

Протокол TCP

Рассмотрим первый популярный транспортный протокол. Он называется TCP – Transmission Control Protocol, протокол управления передачей.

Если приложению требуется подтверждение доставки сообщения, оно использует протокол TCP.

Единица передачи данных на транспортном уровне модели OSI называется сегмент.

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

Структура заголовка TCP сегмента

В TCP тоже присутствует набор заголовков, стандартизованных для транспортного протокола.

Рассмотрим заголовки TCP сегмента.

Untitled

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

Порядковый номер, он же Sequence number. Этот заголовок позволяет контролировать порядок сообщений. Именно благодаря этому параметру принимающая система собирает пакеты именно так, как надо, а не в том порядке, как они пришли.

Номер подтверждения, Acknowledgment Number – этот заголовок показывает, на пакет с каким Sequence number отвечает удаленная система. Таким образом мы можем понять, что удаленная система получила пакет с нашим Sequence number.

Длина заголовка, Data offset, известная также как смещение данных. Этот заголовок содержит размер заголовка TCP, измеряемый в 32-битных сегментах. Минимальный размер заголовка TCP составляет пять 32-битных сегментов (всего 20 байт), а максимальный — пятнадцать 32-битных сегментов (или 60 байт).

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

Следующее поле – флаги. Это специальные управляющие биты, определяющие функциональность TCP соединения. Их рассмотрим подробнее далее.

Заголовок Размер окна (Window Size) позволяет сообщить серверу, какой объем данных готов принять обратно. Этим клиент информирует сервер о размере своего буфера. Если сервер попытается ответить клиенту, отправив данные большего объема, чем размер буфера клиента, то клиент такой набор данных обработать не сможет.

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

Указатель срочности, Urgent pointer, необходим для того, чтобы приоритизировать данный трафик для приложения. Если данные помечены с помощью этого поля как срочные, то приложение-получатель трафика обработает эти данные немедленно. В данном поле указывается смещение данных, благодаря которому приложение понимает, где приоритизированные данные в сегменте заканчиваются.