TCP vs UDP: что где использовать

Собираем TCP и UDP в одну сравнительную таблицу и разбираем, как выбирать между ними.

Выбор между TCP и UDP — это выбор между надёжностью и скоростью. Универсального ответа нет: всё зависит от задачи.

Сравнение по пунктам

СвойствоTCPUDP
Соединениеустанавливается (handshake)нет (датаграммы)
Надёжностьгарантирует доставкуне гарантирует
Порядоксохраняетне сохраняет
Подтверждения (ACK)есть, есть повторнет
Контроль потока/перегрузкиестьнет
Размер заголовка20+ байт8 байт
Скорость / задержкавыше задержкаминимальная задержка
Тип передачипоток байтовотдельные сообщения

Что где используется

Протокол / задачаТранспортПочему
HTTP/1.1, HTTP/2TCPвеб-страница должна прийти целиком и в порядке
HTTP/3 (QUIC)UDPскорость + своя надёжность поверх UDP
Email (SMTP), SSH, FTPTCPпотеря данных недопустима
DNS-запросыUDP (в основном)маленький запрос, проще переспросить
Видеозвонки, VoIP, игрыUDPважна свежесть, а не полнота
Загрузка файловTCPкаждый байт обязан дойти

Обратите внимание на интересную закономерность: чем больше задача похожа на «передать документ целиком и без искажений», тем сильнее тянет к TCP; чем ближе она к «показать актуальное состояние прямо сейчас», тем уместнее UDP. Веб исторически почти весь построен на TCP, потому что страница, скрипт или картинка бесполезны, если придут с дырами. Но как только появляется реальное время — голос, видео, позиция игрока — выгоднее жертвовать отдельными пакетами ради низкой задержки. Именно поэтому современный веб постепенно осваивает UDP через HTTP/3: разработчики поняли, что для интерактивных приложений задержка TCP-рукопожатия и его повторных передач стала узким местом.

Как выбирать: три вопроса

  1. Критична ли потеря данных? Если да (файл, деньги, текст) — TCP. Если нет (один кадр видео) — можно UDP.
  2. Важнее свежесть или полнота? Реал-тайм (игра, звонок) — свежесть, UDP. Документ, страница — полнота, TCP.
  3. Запрос-ответ маленький и одиночный? Тогда накладные расходы TCP на соединение неоправданны — подойдёт UDP (как у DNS).

Распространённое заблуждение

«UDP быстрее TCP» — неточно. UDP даёт меньшую задержку на старте (нет рукопожатия) и меньше накладных расходов. Но если поверх UDP приложению нужна надёжность, оно реализует её само — и суммарно может выйти не быстрее. Правильнее говорить: UDP проще и легче, а скорость зависит от задачи.

Итог

  • TCP — надёжность, порядок, контроль; UDP — скорость и простота.
  • TCP: веб, почта, файлы, SSH. UDP: DNS, видео, игры, VoIP, HTTP/3.
  • Выбор сводится к вопросу «что важнее: чтобы дошло всё или чтобы дошло быстро».
  • «UDP быстрее» — упрощение: он легче, но скорость определяется задачей.
Проверьте себя
1. Какое утверждение о TCP и UDP верно?
ATCP гарантирует доставку и порядок, UDP — нет
BUDP гарантирует доставку, TCP — нет
CОба гарантируют доставку
DНи один не гарантирует порядок
2. Какой транспорт обычно используют для DNS-запросов?
ATCP
BUDP
CICMP
DHTTP
3. Почему «UDP всегда быстрее TCP» — некорректное утверждение?
AUDP на самом деле медленнее
BUDP легче и без рукопожатия, но если нужна надёжность поверх него, итоговая скорость зависит от задачи
CTCP не использует сеть
DСкорость одинакова всегда
Поддержать проект