UDP-Lite

UDP-Lite ( Lightweight User Datagram Protocol ) — это протокол без установления соединения , который позволяет доставлять потенциально поврежденные данные в приложение, а не отбрасывать их принимающей станцией. Это полезно, поскольку позволяет принимать решения о целостности данных на прикладном уровне (приложение или кодек ), где понимается значимость битов. UDP-Lite описан в RFC  3828.

Протокол

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

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

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

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

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

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

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

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 [7]

Ссылки

  1. ^ "Вычисление контрольной суммы Интернета, RFC 1071" . Получено 2012-01-12 .
  2. ^ "Поврежденные речевые данные считаются полезными, 2003" . Получено 12.01.2012 .
  3. ^ "Сообщение о фиксации для введения в CURRENT" . Получено 2014-07-26 .
  4. ^ "Сообщение о фиксации для MFC от CURRENT" . Получено 2014-10-05 .
  5. ^ «Заметки о выпуске FreeBSD 10.1-RELEASE».
  6. ^ "UDP-Lite Howto (ядро и пользовательские приложения)" . Получено 2015-10-11 .
  7. ^ Лоран Гийо; Сесиль Марк (10 января 2005 г.). «WULL: библиотека Windows UDP-Lite» (PDF) . ИРИСА . Проверено 15 декабря 2015 г.
  • RFC 3828 — Облегченный протокол пользовательских датаграмм (UDP-Lite)
  • RFC 5097 — MIB для протокола UDP-Lite
  • RFC 4019 — Сжатие заголовков RObust (ROHC): профили для протокола пользовательских датаграмм (UDP) Lite
  • RFC 5405 — Руководство по использованию одноадресного UDP для разработчиков приложений
Взято с "https://en.wikipedia.org/w/index.php?title=UDP-Lite&oldid=1177950847"