UDP: когда скорость важнее надёжности
UDP: когда скорость важнее надёжности
TCP гарантирует доставку, но платит за это скоростью: рукопожатие, подтверждения, повторные отправки — всё это требует времени и создаёт дополнительный трафик. Для задач, где задержка критична, а потеря пары пакетов не страшна, придумали UDP (User Datagram Protocol). Это второй основной протокол транспортного уровня.
UDP в двух словах
UDP — это «тонкая обёртка» над IP. Он добавляет к IP-пакету ровно две вещи: номера портов отправителя и получателя, и контрольную сумму. Всё. Никаких подтверждений, никакой нумерации, никаких повторных отправок, никакого рукопожатия.
┌──────────────────────────────┐
│ UDP-заголовок (8 байт!) │
│ • Порт отправителя (2 байта) │
│ • Порт получателя (2 байта) │
│ • Длина (2 байта) │
│ • Контрольная сумма (2 байта)│
├──────────────────────────────┤
│ Данные │
└──────────────────────────────┘
Для сравнения: заголовок TCP — минимум 20 байт. UDP — всего 8. Меньше накладных расходов = быстрее передача.
Чем UDP отличается от TCP
| TCP | UDP | |
|---|---|---|
| Соединение | Требуется (рукопожатие) | Нет (fire-and-forget) |
| Доставка | Гарантирована | Не гарантирована |
| Порядок | Гарантирован | Не гарантирован |
| Скорость | Ниже (накладные расходы) | Выше (минимальный заголовок) |
| Контроль перегрузки | Да | Нет |
| Вещание | Только точка-точка | Возможен broadcast/multicast |
| Подходит для | Веб, почта, файлы | Игры, стриминг, VoIP, DNS |
Где используется UDP
Онлайн-игры. В шутере важно знать текущую позицию игрока прямо сейчас, а не ту, что была 200 мс назад. Если пакет с координатами потерялся — не страшно, следующий придёт с актуальными данными.
Видеозвонки и VoIP. Пара потерянных голосовых пакетов — это лёгкое искажение на долю секунды. Переспрашивать и ждать повторной отправки было бы хуже: разговор бы «заикался».
DNS-запросы. Запрос к DNS-серверу — короткий пакет. Делать ради него TCP-рукопожатие из трёх шагов — нерационально. UDP: один пакет туда, один — обратно.
Потоковое видео. Буфер на пару секунд поглощает потери пакетов. Важнее непрерывность потока, чем идеальная доставка каждого кадра.
DHCP. Когда устройство подключается к сети и запрашивает IP-адрес, оно ещё не имеет своего IP и не может установить TCP-соединение.
Broadcast и multicast: то, чего TCP не умеет
UDP позволяет отправлять пакеты всем устройствам в сети (broadcast) или группе устройств (multicast). TCP так не может — ему нужно устанавливать соединение с каждым получателем индивидуально. Именно поэтому потоковое IP-телевидение, сетевое обнаружение устройств и многие IoT-протоколы работают на UDP.
Что будет, если не хватит UDP
Иногда приложению нужно и быстро, и надёжно. Для этого существуют протоколы, реализующие собственные механизмы надёжности поверх UDP:
- QUIC — протокол от Google, на котором работает HTTP/3. Берёт лучшее от TCP и UDP: быстрое рукопожатие, мультиплексирование потоков, встроенное шифрование.
- WebRTC — протокол для видеозвонков в браузере. Использует свой контроль перегрузки поверх UDP.
Эти протоколы показывают тенденцию: будущее интернета — за кастомными решениями поверх UDP, а не за добавлением новых фич в TCP (который сложно обновить из-за миллионов роутеров и операционных систем).
Проверь себя
- Почему DNS использует UDP, а не TCP?
- Может ли UDP-приложение само обеспечить надёжную доставку?
- Что случится, если UDP-пакет потеряется по пути?
- DNS-запросы — это короткие сообщения (обычно один пакет). TCP-рукопожатие заняло бы больше времени и трафика, чем сам запрос. UDP даёт ответ за один round-trip.
- Да. Приложение может добавить свои порядковые номера, подтверждения и повторные отправки — фактически реализовав мини-TCP поверх UDP. Именно так работают QUIC, WebRTC и многие игровые протоколы.
- Ничего. UDP не отслеживает потери. Пакет просто исчезает. Приложение может либо заметить это (если у него своя система подтверждений), либо нет.
Что унести с урока
- UDP — «лёгкий» транспортный протокол без гарантий доставки, порядка и контроля перегрузки.
- Заголовок UDP — всего 8 байт (против 20+ у TCP). Меньше накладных расходов = выше скорость.
- UDP применяется там, где задержка критичнее надёжности: игры, VoIP, стриминг, DNS.
- UDP поддерживает broadcast и multicast, TCP — нет.
- Современные протоколы (QUIC, HTTP/3) строят надёжность поверх UDP, обходя ограничения TCP.
Мы разобрали оба транспортных протокола. Но как компьютер понимает, какому именно приложению предназначены входящие данные? Для этого используются порты. В следующем уроке разберём, что такое порт и сокет.