Ответ
UDP (User Datagram Protocol) — это простой, ориентированный на дейтаграммы протокол транспортного уровня. В отличие от TCP, он не устанавливает соединение, не гарантирует доставку, порядок пакетов и не контролирует перегрузку сети. Это делает его очень быстрым и с минимальными накладными расходами.
Характеристики с точки зрения DevOps/инфраструктуры:
- Заголовок: Всего 8 байт (порты источника/назначения, длина, контрольная сумма).
- Статус: "Отправил и забыл". Приложение само должно обрабатывать потерю, дублирование и порядок пакетов.
- Нет handshake: Нет аналога
SYN,SYN-ACK,ACKкак в TCP. - Нет контроля перегрузки: Может "затопить" сеть, если не реализован на уровне приложения.
Типичные сценарии использования в инфраструктуре:
- DNS-запросы: Быстрота критична, потерянный запрос просто повторяется.
- Трафик мониторинга и телеметрии:
- Syslog: Часто отправляется по UDP для минимального влияния на приложение.
- StatsD: Сервер для сбора метрик, изначально работающий по UDP.
- SNMP: Протокол управления сетевыми устройствами.
- Стриминг мультимедиа и VoIP: Небольшая потеря пакетов предпочтительнее задержек (латенси).
- Онлайн-игры: Состояние игры обновляется очень часто, актуальность данных важнее их полноты.
- Обслуживание (Bootstrapping): DHCP и TFTP используют UDP.
Пример отправки UDP-пакета с помощью netcat (полезно для отладки):
# Отправка строки на сервер 192.168.1.10 порт 514 (syslog)
echo "<133>Apr 11 11:22:33 myapp: Test log message" | nc -u -w1 192.168.1.10 514
# Прослушивание UDP-порта 5000
nc -u -l 5000
Важно для DevOps: При настройке брандмауэров (Security Groups, Network Policies в K8s, iptables) необходимо явно разрешать UDP-трафик на нужные порты, так как правила для TCP и UDP раздельны. Например, разрешение DNS (порт 53) должно включать и TCP, и UDP.