Gymterview
junior

Чем отличаются TCP и UDP?

TCP (Transmission Control Protocol) — протокол транспортного уровня (L4), обеспечивающий надёжную, упорядоченную доставку потока байтов с установлением соединения.

UDP (User Datagram Protocol) — протокол транспортного уровня (L4), обеспечивающий быструю доставку дейтаграмм без установления соединения и без гарантий доставки.

Аналогия из жизни: TCP — это заказное письмо с уведомлением о вручении: вы точно знаете, что оно дошло, и получите подтверждение. UDP — это открытка, брошенная в почтовый ящик: быстро и дёшево, но без гарантий, что дойдёт.

Сравнение TCP и UDP

Свойство TCP UDP
Тип соединения Ориентирован на соединение (connection-oriented) Без установки соединения (connectionless)
Надёжность Гарантированная доставка, повторная отправка при потере Нет гарантии доставки
Порядок данных Гарантирован (данные приходят в том же порядке) Не гарантирован
Контроль потока Есть (flow control, sliding window) Нет
Контроль перегрузки Есть (congestion control) Нет
Размер заголовка 20–60 байт 8 байт
Скорость Ниже (из-за накладных расходов) Выше
Тип данных Поток байтов (stream), без границ сообщений Дейтаграммы (datagram), с границами сообщений
Дуплексность Full-duplex Full-duplex

Когда использовать TCP

  • Нужна надёжная доставка без потерь: HTTP/HTTPS, SSH, FTP, SMTP, базы данных (JDBC)
  • Важен порядок данных
  • Можно позволить некоторую задержку ради надёжности

Когда использовать UDP

  • Важна скорость и минимальная задержка: онлайн-игры, голосовая/видеосвязь (VoIP, WebRTC), видеостриминг
  • Потеря отдельных пакетов допустима (лучше пропустить кадр видео, чем ждать повторной передачи)
  • DNS-запросы (обычно UDP, порт 53)
  • DHCP (автоматическое получение IP-адреса)

Механизмы надёжности TCP

  • Sequence numbers — каждый байт в потоке нумеруется, получатель собирает данные в правильном порядке
  • ACK (Acknowledgment) — получатель подтверждает получение данных
  • Retransmission — если ACK не получен за определённый таймаут (RTO), данные отправляются повторно
  • Checksum — контрольная сумма для обнаружения повреждённых данных
  • Flow control (Sliding Window) — получатель сообщает размер окна (сколько данных готов принять), чтобы отправитель не перегрузил его
  • Congestion control — алгоритмы (Slow Start, Congestion Avoidance, Fast Retransmit, Fast Recovery) для предотвращения перегрузки сети

Структура заголовков

Пример
TCP-заголовок (20–60 байт):
┌────────────┬────────────┬──────────────────┬──────────────────┐
│ Src Port   │ Dst Port   │ Sequence Number  │ Ack Number       │
├────────────┴────────────┼──────────────────┼──────────────────┤
│ Data Offset│ Flags      │ Window Size      │ Checksum / Urgent│
└─────────────────────────┴──────────────────┴──────────────────┘

UDP-заголовок (8 байт):
┌────────────┬────────────┬──────────────────┬──────────────────┐
│ Src Port   │ Dst Port   │ Length           │ Checksum         │
└────────────┴────────────┴──────────────────┴──────────────────┘

Вывод

TCP и UDP — два фундаментальных транспортных протокола. TCP обеспечивает надёжность ценой производительности, UDP — скорость ценой надёжности. Выбор зависит от требований приложения: для веб-серверов, баз данных и файловых передач — TCP; для реального времени (видео, игры, DNS) — UDP.

На собеседовании: это один из самых частых вопросов. Важно не просто перечислить отличия, но объяснить почему TCP медленнее (handshake, ACK, retransmission) и в каких сценариях UDP предпочтительнее. Бонус — упомянуть QUIC (HTTP/3), который сочетает надёжность TCP с преимуществами UDP.