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:
Donde:puerto de origenIndica el puerto del proceso que envía. Este es el puerto que se direcciona en las respuestas.puerto destinoEspecifica el puerto del proceso destino en el host de destino.longitudEs 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:
PROTOCOLO DE DIAGRAMAS 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.
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.
Principales Características del modelo UDP
Las características principales de este protocolo son:
Trabaja sin conexión, es decir que no emplea ninguna sincronización entre el origen y el destino. 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. No es fiable. No emplea control del flujo ni ordena los paquetes. Su gran ventaja es que provoca poca carga adicional en la red ya que es sencillo y emplea cabeceras muy simples. Un paquete UDP puede ser fragmentado por el protocolo IP para ser enviado fragmentado en varios paquetes IP si resulta necesario. 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.
MODELO UDP
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.
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ñademultiplexado 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. 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.
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:
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.
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).
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.
¿Que es el UDP? - Definición de UDP
UDP son las siglas de Protocolo de Datagrama de Usuario (en inglés User Datagram Protocol) un protocolo sin conexión que, como TCP, funciona en redes IP.
UDP/IP proporciona muy pocos servicios de recuperación de errores, ofreciendo en su lugar una manera directa de enviar y recibir datagramas a través una red IP. Se utiliza sobre todo cuando la velocidad es un factor importante en la transmisión de la información, por ejemplo, RealAudio utiliza el UDP.
El FTP utiliza TCP/IP, mientras que TFTP utiliza UDP. TFTP son las siglas de Protocolo de Transferencia de Archivos Triviales (en inglés Trivial File Transfer Protocol), y puesto que es trivial, perder algo de información en la transferencia no es crucial.
ventajas y desventajas y del modelo UDP
Ventajas UDP - Este protocolo aporta un procedimiento para que los programas de aplicación puedan enviar mensajes a otros programas con un mínimo de mecanismo de protocolo. - proporciona una sencilla interfaz entre la capa de red y la capa de aplicación.
Desventajas UDP - no otorga garantías para la entrega de sus mensajes 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.
¿Que es el UDP? - Definición de UDP
UDP son las siglas de Protocolo de Datagrama de Usuario (en inglés User Datagram Protocol) un protocolo sin conexión que, como TCP, funciona en redes IP.
UDP/IP proporciona muy pocos servicios de recuperación de errores, ofreciendo en su lugar una manera directa de enviar y recibir datagramas a través una red IP. Se utiliza sobre todo cuando la velocidad es un factor importante en la transmisión de la información, por ejemplo, RealAudio utiliza el UDP.
El FTP utiliza TCP/IP, mientras que TFTP utiliza UDP. TFTP son las siglas de Protocolo de Transferencia de Archivos Triviales (en inglés Trivial File Transfer Protocol), y puesto que es trivial, perder algo de información en la transferencia no es crucial.
¿Cuándo Utilizar UDP En Lugar de TCP?
Problema: ¿Cuándo debo utilizar User Datagram Protocol (UDP) en lugar de utilizar Transmission Control Protocol (TCP)?
Solución: El Protocolo UDP es un protocolo de la capa de transporte para uso con el protocolo IP de la capa de red. El protocolo UDP proveé un servicio de intercambio de datagramas a través de la red en modoBest-Effort, es decir, que no puede asegurar la entrega de los datagramas o paquetes. El servicio que proveé el protocolo UDP no es fiable, ya que no garantiza la entrega o algún tipo de protección para evitar la duplicidad de los paquetes. La simplicidad de los paquetes UDP reduce la cantidad de información necesaria para poder ser utilizado, lo cual hace que el protocolo UDP sea la mejor opción en algunas aplicaciones. Una computadora puede mandar paquetes UDP sin establecer una conexión con el dispositivo que los va a recibir. La computadora completa los campos de información en los encabezados en el paquete UDP y envía los datos junto con el encabezado a traves de la capa de red mediante el protocolo IP.
Normalmente, UDP se utiliza en aplicaciones cuando la confiabilidad no es crítica, pero la velocidad de transferencia si lo es. Por ejemplo, puede ser mejor utilizar UDP en una aplicación de adquisición de datos a alta velocidad donde perder algunos datos es aceptable. Otra aplicación donde se utiliza UDP es cuando se desea transmitir un mensaje de difusión (broadcast) a cualquier computadora que están escuchando a un servidor.
En general: TCP se usa cuando se requiere trasmision de datos con mucha confiabilidad, es decir, que no se pierda información. UDP se usa cuando se buscan transmisiones con una cantidad de información baja en los paquetes y altas velocidades de transferencia, aunque se puedan perder algunos paquetes.
En labVIEW 8.0 o posterior, apoyese del documento de ayuda: Fundamentals»Using LabVIEW with TCP/IP and UDP que se encuentra en una liga más adelante en el documento para obtener más información. Para LabVIEW 7.1 o anteriores, apoyese en el documento Using LabVIEW with TCP/IP and UDP Application Note desde el menú de ayuda Help»Search the LabVIEW Bookshelf para obtener más información.
El protocolo UDP
El grupo de protocolos de Internet también maneja un protocolo de transporte sin conexiones, el UDP (User Data Protocol, protocolo de datos de usuario). El UDP ofrece a las aplicaciones un mecanismo para enviar datagramas IP en bruto encapsulados sin tener que establecer una conexión.
Muchas aplicaciones cliente-servidor que tienen una solicitud y una respuesta usan el UDP en lugar de tomarse la molestia de establecer y luego liberar una conexión. El UDP se describe en el RFC 768. Un segmento UDP consiste en una cabecera de 8 bytes seguida de los datos. La cabecera se muestra a continuación. Los dos puertos sirven para lo mismo que en el TCP: para identificar los puntos terminales de las máquinas origen y destino. El campo de longitud UDP incluye la cabecera de 8 bytes y los datos. La suma de comprobación UDP incluye la misma pseudocabecera de formato, la cabecera UDP, y los datos, rellenados con una cantidad par de bytes de ser necesario.
Esta suma es opcional, y se almacena como 0 si no se calcula. Inutilizarla seria absurdo, a menos que la cantidad de los datos no importe, por ejemplo, voz digitalizada.
UDP no admite numeración de los datagramas, factor que, sumado a que tampoco utiliza señales de confirmación de entrega, hace que la garantía de que un paquete llegue a su destino sea mucho menor que si se usa TCP. Esto también origina que los datagramas pueden llegar duplicados y/o desordenados a su destino. Por estos motivos el control de envío de datagramas, si existe, debe ser implementado por las aplicaciones que usan UDP como medio de transporte de datos, al igual que el reeensamble de los mensajes entrantes.
Es por ello un protocolo del tipo best-effort (máximo esfuerzo), porque hace lo que puede para transmitir los datagramas hacia la aplicación, pero no puede garantizar que la aplicación los reciba.
Tampoco utiliza mecanismos de detección de errores. Cuando se detecta un error en un datagrama, en lugar de entregarlo a la aplicación destino, se descarta.
Cuando una aplicación envía datos a través de UDP, éstos llegan al otro extremo como una unidad. Por ejemplo, si una aplicación escribe 5 veces en el puerto UDP, la aplicación al otro extremo hará 5 lecturas del puerto UDP. Además, el tamaño de cada escritura será igual que el tamaño de las lecturas.
Protocolo UDP
Diferencias entre los protocolos TCP y UDP
El protocolo UDPUDP 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 TCPContrariamente 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 UDP
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 datagramas de usuario (UDP):
Un protocolo de transporte muy simple que proporciona direccionamiento a nivel de capa de transporte como TCP, pero no mucho mas que eso. UDP es poco más que un protocolo "contenedor" (wrapper) que provee un medio para que las aplicaciones accedan al protocolo IP. No está orientado a conexión, las transmisiones no son fiables, y los datos se pueden perder.
UDP son las siglas de Protocolo de Datagrama de Usuario (en inglés User Datagram Protocol) un protocolo sin conexión que, como TCP, funciona en redes IP.
UDP/IP proporciona muy pocos servicios de recuperación de errores, ofreciendo en su lugar una manera directa de enviar y recibir datagramas a través una red IP. Se utiliza sobre todo cuando la velocidad es un factor importante en la transmisión de la información, por ejemplo, RealAudio utiliza el UDP.
El FTP utiliza TCP/IP, mientras que TFTP utiliza UDP. TFTP son las siglas de Protocolo de Transferencia de Archivos Triviales (en inglés Trivial File Transfer Protocol), y puesto que es trivial, perder algo de información en la transferencia no es crucial.
User Datagram Protocol (UDP) es un protocolo del nivel de transporte basado en el intercambio de datagramas. Permite el envío de dichos 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 tiempo real, donde no es posible realizar retransmisiones por los estrictos requisitos de retardo que se tiene en estos casos.
Las principales características técnicas del protocolo UDP son:
· Es un protocolo mínimo de nivel de transporte orientado a mensajes (datagramas) documentado en el RFC 768 de la IETF.
· 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.
· 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.
Las cabecera del protocolo UDP se muestra a continuación:
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.
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.
Protocolo UDP
Características del protocolo UDP
El protocolo UDP (Protocolo de datagrama de usuario) es un protocolo no orientado a conexión de la capa 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.
· Aplicaciones UDP: Estoy seguro de que usted está pensando: "¿a qué tipo de aplicación no le importa si sus datos llegan o no, y por qué iba yo a querer usarla?" Puede que se sorprenda: UDP es utilizado por una gran cantidad de protocolos TCP / IP. UDP es un buen partido para su aplicación en dos circunstancias. La primera es cuando la aplicación no le importa si algunos de los datos se pierde, el streaming de vídeo o multimedia es un buen ejemplo, ya que si pierde algunos bytes de datos ni siquiera se dará cuenta. La otra es cuando la propia aplicación elige proporcionar algún otro mecanismo para compensar la falta de funcionalidad en UDP. Las aplicaciones que envían pequeñas cantidades de datos, por ejemplo, a menudo utilizan UDP en el supuesto de que si se envía una petición y una respuesta no es recibida, el cliente sólo enviará una nueva solicitud después. Esto proporciona suficiente fiabilidad sin la sobrecarga añadida de una conexión TCP. Discuto algunas aplicaciones UDP comunes en la sección UDP.
Concepto clave: La mayoría de las aplicaciones clásicas, especialmente las que envían mensajes o archivos, requieren que los datos se entregan de manera fiable, y por lo tanto utilizan TCP para el transporte. Las aplicaciones que utilizan UDP son por lo general aquellas en las que la pérdida de una pequeña cantidad de datos no es un problema, o que utilizan sus propios procedimientos específicos para hacer frente a los problemas potenciales de entrega que TCP maneja en general.
En las siguientes secciones vamos a examinar en primer lugar el esquema común de direccionamiento en la capa de transporte utilizado por TCP y UDP, y luego veremos cada uno de los dos protocolos en detalle. A continuación de estas secciones haremos una comparación que le ayudará a entender de un vistazo dónde están las diferencias entre TCP y UDP. Por cierto, si quiere un buen ejemplo del "mundo real" de por qué ambos protocolos son valiosos, considere el transporte de mensajes bajo el Sistema de Nombres de Dominio (DNS), que en realidad utiliza UDP para ciertos tipos de comunicación y TCP para otros.
Antes de dejar el tema de la comparación de UDP y TCP, quiero señalar explícitamente que a pesar de que TCP se describe a menudo como más lento que UDP, esta es una medida relativa. TCP es un protocolo muy bien escrito que es capaz de ejecutar transferencias de datos de alta eficiencia. Sólo es lento en comparación con UDP debido a la sobrecarga de crear y administrar las conexiones. La diferencia puede ser importante, pero no es enorme, así que tenlo en cuenta.
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 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ñademultiplexado 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
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.
bits0 – 78 – 1516 – 2324 – 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[editar]
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[editar]
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)[editar]
El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:
Servidor:
public static void main(String[] args) {
try {
System.out.println("server creado........");
// 1. crear el servidor..
DatagramSocket socket = new DatagramSocket(45000);
// 2. recibir mensaje desde el cliente...
// 2.1 crear el paquete donde se recibe el mensaje.
byte[] buffer = new byte[1024];
DatagramPacket paqueteCliente = new DatagramPacket(buffer, 1024);
// 2.2 recibir el paquete. operacion bloqueante.
System.out.println("socket esperando....");
socket.receive(paqueteCliente);
// 2.3 leer el paquete como string...
String msj = new String(paqueteCliente.getData());
System.out.println("desde "
+ paqueteCliente.getAddress().getHostAddress()
+ " desde el puerto " + paqueteCliente.getPort()
+ " se recibio:" + msj);
// 3. enviar respuesta..
String resp = new Date().toString();// la hora como respuesta.
// 3.1 crear datagrama de envio.
// direccion destino..
InetAddress addr = paqueteCliente.getAddress();// la misma del
// cliente.
int port = paqueteCliente.getPort();
// el datagrama contiene la información del destino.
DatagramPacket paqueteEnvio = new DatagramPacket(resp.getBytes(),
resp.length(), addr, port);
System.out.println("enviando:"+new String(paqueteEnvio.getData()));
// 3.2 enviar paquete...
socket.send(paqueteEnvio);
//4. cerrar el socket...
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Cliente:
public static void main(String[] args) {
try {
// 1. crear el socket por donde se enviara la peticion y se recibira
// la respuesta..
DatagramSocket socket = new DatagramSocket(32000);
// 2. crear datagrama para enviar la info. el datagrama contiene
// toda la info necesaria para que llegue el msj
String msj = "Hola Server....."; // msj a enviar.
String ip = "127.0.0.1";
int port = 45000;
// 2.1 crear datagrama
DatagramPacket paqueteEnvio = new DatagramPacket(msj.getBytes(),
msj.length(), InetAddress.getByName(ip), port);
// 2.2 enviar paquete.
socket.send(paqueteEnvio);
// 3. recibir respuesta...
// 3.1 crear datagrama de recepcion.
byte[] resp = new byte[1024];
DatagramPacket paqueteRecibido = new DatagramPacket(resp,
resp.length);
// 3.2 recibir paquete.
socket.receive(paqueteRecibido);
// 4. mostrar info...
System.out.println("Server respondio desde "
+ paqueteRecibido.getAddress().getHostAddress()
+ " por el puerto " + paqueteRecibido.getPort()
+ " se recibio:" + new String(paqueteRecibido.getData()));
// 5. cerrar
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Código de ejemplo (Python 3.x)
El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:
Servidor:
import socketserver
print("Servidor iniciado...")
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print("{0} Ha escrito:".format(self.client_address[0]))
print(data)
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
server.serve_forever()
Cliente (Cambia "localhost" por la dirección IP del servidor.):
import socket
import sys
print("Cliente iniciado...")
HOST, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(bytes(data + "\n","utf8"), (HOST, PORT))
received = sock.recv(1024)
print("Enviado: {0}".format(data))
print("Recibido: {0}".format(received))
Código de ejemplo (C)
El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:
Cliente (Cambia "127.0.0.1" por la dirección IP del servidor):
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsaData;
SOCKET SendSocket;
sockaddr_in RecvAddr;
int Puerto = 2345;
char ip[] = "127.0.0.1";
char SendBuf[] = "Hola!!!!";
WSAStartup(MAKEWORD(2,2), &wsaData);
SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Puerto);
RecvAddr.sin_addr.s_addr = inet_addr(ip);
sendto(SendSocket,SendBuf,strlen(SendBuf)+1,0,(SOCKADDR *) &RecvAddr,sizeof(RecvAddr));
WSACleanup();
}
Comparativa entre UDP y TCP (Transmission Control Protocol)[editar]
UDP: proporciona un nivel de transporte no fiable de datagramas, ya que apenas añade la información necesaria para la comunicación extremo a extremo al paquete que envía al nivel inferior. Lo utilizan aplicaciones como NFS (Network File System) y RCP (comando para copiar ficheros entre ordenadores remotos), pero sobre todo se emplea en tareas de control y en la transmisión de audio y vídeo a través de una red. No introduce retardos para establecer una conexión, no mantiene estado de conexión alguno y no realiza seguimiento de estos parámetros. Así, un servidor dedicado a una aplicación particular puede soportar más clientes activos cuando la aplicación corre sobre UDP en lugar de sobre TCP.
TCP: es el protocolo que proporciona un transporte fiable de flujo de bits entre aplicaciones. Está pensado para poder enviar grandes cantidades de información de forma fiable, liberando al programador de la dificultad de gestionar la fiabilidad de la conexión (retransmisiones, pérdida de paquetes, orden en el que llegan los paquetes, duplicados de paquetes...) que gestiona el propio protocolo. Pero la complejidad de la gestión de la fiabilidad tiene un coste en eficiencia, ya que para llevar a cabo las gestiones anteriores se tiene que añadir bastante información a los paquetes que enviar. Debido a que los paquetes para enviar tienen un tamaño máximo, cuanta más información añada el protocolo para su gestión, menos información que proviene de la aplicación podrá contener ese paquete (el segmento TCP tiene una sobrecarga de 20 bytes en cada segmento, mientras que UDP solo añade 8 bytes). Por eso, cuando es más importante la velocidad que la fiabilidad, se utiliza UDP. En cambio, TCP asegura la recepción en destino de la información para transmitir.
Transmisión de vídeo y voz[editar]
UDP es generalmente el protocolo usado en la transmisión de vídeo y voz a través de una red. Esto es porque no hay tiempo para enviar de nuevo paquetes perdidos cuando se está escuchando a alguien o viendo un vídeo en tiempo real.
Ya que tanto TCP como UDP circulan por la misma red, en muchos casos ocurre que el aumento del tráfico UDP daña el correcto funcionamiento de las aplicaciones TCP. Por defecto, TCP pasa a un segundo lugar para dejar a los datos en tiempo real usar la mayor parte del ancho de banda. El problema es que ambos son importantes para la mayor parte de las aplicaciones, por lo que encontrar el equilibrio entre ambos es crucial.
Todo este tipo de protocolos son usados en telemática.