Чем UDP отличается от TCP и когда его вообще стоит использовать?
Постоянно слышу про TCP и UDP, но не до конца понимаю разницу. Знаю, что оба — транспортные протоколы. Но в чём практическая разница и почему для одних задач берут TCP, а для других UDP? Когда UDP реально выигрывает?
2 ответа
UDP (User Datagram Protocol) — это транспортный протокол поверх IP, который отправляет данные пакетами-дейтаграммами без установления соединения и без гарантий доставки. Отправил и забыл.
Ключевое отличие от TCP проще всего показать таблицей:
| Признак | TCP | UDP |
|---|---|---|
| Соединение | устанавливается (рукопожатие SYN/SYN-ACK/ACK) | нет, пакеты летят сразу |
| Гарантия доставки | да, есть подтверждения и переотправка | нет, потерянный пакет просто теряется |
| Порядок пакетов | сохраняется | не гарантируется |
| Контроль перегрузки | есть | нет |
| Накладные расходы | выше (заголовок 20+ байт, ACK'и) | ниже (заголовок всего 8 байт) |
| Скорость/задержка | медленнее | быстрее, минимальная задержка |
Когда брать UDP:
- видео- и аудиозвонки, стриминг (потерять кадр не страшно, ждать переотправку — хуже);
- онлайн-игры (важна свежесть данных, а не их полнота);
- DNS-запросы (один маленький запрос — один ответ);
- VoIP, метрики, телеметрия.
Когда TCP: загрузка файлов, веб-страницы (HTTP), почта, базы данных — везде, где нельзя терять ни байта.
Коротко: TCP — это «гарантированная доставка с подтверждением получателя», UDP — «бросил в сеть и поехали дальше». Если потеря пакета критична — TCP. Если важнее скорость и низкая задержка, а редкие потери терпимы — UDP.
Простая аналогия, которая мне в своё время помогла:
- TCP — это заказное письмо с уведомлением о вручении. Почта проверит, что письмо дошло, и если нет — отправит снова. Дольше, но надёжно.
- UDP — это открытка, которую бросили в почтовый ящик. Дойдёт — хорошо, не дойдёт — никто не узнает. Зато быстро и без лишней возни.
Поэтому Zoom, игры и стримы любят UDP: лучше показать чуть подёрганную картинку сейчас, чем идеальную, но с задержкой в секунду.