
Связь систем в локальных домашних и корпоративных сетях, а также в публичных сетях, таких как Интернет, по умолчанию основана на семействе интернет-протоколов. Наиболее известным компонентом этого стека протоколов, несомненно, является интернет-протокол (IP), который не только отвечает за адресацию и фрагментацию пакетов данных, но и определяет, как описывается информация об источнике и пункте назначения. Однако передачей данных обычно занимается ориентированный на соединение протокол управления передачей (TCP), поэтому сети часто называют сетями TCP/IP. Поскольку TCP обеспечивает безопасность, но при этом задерживает передачу данных, Дэвид Патрик Рид в 1980 году опубликовал свою концепцию User Datagram Protocol (UDP) в качестве более простой и быстрой альтернативы стандартному протоколу.
Что такое UDP (User Datagram Protocol)?
User Datagram Protocol, или сокращенно UDP, — это протокол, позволяющий отправлять дейтаграммы без соединения в сетях на базе IP. Для достижения желаемых услуг на целевых узлах он использует порты, которые перечислены как один из основных компонентов в заголовке UDP. Как и многие другие сетевые протоколы, UDP принадлежит к семейству интернет-протоколов, где он классифицируется как посредник между сетевым уровнем и прикладным уровнем на транспортном уровне.
UDP является прямой альтернативой более распространенному TCP, хотя эти два протокола отличаются одним моментом: Если передача по TCP происходит только после обязательного трехстороннего рукопожатия (взаимная аутентификация отправителя и адресата, включая установку соединения), то UDP отказывается от этой процедуры, чтобы максимально сократить время передачи.
Используя протокол User Datagram Protocol, приложение может отправлять информацию очень быстро, поскольку не нужно ни устанавливать соединение с адресатом, ни ждать ответа. Однако нет гарантии, что пакеты придут полными и в том же порядке, в котором они были отправлены. Кроме того, протокол не обеспечивает собственной защиты от манипуляций или доступа третьих лиц. Однако поврежденные пакеты могут быть обнаружены с помощью опционально используемой контрольной суммы (обязательной в сочетании с IPv6).
Что такое UDP? UDP (User Datagram Protocol) — это протокол без соединения из семейства интернет-протоколов, работающий на транспортном уровне, который был определен в 1980 году в RFC (Request for Comments) 768. Как экономичная и почти не требующая задержек альтернатива TCP, UDP используется для быстрой передачи пакетов данных в IP-сетях. Типичными областями применения UDP являются DNS-запросы, VPN-соединения и потоковое аудио/видео.
Особенности UDP с первого взгляда
Чтобы понять, как работает передача пакетов с помощью этого протокола, полезно подробнее рассмотреть свойства протокола User Datagram Protocol.
- UDP не имеет соединений: Передача данных через UDP характеризуется тем, что она происходит без существующего соединения между адресатом и получателем. Соответствующие пакеты отправляются на желаемый IP-адрес с указанием целевого порта, при этом компьютер, на котором они находятся, не должен отвечать. Однако если пакеты также должны быть возвращены получателю, заголовок UDP может содержать порт источника.
- UDP использует порты: Как и TCP, UDP использует порты, чтобы пакеты передавались правильным последующим протоколам или нужным приложениям на целевой системе. Порты определяются номерами в соответствии с проверенной схемой, при этом номера от 0 до 1023 присваиваются фиксированным службам.
- UDP обеспечивает быструю связь без задержек: Этот транспортный протокол подходит для быстрой передачи данных благодаря отсутствию установки соединения. Это также обусловлено тем, что потеря отдельных пакетов влияет только на качество передачи. С другой стороны, при TCP-соединениях потерянные пакеты автоматически запрашиваются повторно, что приводит к остановке всего процесса передачи.
- UDP не гарантирует безопасность и целостность данных: Отсутствие взаимной аутентификации между адресатом и получателем обеспечивает превосходную скорость передачи UDP — однако протокол не может гарантировать ни полноту, ни безопасность пакетов данных. Правильная последовательность отправляемых пакетов также не гарантируется. По этой причине службы, использующие UDP, должны предусмотреть собственные меры по исправлению или защите.
Наиболее важной особенностью протокола User Datagram Protocol является его способность передавать пакеты данных без существующего соединения. Получаемые в результате преимущества в скорости передачи данных связаны с высокой восприимчивостью к манипуляциям, некорректируемой потерей пакетов и частично произвольной сортировкой пакетов. По этой причине приложения UDP должны уметь хорошо работать с недостающими и несортированными пакетами данных и/или иметь собственные механизмы коррекции и безопасности.
Как структурирован заголовок UDP?
Как это типично для протоколов, пакеты UDP состоят из заголовка и собственно пользовательских данных. Заголовок UDP содержит всю информацию, необходимую для передачи данных по транспортному протоколу, и делает UDP-пакет идентифицируемым как таковой. Разделенный на два 32-битных блока с четырьмя различными полями данных, он имеет следующую структуру:
|
Биты 0-15 |
Биты 16-31 |
0 |
Порт источника |
Целевой порт |
32 |
Длина |
Контрольная сумма |
Первые 16 битов области заголовка показывают порт источника, через который отправляется соответствующий пакет данных. Эта информация необходима получателю, чтобы иметь возможность ответить на пакет. Поскольку UDP не имеет соединений и между адресатом и приемником не происходит обмена данными, это поле является необязательным. Поэтому здесь обычно задается значение «0».
В следующем поле указывается целевой порт и, соответственно, служба, к которой необходимо получить доступ. В отличие от порта источника, эта информация является обязательной, иначе дейтаграмма не может быть назначена правильно.
К полям порта применяется следующий принцип: Если это приложение на стороне клиента, назначенный номер порта, скорее всего, будет непостоянным. Если порт назначен серверному процессу, номер порта обычно является одним из «известных портов» (стандартизированных портов).
Поле length определяет длину дейтаграммы. Она состоит из длины заголовка (8 байт) и размера пользовательских данных (теоретический максимум: 65 535 байт). При использовании IPv4 фактический предел для пользовательских данных составляет 65 507 байт — после вычитания заголовков IP и UDP. В IPv6 также возможны пакеты (так называемые джумбограммы), превышающие максимум. Согласно RFC 2675, значение поля длины в таком случае устанавливается в «0».
Заголовок UDP завершается контрольной суммой, которая используется для обнаружения ошибок во время передачи. Таким образом, любые манипуляции с передаваемыми данными могут быть обнаружены — однако соответствующие пакеты отбрасываются без нового запроса. Для генерации суммы используются части
- UDP-заголовок,
- пользовательские данные,
- а также так называемого псевдозаголовка (содержит информацию заголовка IP)
включаются.
Контрольная сумма является необязательной в IPv4, но используется большинством приложений по умолчанию. Если вы ее опустите, это поле также примет значение «0». Если UDP используется в сочетании с IPv6, контрольная сумма является обязательной.
Какие приложения используют UDP?
Протокол User Datagram Protocol имеет минималистичную структуру и недостающие механизмы для того, чтобы гарантировать полную, успешную передачу, но не может использоваться как универсальный транспортный протокол. Скорее, он с самого начала был разработан для приложений, которые (пока) не требуют надежной передачи данных. Область применения UDP, следовательно, ограничена, но, тем не менее, подчеркивает огромную ценность протокола, о чем свидетельствуют следующие классы приложений для UDP:
- Приложения «Best-effort delivery»: Классическим сценарием развертывания UDP являются приложения, основанные на «доставке данных в меру наших возможностей». Такие программы, использующие протокол User Datagram Protocol как службу «из лучших побуждений», передают информацию ненадежно, поскольку они привыкли повторять эту информацию. Примерами являются приложения, которые передают измеренные значения или многократно выполняют одни и те же рабочие заказы.
- Легкие приложения: Низкая перегрузка транспортных протоколов обеспечивает оптимальную поддержку приложений, очень простых по конструкции. В сочетании с отсутствием необходимости устанавливать соединение, эти программы выигрывают от особенно высокой производительности при обработке и пересылке пакетов данных в сетях.
- Приложения с собственными механизмами для надежной передачи данных: UDP также может быть интересен для приложений, которые фактически зависят от надежного обмена информацией, но должны иметь собственные механизмы для ответа на пакеты. Преимущество подобных служб в том, что они не привязаны к фиксированным шаблонам, чтобы гарантировать полноту и корректность отправляемых пакетов данных. Вы можете сами решать, как и когда отвечать на неверную или несортированную информацию.
- Многоадресные приложения: В то время как надежные транспортные протоколы, такие как TCP, ограничены использованием сквозной связи, UDP также поддерживает многоадресные соединения IP. Если приложение должно иметь возможность эффективно и быстро отправлять IP-пакеты многим получателям одновременно, UDP создает подходящую основу.
- Приложения реального времени: UDP также подходит в качестве транспортного протокола для служб, работающих в режиме реального времени — таких как передача аудио или видео. Они должны иметь возможность в значительной степени контролировать передачу, прием и воспроизведение потоков данных самостоятельно, что легко возможно при передаче UDP без соединения.
В настоящее время приложения реального времени в основном используют транспортный протокол реального времени (RTP), который основан на UDP и, в отличие от базового протокола, может также обнаруживать потерю пакетов. Последняя спецификация RTP содержится в RFC 3550.