martes, 30 de junio de 2015

Protocolo de Datagramas de Usuario (UDP)

Figura: Protocolo de Datagrama de Usuario (UDP)
UDP es un protocolo estándar con número 6 de STD. Este protocolo se describe en el RFC 768 - Protocolo de Datagrama de Usuario. Este protocolo se recomienda, pero en la práctica cada implementación TCP/IP que no se use exclusivamente para encaminamiento incluirán UDP.
UDP es básicamente una interfaz de aplicación para IP. No soporta confiabilidad, control de flujo o recuperación de errores para IP. Simplemente sirve como "multiplexor/demultiplexor" para enviar y recibir datagramas, usando puertos para dirigir los datagramas como se muestra en la figura adjunta. Se pueden encontrar más detalles sobre puertos en Puertos y Sockets.

Figura: UDP, Un Demultiplexor Basado en Puertos

UDP proporciona un mecanismo para que una aplicación envíe un datagrama a otra. La capa UDP es sumamente delgada por lo que tiene pocas sobrecargas, pero requiere que la aplicación sea responsable de la recuperación de errores y demás características no soportadas.

Puertos

El concepto de puerto se trató anteriormente en Puertos y Sockets.
Las aplicaciones que envían datagramas hacia un host necesitan identificar el destino, siendo éste más especiífico que la dirección IP, ya que los datagramas están dirigidos normalmente a ciertos procesos y no al sistema completo. UDP proporciona este mecanismo usando puertos.
Un puerto es un número de 16 bits que identifica qué proceso de un host está asociado con un cierto datagrama. Hay dos tipos de puerto:
bien-conocidos
Estos puertos pertenecen a servidores estándares, por ejemplo TELNET usa el puerto 23. El rango de este tipo de puerto está comprendido entre 1 y 1023. Los números de puertos bien-conocidos son típicamente impares porque los primeros sistemas usaban el concepto de puerto como una pareja de puertos impar/par para operaciones duplex. La mayoría de los servidores requieren sólo un puerto. Una excepción es el servidor BOOTP que usa dos: el 67 y el 68 (ver Protocolo BOOTstrap - BOOTP).
El motivo de la utilización de los puertos bien-conocidos es permitir a los clientes tener la capacidad de encontrar servidores sin información de configuración. Los números de dichos puertos están definidos en STD 2 - Números de Internet Asignados.
efímeros
Los clientes no necesitan números de puertos bien-conocidos porque inician la comunicación con servidores y el número de puerto que usan ya está contenido en los datagramas UDP enviados al servidor. Cada proceso del cliente está localizado en un número de puerto mientras el host lo necesite y se esté ejecutando. Los números de puerto efímeros tienen valores mayores que 1023, normalmente en el rango de 1024 a 5000. Un cliente puede usar cualquier número localizado dentro de dicho rango, mientras que la combinación de <protocolo de transporte, dirección IP, número de puerto> es única.
Nota: TCP también usa números de puerto con los mismos valores. Estos puertos son bastante independientes. Normalmente, un servidor usará TCP o UDP, pero hay excepciones. Por ejemplo, los servidores de Nombres de Dominio (ver Sistema de Nombre de Dominio (DNS)) usan ambos, puerto UDP 53 y puerto TCP 53.

Formato del Datagrama UDP

Cada datagrama UDP se envía con un único datagrama IP. Aunque el datagrama IP se puede fragmentar durante la transmisión, la implementación de recepción IP lo re-ensamblará antes de presentarlo a la capa UDP. Todas las  implementaciones IP están preparadas para aceptar datagramas de 576 bytes, permitiendo un tamaño máximo de cabacera IP de 60 bytes sabiendo que un datagrama UDP de 516 bytes lo aceptan todas las implementaciones. Muchas implementaciones aceptarán datagramas mayores, aunque no se puede asegurar. El datagrama UDP tiene una cabecera de 16 bytes que se describe en la figura siguiente:

Figura: Formato de Datagrama UDP

donde: 
puerto de origen
Indica el puerto del proceso que envía. Este es el puerto que se direcciona en las respuestas.
puerto destino
Especifica el puerto del proceso destino en el host de destino.
longitud
Es el tamaño (en bytes) de este datagrama de usuario incluyendo la cabecera.
suma de comprobación (checksum)
Es un campo opcional de 16 bits en complemento a uno de la suma en complemento a uno de una cabecera pseudo-IP, la cabecera UDP y los datos UDP. La cabecera pseudo-IP contiene la dirección IP fuente y destino, el protocolo y la longitud UDP:

