Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

UDP-Lite ( Облегченный протокол пользовательских дейтаграмм , [1] иногда UDP - Lite ) является протоколом без установления соединения , что позволяет потенциально поврежденные данные полезной нагрузки для доставки к приложению , а не отбрасываются принимающей станцией. Это полезно, поскольку позволяет принимать решения о целостности данных на уровне приложения (приложение или кодек ), где понимается значение битов. UDP-Lite описан в RFC 3828. [1]

Протокол [ править ]

UDP-Lite основан на протоколе дейтаграмм пользователя (UDP), но в отличие от UDP, где либо весь пакет, либо ни один из пакетов защищен контрольной суммой, UDP-Lite позволяет использовать частичные контрольные суммы, которые покрывают только часть дейтаграммы (произвольное количество октеты в начале пакета), и поэтому доставляет пакеты, которые были частично повреждены. Он разработан для мультимедийных протоколов, таких как передача голоса по IP (VoIP) или потоковое видео, в которых получение пакета с поврежденной полезной нагрузкой лучше, чем получение пакета вообще. Для обычного UDP и протокола управления передачей(TCP), единственный бит с ошибкой приведет к «неправильной» контрольной сумме, что означает, что весь пакет должен быть отброшен: таким образом, битовые ошибки «повышаются» до ошибок всего пакета, даже если повреждение данных незначительно. Для вычисления контрольной суммы UDP-Lite использует тот же алгоритм контрольной суммы, что и для UDP (и TCP). [2]

Современные мультимедийные кодеки, такие как G.718 и Adaptive Multi-Rate (AMR) для аудио и H.264 и MPEG-4для видео - функции устойчивости, уже встроенные в синтаксис и структуру потока. Это позволяет кодеку (а) обнаруживать ошибки в потоке и (б) потенциально исправлять или, по крайней мере, скрывать ошибку во время воспроизведения. Эти кодеки являются идеальными партнерами для UDP-Lite, так как они предназначены для работы с поврежденным потоком данных, и для этих кодеков лучше принимать, возможно, 200 байтов, где несколько битов повреждены, а не скрывать потерю всего пакет, который был отброшен из-за неправильной контрольной суммы. Прикладной уровень понимает важность данных, тогда как транспорт видит только пакеты UDP. Это означает, что при необходимости можно добавить защиту от ошибок на более высоком уровне, например, с помощью прямого исправления ошибок.схема. Приложение - лучшее место, чтобы решить, какие части потока наиболее чувствительны к ошибкам и защитить их соответствующим образом, вместо того, чтобы иметь единую контрольную сумму «грубой силы», которая покрывает все в равной степени. Пример этого можно увидеть в исследовании Hammer et al. где UDP-Lite сочетается с кодеком AMR для улучшения качества речи в условиях сети с потерями. [3]

Поскольку большинство современных канальных уровней защищают передаваемые данные с помощью строгого контроля циклическим избыточным кодом (CRC) и отбрасывают поврежденные кадры, эффективное использование UDP Lite требует, чтобы канальный уровень был осведомлен о передаваемых данных сетевого уровня. Поскольку никакие текущие IP-стеки не реализуют такие межуровневые взаимодействия, для эффективного использования UDP-Lite в настоящее время требуются специально модифицированные драйверы устройств. [ необходима цитата ]

Идентификатор IP-протокола - 136. UDP-Lite использует тот же набор номеров портов, который назначен Internet Assigned Numbers Authority (IANA) для использования UDP.

Поддержка UDP-Lite была добавлена ​​в ядро Linux версии 2.6.20.

Поддержка UDP-Lite была добавлена ​​в ядро FreeBSD из r264212. [4] Набор изменений также был возвращен MFC обратно в стабильный / 10 [5] и стал доступен в FreeBSD 10.1-RELEASE. [6]

API сокета BSD расширен для поддержки UDP-Lite третьим параметром системного вызова сокета : Установите его в IPPROTO_UDPLITE, чтобы запросить сокет UDP-Lite: [7]

