UDP -Lite

редактировать

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

Содержание
  • 1 Протокол
  • 2 Поддержка
  • 3 Ссылки
  • 4 Внешние ссылки
Протокол

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

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

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

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

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

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

API сокета BSD расширен для поддержки UDP-Lite с помощью третьего параметра системного вызова сокета: Установить его в IPPROTO_UDPLITE для запроса сокета UDP-Lite:

int fd = socket (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
Ссылки
Внешние ссылки
  • RFC 3828 - Протокол облегченных дейтаграмм пользователя (UDP-Lite)
  • RFC 5097 - MIB для протокола UDP-Lite
  • RFC 4019 - Сжатие заголовка RObust (ROHC): профили для протокола дейтаграмм пользователя (UDP) Lite
  • RFC 5405 - Рекомендации по использованию одноадресной передачи UDP для разработчиков приложений
Последняя правка сделана 2021-06-20 05:41:57
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте