Исходный код вики TCP
Версия 1.1 от Alexandr Fokin на 2022/07/09 16:44
Последние авторы
author | version | line-number | content |
---|---|---|---|
1 | ---- | ||
2 | |||
3 | **Основные понятия:** | ||
4 | |||
5 | |(% style="width:546px" %) |(% style="width:960px" %)((( | ||
6 | Основывается на протоколе IP для передачи и маршрутизации. | ||
7 | Сегмент заворачивается в IP пакет. | ||
8 | ))) | ||
9 | |(% style="width:546px" %)Сегмент|(% style="width:960px" %)Блок единичного пакета/сообщения. | ||
10 | |(% style="width:546px" %)Клиент и Сервер|(% style="width:960px" %)TCP сервер слушает определенный сокет (привязка к IpAddress + Port). | ||
11 | TCP клиент подключается к серверу, устанавливается соединение. | ||
12 | |(% style="width:546px" %)Логическое соединение|(% style="width:960px" %)((( | ||
13 | Между 2 сторонами устанавливается логическое соединение, в рамках которого идет передача данных. | ||
14 | |||
15 | При этом соединение само по себе не имеет механизмов для определения разрыва сети, падения приложения одной из сторон или падения сервера. | ||
16 | ))) | ||
17 | |(% style="width:546px" %)Потоковый (stream) передача|(% style="width:960px" %)((( | ||
18 | Отправка и получение данных идут в виде потока байт. | ||
19 | |||
20 | Необходима реализация механизмов для определения границ сообщения в передаваемых данных | ||
21 | ( | ||
22 | |||
23 | * либо все сообщения имеют фиксированную длину, | ||
24 | * либо у сообщений есть заголовок фиксированной длины, в котором указана длина блока данных | ||
25 | |||
26 | ) | ||
27 | ))) | ||
28 | |(% style="width:546px" %)Гарантия доставки сегментов.|(% style="width:960px" %)При отправке данных (сегментов) каждая сторона фиксирует статус отправки и ожидает подтверждения. Если подтверждение не происходит в течении определенного времени, то один или группа сегментов (зависит от реализации) посылается повторно. | ||
29 | |(% style="width:546px" %)Гарантия порядка получения (за счет нумерации данных)|(% style="width:960px" %)В метаданные сегмента записывается порядковый номер первого байта данных, который используется принимающей стороной для восстановления последовательности сегментов (т.к. они могут быть получены не в том порядке, в котором было отправлены). | ||
30 | |(% style="width:546px" %)Гарантия целостности данных за счет контрольной суммы|(% style="width:960px" %)Перед отправкой в метаданные сегмента включается блок с контрольной суммой данных. При получении сегмента, контрольная сумма сверяется для проверки изменения содержимого сегмента. | ||
31 | |(% style="width:546px" %)Окно приема|(% style="width:960px" %) | ||
32 | |(% style="width:546px" %)Окно передачи|(% style="width:960px" %) | ||
33 | |||
34 | |||
35 | ---- | ||
36 | |||
37 |