Скрыть последних авторов
Alexandr Fokin 1.10 1 **Transmission Control Protocol**
2
3 ----
4
Alexandr Fokin 1.6 5 **Основные моменты:**
Alexandr Fokin 1.1 6
Alexandr Fokin 1.12 7 |(% style="width:215px" %)**Понятие**|(% style="width:1307px" %)**Описание**
8 |(% style="width:215px" %) |(% style="width:1307px" %)(((
Alexandr Fokin 1.23 9 Основывается на протоколе [[IP>>Сети.Протоколы.IP.WebHome]] для передачи и маршрутизации.
Alexandr Fokin 1.4 10 TCP сегмент заворачивается в IP пакет.
Alexandr Fokin 1.1 11 )))
Alexandr Fokin 1.19 12 |(% style="width:215px" %)TCP сегмент|(% style="width:1307px" %)Блок единичного пакета/сообщения.
Alexandr Fokin 1.4 13 Сегмент содержит данные и заголовок необходимой для работы информацией.
Alexandr Fokin 1.24 14 |(% style="width:215px" %)Maximum segment size (MSS)|(% style="width:1307px" %)Параметр, обозначающий размер полезной нагрузки.
Alexandr Fokin 1.25 15 Основывается на значении MTU, вычитая значение размера IP заголовка и TCP заголовка.
Alexandr Fokin 1.12 16 |(% style="width:215px" %)Клиент и Сервер|(% style="width:1307px" %)TCP сервер слушает определенный сокет (привязка к IpAddress + Port).
Alexandr Fokin 1.1 17 TCP клиент подключается к серверу, устанавливается соединение.
Alexandr Fokin 1.12 18 |(% style="width:215px" %)Логическое соединение|(% style="width:1307px" %)(((
Alexandr Fokin 1.20 19 Между 2 сторонами устанавливается логическое соединение, в рамках которого идет передача данных. Соединение является дюплексным.
Alexandr Fokin 1.1 20
Alexandr Fokin 1.18 21 При этом соединение само по себе не имеет механизмов для определения разрыва сети, падения приложения одной из сторон или падения хоста (другая сторона вполне может еще некоторое время предпринимать попытки выполнить отправку или получение данных, в некоторых случаях (в момент падения приложения, после перезагрузки хоста) разрыв сессии может быть обнаружен). В некоторых случаях имеет смысл реализации пульса для отслеживания состояния соединения.
Alexandr Fokin 1.2 22
Alexandr Fokin 1.4 23 Взаимодействие
24
Alexandr Fokin 1.2 25 1. Установка соединения
26 1. Обмен данными.
27 1. Закрытие соединения.
Alexandr Fokin 1.1 28 )))
Alexandr Fokin 1.12 29 |(% style="width:215px" %)Потоковая (stream) передача|(% style="width:1307px" %)(((
Alexandr Fokin 1.6 30 Данные раскладываются в tcp сегменты, но стороны оперирует интерфейсами в виде потока байт.
Alexandr Fokin 1.1 31
32 Необходима реализация механизмов для определения границ сообщения в передаваемых данных
33 (
34
Alexandr Fokin 1.13 35 * либо все сообщения имеют фиксированную длину
Alexandr Fokin 1.1 36 * либо у сообщений есть заголовок фиксированной длины, в котором указана длина блока данных
Alexandr Fokin 1.13 37 * либо в конце каждого сообщения есть некая последовательность, обозначающая о его завершении
Alexandr Fokin 1.1 38
39 )
40 )))
Alexandr Fokin 1.12 41 |(% style="width:215px" %)Гарантия доставки сегментов.|(% style="width:1307px" %)(((
Alexandr Fokin 1.3 42 При отправке данных (сегментов) каждая сторона фиксирует статус отправки и ожидает подтверждения. Если подтверждение не происходит в течении определенного времени, то один или группа сегментов (зависит от реализации) посылается повторно.
43
Alexandr Fokin 1.8 44 Возможно ситуация, когда сегмент подтверждения может быть утерян (или же еще не успел прийти), и сегмент будет выслан повторно, но такое поведение не приведет к повреждению передаваемых данных.
Alexandr Fokin 1.7 45
Alexandr Fokin 1.21 46 ----
47
Alexandr Fokin 1.3 48 Отметим, что возможна ситуация, когда сегменты достигли клиента, отправитель получил подтверждение, но приложение или хост упали, не выполнив окончательную обработку данных из этих сегментов.
Alexandr Fokin 1.21 49
50 При отправке данных через сокет, возврат управления из функции отправки не означает, что данные были доставлены или даже отправлены. Данные все еще могут находиться в буфере и ожидать отправки (например ожидать заполнения блока). Задержка возврата управления может быть вызвана переполнением буфера отправки.
Alexandr Fokin 1.3 51 )))
Alexandr Fokin 1.12 52 |(% style="width:215px" %)Гарантия порядка получения
53 (за счет нумерации данных)|(% style="width:1307px" %)(((
Alexandr Fokin 1.9 54 В заголовок сегмента записывается порядковый номер первого байта данных, который используется принимающей стороной для восстановления последовательности сегментов (т.к. они могут быть получены не в том порядке, в котором было отправлены).
Alexandr Fokin 1.3 55
56 Также важно, что одно логическое сообщение приложение может быть разбито на несколько TCP сегментов, которые физически дойдет до получателя не в том порядке, в котором были отправлены, но их порядок будет восстановлен на стороне получателя при передаче в поток чтения.
57 )))
Alexandr Fokin 1.12 58 |(% style="width:215px" %)Гарантия целостности данных
59 (за счет контрольной суммы)|(% style="width:1307px" %)Перед отправкой в заголовок сегмента включается блок с контрольной суммой данных. При получении сегмента, контрольная сумма сверяется для проверки изменения содержимого сегмента.
60 |(% style="width:215px" %)Окно приема|(% style="width:1307px" %)Можно представить в виде некоторого буфера двигающегося вдоль данных по мере их приема.
Alexandr Fokin 1.22 61 Обозначает ограничение буфера памяти приемника.
Alexandr Fokin 1.5 62 Если сегмент не попадает в окно приема, то он отбрасывается.
63 Если сегмент приходит повторно (данный сегмент уже получен), то он отбрасывается.
Alexandr Fokin 1.3 64 Если сегмент попадает в окно приема, но не является следующим по порядку, то он буферизуется, до того момента, как будут получены расположенные по порядку перед ним сегменты (и будет выведен в поток чтения после них).
Alexandr Fokin 1.12 65 |(% style="width:215px" %)Окно передачи|(% style="width:1307px" %)Можно представить в виде некоторого буфера двигающегося вдоль данных по мере их передачи.
Alexandr Fokin 1.3 66 Определяет, какие сегменты можно отправить в текущий момент времени.
67 Также в рамках него контролируются статус сегментов (было ли получено подтверждение о получении).
Alexandr Fokin 2.1 68 |(% style="width:215px" %) |(% style="width:1307px" %)
69 |(% style="width:215px" %)Окно перегрузки|(% style="width:1307px" %)
70 |(% style="width:215px" %)Алгоритм Нейгла|(% style="width:1307px" %)
Alexandr Fokin 1.1 71
72 ----
73
Alexandr Fokin 2.2 74 ==== Внутренние ссылки: ====
75
76 ====== Дочерние страницы: ======
77
78 {{children/}}
79
80 ====== Обратные ссылки: ======
81
82 {{velocity}}
83 #set ($links = $doc.getBacklinks())
84 #if ($links.size() > 0)
85 #foreach ($docname in $links)
86 #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument())
87 * [[$escapetool.xml($rdoc.fullName)]]
88 #end
89 #else
90 No back links for this page!
91 #end
92 {{/velocity}}
93
94 ----
95