TCP
Основные моменты:
Основывается на протоколе IP для передачи и маршрутизации. | |
Сегмент | Блок единичного пакета/сообщения. Сегмент содержит данные и заголовок необходимой для работы информацией. |
Клиент и Сервер | TCP сервер слушает определенный сокет (привязка к IpAddress + Port). TCP клиент подключается к серверу, устанавливается соединение. |
Логическое соединение | Между 2 сторонами устанавливается логическое соединение, в рамках которого идет передача данных. При этом соединение само по себе не имеет механизмов для определения разрыва сети, падения приложения одной из сторон или падения хоста. В некоторых случаях имеет смысл реализации пульса для отслеживания состояния соединения. Взаимодействие
|
Потоковая (stream) передача | Данные раскладываются в tcp сегменты, но стороны оперирует интерфейсами в виде потока байт. Необходима реализация механизмов для определения границ сообщения в передаваемых данных
) |
Гарантия доставки сегментов. | При отправке данных (сегментов) каждая сторона фиксирует статус отправки и ожидает подтверждения. Если подтверждение не происходит в течении определенного времени, то один или группа сегментов (зависит от реализации) посылается повторно. Возможно ситуация, когда сегмент подтверждения может быть утерян, и сегмент будет выслан повторно, но такое поведение не приведет к повреждению передаваемых данных. Отметим, что возможна ситуация, когда сегменты достигли клиента, отправитель получил подтверждение, но приложение или хост упали, не выполнив окончательную обработку данных из этих сегментов. |
Гарантия порядка получения (за счет нумерации данных) | В метаданные сегмента записывается порядковый номер первого байта данных, который используется принимающей стороной для восстановления последовательности сегментов (т.к. они могут быть получены не в том порядке, в котором было отправлены). Также важно, что одно логическое сообщение приложение может быть разбито на несколько TCP сегментов, которые физически дойдет до получателя не в том порядке, в котором были отправлены, но их порядок будет восстановлен на стороне получателя при передаче в поток чтения. |
Гарантия целостности данных за счет контрольной суммы | Перед отправкой в метаданные сегмента включается блок с контрольной суммой данных. При получении сегмента, контрольная сумма сверяется для проверки изменения содержимого сегмента. |
Окно приема | Можно представить в виде некоторого буфера двигающегося вдоль данных по мере их приема. Если сегмент не попадает в окно приема, то он отбрасывается. Если сегмент приходит повторно (данный сегмент уже получен), то он отбрасывается. Если сегмент попадает в окно приема, но не является следующим по порядку, то он буферизуется, до того момента, как будут получены расположенные по порядку перед ним сегменты (и будет выведен в поток чтения после них). |
Окно передачи | Можно представить в виде некоторого буфера двигающегося вдоль данных по мере их передачи. Определяет, какие сегменты можно отправить в текущий момент времени. Также в рамках него контролируются статус сегментов (было ли получено подтверждение о получении). |