martes, 30 de junio de 2015

User Datagram Protocol (UDP)

User Datagram Protocol (UDP) 

es un protocolo mínimo de nivel de transporte orientado a mensajes documentado en el RFC 768 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 - 15
16 - 31
0
Puerto origen
Puerto destino
32
Longitud del Mensaje
Suma 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.

bits
0 – 7
8 – 15
16 – 23
24 – 31
0
Dirección Origen
32
Dirección Destino
64
Ceros
Protocolo
Longitud UDP
96
Puerto Origen
Puerto Destino
128
Longitud del Mensaje
Suma 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.
Código de ejemplo (Java)





Características del protocolo UDP

El protocolo UDP (Protocolo de datagrama de usuario) es un protocolo no orientado a conexión de lacapa de transporte del modelo TCP/IP. Este protocolo es muy simple ya que no proporciona detección de errores (no es un protocolo orientado a conexión).
Por lo tanto, el encabezado del segmento UDP es muy 
simple:

puerto de origen
(16 bits);
puerto de destino
(16 bits);
longitud total
(16 bits);
suma de comprobación del encabezado
(16 bits);
Datos
(longitud variable).

Significado de los diferentes campos


  • Puerto de origen: es el número de puerto relacionado con la aplicación del remitente del segmento UDP. Este campo representa una dirección de respuesta para el destinatario. Por lo tanto, este campo es opcional. Esto significa que si el puerto de origen no está especificado, los 16 bits de este campo se pondrán en cero. En este caso, el destinatario no podrá responder (lo cual no es estrictamente necesario, en particular para mensajes unidireccionales).
  • Puerto de destino: este campo contiene el puerto correspondiente a la aplicación del equipo receptor al que se envía.
  • Longitud: este campo especifica la longitud total del segmento, con el encabezado incluido. Sin embargo, el encabezado tiene una longitud de 4 x 16 bits (que es 8 x 8 bits), por lo tanto la longitud del campo es necesariamente superior o igual a 8 bytes.
  • Suma de comprobación: es una suma de comprobación realizada de manera tal que permita controlar la integridad del segmento.

Protocolo de datagrama de usuario (UDP).


UDP es un protocolo de transporte de nivel 4 (OSI) no 
orientado a conexión. UDP es un protocolo de datagrama 
que no garantiza la entrega de los datos. Si una aplicación 
envía una petición en un datagrama de UDP y no llega una 
respuesta en un tiempo razonable, es responsabilidad de la 
aplicación el retransmitir la petición. UDP simplemente envía 
el datagrama y no se preocupa de si llega o no. Al no 
garantizar la entrega, hace que sea un protocolo mucho 
más 
rápido y ligero que TCP ofreciendo un transporte alternativo 
a aquellos procesos que no requieren una entrega fiable.
Muchas aplicaciones usan UDP para enviarse mensajes 
entre si o para realizar consultas rápidas a bases de datos o 
servidores DNS (Domain Name System). UDP es una pieza 
perfecta para construir funciones de monitor, depuración, 
gestión y prueba.


Aunque UDP es menos fiable que TCP en algunas 
ocasiones es más recomendable que TCP ya que ofrece 
algunas ventajas como en:
  • Los mensajes entre host son esporádicos. SNMP (Simple 
  • Network Management Protocol) vuelve a ser un buen 
  • ejemplo. Sus mensajes se envían a intervalos irregulares. 
  • La 
  • carga de trabajo necesaria para abrir y cerrar la conexión 
  • TCP de cada mensaje retrasaría su transmisión y 
  • penalizaría 
  • el rendimiento.
  • Mensajes que no requieren acuse de recibo. UDP 
  • contribuye 
  • a reducir el tráfico de la red. Los avisos de SNMP 
  • pertenecen a esta categoría. En una red extensa, se genera 
  • una gran cantidad de avisos SNMP cuando los dispositivos 
  • SNMP transmiten sus actualizaciones de estado. Sin 
  • embargo, la pérdida de un mensaje SNMP no suele ser 
  • crítica y la red se libera de una importante carga de trabajo 
  • al 
  • utilizar UDP para SNMP.
  • La fiabilidad se implementa al nivel del proceso. El sistema 
  • de archivos de red (NFS) es un buen ejemplo de proceso 
  • que implementa su propia función de fiabilidad y se ejecuta 
  • sobre UDP para mejorar el rendimiento de la red.
  • Lo pueden usar aplicaciones que necesitan enviar mensajes 
  • de difusión o multidifusión, por ejemplo un cliente de 
  • BOOTP.
