El User Datagram Protocol fue definido en la RFC 768 como una alternativa ligera a TCP. No establece sesiones, no confirma recepciones y deja en manos de la aplicación cualquier mecanismo de recuperación. A cambio, ofrece latencia mínima y sobrecarga casi nula.
UDP brilla cuando una pequeña pérdida es preferible a un retraso importante: streaming multimedia, juegos en línea, VoIP y protocolos como DNS dependen de su simplicidad para mantenerse rápidos.
Estas propiedades convierten a UDP en un transporte ideal para mensajes cortos como consultas DNS o para flujos continuos donde la temporización es crítica.
El encabezado siempre ocupa 8 bytes y contiene cuatro campos de 16 bits:
| Campo | Función |
|---|---|
| Puerto origen | Identifica el servicio o la aplicación que envía el datagrama (puede ser cero si no se necesita respuesta). |
| Puerto destino | Proceso receptor dentro del host remoto. |
| Longitud | Tamaño total del datagrama (encabezado + datos). |
| Checksum | Verifica la integridad del datagrama y de una pseudo-cabecera IP. En IPv4 es opcional, en IPv6 es obligatorio. |
La ausencia de números de secuencia y ACK simplifica al protocolo, pero implica que la aplicación debe manejar pérdidas o duplicados si le resultan problemáticos.
El lado negativo es evidente: UDP no ofrece confiabilidad. Si la aplicación necesita orden, detección de pérdidas o control de flujo, debe implementarlo por su cuenta (por ejemplo, QUIC o RTP incluyen sus propios mecanismos).
Tampoco existe control de congestión integrado, por lo que un flujo UDP puede inundar la red si el desarrollador no regula el ritmo. Servicios bien diseñados miden latencias y aplican lógicas de backoff para convivir con otros tráficos.
| Aplicación | Motivo para usar UDP |
|---|---|
| DNS | Consultas breves donde es preferible reenviar antes que mantener una sesión. |
| VoIP y videollamadas | La continuidad del audio o video es más importante que la perfección de cada paquete. |
| Streaming en vivo | Protocolos como RTP priorizan la latencia para mantener sincronizados audio y video. |
| Juegos en línea | Las actualizaciones de posición pierden relevancia rápidamente; es mejor enviar la información más reciente. |
| Servicios de descubrimiento | El soporte para broadcast/multicast permite anunciar dispositivos en una red local. |
Aunque la comparación completa aparece en el tema 8, conviene adelantar cómo difieren ambos protocolos:
Con pocas líneas es posible crear un cliente y un servidor de eco para observar la ausencia de conexiones persistentes:
import socket
def servidor_udp(puerto=9999):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", puerto))
print("Servidor UDP listo")
while True:
datos, direccion = sock.recvfrom(1024)
print("Recibido", datos, "de", direccion)
sock.sendto(datos.upper(), direccion)
def cliente_udp(mensaje, host="127.0.0.1", puerto=9999):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(mensaje.encode(), (host, puerto))
respuesta, _ = sock.recvfrom(1024)
print("Respuesta:", respuesta.decode())
# Ejecutar servidor_udp() en una terminal y cliente_udp("hola UDP") en otra
Obsérvese que el servidor no necesita aceptar conexiones: simplemente procesa cada datagrama que llega y responde usando la dirección informada en la llamada recvfrom.
Aunque la mayoría de las herramientas se centran en TCP, Windows ofrece códigos para probar puertos UDP específicos:
Test-NetConnection -ComputerName 1.1.1.1 -Port 53 -InformationLevel Detailed -Udp
Get-NetUDPEndpoint | Select-Object -First 5 -Property LocalPort, RemoteAddress, OwningProcess
El primer comando envía un datagrama al puerto 53 (DNS) y reporta si llegó respuesta. El segundo lista los sockets UDP abiertos, lo que ayuda a identificar servicios que escuchan en la máquina local.
UDP es susceptible a ataques de spoofing porque no verifica el origen. Muchas amenazas de amplificación DDoS explotan servicios UDP mal configurados (por ejemplo, servidores DNS abiertos).
UDP ilustra el compromiso entre simplicidad y confiabilidad: elimina casi todo el mecanismo de supervisión para priorizar la velocidad. Cuando una aplicación puede tolerar pérdidas o dispone de su propia capa de corrección, UDP se vuelve imbatible.
En el próximo tema se compararán formalmente TCP y UDP para elegir la opción adecuada en cada escenario.