Скрыть последних авторов
Alexandr Fokin 1.1 1 ----
2
Alexandr Fokin 1.6 3 **Основные моменты:**
Alexandr Fokin 1.1 4
5 |(% style="width:546px" %) |(% style="width:960px" %)(((
6 Основывается на протоколе IP для передачи и маршрутизации.
Alexandr Fokin 1.4 7 TCP сегмент заворачивается в IP пакет.
Alexandr Fokin 1.1 8 )))
9 |(% style="width:546px" %)Сегмент|(% style="width:960px" %)Блок единичного пакета/сообщения.
Alexandr Fokin 1.4 10 Сегмент содержит данные и заголовок необходимой для работы информацией.
Alexandr Fokin 1.1 11 |(% style="width:546px" %)Клиент и Сервер|(% style="width:960px" %)TCP сервер слушает определенный сокет (привязка к IpAddress + Port).
12 TCP клиент подключается к серверу, устанавливается соединение.
13 |(% style="width:546px" %)Логическое соединение|(% style="width:960px" %)(((
14 Между 2 сторонами устанавливается логическое соединение, в рамках которого идет передача данных.
15
Alexandr Fokin 1.4 16 При этом соединение само по себе не имеет механизмов для определения разрыва сети, падения приложения одной из сторон или падения хоста. В некоторых случаях имеет смысл реализации пульса для отслеживания состояния соединения.
Alexandr Fokin 1.2 17
Alexandr Fokin 1.4 18 Взаимодействие
19
Alexandr Fokin 1.2 20 1. Установка соединения
21 1. Обмен данными.
22 1. Закрытие соединения.
Alexandr Fokin 1.1 23 )))
Alexandr Fokin 1.6 24 |(% style="width:546px" %)Потоковая (stream) передача|(% style="width:960px" %)(((
25 Данные раскладываются в tcp сегменты, но стороны оперирует интерфейсами в виде потока байт.
Alexandr Fokin 1.1 26
27 Необходима реализация механизмов для определения границ сообщения в передаваемых данных
28 (
29
30 * либо все сообщения имеют фиксированную длину,
31 * либо у сообщений есть заголовок фиксированной длины, в котором указана длина блока данных
32
33 )
34 )))
Alexandr Fokin 1.3 35 |(% style="width:546px" %)Гарантия доставки сегментов.|(% style="width:960px" %)(((
36 При отправке данных (сегментов) каждая сторона фиксирует статус отправки и ожидает подтверждения. Если подтверждение не происходит в течении определенного времени, то один или группа сегментов (зависит от реализации) посылается повторно.
37
38 Отметим, что возможна ситуация, когда сегменты достигли клиента, отправитель получил подтверждение, но приложение или хост упали, не выполнив окончательную обработку данных из этих сегментов.
39 )))
40 |(% style="width:546px" %)Гарантия порядка получения (за счет нумерации данных)|(% style="width:960px" %)(((
41 В метаданные сегмента записывается порядковый номер первого байта данных, который используется принимающей стороной для восстановления последовательности сегментов (т.к. они могут быть получены не в том порядке, в котором было отправлены).
42
43 Также важно, что одно логическое сообщение приложение может быть разбито на несколько TCP сегментов, которые физически дойдет до получателя не в том порядке, в котором были отправлены, но их порядок будет восстановлен на стороне получателя при передаче в поток чтения.
44 )))
Alexandr Fokin 1.1 45 |(% style="width:546px" %)Гарантия целостности данных за счет контрольной суммы|(% style="width:960px" %)Перед отправкой в метаданные сегмента включается блок с контрольной суммой данных. При получении сегмента, контрольная сумма сверяется для проверки изменения содержимого сегмента.
Alexandr Fokin 1.3 46 |(% style="width:546px" %)Окно приема|(% style="width:960px" %)Можно представить в виде некоторого буфера двигающегося вдоль данных по мере их приема.
Alexandr Fokin 1.5 47 Если сегмент не попадает в окно приема, то он отбрасывается.
48 Если сегмент приходит повторно (данный сегмент уже получен), то он отбрасывается.
Alexandr Fokin 1.3 49 Если сегмент попадает в окно приема, но не является следующим по порядку, то он буферизуется, до того момента, как будут получены расположенные по порядку перед ним сегменты (и будет выведен в поток чтения после них).
50 |(% style="width:546px" %)Окно передачи|(% style="width:960px" %)Можно представить в виде некоторого буфера двигающегося вдоль данных по мере их передачи.
51 Определяет, какие сегменты можно отправить в текущий момент времени.
52 Также в рамках него контролируются статус сегментов (было ли получено подтверждение о получении).
Alexandr Fokin 1.1 53
54 ----
55
56