Протокол UDP
UDP (Universal Datagram Protocol) – универсальный протокол передачи данных, протокол пользовательских датаграмм, более облегченный транспортный протокол, чем TCP.
Первая и последняя версия UDP – RFC 768 (User Datagram Protocol J. Postel Aug). Протокол был разработан Дэвидом П. Ридом в 1980 году.
Основные отличия от TCP:
- Отсутствует соединение между модулями UDP.
- Не разбивает сообщение для передачи
- При потере пакета запрос для повторной передачи не посылается
UDP не использует подтверждения прихода сообщений, не упорядочивает приходящие сообщения и не обеспечивает обратной связи для управления скоростью передачи информации между машинами. Поэтому, UDP-сообщения могут быть потеряны, размножены или приходить не по порядку. Кроме того, пакеты могут приходить раньше, чем получатель сможет обработать их.
UDP обеспечивает ненадежную службу без установления соединения и использует IP для транспортировки сообщений между машинами.
UDP используется если не требуется гарантированная доставка пакетов, например, для потокового видео и аудио, DNS (т. к. данные небольших размеров). Если проверка контрольной суммы выявила ошибку или если процесса, подключенного к требуемому порту, не существует, пакет игнорируется (уничтожается). Если пакеты поступают быстрее, чем модуль UDP успевает их обрабатывать, то поступающие пакеты также игнорируются.
Каждое UDP-сообщение называется пользовательской датагpаммой (или дейтаграммой). Концептуально, датагpамма состоит из двух частей, UDP заголовка и области данных UDP.
Заголовок состоит из четырех 16-битных полей, которые определяют порт, из которого было послано сообщение, порт, в который сообщение приходит, длину сообщения и контрольную сумму UDP.
Структура дейтаграммы UDP. Слова по 32 бита.
Поля «Порт отправителя» и «Порт получателя» содержат 16-битные номера портов, используемые для разделения сообщений, получения которых ожидают процессы.
Поле «Длина сообщения UDP» содержит число октетов в датаграмме, включая заголовок UDP и данные. Таким образом, минимальное значение поля LENGTH — восемь, то есть только длина заголовка.
Контрольная сумма UDP необязательна, значение «0» в поле «Контрольная сумма» означает, что сумма не вычисляется. Разработчики решили сделать контрольную сумму необязательной, чтобы уменьшить объём вычислений при использовании UDP в высоконадежной локальной сети.
Не все поля UDP-пакета обязательно должны быть заполнены. Если посылаемая дейтаграмма не предполагает ответа, то на месте адреса отправителя могут помещаться нули.
Прикладные программы, использующие UDP, несут полную ответственность за проблемы надежности, включая потерю сообщений, дублирование, задержку, неупорядоченность или потерю связи.