Tabla de contenidos Ejemplo

2.11 UDP(User Datagram Protocol)




Figura: UDP(User Datagram Protocol)

UDP es un protocolo estándar, y su número STD es 6. El RFC 768 - "User Datagram Protocol" describe UDP. Su status es recomendado, pero en la práctica cualquier implementación de TCP/IP que no se use exclusivamente para el encaminamiento incluye UDP.

Para IP, UDP es básicamente un interfaz de aplicación. No añade fiabilidad, control de flujo
o recuperación de errores a IP. Simplemente sirve como "multiplexor/ demultiplexor" para enviar y recibir datagramas, usando los puertos para dirigir los datagramas tal como se muestra en Figura - UDP, un demultiplexor basado en puertos. Para un estudio más detallado de los puertos, remitirse a Puertos y zócalos.


Figura: UDP, un demultiplexor basado en puertos

UDP suministra un mecanismo para que una aplicación envíe un datagrama a otra. Se considera que la capa de UDP es extremadamente delgada y en consecuencia tiene poco "overhead", pero requiere que la aplicación se responsabilice de la recuperación de errores y todo lo que ello conlleva.

2.11.1 Puertos

El concepto de puerto ha sido analizado anteriormente en Puertos y zócalos.

Las aplicaciones que envían datagramas a un host necesitan identificar un objetivo más específico que la dirección IP, ya que los datagramas suelen dirigirse a procesos concretos y no a todo el sistema. UDP permite hacer esto al hacer uso de los puertos.

Un puerto es un número de 16 bits que identifica en un host que proceso está asociado a un datagrama. Hay dos tipos de puerto:

Bien-conocidos("well-known").
Los puertos bien-conocidos pertenecen a servidores estándar, por ejemplo Telnet usa el puerto 23. Los puertos bien-conocidos se hallan en el rango de 1 a 1023 (anteriormente a 1992, el rango de 256 a 1023 se usaba para servidores específicos de UNIX). Estos puertos suelen tener números impares, debido a que los primeros sistemas que usaron el concepto de puerto requerían para las operaciones en duplex una pareja par/impar de puertos. La mayoría de los servidores requieren sólo un único puerto. Una excepción es el servidor BOOTP que usa dos: el 67 y el 68 (ver "BOOTstrap Protocol" - BOOTP).
La razón de ser de los puertos bien-conocidos es permitir a los clientes encontrar a los servidores sin necesidad de información de configuración. Los números de los puertos bien-conocidos se definen en STD 2 - Números asignados de Internet("Assigned Internet Numbers").
Efímeros
Los clientes no necesitan puertos bien-conocidos porque inician la comunicación con los servidores y los datagramas UDP enviados al servido contienen su número de puerto. El host en funcionamiento proporciona un puerto a cada proceso cliente mientras este lo necesite. Los números de puertos efímeros tienen valores mayores de 1023, por lo general en el rango de 1024 a 5000. Un cliente puede usar cualquier número en ese rango, siempre que la combinación <protocolo de transporte, dirección IP, número de puerto> sea unívoca .

Nota: TCP también usa puertos con los mismos valores. Estos puertos son totalmente independientes de los de UDP. Normalmente, un servidor usará TCP o UDP, aunque hay excepciones. Por ejemplo, el DNS(ver DNS("Domain Name System")) usa tanto el puerto 53 de UDP como el 53 de TCP.

2.11.2 Formato del datagrama UDP

Cada datagrama UDP se envía en un sólo datagrama de IP. Aunque el datagrama IP se fragmente durante la transmisión, la implementación de IP que lo reciba lo reensamblará antes de pasárselo a la capa de UDP. Todas las implementaciones de IP deben aceptar datagramas de 576 bytes, lo que significa que si se supone un tamaño máximo de
60 bytes para la cabecera IP, queda un tamaño de 516 bytes para el datagrama UDP, aceptado por todas las implementaciones. Muchas implementaciones aceptan datagramas más grandes, pero no es algo que esté garantizado. El datagrama UDP tiene una cabecera de 16 bytes que se describe en Figura - Formato del datagrama UDP.


Figura: Formato del datagrama UDP

Donde:

Puerto origen:
Indica el puerto del proceso que envía el datagrama. Es el puerto al que se deberían dirigir las respuestas.
Puerto destino:
Especifica el puerto destino en el host de destino.
Longitud
Es la longitud(en bytes) del mismo datagrama de usuario, incluyendo la cabecera.
Checksum
Es un campo opcional consistente en el complemento a uno de 16 bits de la suma en complemento a uno de una pseudocabecera IP, la cabecera UDP y los datos del datagrama UDP. La pseudocabecera IP contiene las direcciones IP de origen y destino, el protocolo y la longitud del datagrama UDP:


Figura: Pseudocabecera IP
La pseudocabecera IP extiende de modo efectivo su checksum que incluya al datagrama IP original(sin fragmentar).

2.11.3 Interfaz de Programación de Aplicación(API) de UDP

La API que ofrecida UDP se describe en el en RFC 768. Proporciona:

La forma en que se implementa esto queda a elección del cada distribuidor.

Hay que ser consciente de que IP y UDP no proporcionan una entrega garantizada, control de flujo ni recuperación de errores, así que estos deberán ser implementados por la aplicación.

Aplicaciones estándar que usan UDP son:

Tabla de contenidos TCP ("Transmission Control Protocol")