UDP-Lite
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2011 г. ) |
Набор интернет-протоколов |
---|
Прикладной уровень |
Транспортный уровень |
Интернет-слой |
Слой связи |
UDP-Lite ( облегченный протокол пользовательских дейтаграмм ) — это протокол без установления соединения потенциально поврежденные полезные , который позволяет доставлять данные приложению , а не отбрасывать их принимающей станцией. Это полезно, поскольку позволяет принимать решения о целостности данных на уровне приложения (приложение или кодек ), где понимается значение битов. UDP-Lite описан в РФК 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 для видео, имеют функции устойчивости, уже встроенные в синтаксис и структуру потока. Это позволяет кодеку (а) обнаруживать ошибки в потоке и (б) потенциально исправлять или, по крайней мере, скрывать ошибку во время воспроизведения. Эти кодеки являются идеальными партнерами для UDP-Lite, поскольку они предназначены для работы с поврежденным потоком данных, и для этих кодеков лучше получать, возможно, 200 байт, где несколько бит повреждены, чем скрывать потерю всего пакет, который был отброшен из-за неправильной контрольной суммы. Прикладной уровень понимает важность данных, где транспорт видит только пакеты UDP. Это означает, что при необходимости защита от ошибок может быть добавлена на более высоком уровне, например, с помощью схемы прямого исправления ошибок . Приложение — лучшее место для того, чтобы решить, какие части потока наиболее чувствительны к ошибкам, и соответствующим образом защитить их, вместо того, чтобы использовать единую контрольную сумму «грубого перебора», которая одинаково покрывает все. Пример этого можно увидеть в исследовании Hammer et al. где 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 в стабильную версию/10. [4] и стал доступен в FreeBSD 10.1-RELEASE. [5]
API сокетов BSD расширен для поддержки UDP-Lite третьим параметром системный вызов сокета : установите его в IPPROTO_UDPLITE для запроса сокета UDP-Lite: [6]
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
Также можно легко установить, какая часть пакета будет покрыта контрольной суммой (начиная с начала, включая заголовок):
int val = 20; /* 8 octets of header + 12 octets of the application protocol. */
(void)setsockopt(fd, SOL_UDPLITE, UDPLITE_SEND_CSCOV, &val, sizeof val);
Если при такой настройке отправляется пакет размером менее 12 октетов, контрольная сумма будет охватывать весь пакет.
На принимающей стороне сокет по умолчанию отбрасывает все пакеты, которые не покрыты полностью (эмуляция UDP). Чтобы разрешить меньшее покрытие, можно использовать:
int val = 20; /* 8 octets of header + 12 octets of the application protocol. */
(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]
Ссылки
[ редактировать ]- ^ «Вычисление контрольной суммы Интернета, RFC 1071» . Проверено 12 января 2012 г.
- ^ «Поврежденные речевые данные считаются полезными, 2003 г.» . Проверено 12 января 2012 г.
- ^ «Сообщение о фиксации для введения в CURRENT» . Проверено 26 июля 2014 г.
- ^ «Сообщение фиксации для MFC от CURRENT» . Проверено 5 октября 2014 г.
- ^ «Примечания к выпуску FreeBSD 10.1-RELEASE» .
- ^ «Как использовать UDP-Lite (ядро и пользовательские приложения)» . Проверено 11 октября 2015 г.
- ^ Лоран Гийо; Сесиль Марк (10 января 2005 г.). «WULLL: библиотека Windows UDP-Lite» (PDF) . ИРЛАНДСКИЙ . Проверено 15 декабря 2015 г.