← Все вопросы

СреднеJuniorDevOps
В чём основное отличие между протоколами TCP и UDP?
Коротко
TCP — надёжный протокол с установлением соединения: гарантирует доставку,
порядок и контроль ошибок ценой накладных расходов. UDP — простой протокол
без соединения: не гарантирует доставку и порядок, зато быстрее и легче.
TCP и UDP — это два основных протокола транспортного уровня, работающих поверх IP. Главное различие — TCP ориентирован на соединение и надёжность, а UDP не устанавливает соединение и работает по принципу «отправил и забыл».
TCP (RFC 9293)
- С установлением соединения. Перед передачей данных стороны проходят «трёхстороннее рукопожатие» (3-way handshake): SYN → SYN-ACK → ACK, синхронизируя начальные номера последовательности.
- Надёжность и порядок. Каждому байту присваивается sequence number; получатель шлёт подтверждения (ACK), потерянные сегменты переотправляются, а данные собираются в исходном порядке. Целостность проверяется контрольной суммой. RFC 9293 описывает TCP как сервис, предоставляющий «reliable, in-order, byte-stream service».
- Поток байтов, без границ сообщений. TCP передаёт неструктурированный поток байтов: границы сообщений не сохраняются (приложение само нарезает данные на сообщения). UDP, наоборот, ориентирован на сообщения — одна дейтаграмма доставляется как цельная единица целиком или не доставляется вовсе (один sendto = один recvfrom).
- Контроль потока и перегрузки. TCP регулирует скорость отправки, чтобы не перегрузить ни получателя, ни сеть.
- Минусы: больше накладных расходов и задержек, заголовок крупнее — 20–60 байт (20 без опций, расширяется опциями вроде MSS, window scaling, SACK).
UDP (RFC 768)
- Без соединения. Рукопожатия нет, каждая дейтаграмма независима.
- Без гарантий. В RFC прямо сказано: «delivery and duplicate protection are not guaranteed» — потерянные, дублированные или пришедшие не по порядку пакеты UDP не исправляет.
- Фиксированный заголовок — 8 байт, всего четыре поля: Source Port, Destination Port, Length, Checksum.
- Плюсы: низкие задержки и накладные расходы, поддержка широковещания/мультикаста.
Когда что применять
- TCP: веб (HTTP/HTTPS поверх TCP), почта, передача файлов, SSH — везде, где важна целостность данных.
- UDP: DNS-запросы, онлайн-игры, VoIP, видеостриминг — где скорость важнее, чем единичная потеря пакета.
Частые вопросы на собеседовании
- Сам UDP не упорядочивает данные, но приложение может добавить свою логику (так делает, например, QUIC поверх UDP).
- HTTP/3 использует QUIC поверх UDP, тогда как HTTP/1.1 и HTTP/2 — поверх TCP.
- Контрольная сумма в UDP технически опциональна для IPv4 (нулевое значение означает «не вычислялась»), но обязательна для IPv6.