Ответ
UDP (User Datagram Protocol) — это протокол транспортного уровня без установки соединения и гарантий доставки. Его ключевое преимущество — минимальная задержка, что критично в сценариях, где скорость важнее надежности.
Типичные примеры использования в инфраструктуре и приложениях:
- DNS (Domain Name System) — практически все DNS-запросы используют UDP. Запрос и ответ умещаются в один пакет, а скорость разрешения имен критична для пользовательского опыта.
- Трансляция времени (NTP — Network Time Protocol) — протокол синхронизации часов в сети использует UDP для обмена небольшими пакетами с метками времени. Потеря отдельных пакетов некритична, алгоритм учитывает несколько источников.
- Трафик реального времени:
- Голосовая связь (VoIP) и видеоконференции — потеря нескольких пакетов приводит к кратковременным помехам, что предпочтительнее большой задержки (лагов), которая возникает при повторной отправке в TCP.
- Онлайн-игры (Multiplayer) — состояние игрового мира (позиция игрока) постоянно меняется, и актуальные данные важнее, чем гарантированная доставка всех предыдущих состояний.
- Широковещательная и multicast-рассылка. Например, протоколы обнаружения служб (как mDNS/Bonjour) или потоковое вещание видео внутри сети.
- Мониторинг и телеметрия. Системы, которые отправляют огромное количество мелких метрик (например, StatsD), часто используют UDP, чтобы не создавать нагрузку от установки TCP-соединений и не блокироваться при проблемах на стороне сервера-получателя.
Пример отправки метрики через UDP с использованием Netcat (nc):
# Отправка простой строки на сервер мониторинга (например, StatsD) на порт 8125
echo "app.login.count:1|c" | nc -u -w1 monitoring-server 8125
Почему UDP, а не TCP, в этих случаях? Потому что накладные расходы на установку соединения (three-way handshake), гарантированную доставку, упорядочивание пакетов и контроль перегрузки создают неприемлемую задержку. Приложения, использующие UDP, обычно реализуют свою собственную, упрощенную логику надежности на уровне приложения, если это необходимо.