El Protocolo de datagrama de usuario (UDP) es un protocolo ligero de transporte de datos que funciona sobre IP.
UDP proporciona un mecanismo para detectar datos corruptos en paquetes, pero no intenta resolver otros problemas que surgen con paquetes, como cuando se pierden o llegan fuera de orden. Por eso, a veces UDP es conocido como el protocolo de datos no confiable .
UDP es simple pero rápido, al menos en comparación con otros protocolos que funcionan sobre IP. A menudo se usa para aplicaciones sensibles al tiempo (como "streaming" de vídeo en tiempo real) donde la velocidad es más importante que la precisión.
Al enviar paquetes con UDP sobre IP, la porción de datos de cada paquete IP está formateada como un segmento UDP.
Diagrama de un segmento UDP dentro de un paquete IP. El paquete IP contiene secciones de encabezado y de datos. La sección de datos IP es el segmento UDP, el cual contiene secciones de encabezado y de datos.
Cada segmento UDP contiene un encabezado de 8 bytes y datos de longitud variable.
Los primeros cuatro bytes del encabezado UDP almacenan los números de puerto para el origen y el destino.
Un dispositivo en red puede recibir mensajes en diferentes puertos virtuales, similar a cómo un puerto marítimo puede recibir barcos en diferentes muelles. Los diferentes puertos virtuales ayudan a distinguir diferentes tipos de tráfico de red.
A continuación un listado de algunos puertos en uso por UDP en mi portátil:
Un terminal de línea de comandos con el comando "sudo lsof -i -n -P | grep UDP". El comando produce la siguiente tabla:
Process
Process ID
Type
Port
launchd
1
IPv4
UDP *:137
launchd
1
IPv4
UDP *:138
syslogd
45
IPv4
UDP *:54465
mDNSResponder
186
IPv4
UDP *:5353
mDNSResponder
186
IPv6
UDP *:5353
mDNSResponder
186
IPv4
UDP *:65327
mDNSResponder
186
IPv6
UDP *:65327
mDNSResponder
186
IPv4
UDP *:55657
mDNSResponder
186
IPv6
UDP *:55657
12306
IPv6
UDP *:5353
Cada renglón empieza con el nombre del proceso que está usando el puerto virtual y termina con el protocolo y número de puerto.
🔍 ¿Qué tipo de tráfico de red manejan esos procesos? Si buscas en la web el nombre del proceso más el número de puerto, probablemente puedes averiguarlo. Incluso podrías probarlo en la computadora que estás usando en este momento.
Los siguientes dos bytes del encabezado de UDP almacenan la longitud (en bytes) del segmento (incluyendo el encabezado).
Dos bytes son
bits, por lo que la longitud puede ser tan grande como este número binario:
En decimal, eso es
o
. Entonces la longitud máxima de un segmento UDP es
bytes.
Los dos últimos bytes del encabezado de UDP son la suma de control, un campo usado por el remitente y el receptor para detectar corrupción de datos.
Antes de enviar el segmento, el remitente:
Calcula la suma de control basada en los datos del segmento.
Almacena esa suma de control en el campo.
Al recibir el segmento, el recipiente:
Calcula la suma de control basada en el segmento recibido.
Compara las sumas de control entre sí. Si las sumas de control no son iguales, sabe que los datos están corruptos.
Para entender cómo una suma de control puede detectar corrupción de los datos, sigamos el proceso de calcular una suma de control para una cadena muy corta de datos: "Hola".
Primero, el remitente codificaría "Hola" en binario de alguna manera. La siguiente codificación usa la codificación ASCII/UTF-8:
Esa codificación produce los siguientes
bytes:
A continuación, el remitente segmenta los bytes en
números binarios (de
bits cada uno):
Para calcular la suma de control, el remitente suma los números binarios de
-bits:
¿Cómo sumas números binarios?
La computadora ahora puede enviar un segmento UDP con el "Hola" codificado como datos y
como la suma de control.
El segmento UDP completo podría verse como sigue:
Campo
Valor
Número puerto orígen
Número puerto destino
Longitud
Suma de control
Datos
¿Qué pasaría si los datos se corrompen de "Hola" a "Mola" en el camino?
Primero veamos cómo se verían los datos corruptos en binario.
"Mola" codificada en binario...
...y luego segmentada en números de
bits:
Ahora veamos qué suma de control calcularía el destinatario:
El destinatario ahora puede comparar programáticamente la suma de control que recibió en el segmento UDP con la suma de control que acaba de calcular:
Recibida:
Calculada:
¿Ves la diferencia? Hazlo obvio
Cuando el destinatario descubre que las dos sumas de control son diferentes, sabe que los datos se corrompieron de alguna manera en el camino. Desafortunadamente, el destinatario no puede usar la suma de control calculada para reconstruir los datos originales, por lo que es probable que simplemente descarte el paquete por completo.
El proceso actual para calcular la suma de control UDP incluye algunos pasos más que los mostrados aquí, pero este es el proceso general de cómo podemos usar sumas de control para detectar corrupción de datos.