# Protocolo de datagramas de usuario

El protocolo de datagramas de usuario (en inglés: User Datagram Protocol o UDP) es un protocolo del nivel de transporte (encapsulado entre la capa de red y la capa de aplicación del modelo OSI) basado en la transmisión sin conexión de datagramas y representa una alternativa al protocolo TCP (Transmission Control Protocol). Ese protocolo permite el envío de datagramas de forma rápida en redes IP sin establecer previamente una conexión, dado que el propio datagrama incorpora suficiente información sobre el destinatario en su cabecera. Tampoco tiene confirmación ni control de flujo, por lo que los paquetes pueden adelantarse unos a otros; y tampoco se sabe si ha llegado correctamente, ya que no hay confirmación de entrega o recepción. Su uso principal es para protocolos como DHCP, BOOTP, DNS y demás protocolos en los que el intercambio de paquetes de la conexión/desconexión son mayores, o no son rentables con respecto a la información transmitida, así como para la transmisión de audio y vídeo en tiempo real, donde no es posible realizar retransmisiones por los estrictos requisitos de retardo que se tiene en estos casos.

## Descripción técnica

UDP es un protocolo mínimo de nivel de transporte orientado a mensajes documentado en el RFC 768 de la IETF.
En la familia de protocolos de Internet UDP proporciona una sencilla interfaz entre la capa de red y la capa de aplicación. UDP no otorga garantías para la entrega de sus mensajes (por lo que realmente no se debería encontrar en la capa 4) y el origen UDP no retiene estados de los mensajes UDP que han sido enviados a la red. UDP solo añade multiplexado de aplicación y suma de verificación de la cabecera y la carga útil. Cualquier tipo de garantías para la transmisión de la información deben ser implementadas en capas superiores.
| Bits | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 0 - 15 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 | 16 - 31 |
| 0 | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino |
| 32 | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación |
| 64 | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos |
La cabecera UDP consta de 4 campos de los cuales 2 son opcionales (con fondo rojo en la tabla). Los campos de los puertos origen y destino son campos de 16 bits que identifican el proceso de emisión y recepción. Ya que UDP carece de un servidor de estado y el origen UDP no requiere respuestas, el puerto origen es opcional. En caso de no ser utilizado, el puerto origen debe ser puesto a cero. Al campo del puerto destino le sigue un campo obligatorio que indica el tamaño en bytes del datagrama UDP incluyendo los datos. El valor mínimo es de 8 bytes (el tamaño de la cabecera). El campo restante de la cabecera es una suma de comprobación de 16 bits cuyo cálculo abarca una pseudo-cabecera IP (con las IP origen y destino, el protocolo y la longitud del paquete UDP), la cabecera UDP, los datos y 0's hasta completar un múltiplo de 16. El checksum también es opcional en IPv4, aunque es generalmente utilizado en la práctica (en IPv6 su uso es obligatorio). A continuación se muestran los campos para el cálculo del checksum en IPv4, marcada en rojo la pseudo-cabecera IP.
| Bits | 0 – 7 | 0 – 7 | 0 – 7 | 0 – 7 | 0 – 7 | 0 – 7 | 0 – 7 | 0 – 7 | 8 – 15 | 8 – 15 | 8 – 15 | 8 – 15 | 8 – 15 | 8 – 15 | 8 – 15 | 8 – 15 | 16 – 23 | 16 – 23 | 16 – 23 | 16 – 23 | 16 – 23 | 16 – 23 | 16 – 23 | 16 – 23 | 24 – 31 | 24 – 31 | 24 – 31 | 24 – 31 | 24 – 31 | 24 – 31 | 24 – 31 | 24 – 31 |
| 0 | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen | Dirección IP origen |
| 32 | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino | Dirección IP destino |
| 64 | Ceros | Ceros | Ceros | Ceros | Ceros | Ceros | Ceros | Ceros | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP | Longitud UDP |
| 96 | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto origen | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino | Puerto destino |
| 128 | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Longitud del mensaje | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación | Suma de verificación |
| 160 | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos | Datos |
El protocolo UDP se utiliza, por ejemplo, cuando se necesita transmitir voz o vídeo y resulta más importante transmitir con velocidad que garantizar el hecho de que lleguen absolutamente todos los bytes.