El interfaz que esta entre UDP y el proceso local, se llama 
puerta. Para que una aplicación pueda acceder a la red y 
pueda enviar datos a través de ella lo debe hacer a través de 
un puerto.
  • Un usuario invoca un programa cliente, como por 
  • ejemplo nslookup
  • El proceso cliente ejecuta una rutina del sistema que 
  • dice: {Quiero una comunicación de UDP. Dame un puerto.}
  • La rutina del sistema le asigna un identificador de 16 bits 
  • llamado {numero de puerto} que este libre.
  • Los puertos se identifican mediante un número decimal que 
    va desde el 0 hasta el 65.535. Los fabricantes que 
    implementan UDP disponen de una gran libertad para 
    asignar números de puertos a los procesos, aunque la 
    Autoridad de Números Asignados de Internet (IANA) ha 
    reservado un rango de puertos que va desde el 0 al 1.023 
    para servicios estándar, (Well-Known) como DNS, SNMP, o 
    Netbios.

    Puerto
    Aplicación
    Descripción
    7
    Eco
    Eco del datagrama de usuario de vuelta al emisor.
    9
    Discard
    Descartar el datagrama de usuario.
    13
    DayTime
    Indica la hora de forma sencilla para el usuario.
    17
    Quote
    Devuelve una {cita del día}.
    19
    Chargen
    Intercambiar flujos de caracteres
    53
    DNS
    Servidor de nombres de dominio.
    67
    Bootps
    Puerto del servidor para descargar la información de configuración.
    68
    Bootpc
    Puerto del cliente para recibir recibir información de configuración.
    69
    TFTP
    Puerto del Protocolo trivial de transferencia de archivos.
    161
    SNMP
    Usado para recibir las peticiones de gestión de red.
    162
    SNMP-trap
    Usado para recibir los informes de problemas de red.



    Listado de algunos puertos UDP públicos.

    Algunos de estos servicios proporcionan bloques para 
    probar, depurar y medir, como el servicio {eco} en el puerto 
    donde devuelve cualquier datagrama que se le envía. Otro 
    puerto como el 9 (Discard) tira los datagramas que recibe. 
    El 
    puerto 19 es un generador de caracteres donde responde a 
    cualquier mensaje con un datagrama que contiene entre 0 y 
    512 bytes. El número se elige aleatoriamente. El servicio 
    cita 
    del día que escucha por el puerto 17, responde a cualquier 
    datagrama enviando de vuelta un mensaje con alguna frase 
    histórica o de sabiduría popular al cerrar la sesión o ejecutar 
    el comando fortune. El puerto 13 (DayTime) responde a 
    cualquier datagrama con un mensaje que contiene la fecha 
    hora actual en formato ASCII legible. El servidor y el cliente 
    de BOOTP se usan para inicializar dispositivos sin 
    configuración (terminales tontos). Una estación de trabajo 
    puede descubrir su dirección de IP, su Mascara de red, la 
    situación de su encaminador por defecto, la dirección de 
    servidores importantes y hasta el nombre y ubicación de un 
    archivo de descarga de software desde el servidor de 
    arranque. El software de la estación de trabajo se descarga 
    mediante el protocolo trivial de transferencia de archivos 
    (TFTP; UDP 69).


    Los puertos TCP y UDP son independientes unos de otros. 
    Un proceso puede enviar mensajes por el puerto 1700 de 
    UDP a la vez que otro está manteniendo una sesión en el 
    puerto 1700 de TCP. Algunos servicios necesitan acceder 
    tanto a TCP como a UDP por eso el IANA intenta asignar el 
    mismo número de puerto a los servicios que necesitan UDP 
    como TCP, como por ejemplo DNS, que escucha por el 
    puerto 53 de TCP y UDP.
    A la combinación de una dirección de IP y de puerto para 
    una comunicación se le llama {dirección de conector} o 
    {socket}. Un socket ofrece toda la información que necesita 
    un cliente o un servidor para identificar a su otro extremo.


    diferencias entre los protocolos TCP y UDP

    El protocolo UDP


    UDP es un protocolo no orientado a conexión. Es decir 

    cuando una maquina A envía paquetes a una maquina B, el 

    flujo es unidireccional. La transferencia de datos es 

    realizada 

    sin haber realizado previamente una conexión con la 

    maquina de destino (maquina B), y el destinatario recibirá 

    los 

    datos sin enviar una confirmación al emisor (la maquina A). 

    Esto es debido a que la encapsulación de datos enviada por 

    el protocolo UDP no permite transmitir la información 

    relacionada al emisor. Por ello el destinatario no conocerá al 

    emisor de los datos excepto su IP. 



    El protocolo TCP


    Contrariamente a UDP, el protocolo TCP está orientado a 

    conexión. Cuando una máquina A envía datos a una 

    máquina B, la máquina B es informada de la llegada de 

    datos, y confirma su buena recepción. Aquí interviene el 

    control CRC de datos que se basa en una ecuación 

    matemática que permite verificar la integridad de los datos 

    transmitidos. De este modo, si los datos recibidos son 

    corruptos, el protocolo TCP permite que los destinatarios 

    soliciten al emisor que vuelvan a enviar los datos corruptos. 





    Protocolo de datagramas de usuario (UDP)


    El Protocolo de datagramas de usuario (UDP) es un 
    estándar TCP/IP que está definido en RFC 768, "User 
    Datagram Protocol (UDP)". Algunos programas utilizan UDP 
    en lugar de TCP para el transporte de datos rápido, 
    compacto y no confiable entre hosts TCP/IP.

    UDP proporciona un servicio de datagramas sin conexión 
    que ofrece entrega de mejor esfuerzo, lo que significa que 
    UDP no garantiza la entrega ni comprueba la secuencia de 
    los datagramas. Un host de origen que necesita 
    comunicación confiable debe utilizar TCP o un programa 
    que 
    proporcione sus propios servicios de secuencia y 
    confirmación.
    Los mensajes UDP están encapsulados y se envían en 
    datagramas IP, como se muestra en la siguiente ilustración.

    Encapsulación UDP en un datagrama IP


    Puertos UDP


    Los puertos UDP proporcionan una ubicación para enviar y 
    recibir mensajes UDP. Un puerto UDP funciona como 
    una única cola de mensajes que recibe todos los 
    datagramas 
    destinados al programa especificado mediante cada número 
    de puerto del protocolo. Es decir, los programas basados en 
    UDP pueden recibir varios mensajes a la vez.

    El lado de servidor de cada programa que utiliza UDP 
    atiende los mensajes que llegan a su número de puerto 
    conocido. Todos los números de puerto de servidor UDP 
    inferiores a 1.024 (y algunos números superiores) están 
    reservados y registrados por la Autoridad de números 
    asignados de Internet (IANA, <i>Internet Assigned Numbers 
    Authority</i>).

    Cada puerto de servidor UDP se identifica mediante un 
    número de puerto conocido o reservado. En la siguiente 
    tabla se muestra una lista parcial de los números de puerto 
    de servidor UDP conocidos que utilizan programas basados 
    en UDP estándar.

     

    NotaPara obtener una lista completa actualizada de todos 
    los puertos UDP conocidos que están registrados 
    actualmente, visite el sitio Web de la Autoridad de números 
    asignados de Internet.
    • Copyright 


    UDP y TCP

    En general, las diferencias en cómo entregan los datos UDP 
    y TCP son similares a las diferencias entre una llamada 
    telefónica y una tarjeta postal. TCP funciona como una 
    llamada telefónica, ya que comprueba que el destino está 
    disponible y preparado para la comunicación. UDP funciona 
    como una tarjeta postal: los mensajes son pequeños y la 
    entrega es probable, pero no siempre está garantizada.

    Normalmente, utilizan UDP los programas que transmiten 
    pequeñas cantidades de datos a la vez o que tienen 
    requisitos de tiempo real. En estas situaciones, las 
    capacidades de carga pequeña y multidifusión de UDP (por 
    ejemplo, un datagrama, muchos destinatarios) resultan más 
    apropiadas que TCP.

    UDP es notablemente diferente de los servicios y 
    características que proporciona TCP. En la siguiente tabla 
    se 
    comparan las diferencias en el modo de administrar la 
    comunicación TCP/IP según se utilice UDP o TCP para el 
    transporte de datos.