Компьютерные сети
UDP: быстро и без гарантий
Когда вы звоните по Zoom, задержка раздражает больше, чем иногда пропадающий звук. Когда играете в шутер, важна позиция врага прямо сейчас, а не его позиция секунду назад, дошедшая с повтором. UDP - протокол для тех, кто ценит скорость больше, чем гарантии.
- **Видеозвонки:** Zoom, Discord, Teams - все используют UDP для голоса и видео
- **Игры:** позиции игроков, выстрелы, события - UDP с минимальной задержкой
- **DNS:** каждый запрос к сайту начинается с UDP-запроса к DNS-серверу
Предварительные знания
User Datagram Protocol
**UDP** (User Datagram Protocol) - простейший транспортный протокол. Он добавляет к IP только порты и контрольную сумму. Никаких соединений, подтверждений, повторных передач - «отправил и забыл».
UDP не устанавливает соединение перед передачей данных. Нет handshake, нет прощания - просто отправка дейтаграмм. Если пакет потерялся - UDP об этом не узнает и не будет повторять.
**Дейтаграмма** - самодостаточный пакет данных с адресом получателя. В отличие от потока TCP, каждая UDP-дейтаграмма независима от других.
Какое главное отличие UDP от TCP?
Без соединения - connectionless
UDP - **connectionless** протокол. Нет этапа установки соединения, нет состояния сессии. Каждая дейтаграмма отправляется независимо - получатель может и не существовать, UDP всё равно отправит.
**Stateless сервер:** UDP-сервер не хранит информацию о клиентах между запросами. DNS-сервер обрабатывает каждый запрос независимо - идеально для масштабирования.
Что означает «connectionless» для UDP?
Заголовок UDP - 8 байт простоты
UDP-заголовок минималистичен - всего 8 байт (64 бита). Для сравнения, TCP-заголовок - минимум 20 байт. Меньше overhead = больше полезных данных в каждом пакете.
**Checksum в UDP опционален для IPv4** (может быть 0), но обязателен для IPv6. Проверяет целостность данных, но не исправляет ошибки - повреждённый пакет просто отбрасывается.
Какой размер UDP-заголовка?
Когда использовать UDP
UDP идеален там, где **скорость важнее надёжности**, или где приложение само реализует надёжность. Три главных сценария: реальное время, короткие запросы-ответы, broadcast/multicast.
**QUIC - UDP с надёжностью:** Google создал QUIC - протокол поверх UDP с шифрованием, контролем потока и надёжностью. HTTP/3 работает на QUIC. Почему не TCP? QUIC можно обновлять на уровне приложения, не меняя ОС.
UDP ненадёжный, поэтому его не используют для важных данных
UDP широко используется. Надёжность реализуется на уровне приложения, если нужна
QUIC (HTTP/3), WireGuard, игры, видеозвонки - всё на UDP. Приложение само решает, какие данные критичны. Голосовой пакет секундной давности бесполезен - лучше пропустить.
Почему DNS использует UDP, а не TCP?
Ключевые идеи
- **UDP** - простой, быстрый, без гарантий доставки
- **Connectionless** - нет handshake, каждая дейтаграмма независима
- **8 байт заголовка**: src port, dst port, length, checksum
- **Use cases:** realtime (VoIP, игры), запрос-ответ (DNS), broadcast
Связанные темы
UDP vs TCP - два полюса транспортного уровня:
Вопросы для размышления
- Почему видеозвонки используют UDP, а загрузка файлов - TCP?
- Как приложение на UDP узнаёт, что пакет потерялся?
- Почему QUIC построен на UDP, а не расширяет TCP?
Связанные уроки
- net-13-ports — Порты мультиплексируют UDP-потоки
- net-15-tcp-basics — TCP vs UDP - фундаментальный выбор транспорта
- net-18-dns-basics — DNS использует UDP порт 53 для запросов
- net-24-http2-http3 — QUIC строится поверх UDP, заменяя TCP для HTTP/3
- net-36-websocket — WebRTC использует UDP для real-time медиа
- gd-11 — Game networking использует UDP для снижения latency
- rt-01-what-is-realtime