UDP: когда скорость важнее надёжности

UDP: когда скорость важнее надёжности

TCP гарантирует доставку, но платит за это скоростью: рукопожатие, подтверждения, повторные отправки — всё это требует времени и создаёт дополнительный трафик. Для задач, где задержка критична, а потеря пары пакетов не страшна, придумали UDP (User Datagram Protocol). Это второй основной протокол транспортного уровня.

UDP в двух словах

UDP — это «тонкая обёртка» над IP. Он добавляет к IP-пакету ровно две вещи: номера портов отправителя и получателя, и контрольную сумму. Всё. Никаких подтверждений, никакой нумерации, никаких повторных отправок, никакого рукопожатия.

┌──────────────────────────────┐
│  UDP-заголовок (8 байт!)      │
│  • Порт отправителя (2 байта) │
│  • Порт получателя (2 байта)  │
│  • Длина (2 байта)            │
│  • Контрольная сумма (2 байта)│
├──────────────────────────────┤
│  Данные                       │
└──────────────────────────────┘

Для сравнения: заголовок TCP — минимум 20 байт. UDP — всего 8. Меньше накладных расходов = быстрее передача.

Чем UDP отличается от TCP

TCPUDP
СоединениеТребуется (рукопожатие)Нет (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 (который сложно обновить из-за миллионов роутеров и операционных систем).

Проверь себя

  1. Почему DNS использует UDP, а не TCP?
  2. Может ли UDP-приложение само обеспечить надёжную доставку?
  3. Что случится, если UDP-пакет потеряется по пути?
<details> <summary>Ответы</summary>
  1. DNS-запросы — это короткие сообщения (обычно один пакет). TCP-рукопожатие заняло бы больше времени и трафика, чем сам запрос. UDP даёт ответ за один round-trip.
  2. Да. Приложение может добавить свои порядковые номера, подтверждения и повторные отправки — фактически реализовав мини-TCP поверх UDP. Именно так работают QUIC, WebRTC и многие игровые протоколы.
  3. Ничего. UDP не отслеживает потери. Пакет просто исчезает. Приложение может либо заметить это (если у него своя система подтверждений), либо нет.
</details>

Что унести с урока

  • UDP — «лёгкий» транспортный протокол без гарантий доставки, порядка и контроля перегрузки.
  • Заголовок UDP — всего 8 байт (против 20+ у TCP). Меньше накладных расходов = выше скорость.
  • UDP применяется там, где задержка критичнее надёжности: игры, VoIP, стриминг, DNS.
  • UDP поддерживает broadcast и multicast, TCP — нет.
  • Современные протоколы (QUIC, HTTP/3) строят надёжность поверх UDP, обходя ограничения TCP.

Мы разобрали оба транспортных протокола. Но как компьютер понимает, какому именно приложению предназначены входящие данные? Для этого используются порты. В следующем уроке разберём, что такое порт и сокет.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике