Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 47 additions & 6 deletions TCP_UDP/TCP_vs_UDP.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ UDP — User Datagram Protocol.

**Сетевой уровень** (Network layer) — 3-й уровень сетевой модели OSI, предназначается для определения пути передачи данных. Отвечает за трансляцию логических адресов и имён в физические, определение кратчайших маршрутов,маршрутизацию, отслеживание неполадок и заторов в сети. На этом уровне работает такое сетевое устройство, как маршрутизатор.

**Транспортный уровень** (Transport layer) — 4-й уровень сетевой модели OSI, предназначен для доставки данных. При этом неважно, какие данные передаются, откуда и куда, то есть, он предоставляет сам механизм передачи. Блоки данных он разделяет на фрагменты, размеры которых зависят от протокола: короткие объединяет в один, а длинные разбивает.
**Транспортный уровень** (Transport layer) — 4-й уровень сетевой модели OSI, предназначен для доставки данных. При этом неважно, какие данные передаются, откуда и куда, то есть, он предоставляет сам механизм передачи. Блоки данных он разделяет на фрагменты, размеры которых зависят от протокола: короткие объединяет в один, а длинные разбивает. Протоколы этого уровня не знают ничего про различия в узлах сетей. Всё, что им требуется знать про адресацию, это то, что есть приложение, отсылающее сообщение, и оно для отправки использует какой-то порт. И приложение, которое получает сообщение, тоже использует какой-то порт. Основная «адресация внутри Интернета» же реализована на межсетевом уровне.

## TCP/IP

TCP/IP являются двумя разными протоколами, которые работают вместе, чтобы обеспечить доставку данных в предполагаемое место назначения в сети. IP получает и определяет адрес (IP-адрес) приложения или устройства, на которое должны быть отправлены данные. TCP отвечает за передачу данных и обеспечение их доставки на определенное IP-устройство или целевое приложение. Два протокола часто используются вместе, чтобы данные имели место назначения и безопасно достигали его, поэтому этот процесс зачастую называют TCP/IP.

## TCP — описание
Перед тем, как начать передачу данных, клиент и сервер должны подключиться друг к другу и договориться о том, как они будут осуществлять эту самую передачу.

У протокола TCP есть несколько особенностей:

Expand All @@ -26,7 +27,7 @@ TCP/IP являются двумя разными протоколами, кот

### Структура пакета TCP/IP

![изображение](https://user-images.githubusercontent.com/62937015/212536863-e5cb813c-d4a6-467e-86ed-7f9697de3e8e.png)
![изображение](https://habrastorage.org/getpro/habr/upload_files/2d2/917/081/2d2917081ec1e6a8dc94d9b0d037d8f7.png)
В каждый пакет данных TCP добавляет заголовок общим объемом в 20 байт, в котором содержатся 10 обязательных полей:

- Порт источника — порт устройства-отправителя.
Expand All @@ -51,12 +52,27 @@ TCP/IP являются двумя разными протоколами, кот

### Механизм передачи сообщений TCP

Перед тем, как данные могут быть переданы между двумя узлами, в TCP, в отличие от UDP, предусмотрена стадия установки соединения. Также, после того, как все данные были переданы, наступает стадия завершения соединения. Таким образом, осуществление каждого TCP-соединения можно условно разделить на три фазы:
Перед тем, как данные могут быть переданы между двумя узлами, в TCP, в отличие от UDP, предусмотрена стадия установки соединения. Эта «установка» обычно называется рукопожатием.
Условно рукопожатие можно представить так:

![изображение](https://habrastorage.org/getpro/habr/upload_files/68c/63d/de1/68c63dde1db9d5b3cdc4840c95bea3f9.png)

1) Клиент посылает серверу пакет, который называется SYN.
2) Сервер отвечает пакетом SYN-ACK.
3) Клиент отвечает серверу пакетом ACK.
SEQ - показывает, сколько данных отправитель уже послал в сторону получателя.
ACK - показывает сколько данных отправитель этого пакета получил на текущий момент.

Эти числа важны, потому что позволяют обеим сторонам понимать статус передачи данных. И клиент, и сервер, оба ожидают получить определённые значения порядкового номера и номера подтверждения от противоположной стороны. А если вдруг действительно полученные значения расходятся с ожидаемыми, значит где-то произошла ошибка, и возможно кто-то из них должен переотправить какие-то пакеты.
И когда рукопожатие закончено, сервер как раз и понимает, что клиент готов передавать данные, и начинает их от него ожидать.
В процессе обмена данными протокол TCP гарантирует отправку и получение сегментов в точном порядке. Каждому пакету присваивается номер, который указывает на позицию данных в потоке.

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

1) Инициализация соединения.
Установка соединения осуществляется с помощью, так называемого трехстороннего рукопожатия TCP. Инициатором соединения может выступать любая сторона.
2) Загрузка данных.
После инициализации соединения полезная нагрузка будет перемещаться в обоих направлениях TCP-соединения.
После инициализации соединения полезная нагрузка будет перемещаться в обоих направлениях TCP-соединения. Данные разбиваются на сегменты (пакеты), каждый из которых имеет заголовок с информацией о портах, номерах последовательности и других параметрах; Происходит обмен пакетами между клиентом и сервером; Принимающая сторона отправляет подтверждение за каждым принятым сегментом. Важно отметить, что присутствует механизм обнаружения и коррекции ошибок.
3) Завершение соединения.
При нормальном завершении TCP-соединения в большинстве случаев инициализируется процедура, называемая двухсторонним рукопожатием, в ходе которой каждая сторона закрывает свой конец виртуального канала и освобождает все задействованные ресурсы. Обычно эта фаза начинается с того, что один из задействованных процессов приложения сигнализирует своему уровню TCP, что сеанс связи больше не нужен. Со стороны этого устройства отправляется сообщение с установленным флагом FIN (отметим, что этот пакет не обязательно должен быть пустым, он также может содержать полезную нагрузку), чтобы сообщить другому устройству о своем желании завершить открытое соединение. Затем получение этого сообщения подтверждается (сообщение от отвечающего устройства с установленным флагом ACK, говорящем о получении сообщения FIN). Когда отвечающее устройство готово, оно также отправляет сообщение с установленным флагом FIN, и, после получения в ответ подтверждающего получение сообщения с установленным флагом ACK или ожидания определенного периода времени, предусмотренного для получения ACK, сеанс полностью закрывается.

