PROTOCOLO UDP
Reseña Histórica
En 1980 David P. Reed diseñó el protocolo UDP (User Datagram Protocol,
también llamado Universal Datagram Protocol) para trabajar sobre IP con un
esquema de datagramas “no orientado a conexión” y se definió formalmente
en RFC 768.
Introducción
UDP (Protocolo de datagrama de usuario) es un protocolo no orientado a
conexión de la capa de transporte. 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.
En la familia de protocolos de internet, UDP proporciona una sencilla interfaz
entre la capa de red y la capa de aplicación. No otorga garantías para la
entrega de sus mensajes y el origen UDP no retiene los mensajes UDP que
han sido enviados a la red.
¿Cuándo lo utilizamos?
Se utiliza cuando:
El intercambio de mensajes es muy escaso.
Ejem: Consultas al DNS (servidor de nombres), DHCP.
Se requiere tiempo real y no se pueden esperar confirmaciones.
Ejem: Comunicación Bidireccional (Videoconferencia, telefonía).
Los mensajes se producen regularmente y no importa si se pierde
alguno.
Ejem: NTP, SNMP.
Se trata de trafico broadcast/multicast (este no puede enviarse nunca
por TCP).
Se requiere hacer una implementación muy sencilla.
Ejem: TFTP
Los paquetes que envía UDP se denominan mensajes o datagramas UDP.
¿Qué labor cumple?
UDP multiplexa los datos de las aplicaciones y opcionalmente comprueba
errores, pero no realiza:
Conexión/desconexión
Retransmisión de datos perdidos
Control de flujo
Control de congestión
Cabecera UDP
Consta de 4 campos de los cuales 2 son opcionales. Los campos de los
puertos origen y destino son campos de 16 bits que identifican el proceso
de origen y recepción. En caso de no ser utilizado el puerto de origen, debe
ser puesto a cero. A los campos del puerto destino le sigue un campo
obligatorio que indica el tamaño en bytes del datagrama UDP incluidos los
datos. El valor mínimo es 8 bytes.
El campo de la cabecera restante es una suma de comprobación de 16 bits
que abarca una pseudocabecera IP.
La pseudocabecera se antepone a la cabecera UDP, pero no se envía
realmente. Solo se utiliza para calcular el Checksum.
Permite al UDP receptor comprobar que el nivel IP no le ha pasado, por
error, un datagrama que era para otra dirección.
El Checksum comprueba todo el datagrama (incluido los datos), En IPv4 su
uso es opcional, si no se calcula se pone todo a ceros y no se comprueba.
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 valido va de 0 a 65535.El puerto 0 está reservado, pero es un valor
permitido como puerto origen si el proceso emisor no espera recibir
mensajes como respuesta.
Del 0 al 1023 son los puertos bien conocidos. Se reservan para
servicios de protocolos estándar (ejemplo: HTTP, puesto 80). Solo
procesos con acceso superusuario pueden utilizarlos.
Del 1024 al 49151: puertos registrados. Se usan para clientes y
para servicios que no requieren acceso superusuario (ejemplo: SIP
(telefonía IP) puerto 5060).
Del 49152 al 65535: puertos dinámicos o privados. Solo se usan
para clientes.
La mayoría de los sistemas eligen los puertos para sus clientes (puertos
efímeros) usando solo una parte del rango disponible.
Multiplexacion
UDP asigna a cada proceso del nivel de aplicación un N° de puerto.
El puerto es una dirección local que se utiliza para la multiplexacion.
La combinación dirección_IP-puerto identifica un ‘Socket’ (enchufe o
conector) que es el origen o destino de los datagramas UDP.
Ejemplo:
¿Cuándo y cómo se envían los datagramas UDP?
Se envían:
Cada vez que la aplicación invoca un ‘sendto’ o similar el host manda el
contenido del buffer en un datagrama IP al socket de destino.
Si el diagrama a enviar no cabe en la trama a nivel de enlace el nivel IP
se encarga de fragmentarlo. UDP no se entera de nada.
Se reciben:
En cuanto llega al datagrama IP pasa su contenido a UDP y notifica a la
aplicación. Esta lo recoge cuando quiere invocando un ‘recv’ o similar.
Si el datagrama lego fragmentado el IP del receptor lo reensambla antes
de pasarlo a UDP.