UDP-Lite ( Protocolo ligero de datagramas de usuario ) es un protocolo sin conexión que permite entregar una carga útil de datos potencialmente dañada a una aplicación en lugar de que la estación receptora la descarte. Esto resulta útil, ya que permite tomar decisiones sobre la integridad de los datos en la capa de aplicación (aplicación o códec ), donde se comprende el significado de los bits. UDP-Lite se describe en el RFC 3828 .
Protocolo
UDP-Lite se basa en el Protocolo de Datagramas de Usuario (UDP), pero a diferencia de UDP, donde la suma de verificación protege todo o nada de un paquete, UDP-Lite permite sumas de verificación parciales que solo cubren una parte de un datagrama (un número arbitrario de octetos al principio del paquete) y, por lo tanto, entregará paquetes que hayan sido parcialmente corruptos. Está diseñado para protocolos multimedia, como Voz sobre IP (VoIP) o vídeo en streaming, en los que recibir un paquete con una carga útil dañada es mejor que no recibir ningún paquete. Para UDP convencional y el Protocolo de Control de Transmisión (TCP), un solo bit erróneo provoca una suma de verificación "incorrecta", lo que significa que se debe descartar todo el paquete: de esta manera, los errores de bits se "promueven" a errores de paquete completos incluso cuando el daño a los datos es trivial. Para calcular la suma de verificación, UDP-Lite utiliza el mismo algoritmo de suma de verificación que se usa para UDP (y TCP). [ 1 ]
Los códecs multimedia modernos, como G.718 y Adaptive Multi-Rate (AMR) para audio, y H.264 y MPEG-4 para vídeo, incorporan funciones de resiliencia en la sintaxis y estructura del flujo. Esto permite al códec (a) detectar errores en el flujo y (b) corregirlos, o al menos disimularlos, durante la reproducción. Estos códecs son ideales para UDP-Lite, ya que están diseñados para funcionar con flujos de datos dañados, y es preferible que reciban unos 200 bytes con algunos bits dañados a tener que ocultar la pérdida de un paquete completo descartado por una suma de comprobación errónea. La capa de aplicación comprende la importancia de los datos, mientras que la capa de transporte solo recibe paquetes UDP. Esto significa que, si es necesario, se puede añadir protección contra errores en una capa superior, por ejemplo, mediante un esquema de corrección de errores hacia adelante . La aplicación es el lugar idóneo para determinar qué partes del flujo son más sensibles a los errores y protegerlas en consecuencia, en lugar de utilizar una única suma de comprobación indiscriminada que lo cubra todo por igual. Un ejemplo de esto se puede ver en la investigación de Hammer et al., donde UDP-Lite se combina con el códec AMR para brindar una mejor calidad de voz en condiciones de red con pérdidas. [ 2 ]
Dado que la mayoría de las capas de enlace modernas protegen los datos transmitidos con una sólida comprobación de redundancia cíclica (CRC) y descartan las tramas dañadas, para un uso eficaz de UDP Lite es necesario que la capa de enlace conozca los datos de la capa de red que se transmiten. Como ninguna pila IP actual implementa este tipo de interacciones entre capas , para un uso eficaz de UDP-Lite se requieren controladores de dispositivo especialmente modificados.
El identificador del protocolo IP es 136. UDP-Lite utiliza el mismo conjunto de números de puerto asignados por la Autoridad de Números Asignados de Internet (IANA) para su uso por UDP.
Se añadió compatibilidad con UDP-Lite en la versión 2.6.20 del kernel de Linux . Esta compatibilidad se eliminará en la versión 7.1 debido a que el protocolo no se utiliza, lo que provoca una sobrecarga de rendimiento en UDP y requiere mantenimiento. [ 3 ]
Se agregó soporte para UDP-Lite en el kernel de FreeBSD a partir de r264212. [ 4 ] El conjunto de cambios también se volvió a incluir en stable/10 [ 5 ] y estuvo disponible en FreeBSD 10.1-RELEASE. [ 6 ]
La API de sockets BSD se extiende para admitir UDP-Lite mediante el tercer parámetro de la llamada al sistema de sockets : establézcalo en IPPROTO_UDPLITE para solicitar un socket UDP-Lite: [ 7 ]
int fd = conector ( PF_INET , SOCK_DGRAM , IPPROTO_UDPLITE );También se puede configurar fácilmente qué parte del paquete estará cubierta por la suma de verificación (empezando desde el principio, incluyendo la cabecera):
int val = 20 ; /* 8 octetos de encabezado + 12 octetos del protocolo de aplicación. */ ( void ) setsockopt ( fd , SOL_UDPLITE , UDPLITE_SEND_CSCOV , & val , sizeof val );Si en dicha configuración se envía un paquete de menos de 12 octetos, la suma de verificación abarcará todo el paquete.
En el lado receptor, un socket descartará por defecto todos los paquetes que no estén completamente cubiertos (emulación UDP). Para permitir una cobertura menor, se puede utilizar:
int val = 20 ; /* 8 octetos de encabezado + 12 octetos del protocolo de aplicación. */ ( void ) setsockopt ( fd , SOL_UDPLITE , UDPLITE_RECV_CSCOV , & val , sizeof val );Esto permitirá que los paquetes tengan como mínimo 12 octetos de datos de usuario verificados mediante suma de comprobación. Cualquier paquete con una cobertura menor se descartará silenciosamente por considerarse defectuoso. Si un paquete tiene una longitud de cobertura de al menos 20 octetos (incluida la cabecera) y su suma de comprobación es correcta, se entregará a la aplicación (toda o parte de la carga útil aún puede estar corrupta, ya sea porque no está cubierta por la suma de comprobación o porque la suma de comprobación fue correcta por casualidad, pero esto último es muy improbable). Si la suma de comprobación es incorrecta, el paquete se descartará, ya que es imposible saber si el error se encuentra dentro de los datos de la carga útil o en la cabecera UDP-Lite, por lo que el paquete podría estar destinado a un programa diferente.
La cobertura mínima posible es de 8 octetos. Los encabezados deben incluirse en la suma de verificación. Los paquetes con una cobertura menor siempre se descartarán, independientemente de la configuración (excepto los analizadores de paquetes que se interesan por todo el tráfico), por no cumplir con el estándar.
Apoyo
UDP-Lite es compatible con los siguientes sistemas operativos:
Referencias
- ↑ "Cálculo de la suma de verificación de Internet, RFC 1071" . Consultado el 12 de enero de 2012 .
- ↑ "Datos de voz corruptos considerados útiles, 2003" . Consultado el 12 de enero de 2012 .
- ↑ Larabel, Michael. "Linux 7.1 dejará de usar UDP-Lite: permite un mejor rendimiento con código optimizado" . Phoronix . Consultado el 16 de marzo de 2026 .
- ↑ "Mensaje de confirmación para su introducción en CURRENT" . Consultado el 26 de julio de 2014 .
- ↑ "Mensaje de confirmación para MFC desde CURRENT" . Recuperado el 5 de octubre de 2014 .
- ↑ "Notas de la versión FreeBSD 10.1-RELEASE" .
- ↑ "UDP-Lite Howto (aplicaciones de kernel y de espacio de usuario)" . Consultado el 11 de octubre de 2015 .
- ↑ Laurent Guillo; Cécile Marc (10 de enero de 2005). "WULL: una biblioteca UDP-Lite de Windows" (PDF) . IRISA . Consultado el 15 de diciembre de 2015 .
Enlaces externos
- RFC 3828 — El protocolo ligero de datagramas de usuario (UDP-Lite)
- RFC 4019 — Compresión robusta de encabezados (ROHC): Perfiles para el protocolo de datagramas de usuario (UDP) Lite
- RFC 5097 — MIB para el protocolo UDP-Lite
- RFC 5405 — Directrices de uso de UDP unicast para diseñadores de aplicaciones
- protocolos de la capa de transporte