Figura: Cabecera Pseudo-IP
La cabecera pseudo-IP extiende efectivamente la suma de comprobación para incluir el datagrama IP original (defragmentado)

Interfaz de Programación de Aplicaciones UDP

La interfaz de aplicación que ofrece UDP se describe en el RFC 768. Dicha interfaz proporciona:
  • La creación de nuevos puertos de recepción.
  • La recepción de operaciones que devuelven los bytes de datos y un indicador de puerto fuente y una dirección fuente IP.
  • El envío de operaciones que tienen como parámetros los datos, los puertos fuente y destino y las direcciones.
La forma en la que está implementado depende de cada vendedor.
Hay que ser conscientes de que UDP e IP no proporcionan entrega garantizada, control de flujo o recuperación de errores, así que estos mecanismos tienen que ser soportados por las aplicaciones.
Las aplicaciones estándares que utilizan UDP son:
  • Protocolo de Transferencia de Ficheros Trivial (TFTP)
  • Sistema de Nombres de Dominio (DNS) servidor de nombres
  • Llamada a Procedimiento Remoto (RPC), usado por el Sistema de Ficheros en Red (NFS)
  • Sistema de Computación de Redes (NCS)
  • Protocolo de Gestión Simple de Redes (SNMP)

 

viernes, 26 de junio de 2015

User Datagram Protocol
User Datagram Protocol (UDP) es un protocolo del nivel de transporte basado en el intercambio de datagramas (Encapsulado de capa 4 Modelo OSI). Permite el envío de datagramas a través de la red sin que se haya establecido previamente una conexión, ya que el propio datagrama incorpora suficiente información de direccionamiento 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 real, donde no es posible realizar retransmisiones por los estrictos requisitos de retardo que se tiene en estos casos.

Descripción técnica
User Datagram Protocol (UDP) es un protocolo mínimo de nivel de transporte orientado a mensajes documentado en el RFC 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 sólo 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 - 1516 - 31
0Puerto origenPuerto destino
32Longitud del MensajeSuma de verificación
64
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 fuente y destino son campos de 16 bits que identifican el proceso de origen y recepción. Ya que UDP carece de un servidor de estado y el origen UDP no solicita respuestas, el puerto origen es opcional. 
En caso de no ser utilizado, el puerto 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 de 8 bytes. El campo de la cabecera restante es una suma de comprobación de 16 bits que 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 generalmente se utiliza en la práctica (en IPv6 su uso es obligatorio). A continuación se muestra los campos para el cálculo del checksum en IPv4, marcada en rojo la pseudo-cabecera IP.

bits0 – 78 – 1516 – 2324 – 31
0Dirección Origen
32Dirección Destino
64CerosProtocoloLongitud UDP
96Puerto OrigenPuerto Destino
128Longitud del MensajeSuma de verificación
160
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 efímeros y son utilizados como puertos temporales, sobre todo por los clientes al comunicarse con los servidores.

Uso en aplicaciones
La mayoría de las aplicaciones claves de Internet utilizan el protocolo UDP, incluyendo: el Sistema de Nombres de Dominio (DNS), donde las consultas deben ser rápidas y solo contaran de una sola solicitud, luego de un paquete único de respuesta, el Protocolo de Administración de Red (SNMP), el Protocolo de Información de Enrutamiento (RIP) y el Protocolo de Configuración dinámica de host(DHCP).

Principales Características
Las características principales de este protocolo son:
1. Trabaja sin conexión, es decir que no emplea ninguna sincronización entre el origen y el destino.
2. 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.
3. No es fiable. No emplea control del flujo ni ordena los paquetes.
4. Su gran ventaja es que provoca poca carga adicional en la red ya que es sencillo y emplea cabeceras muy simples.
5. Un paquete UDP puede ser fragmentado por el protocolo IP para ser enviado fragmentado en varios paquetes IP si resulta necesario.
6. Puesto que no hay conexión, un paquete UDP admite utilizar como dirección IP de destino la dirección de broadcast o de multicast de IP. Esto permite enviar un mismo paquete a varios destinos.