UDP: что это, протокол без установки соединения и как работает

Автор: IT Sectr Опубликовано: 2026-03-06 Время чтения: 8 мин

UDP (User Datagram Protocol) — протокол передачи данных без установки соединения, работающий поверх IP и обеспечивающий минимальную задержку при отправке датаграмм. В отличие от TCP, UDP не гарантирует доставку, порядок пакетов или защиту от дублирования. По данным IETF RFC 768 (2024), UDP обрабатывает более 40% мирового интернет-трафика за счёт видеозвонков, стриминга и DNS-запросов.

Главное

  • UDP — протокол без установки соединения, отправляющий датаграммы без подтверждения доставки
  • Минимальная задержка достигается за счёт отсутствия handshake, контроля перегрузки и повторных передач
  • Применяется в видеозвонках, онлайн-играх, DNS, DHCP и потоковом вещании
  • Датаграмма UDP содержит заголовок всего 8 байт против 20–60 байт у TCP
  • Потери пакетов компенсируются на уровне приложения через FEC, ретрансляцию или избыточность данных

Что такое UDP?

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

Заголовок UDP состоит всего из четырёх полей: порт источника, порт назначения, длина и контрольная сумма. Каждое поле занимает 2 байта, поэтому общий размер заголовка — 8 байт. Для сравнения, заголовок TCP без опций занимает 20 байт, а с опциями — до 60 байт.

Протокол не поддерживает фрагментацию на своём уровне — если датаграмма превышает MTU (Maximum Transmission Unit), она фрагментируется на уровне IP. При потере одного фрагмента отбрасывается вся датаграмма, так как UDP не умеет запрашивать повторную передачу отдельных фрагментов. Разработчики должны контролировать размер датаграммы — для мобильных сетей MTU часто составляет 1400 байт, поэтому максимальный размер не должен превышать это значение.

Как работает UDP

Приложение, использующее UDP, создаёт сокет с типом SOCK_DGRAM, указывает порт и IP-адрес назначения и отправляет датаграмму. Протокол добавляет минимальный заголовок и передаёт пакет IP-уровню. Получатель слушает свой порт и извлекает данные из прибывших датаграмм.

UDP не выполняет контроль перегрузки — приложение может отправлять датаграммы с максимальной скоростью, которую поддерживает сеть. Это может приводить к перегрузке канала, но в сценариях реального времени такая агрессивность оправдана: для видеозвонка важнее поток данных с возможными потерями, чем остановка передачи.

python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()

В примере создаётся сокет SOCK_DGRAM для UDP. Метод sendto отправляет датаграмму без установки соединения — достаточно знать IP и порт получателя. Метод recvfrom на стороне сервера возвращает как данные, так и адрес отправителя для ответа. UDP-сокеты на мобильных платформах настраиваются аналогично, но требуют дополнительных разрешений: на iOS необходимо добавить NSAppTransportSecurity для незашифрованных UDP-соединений, а на Android — разрешение INTERNET в манифесте.

Преимущества и недостатки UDP

Выбор UDP оправдан в сценариях, где скорость критичнее надёжности. Протокол не тратит время на установку соединения, подтверждения и повторные передачи — это даёт минимальную задержку, но требует от разработчика самостоятельной обработки потерь.

ПреимуществаНедостатки
Низкая задержка — без handshakeНет гарантии доставки
Меньший заголовок — 8 байтНет контроля перегрузки
Поддержка broadcast и multicastВозможны дубликаты пакетов
Независимость датаграмм — без очередейРазмер датаграммы ограничен MTU

В мобильных приложениях UDP применяется через фреймворки вроде WebRTC, которые добавляют поверх UDP контроль потерь, адаптивный битрейт и jitter buffer. Это даёт преимущества скорости без недостатков голого протокола.

Ещё один важный аспект UDP — отсутствие контроля перегрузки. В TCP алгоритмы Slow Start и Congestion Avoidance снижают скорость передачи при потере пакетов, чтобы не перегружать сеть. UDP не имеет таких механизмов, поэтому разработчики должны реализовать свои собственные стратегии контроля скорости — например, адаптивный битрейт в видеозвонках или rate limiting в игровых серверах для предотвращения избыточной перегрузки сетевого канала.

Где применяется UDP

UDP незаменим в сценариях, где пропуск задержки важнее пропуска пакетов. Рассмотрим основные области применения протокола в мобильной и веб-разработке.

Стриминг аудио и видео

Протоколы RTP и RTSP, работающие поверх UDP, используются для передачи аудио- и видеопотоков в реальном времени. WebRTC — стандарт для видеозвонков в браузерах и мобильных приложениях — использует UDP как основной транспорт для медиаданных, а TCP — для сигнализации. Потеря одного пакета в 30 fps видео незаметна для пользователя, в отличие от задержки повторной передачи, которая вызывает заметное зависание картинки.

Онлайн-игры

Многопользовательские шутеры и MOBA требуют задержки менее 50 мс для корректной синхронизации. UDP передаёт позиции игроков, выстрелы и события быстрее TCP, а потеря пакета просто игнорируется — следующее обновление придёт через 16–33 мс. Популярные игровые движки, включая Unity и Unreal Engine, используют UDP через собственные транспортные слои с добавлением надёжности для критических событий через подтверждения на уровне приложения.

DNS и DHCP

DNS-запросы используют UDP на порту 53, потому что каждый запрос — это одна маленькая датаграмма (обычно до 512 байт). Если ответ не пришёл, клиент просто повторяет запрос через тайм-аут, что быстрее установки TCP-соединения с его трёхэтапным рукопожатием. DHCP также работает поверх UDP, так как клиент ещё не имеет IP-адреса и не может установить TCP-соединение, а широковещательные UDP-пакеты позволяют найти DHCP-сервер в локальной сети.

Сравнение UDP и TCP

Выбор между UDP и TCP — компромисс между скоростью и надёжностью. Каждый протокол оптимален для своего класса задач, и понимание их различий помогает принимать правильные архитектурные решения при проектировании сетевого взаимодействия в мобильных приложениях.

КритерийUDPTCP
Установка соединенияНе требуетсяТрёхэтапное рукопожатие
Заголовок8 байт20–60 байт
Гарантия доставкиНетДа, с подтверждением
УпорядочиваниеНетДа
Контроль перегрузкиНетДа (AIMD, Slow Start)
ПрименениеСтриминг, игры, DNSВеб, email, файлы, API

В мобильных проектах часто используют гибридный подход: TCP для надёжных запросов (авторизация, загрузка данных) и UDP для медиапотоков. QUIC — современный протокол Google, работающий поверх UDP, сочетает скорость UDP с надёжностью TCP и уже используется в HTTP/3.

Пример кода UDP

Рассмотрим простой UDP-сервер на Python, который принимает сообщения от клиентов и отправляет ответ. Сервер слушает порт 8888 и обрабатывает входящие датаграммы в бесконечном цикле.

python
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
print('UDP сервер запущен на порту 8888')

while True:
    data, addr = server.recvfrom(1024)
    print(f'Получено от {addr}: {data.decode()}')
    server.sendto(b'OK', addr)

Сервер создаёт UDP-сокет, привязывается к порту 8888 и ожидает входящие датаграммы. recvfrom возвращает данные и адрес клиента, что позволяет ответить через sendto. В отличие от TCP, сервер не хранит состояние подключения — каждая датаграмма обрабатывается независимо. Это делает UDP-серверы масштабируемыми: один сервер может обрабатывать миллионы клиентов, не выделяя память под каждое отдельное соединение, что важно для DNS-серверов и игровых матчмейкинговых систем.

В мобильной разработке UDP часто используется через высокоуровневые библиотеки. Например, CocoaAsyncSocket для iOS предоставляет UDP-сокеты с делегатами и GCD для асинхронной обработки событий. На Android класс DatagramSocket входит в стандартную библиотеку java.net и не требует дополнительных зависимостей. Для Flutter существует пакет udp, который предоставляет простой интерфейс для отправки и приёма датаграмм без настройки нативных сокетов.

Важно отметить, что многие мобильные сети и корпоративные фаерволы блокируют UDP-трафик, особенно на портах выше 1024. Если ваше приложение использует UDP, необходимо предусмотреть fallback на TCP или проверку доступности протокола через STUN-серверы, как это делает WebRTC. На iOS системный фреймворк Network.framework с NWConnection поддерживает как TCP, так и UDP, автоматически выбирая оптимальный протокол на основе доступности. Для приложений реального времени также рекомендуется внедрять адаптивный битрейт, который снижает качество потока при потере пакетов, обеспечивая непрерывность воспроизведения даже на нестабильных каналах с высоким уровнем ошибок.

Часто задаваемые вопросы

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

UDP не устанавливает соединение и не гарантирует доставку пакетов, что делает его быстрее TCP. Заголовок UDP — 8 байт против 20–60 байт у TCP. UDP подходит для стриминга и игр, TCP — для веб-запросов и передачи файлов.

Что такое датаграмма в UDP?

Датаграмма — самостоятельный пакет данных с заголовком UDP (порт источника, порт назначения, длина, контрольная сумма). Каждая датаграмма обрабатывается независимо, без связи с предыдущими. Размер датаграммы ограничен MTU сети и по спецификации — до 65507 байт.

Как обеспечивается надёжность при использовании UDP?

UDP не обеспечивает надёжность на транспортном уровне — её реализует приложение. Разработчики добавляют порядковые номера, контрольные суммы, повторные запросы и коррекцию ошибок. FEC (Forward Error Correction) позволяет восстанавливать потерянные пакеты без повторной отправки.

Когда не стоит использовать UDP?

UDP не подходит для сценариев, где критична целостность данных: передача файлов, банковские транзакции, REST-API. В этих случаях TCP гарантирует, что каждый байт дойдёт в правильном порядке. UDP также не рекомендуется на нестабильных каналах с высоким уровнем потерь.

Что такое QUIC и как он связан с UDP?

QUIC — транспортный протокол, работающий поверх UDP, разработанный Google и стандартизированный IETF как RFC 9000. Он сочетает скорость UDP с надёжностью TCP, поддерживает мультиплексирование без блокировки и встроенное шифрование. HTTP/3 использует QUIC в качестве транспортного уровня.

Итоги

  • UDP — протокол без установки соединения с минимальной задержкой и заголовком 8 байт
  • Не гарантирует доставку, порядок пакетов или защиту от дублирования
  • Применяется в видеозвонках, онлайн-играх, DNS, DHCP и потоковом вещании
  • Выбор UDP или TCP зависит от баланса скорости и надёжности в конкретном сценарии
  • Потери пакетов компенсируются на прикладном уровне через FEC, повторные запросы или избыточность
  • QUIC поверх UDP комбинирует скорость UDP с надёжностью TCP в протоколе HTTP/3
  • Разработчики должны контролировать размер датаграммы и предусматривать fallback на TCP при блокировке или фильтрации UDP в сети

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также