En redes informáticas , el Protocolo de datagramas de usuario ( UDP ) es uno de los protocolos de comunicación básicos del conjunto de protocolos de Internet que se utiliza para enviar mensajes (transportados como datagramas en paquetes ) a otros hosts en una red de Protocolo de Internet (IP). Dentro de una red IP, el UDP no requiere una comunicación previa para configurar canales de comunicación o rutas de datos.
UDP es un protocolo sin conexión, lo que significa que los mensajes se envían sin negociar una conexión y que UDP no realiza un seguimiento de lo que ha enviado. [1] [2] UDP proporciona sumas de comprobación para la integridad de los datos y números de puerto para direccionar diferentes funciones en el origen y el destino del datagrama. No tiene diálogos de enlace y, por lo tanto, expone el programa del usuario a cualquier falta de fiabilidad de la red subyacente; no hay garantía de entrega, orden o protección duplicada. Si se necesitan funciones de corrección de errores en el nivel de interfaz de red, una aplicación puede utilizar en su lugar el Protocolo de control de transmisión (TCP) o el Protocolo de transmisión de control de flujo (SCTP), que están diseñados para este propósito.
El protocolo UDP es adecuado para aquellos casos en los que no es necesario comprobar y corregir errores o bien estos se realizan en la aplicación; el protocolo UDP evita la sobrecarga que supone dicho procesamiento en la pila de protocolos . Las aplicaciones sensibles al tiempo suelen utilizar el protocolo UDP porque es preferible descartar paquetes que esperar a que se retrasen debido a la retransmisión , lo que puede no ser una opción en un sistema en tiempo real . [3]
El protocolo fue diseñado por David P. Reed en 1980 y definido formalmente en RFC 768.
UDP es un protocolo de capa de transporte orientado a mensajes simple que está documentado en RFC 768. Aunque UDP proporciona verificación de integridad (a través de suma de comprobación ) del encabezado y la carga útil, [4] no proporciona garantías al protocolo de capa superior para la entrega de mensajes y la capa UDP no conserva ningún estado de los mensajes UDP una vez enviados. Por esta razón, a veces se hace referencia a UDP como Protocolo de datagramas no confiables . [5] Si se desea confiabilidad en la transmisión, debe implementarse en la aplicación del usuario.
Una serie de atributos de UDP lo hacen especialmente adecuado para determinadas aplicaciones.
Las aplicaciones pueden utilizar sockets de datagramas para establecer comunicaciones de host a host. Una aplicación vincula un socket a su punto final de transmisión de datos, que es una combinación de una dirección IP y un puerto . De esta manera, UDP proporciona multiplexación de aplicaciones . Un puerto es una estructura de software que se identifica por el número de puerto , un valor entero de 16 bits, que permite números de puerto entre 0 y 65535. El puerto 0 está reservado, pero es un valor de puerto de origen permitido si el proceso de envío no espera mensajes como respuesta.
La Autoridad de Números Asignados de Internet (IANA) ha dividido los números de puerto en tres rangos. [6] Los números de puerto del 0 al 1023 se utilizan para servicios comunes y conocidos. En sistemas operativos tipo Unix , el uso de uno de estos puertos requiere el permiso operativo del superusuario . Los números de puerto del 1024 al 49151 son los puertos registrados que se utilizan para los servicios registrados por la IANA. Los puertos del 49152 al 65535 son puertos dinámicos que no están designados oficialmente para ningún servicio específico y se pueden utilizar para cualquier propósito. También se pueden utilizar como puertos efímeros , que el software que se ejecuta en el host puede utilizar para crear dinámicamente puntos finales de comunicaciones según sea necesario. [6]
Un datagrama UDP consta de un encabezado de datagrama seguido de una sección de datos (los datos de carga útil para la aplicación). El encabezado del datagrama UDP consta de 4 campos, cada uno de los cuales tiene 2 bytes (16 bits): [3]
El uso de los campos Checksum y Source Port es opcional en IPv4 (fondo violeta claro en la tabla). En IPv6, solo el campo Source Port es opcional. Si no se utilizan, estos campos deben configurarse a cero. [7]
El método utilizado para calcular la suma de comprobación se define en RFC 768, y el cálculo eficiente se analiza en RFC 1071:
La suma de comprobación es el complemento a uno de 16 bits de la suma del complemento a uno de un pseudo encabezado de información del encabezado IP, el encabezado UDP y los datos, rellenado con cero octetos al final (si es necesario) para formar un múltiplo de dos octetos. [7]
En otras palabras, todas las palabras de 16 bits se suman utilizando la aritmética del complemento a uno. Sume los valores de 16 bits. En cada adición, si se produce un acarreo (bit 17), haga girar ese bit de acarreo 17 y añádalo al bit menos significativo del total acumulado. [11] Finalmente, la suma se complementa a uno para obtener el valor del campo de suma de comprobación UDP.
Si el cálculo de la suma de comprobación da como resultado el valor cero (los 16 bits son 0), se debe enviar como complemento de unos (todos 1), ya que una suma de comprobación de valor cero indica que no se ha calculado ninguna suma de comprobación. [7] En este caso, no se requiere ningún procesamiento específico en el receptor, porque todos los 0 y todos los 1 son iguales a cero en la aritmética del complemento de 1.
Las diferencias entre IPv4 e IPv6 están en el pseudo encabezado utilizado para calcular la suma de comprobación, y en que la suma de comprobación no es opcional en IPv6. [12] Bajo condiciones específicas, una aplicación UDP que utiliza IPv6 puede utilizar un modo de suma de comprobación cero UDP con un protocolo de túnel. [13]
Cuando UDP se ejecuta sobre IPv4, la suma de comprobación se calcula utilizando un pseudo encabezado que contiene parte de la misma información del encabezado IPv4 real . [7] : 2 El pseudo encabezado no es el encabezado IPv4 real utilizado para enviar un paquete IP, se utiliza solo para el cálculo de la suma de comprobación. El cálculo de la suma de comprobación UDP es opcional para IPv4. Si no se utiliza una suma de comprobación, se debe establecer en el valor cero.
La suma de comprobación se calcula sobre los siguientes campos:
Como IPv6 tiene direcciones más grandes y un diseño de encabezado diferente, el método utilizado para calcular la suma de comprobación se modifica en consecuencia: [10] : §8.1
Cualquier protocolo de transporte u otro protocolo de capa superior que incluya las direcciones del encabezado IP en su cálculo de suma de comprobación debe modificarse para su uso sobre IPv6, para incluir las direcciones IPv6 de 128 bits en lugar de las direcciones IPv4 de 32 bits.
Al calcular la suma de comprobación, nuevamente se utiliza un pseudo encabezado que imita el encabezado IPv6 real :
La suma de comprobación se calcula sobre los siguientes campos:
Al carecer de confiabilidad, las aplicaciones UDP pueden experimentar pérdidas de paquetes, reordenamiento, errores o duplicaciones. Si se utiliza UDP, las aplicaciones de usuario final deben proporcionar cualquier protocolo de enlace necesario, como una confirmación en tiempo real de que se ha recibido el mensaje. Las aplicaciones, como TFTP , pueden agregar mecanismos de confiabilidad rudimentarios a la capa de aplicación según sea necesario. [6] Si una aplicación requiere un alto grado de confiabilidad, se puede utilizar en su lugar un protocolo como el Protocolo de Control de Transmisión .
La mayoría de las veces, las aplicaciones UDP no emplean mecanismos de confiabilidad e incluso pueden verse obstaculizadas por ellos. La transmisión de medios , los juegos multijugador en tiempo real y la voz sobre IP (VoIP) son ejemplos de aplicaciones que suelen utilizar UDP. En estas aplicaciones en particular, la pérdida de paquetes no suele ser un problema fatal. En VoIP, por ejemplo, la latencia y el jitter son las principales preocupaciones. El uso de TCP causaría jitter si se perdieran paquetes, ya que TCP no proporciona datos posteriores a la aplicación mientras solicita un reenvío de los datos faltantes.
Numerosas aplicaciones clave de Internet utilizan UDP, entre ellas: el Sistema de nombres de dominio (DNS), el Protocolo simple de administración de red (SNMP), el Protocolo de información de enrutamiento (RIP) [3] y el Protocolo de configuración dinámica de host (DHCP).
El tráfico de voz y video generalmente se transmite mediante UDP. Los protocolos de transmisión de audio y video en tiempo real están diseñados para manejar paquetes perdidos ocasionales, por lo que solo se produce una ligera degradación en la calidad, en lugar de grandes demoras si se retransmiten los paquetes perdidos. Debido a que TCP y UDP se ejecutan sobre la misma red, a mediados de la década de 2000 algunas empresas descubrieron que un aumento en el tráfico UDP de estas aplicaciones en tiempo real obstaculizaba ligeramente el rendimiento de las aplicaciones que usaban TCP, como los sistemas de puntos de venta , contabilidad y bases de datos (cuando TCP detecta la pérdida de paquetes, reducirá su uso de la velocidad de datos). [14]
Algunos sistemas VPN como OpenVPN pueden usar UDP y realizar comprobaciones de errores a nivel de aplicación mientras implementan conexiones confiables.
QUIC es un protocolo de transporte basado en UDP. QUIC proporciona una conexión fiable y segura. HTTP/3 utiliza QUIC a diferencia de las versiones anteriores de HTTPS que utilizan una combinación de TCP y TLS para garantizar la fiabilidad y la seguridad respectivamente. Esto significa que HTTP/3 utiliza un único protocolo de enlace para establecer una conexión, en lugar de tener dos protocolos de enlace separados para TCP y TLS, lo que significa que el tiempo total para establecer una conexión se reduce. [15]
El Protocolo de Control de Transmisión es un protocolo orientado a la conexión y requiere un protocolo de enlace para establecer comunicaciones de extremo a extremo. Una vez que se establece una conexión, los datos del usuario pueden enviarse de forma bidireccional a través de la conexión.
El protocolo de datagramas de usuario es un protocolo sin conexión basado en mensajes más simple . Los protocolos sin conexión no establecen una conexión de extremo a extremo dedicada. La comunicación se logra transmitiendo información en una dirección desde el origen hasta el destino sin verificar la preparación o el estado del receptor.
{{cite web}}
: CS1 maint: numeric names: authors list (link)