INT  FD  =  сокет ( PF_INET ,  SOCK_DGRAM ,  IPPROTO_UDPLITE );

Также можно легко установить, какая часть пакета будет покрыта контрольной суммой (начиная с начала, включая заголовок):

int  val  =  20 ;  / * 8 октетов заголовка + 12 октетов протокола приложения. * / ( void ) setsockopt ( fd ,  SOL_UDPLITE ,  UDPLITE_SEND_CSCOV ,  & val ,  sizeof  val );

Если в такой настройке отправляется пакет меньше 12 октетов, контрольная сумма покроет весь пакет.

На принимающей стороне сокет по умолчанию отбрасывает все пакеты, которые не покрыты полностью (эмуляция UDP). Чтобы разрешить меньшее покрытие, можно использовать:

int  val  =  20 ;  / * 8 октетов заголовка + 12 октетов протокола приложения. * / ( void ) setsockopt ( fd ,  SOL_UDPLITE ,  UDPLITE_RECV_CSCOV ,  & val ,  sizeof  val );

Это позволит получать пакеты, в которых контрольная сумма суммируется минимум 12 октетов пользовательских данных. Любой пакет с меньшим покрытием будет отброшен как плохой. Если пакет имеет длину покрытия не менее 20 октетов (включая заголовок) и его контрольная сумма верна, он будет доставлен в приложение (вся или часть полезной нагрузки все еще может быть повреждена, потому что она не может быть покрыта контрольной суммой или потому что кстати, контрольная сумма была правильной, но последнее очень маловероятно.) Если контрольная сумма неверна, пакет будет отброшен, потому что фактически невозможно узнать, была ли ошибка внутри данных полезной нагрузки или в заголовке UDP-Lite, поэтому пакет действительно может быть предназначен для другой программы.

Наименьшее возможное покрытие - 8 октетов. Заголовки нужно включать в контрольную сумму. Пакеты с меньшей длиной покрытия всегда будут отбрасываться независимо от каких-либо настроек (игнорируя анализаторы, которые интересуются всем трафиком) как не соответствующие стандарту.

Поддержка [ править ]

UDP-Lite поддерживается следующими операционными системами:

  • FreeBSD , начиная с версии 10.1-RELEASE
  • Linux , начиная с версии ядра 2.6.20
  • Также доступно в Windows через стороннюю библиотеку WULL [8]

Ссылки [ править ]

  1. ^ a b «Протокол облегченных пользовательских дейтаграмм (UDP-Lite), RFC 3828» . Проверено 12 января 2012 .
  2. ^ «Вычисление контрольной суммы Интернета, RFC 1071» . Проверено 12 января 2012 .
  3. ^ «Поврежденные речевые данные считаются полезными, 2003» . Проверено 12 января 2012 .
  4. ^ "Подтвердите сообщение для введения в ТЕКУЩИЙ" . Проверено 26 июля 2014 .
  5. ^ "Сообщение фиксации для MFC от ТЕКУЩЕГО" . Проверено 5 октября 2014 .
  6. ^ https://www.freebsd.org/releases/10.1R/relnotes.html
  7. ^ "UDP-Lite Howto (ядро и пользовательские приложения)" . Проверено 11 октября 2015 .
  8. ^ Лоран Guillo Сесиль Марк (10 января 2005). «WULL: библиотека Windows UDP-Lite» (PDF) . ИРИСА . Проверено 15 декабря 2015 . CS1 maint: uses authors parameter (link)

Внешние ссылки [ править ]

  • RFC 3828 - Протокол облегченных пользовательских дейтаграмм (UDP-Lite)
  • RFC 5097 - MIB для протокола UDP-Lite
  • RFC 4019 - сжатие заголовков RObust (ROHC): профили для протокола пользовательских дейтаграмм (UDP) Lite
  • RFC 5405 - Рекомендации по использованию одноадресного UDP для разработчиков приложений