Открыть сервис

UDP

UDP (User Datagram Protocol, протокол пользовательских датаграмм) — это один из основных протоколов транспортного уровня модели OSI и TCP/IP, предназначенный для передачи данных в компьютерных сетях. В отличие от TCP (Transmission Control Protocol), UDP является протоколом без установления соединения и не гарантирует доставки, упорядочивания или защиты от дублирования пакетов. Он обеспечивает минимальную задержку и низкую служебную нагрузку, что делает его пригодным для приложений, где скорость важнее надёжности, например, в потоковом видео, онлайн-играх и DNS-запросах.

История

Протокол UDP был разработан в начале 1980-х годов в рамках проекта ARPANET, предшественника современного Интернета. Его создание было связано с необходимостью иметь лёгкий транспортный протокол для приложений, которые не требовали сложной обработки ошибок и контроля потока, характерных для TCP. Первая спецификация UDP была опубликована в 1980 году в RFC 768 (Request for Comments) под названием «User Datagram Protocol». Автором спецификации считается Дэвид Рид (David Reed) из Массачусетского технологического института. С тех пор протокол остаётся практически неизменным, за исключением незначительных дополнений в области безопасности и расширений, таких как UDP-Lite.

Принцип работы

UDP работает на транспортном уровне и обеспечивает передачу данных между приложениями на хостах. Он использует порты для идентификации конкретных приложений-отправителей и получателей. В отличие от TCP, UDP не устанавливает виртуальное соединение перед передачей данных: отправитель просто формирует датаграмму (пакет) и отправляет её по указанному IP-адресу и порту. Получатель, если он слушает этот порт, принимает датаграмму; если нет — пакет теряется. Протокол не предусматривает механизмов подтверждения получения, повторной отправки потерянных пакетов или контроля перегрузки. Это делает UDP «ненадёжным» в смысле гарантий доставки, но одновременно и очень быстрым.

Формат датаграммы

UDP-датаграмма состоит из заголовка и поля данных. Заголовок имеет фиксированный размер — 8 байт (64 бита) и включает четыре поля:

  • Порт отправителя (2 байта) — номер порта приложения-отправителя (опционально, может быть нулевым).
  • Порт получателя (2 байта) — номер порта приложения-получателя.
  • Длина (2 байта) — общая длина датаграммы (заголовок + данные) в байтах. Минимальное значение — 8 (пустая датаграмма), максимальное — 65535.
  • Контрольная сумма (2 байта) — опциональное поле для проверки целостности данных. В IPv4 его можно не использовать (установить в ноль), но в IPv6 оно обязательно. Контрольная сумма вычисляется по псевдозаголовку, включающему IP-адреса отправителя и получателя, протокол и длину UDP-датаграммы.

Поле данных может содержать от 0 до 65527 байт (с учётом 8-байтового заголовка). Однако на практике максимальный размер UDP-датаграммы ограничен MTU (Maximum Transmission Unit) сетевого уровня, обычно 1500 байт для Ethernet, что приводит к фрагментации на IP-уровне.

Характеристики и особенности

UDP обладает рядом ключевых характеристик, отличающих его от TCP:

  • Без установления соединения: перед передачей не требуется обмен служебными пакетами (тройное рукопожатие), что снижает задержку.
  • Ненадёжность: отсутствие подтверждений, повторных передач и контроля порядка пакетов. Приложения, использующие UDP, должны самостоятельно обрабатывать потери и дублирование.
  • Лёгкость: минимальный заголовок (8 байт против 20 байт у TCP) и отсутствие сложных механизмов управления.
  • Поддержка широковещательной и многоадресной рассылки: UDP позволяет отправлять данные сразу нескольким получателям (broadcast и multicast), что невозможно в TCP.
  • Отсутствие контроля перегрузки: протокол не регулирует скорость отправки в зависимости от состояния сети, что может приводить к перегрузке каналов.

Применение

UDP используется в приложениях и протоколах, где допустима потеря части данных, но критична низкая задержка или требуется простая передача без установления соединения. Основные области применения:

