Транспортный уровень: TCP vs UDP

На 4-м уровне модели OSI разработчики чаще всего выбирают между двумя протоколами передачи данных: TCP и UDP. От этого выбора зависит архитектура всей системы.

TCP — Transmission Control Protocol

TCP — это логическое соединение с гарантиями доставки.

Плюсы

  1. Гарантированная доставка (ACK): Отправитель помечает каждый пакет номером. Получатель обязан ответить пакетом-подтверждением (Acknowledge). Если ACK не пришел, TCP отправит пакет заново.
  2. Упорядоченность: Пакеты могут идти по интернету разными маршрутами и прийти вразнобой. TCP на стороне получателя сложит их в буфер и выдаст приложению строго в правильном порядке.
  3. Контроль перегрузки (Congestion Control): TCP понимает, когда сеть начинает не вывозить, и автоматически снижает скорость отправки пакетов.

Минусы

  • Высокие накладные расходы: Заголовок TCP весит от 20 до 60 байт (у UDP всего 8). Плюс сеть нагружается тысячами пустых ACK-пакетов.
  • Медленный старт (Handshake): Перед отправкой данных TCP делает тройное рукопожатие (SYN, SYN-ACK, ACK), что добавляет задержку (Latency).
  • Stateful: Сервер обязан выделять память (сокеты, буферы) под каждое активное TCP-соединение, что делает его уязвимым к DDoS-атакам (например, SYN Flood) и усложняет масштабирование.
UDP — User Datagram Protocol

UDP — это протокол по типу выстрелил и забыл. Никакого соединения не устанавливается. Пакеты просто отправляются в сеть.

Плюсы

  • Максимальная скорость: Нет рукопожатий (Handshakes), нет ожидания подтверждений (ACK). Данные льются потоком.
  • Легковесность: Заголовок всего 8 байт.
  • Stateless (Без состояния): Серверу не нужно хранить информацию о подключениях, он легко обрабатывает миллионы пакетов от разных клиентов.

Минусы

  • Нет гарантии доставки (пакет потерялся роутером — ну и ладно).
  • Пакеты могут прийти в случайном порядке или дублироваться.
  • Легко подделать IP-адрес отправителя (IP Spoofing).
Итоговое сравнение и Примеры

В большинстве случаев (базы данных, API, передача файлов) мы используем TCP, так как нам важна надежность и целостность данных.

  • Где используется TCP: Веб-сайты (HTTP/1.1 и HTTP/2), базы данных (PostgreSQL, Redis), SSH, почта (SMTP).
  • Где используется UDP: DNS-запросы (нужен максимально быстрый ответ), онлайн-шутеры (важнее получить новые координаты игрока, чем старые потерянные), видеоконференции (Zoom сбрасывает потерянные аудио-пакеты, предпочитая щелчок тишины дополнительной задержке).

Эволюция HTTP. Исторически видео на YouTube работало через TCP. Но современные видеосервисы (YouTube, Netflix) и современные браузеры массово переходят на протокол HTTP/3 (QUIC). А QUIC построен поверх UDP! Инженеры Google поняли, что легче реализовать собственную логику контроля пакетов поверх быстрого UDP, чем мириться с системными ограничениями и долгими рукопожатиями TCP.