Expand All @@ -72,7 +88,7 @@ TCP/IP являются двумя разными протоколами, кот

## UDP — описание

Если нам очень важна скорость передачи, а вот потеря пакетов не так критична (как, например, в голосовом или видеотрафике), то лучше использовать UDP, или User Datagram Protocol. В отличие от TCP он обеспечивает передачу данных без получения подтверждения от пользователя. Проще говоря, просто отправляет пакеты и не ждет ничего в ответ. Из-за этого достигается высокая скорость в ущерб надежности.
Если нам очень важна скорость передачи, а вот потеря пакетов не так критична (как, например, в голосовом или видеотрафике), то лучше использовать UDP, или User Datagram Protocol. В отличие от TCP он обеспечивает передачу данных без получения подтверждения от пользователя. Проще говоря, просто отправляет пакеты и не ждет ничего в ответ. Из-за этого достигается высокая скорость в ущерб надежности. Пакеты, передаваемые с помощью UDP, иногда называются датаграммами - блоки информации, передаваемые напрямую, без создания выделенного виртуального канала.

### Структура пакета UDP

Expand All @@ -85,7 +101,13 @@ TCP/IP являются двумя разными протоколами, кот

### Механизм передачи данных UDP

UDP использует простую модель передачи, без явных «рукопожатий» для обеспечения надёжности, упорядочивания или целостности данных. Датаграммы могут прийти не по порядку, дублироваться или вовсе исчезнуть без следа, но гарантируется, что если они придут, то в целостном состоянии.
UDP использует простую модель передачи, без явных «рукопожатий» для обеспечения надёжности, упорядочивания или целостности данных. Датаграммы могут прийти не по порядку, дублироваться или вовсе исчезнуть без следа, но гарантируется, что если они придут, то в целостном состоянии.
Эта технология предлагает более простой алгоритм передачи данных. Он состоит всего из 4 базовых этапов:
1) Упаковка данных в дейтаграммы — общий объем информации для передачи разбивается на сегменты (дейтаграммы).
2) Отправка дейтаграмм — начинается сразу же после их формирования. Отправитель отсылает дейтаграммы на целевой адрес и порт получателя.
3) Передача дейтаграмм — данных передаются по сети разными путями, поэтому могут быть доставлены в разное время и в хаотичном порядке.
4) Получение пакетов — получатель принимает дейтаграммы и извлекает данные.
Для защиты такого вида передачи данных используют дополнительные меры. Например, прокси или туннельное соединение между пользователем и серверами компании.

## UDP — примеры использования

Expand All @@ -105,6 +127,25 @@ UDP использует простую модель передачи, без я
|Метод передачи|Данные считываются как поток байтов; сообщения передаются по границам сегментов|UDP-пакеты с определенными границами; отправляются по отдельности и проверяются на целостность по прибытии|
| Сферы применения|Используется для передачи сообщений электронной почты, HTML-страниц браузеров |Видеоконференции, потоковое вещание, DNS, VoIP, IPTV |

| TCP протокол | UDP протокол |
|---|----|
| Преимущества |
| Возможность установить связь между разными типами устройств | Низкая задержка и минимальная нагрузка на сеть |
| Работа осуществляется независимо от ОС | Доступны трансляция и многоадресная передача данных |
| Поддержка разных протоколов маршрутизации | Возможность управления потоком данных для определения первостепенно важных пакетов для доставки |
| Возможность взаимодействия в сети между организациями | Более точный контроль над ошибками |
| Имеет архитектуру, пригодную к активному масштабированию | Не требует подтверждения доставки |
| Возможность самостоятельного управления | Более компактный формат заголовков (меньше символов) |
| Недостатки |
| Больше символов в заголовке | Невозможность повторного запроса на отправку при потере данных |
| Невозможность использования для многоадресной передачи данных и их трансляции | Сложность контроля ошибок из-за отсутствия механизмов подтверждения и повторной отправки |
| Сложная замена процедуры протокола | Отсутствие уведомлений о состоянии соединения |
| Требует подтверждения каждого отправленного пакета | Высокий риск потери данных |
| Блокирует пакеты с ошибками | |
| Снижение эффективности при высокой загрузке сети | |

Нельзя сказать, что один протокол хуже или лучше другого. Для достижения лучшего качества и скорости передачи данных, а соответственно и работы онлайн-сервисов, протоколы используются в тандеме. Например, для передачи мультимедийных файлов, потокового видео и аудио или стриминга лучше использовать технологию UDP. Тут на первый план выходит его малая скорость задержки. В свою очередь протокол TCP применяют там, где важна гарантия и подтверждение доставки пакетов. Например, для осуществления транзакций.

## Что почитать по теме:
[Отличия TCP- и UDP-протоколов — определяем разницу на примерах (must have)](https://selectel.ru/blog/tcp-vs-udp/)

Expand Down