Потоковое мультимедиа

  • VoIP (Voice over IP): протоколы SIP, RTP (Real-time Transport Protocol) часто работают поверх UDP, так как потеря нескольких пакетов голоса менее заметна, чем задержка при повторной отправке.
  • Стриминг видео и аудио: сервисы вроде YouTube, Netflix и Twitch используют UDP для передачи медиаданных в реальном времени (через QUIC или собственные протоколы).
  • Онлайн-игры: многие многопользовательские игры (например, шутеры от первого лица) используют UDP для обновления состояния игрового мира, так как скорость важна для синхронизации.

Сетевые службы

  • DNS (Domain Name System): запросы и ответы DNS обычно передаются через UDP (порт 53), так как они короткие и не требуют установления соединения. Для больших ответов (более 512 байт) используется TCP.
  • DHCP (Dynamic Host Configuration Protocol): протокол автоматической настройки IP-адресов использует UDP для обмена сообщениями между клиентом и сервером.
  • SNMP (Simple Network Management Protocol): управление сетевыми устройствами часто осуществляется через UDP.
  • TFTP (Trivial File Transfer Protocol): упрощённый протокол передачи файлов, работающий поверх UDP, используется для загрузки конфигураций на сетевое оборудование.

Протоколы реального времени

  • NTP (Network Time Protocol): синхронизация времени в сети использует UDP для обмена временными метками.
  • RTP/RTCP: протоколы передачи аудио и видео в реальном времени, а также управления качеством передачи.
  • QUIC (Quick UDP Internet Connections): современный протокол, разработанный Google, работающий поверх UDP и обеспечивающий надёжность и безопасность, аналогичные TCP, но с меньшей задержкой. Используется в HTTP/3.

Сравнение с TCP

ХарактеристикаUDPTCP
Тип соединенияБез установления соединенияОриентирован на соединение
НадёжностьНенадёжный (потери возможны)Надёжный (гарантия доставки)
УпорядочиваниеНе гарантируетсяГарантируется
Контроль перегрузкиОтсутствуетЕсть (механизмы скользящего окна)
Заголовок8 байт20-60 байт
СкоростьВысокаяНиже из-за служебных операций
Поддержка multicastДаНет
Типичные приложенияDNS, VoIP, игры, стримингHTTP, FTP, SMTP, SSH

Безопасность

UDP не имеет встроенных механизмов безопасности, таких как шифрование или аутентификация. Это делает его уязвимым для ряда атак:

  • IP-спуфинг: подмена IP-адреса отправителя, так как UDP не проверяет подлинность источника.
  • UDP-флуд (UDP flood): разновидность DDoS-атаки, при которой злоумышленник отправляет большое количество UDP-пакетов на случайные порты жертвы, перегружая её ресурсы.
  • Амплификация (amplification): использование открытых UDP-серверов (например, DNS или NTP) для усиления атаки: маленький запрос вызывает большой ответ, который направляется на жертву.

Для защиты используются межсетевые экраны (фаерволы), фильтрация трафика, протоколы шифрования на прикладном уровне (например, DTLS — Datagram Transport Layer Security) и системы обнаружения вторжений.

Расширения и вариации

  • UDP-Lite (Lightweight UDP): модификация UDP, описанная в RFC 3828, позволяющая передавать датаграммы с частичной защитой контрольной суммой. Это полезно для приложений, где незначительные ошибки в данных (например, в видео) допустимы, но критичны ошибки в заголовке.
  • UDP over IPv6: в IPv6 использование UDP-контрольной суммы обязательно, в отличие от IPv4, где она опциональна.
  • UDP hole punching: техника, используемая в NAT (Network Address Translation) для установления прямого соединения между двумя хостами за разными маршрутизаторами, часто применяемая в P2P-сетях и онлайн-играх.

Источники

  • Postel, J. (1980). RFC 768: User Datagram Protocol. Internet Engineering Task Force.
  • Stevens, W. R. (1994). TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley.
  • Kurose, J. F., & Ross, K. W. (2017). Computer Networking: A Top-Down Approach (7th ed.). Pearson.
  • RFC 3828: The Lightweight User Datagram Protocol (UDP-Lite).
  • RFC 8200: Internet Protocol, Version 6 (IPv6) Specification.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →