Чем отличаются 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.