TCP vs UDP: что где использовать
Собираем TCP и UDP в одну сравнительную таблицу и разбираем, как выбирать между ними.
Выбор между TCP и UDP — это выбор между надёжностью и скоростью. Универсального ответа нет: всё зависит от задачи.
Сравнение по пунктам
| Свойство | TCP | UDP |
| Соединение | устанавливается (handshake) | нет (датаграммы) |
| Надёжность | гарантирует доставку | не гарантирует |
| Порядок | сохраняет | не сохраняет |
| Подтверждения (ACK) | есть, есть повтор | нет |
| Контроль потока/перегрузки | есть | нет |
| Размер заголовка | 20+ байт | 8 байт |
| Скорость / задержка | выше задержка | минимальная задержка |
| Тип передачи | поток байтов | отдельные сообщения |
Что где используется
| Протокол / задача | Транспорт | Почему |
| HTTP/1.1, HTTP/2 | TCP | веб-страница должна прийти целиком и в порядке |
| HTTP/3 (QUIC) | UDP | скорость + своя надёжность поверх UDP |
| Email (SMTP), SSH, FTP | TCP | потеря данных недопустима |
| DNS-запросы | UDP (в основном) | маленький запрос, проще переспросить |
| Видеозвонки, VoIP, игры | UDP | важна свежесть, а не полнота |
| Загрузка файлов | TCP | каждый байт обязан дойти |
Обратите внимание на интересную закономерность: чем больше задача похожа на «передать документ целиком и без искажений», тем сильнее тянет к TCP; чем ближе она к «показать актуальное состояние прямо сейчас», тем уместнее UDP. Веб исторически почти весь построен на TCP, потому что страница, скрипт или картинка бесполезны, если придут с дырами. Но как только появляется реальное время — голос, видео, позиция игрока — выгоднее жертвовать отдельными пакетами ради низкой задержки. Именно поэтому современный веб постепенно осваивает UDP через HTTP/3: разработчики поняли, что для интерактивных приложений задержка TCP-рукопожатия и его повторных передач стала узким местом.
Как выбирать: три вопроса
- Критична ли потеря данных? Если да (файл, деньги, текст) — TCP. Если нет (один кадр видео) — можно UDP.
- Важнее свежесть или полнота? Реал-тайм (игра, звонок) — свежесть, UDP. Документ, страница — полнота, TCP.
- Запрос-ответ маленький и одиночный? Тогда накладные расходы TCP на соединение неоправданны — подойдёт UDP (как у DNS).
Распространённое заблуждение
«UDP быстрее TCP» — неточно. UDP даёт меньшую задержку на старте (нет рукопожатия) и меньше накладных расходов. Но если поверх UDP приложению нужна надёжность, оно реализует её само — и суммарно может выйти не быстрее. Правильнее говорить: UDP проще и легче, а скорость зависит от задачи.
Итог
- TCP — надёжность, порядок, контроль; UDP — скорость и простота.
- TCP: веб, почта, файлы, SSH. UDP: DNS, видео, игры, VoIP, HTTP/3.
- Выбор сводится к вопросу «что важнее: чтобы дошло всё или чтобы дошло быстро».
- «UDP быстрее» — упрощение: он легче, но скорость определяется задачей.