## Puertos

UDP utiliza puertos para permitir la comunicación entre aplicaciones. El campo de puerto tiene una longitud de 16 bits, por lo que el rango de valores válidos va de 0 a 65.535. El puerto 0 está reservado, pero es un valor permitido como puerto origen si el proceso emisor no espera recibir mensajes como respuesta.
Los puertos 1 a 1023 se llaman puertos "bien conocidos" y en sistemas operativos tipo Unix enlazar con uno de estos puertos requiere acceso como superusuario.
Los puertos 1024 a 49.151 son puertos registrados.
Los puertos 49.152 a 65.535 son puertos dinámicos y son utilizados como puertos temporales, sobre todo por los clientes al comunicarse con los servidores.

## Principales características

Las características principales de este protocolo son:
* Trabaja sin conexión, es decir, que no emplea ninguna sincronización entre el origen y el destino.
* Trabaja con paquetes o datagramas enteros, no con bytes individuales como TCP. Una aplicación que emplea el protocolo UDP intercambia información en forma de bloques de bytes, de forma que por cada bloque de bytes enviado de la capa de aplicación a la capa de transporte, se envía un paquete UDP.
* No es fiable. No emplea control del flujo ni ordena los paquetes.
* Su gran ventaja es que provoca poca carga adicional en la red, ya que es sencillo y emplea cabeceras muy simples.

## Comparativa entre UDP y TCP (Transmission Control Protocol)

* UDP: proporciona un nivel de transporte no fiable de datagramas, ya que apenas añade la información necesaria para la comunicación extremo a extremo al paquete que envía al nivel inferior. Lo utilizan aplicaciones como NFS (Network File System) y RCP (comando para copiar ficheros entre ordenadores remotos), pero sobre todo se emplea en tareas de control y en la transmisión de audio y vídeo a través de una red. No introduce retardos para establecer una conexión, no mantiene estado de conexión alguno y no realiza seguimiento de estos parámetros. Así, un servidor dedicado a una aplicación particular puede soportar más clientes activos cuando la aplicación corre sobre UDP en lugar de sobre TCP.
* TCP: es el protocolo que proporciona un transporte fiable de flujo de bits entre aplicaciones. Está pensado para poder enviar grandes cantidades de información de forma fiable, liberando al programador de la dificultad de gestionar la fiabilidad de la conexión (retransmisiones, pérdida de paquetes, orden en el que llegan los paquetes, duplicados de paquetes...) que gestiona el propio protocolo. Pero la complejidad de la gestión de la fiabilidad tiene un coste en eficiencia, ya que para llevar a cabo las gestiones anteriores se tiene que añadir bastante información a los paquetes que enviar. Debido a que los paquetes para enviar tienen un tamaño máximo, cuanta más información añada el protocolo para su gestión, menos información que proviene de la aplicación podrá contener ese paquete (el segmento TCP tiene una sobrecarga de 20 bytes en cada segmento, mientras que UDP solo añade 8 bytes). Por eso, cuando es más importante la velocidad que la fiabilidad, se utiliza UDP. En cambio, TCP asegura la recepción en destino de la información para transmitir.

## Transmisión de vídeo y voz

UDP es generalmente el protocolo usado en la transmisión de vídeo y voz a través de una red. Esto es porque no hay tiempo para enviar de nuevo paquetes perdidos cuando se está escuchando a alguien o viendo un vídeo en tiempo real.
Ya que tanto TCP como UDP circulan por la misma red, en muchos casos ocurre que el aumento del tráfico UDP daña el correcto funcionamiento de las aplicaciones TCP. Por defecto, TCP pasa a un segundo lugar para dejar a los datos en tiempo real usar la mayor parte del ancho de banda. El problema es que ambos son importantes para la mayor parte de las aplicaciones, por lo que encontrar el equilibrio entre ambos es crucial.
Todo este tipo de protocolos son usados en telemática.