TCP

Версия 1.6 от Alexandr Fokin на 2022/07/09 17:11


Основные моменты:

 

Основывается на протоколе IP для передачи и маршрутизации.
TCP сегмент заворачивается в IP пакет.

СегментБлок единичного пакета/сообщения.
Сегмент содержит данные и заголовок необходимой для работы информацией.
Клиент и СерверTCP сервер слушает определенный сокет (привязка к IpAddress + Port).
TCP клиент подключается к серверу, устанавливается соединение.
Логическое соединение

Между 2 сторонами устанавливается логическое соединение, в рамках которого идет передача данных.

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

Взаимодействие

  1. Установка соединения
  2. Обмен данными.
  3. Закрытие соединения.
Потоковая (stream) передача

Данные раскладываются в tcp сегменты, но стороны оперирует интерфейсами в виде потока байт.

Необходима реализация механизмов для определения границ сообщения в передаваемых данных
(

  • либо все сообщения имеют фиксированную длину,
  • либо у сообщений есть заголовок фиксированной длины, в котором указана длина блока данных

)

Гарантия доставки сегментов.

При отправке данных (сегментов) каждая сторона фиксирует статус отправки и ожидает подтверждения. Если подтверждение не происходит в течении определенного времени, то один или группа сегментов (зависит от реализации) посылается повторно.

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

Гарантия порядка получения (за счет нумерации данных)

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

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

Гарантия целостности данных за счет контрольной суммыПеред отправкой в метаданные сегмента включается блок с контрольной суммой данных. При получении сегмента, контрольная сумма сверяется для проверки изменения содержимого сегмента.
Окно приемаМожно представить в виде некоторого буфера двигающегося вдоль данных по мере их приема.
Если сегмент не попадает в окно приема, то он отбрасывается.
Если сегмент приходит повторно (данный сегмент уже получен), то он отбрасывается.
Если сегмент попадает в окно приема, но не является следующим по порядку, то он буферизуется, до того момента, как будут получены расположенные по порядку перед ним сегменты (и будет выведен в поток чтения после них).
Окно передачиМожно представить в виде некоторого буфера двигающегося вдоль данных по мере их передачи.
Определяет, какие сегменты можно отправить в текущий момент времени.
Также в рамках него контролируются статус сегментов (было ли получено подтверждение о получении).

 

Теги: