Para entender con propiedad las diferencias entre TCP y UDP, es importante comprender la manera en que cada protocolo implementa las funciones específicas de confiabilidad y la forma en que realizan el seguimiento de las comunicaciones.
Protocolo de control de transmisión (TCP)
TCP se describió inicialmente en RFC 793. Además de admitir funciones básicas de segmentación y rearmado de datos, TCP, como se muestra en la ilustración, también proporciona lo siguiente:
- Conversaciones orientadas a la conexión mediante el establecimiento de sesiones
- Entrega confiable
- Reconstrucción de datos ordenada
- Control del flujo
Establecimiento de una sesión
TCP es un protocolo orientado a la conexión. Un protocolo orientado a la conexión es uno que negocia y establece una conexión (o sesión) permanente entre los dispositivos de origen y de destino antes de reenviar tráfico. El establecimiento de sesión prepara los dispositivos para que se comuniquen entre sí. Mediante el establecimiento de sesión, los dispositivos negocian la cantidad de tráfico que se puede reenviar en un momento determinado, y los datos que se comunican entre ambos se pueden administrar detenidamente. La sesión se termina solo cuando se completa toda la comunicación.
Entrega confiable
TCP puede implementar un método para garantizar la entrega confiable de los datos. En términos de redes, confiabilidad significa asegurar que cada sección de datos que envía el origen llegue al destino. Por varias razones, es posible que una sección de datos se corrompa o se pierda por completo a medida que se transmite a través de la red. TCP puede asegurar que todas las partes lleguen a destino al hacer que el dispositivo de origen retransmita los datos perdidos o dañados.
Entrega en el mismo orden
Los datos pueden llegar en el orden equivocado, debido a que las redes pueden proporcionar varias rutas que pueden tener diferentes velocidades de transmisión. Al numerar y secuenciar los segmentos, TCP puede asegurar que estos se rearmen en el orden correcto.
Control de flujo
Los hosts de la red cuentan con recursos limitados, como memoria o ancho de banda. Cuando TCP advierte que estos recursos están sobrecargados, puede solicitar que la aplicación emisora reduzca la velocidad del flujo de datos. Esto lo lleva a cabo TCP, que regula la cantidad de datos que transmite el origen. El control de flujo puede evitar la pérdida de segmentos en la red y evitar la necesitad de la retransmisión.
Rol del TCP:
Una vez que TCP establece una sesión, puede hacer un seguimiento de la conversación dentro de esa sesión. Debido a la capacidad de TCP de hacer un seguimiento de conversaciones reales, se lo considera un protocolo con estado. Un protocolo con estado es un protocolo que realiza el seguimiento del estado de la sesión de comunicación. Por ejemplo, cuando se transmiten datos mediante TCP, el emisor espera que el destino acuse recibo de los datos. TCP hace un seguimiento de la información que se envió y de la que se acusó de recibo. Si no se acusa recibo de los datos, el emisor supone que no llegaron y los vuelve a enviar. La sesión con estado comienza con el establecimiento de sesión y finaliza cuando se cierra la sesión con terminación de sesión.
Nota: el mantenimiento de esta información de estado requiere recursos que no son necesarios para un protocolo sin estado, como UDP.
TCP genera sobrecarga adicional para obtener estas funciones. Como se muestra en la ilustración, cada segmento TCP tiene 20 bytes de sobrecarga en el encabezado que encapsula los datos de la capa de aplicación. Este tipo de segmento es mucho más largo que un segmento UDP, que solo tiene 8 bytes de sobrecarga. La sobrecarga adicional incluye lo siguiente:
- Número de secuencia (32 bits): se utiliza para rearmar datos.
- Número de acuse de recibo (32 bits):indica los datos que se recibieron.
- Longitud del encabezado (4 bits):conocido como “desplazamiento de datos”. Indica la longitud del encabezado del segmento TCP.
- Reservado (6 bits): este campo está reservado para el futuro.
- Bits de control (6 bits): incluye códigos de bit, o indicadores, que indican el propósito y la función del segmento TCP.
- Tamaño de la ventana (16 bits):indica la cantidad de segmentos que se puedan aceptar por vez.
- Checksum (16 bits): se utiliza para la verificación de errores en el encabezado y los datos del segmento.
- Urgente (16 bits): indica si la información es urgente.
Algunos ejemplos de aplicaciones que utilizan TCP son los exploradores Web, el correo electrónico y las transferencias de archivos.
Presentación de UDP:
Protocolo de datagramas de usuario (UDP)
UDP se considera un protocolo de transporte de máximo esfuerzo, descrito en RFC 768. UDP es un protocolo de transporte liviano que ofrece la misma segmentación y rearmado de datos que TCP, pero sin la confiabilidad y el control del flujo de TCP. UDP es un protocolo tan simple que, por lo general, se lo describe en términos de lo que no hace en comparación con TCP.
Como se muestra en la ilustración, las siguientes características describen a UDP:
- Sin conexión: UDP no establece una conexión entre los hosts antes de que se puedan enviar y recibir datos.
- Entrega no confiable: UDP no proporciona servicios para asegurar que los datos se entreguen con confianza. UDP no cuenta con procesos que hagan que el emisor vuelva a transmitir los datos que se pierden o se dañan.
- Reconstrucción de datos no ordenada: en ocasiones, los datos se reciben en un orden distinto del de envío. UDP no proporciona ningún mecanismo para rearmar los datos en su secuencia original. Los datos simplemente se entregan a la aplicación en el orden en que llegan.
- Sin control del flujo: UDP no cuenta con mecanismos para controlar la cantidad de datos que transmite el dispositivo de origen para evitar la saturación del dispositivo de destino. El origen envía los datos. Si los recursos en el host de destino se sobrecargan, es probable que dicho host descarte los datos enviados hasta que los recursos estén disponibles. A diferencia de TCP, en UDP no hay un mecanismo para la retransmisión automática de datos descartados.
Rol del UDP:
Aunque UDP no incluye la confiabilidad y los mecanismos de control del flujo de TCP, como se muestra en la ilustración, la entrega de datos de baja sobrecarga de UDP lo convierte en un protocolo de transporte ideal para las aplicaciones que pueden tolerar cierta pérdida de datos. Las porciones de comunicación en UDP se llaman datagramas. El protocolo de la capa de transporte envía estos datagramas como máximo esfuerzo. Algunas aplicaciones que utilizan UDP son el Sistema de nombres de dominios (DNS), el streaming de video y la voz sobre IP (VoIP).
Uno de los requisitos más importantes para transmitir video en vivo y voz a través de la red es que los datos fluyan rápidamente. Las aplicaciones de video y de voz pueden tolerar cierta pérdida de datos con un efecto mínimo o imperceptible, y se adaptan perfectamente a UDP.
UDP es un protocolo sin estado, lo cual significa que ni el cliente ni el servidor están obligados a hacer un seguimiento del estado de la sesión de comunicación. Como se muestra en la ilustración, UDP no se ocupa de la confiabilidad ni del control del flujo. Los datos se pueden perder o recibir fuera de secuencia sin ningún mecanismo de UDP que pueda recuperarlos o reordenarlos. Si se requiere confiabilidad al utilizar UDP como protocolo de transporte, esta la debe administrar la aplicación.
Separación de comunicaciones múltiples:
La capa de transporte debe poder separar y administrar varias comunicaciones con diferentes necesidades de requisitos de transporte. Tome como ejemplo un usuario conectado a una red en un dispositivo final. El usuario envía y recibe correo electrónico y mensajes instantáneos, visita sitios Web y realiza una llamada telefónica de voz sobre IP (VoIP) simultáneamente. Cada una de estas aplicaciones envía y recibe datos a través de la red al mismo tiempo, a pesar de los diferentes requisitos de confiabilidad. Además, los datos de la llamada telefónica no están dirigidos al explorador Web y el texto de un mensaje instantáneo no aparece en un correo electrónico.
Por motivos de confiabilidad, los usuarios necesitan que un correo electrónico o una página Web se reciba y presente por completo para que la información se considere útil. Por lo general, se permiten leves retrasos en la carga de correo electrónico o de páginas Web, siempre y cuando el producto final se muestre en su totalidad y de forma correcta. En este ejemplo, la red administra el reenvío o reemplazo de la información que falta y no muestra el producto final hasta que se hayan recibido y armado todos los datos.
En cambio, la pérdida ocasional de partes pequeñas de una conversación telefónica se puede considerar aceptable. Incluso si se descartan partes pequeñas de algunas palabras, se puede deducir el audio que falta del contexto de la conversación o solicitar que la otra persona repita lo que dijo. Si la red administrara y reenviara segmentos faltantes, se prefiere lo mencionado anteriormente a los retrasos que se producen. En este ejemplo, es el usuario y no la red quien administra el reenvío o reemplazo de la información que falta.
Como se muestra en la ilustración, para que TCP y UDP administren estas conversaciones simultáneas con diversos requisitos, los servicios basados en UDP y TCP deben hacer un seguimiento de las diversas aplicaciones que se comunican. Para diferenciar los segmentos y datagramas para cada aplicación, tanto TCP como UDP cuentan con campos de encabezado que pueden identificar de manera exclusiva estas aplicaciones. Estos identificadores únicos son números de puertos.
Direccionamiento de puertos TCP y UDP:
En el encabezado de cada segmento o datagrama, hay un puerto origen y uno de destino. El número de puerto de origen es el número para esta comunicación asociado con la aplicación que origina la comunicación en el host local. Como se muestra en la ilustración, el número de puerto de destino es el número para esta comunicación relacionada con la aplicación de destino en el host remoto.
Cuando se envía un mensaje utilizando TCP o UDP, los protocolos y servicios solicitados se identifican con un número de puerto. Un puerto es un identificador numérico de cada segmento, que se utiliza para realizar un seguimiento de conversaciones específicas y de servicios de destino solicitados. Cada mensaje que envía un host contiene un puerto de origen y un puerto de destino.
Puerto de destino
El cliente coloca un número de puerto de destino en el segmento para informar al servidor de destino el servicio solicitado. Por ejemplo: el puerto 80 se refiere a HTTP o al servicio Web. Cuando un cliente especifica el puerto 80 en el puerto de destino, el servidor que recibe el mensaje sabe que se solicitan servicios Web. Un servidor puede ofrecer más de un servicio simultáneamente. Por ejemplo, puede ofrecer servicios Web en el puerto 80 al mismo tiempo que ofrece el establecimiento de una conexión FTP en el puerto 21.
Puerto de origen
El número de puerto de origen es generado de manera aleatoria por el dispositivo emisor para identificar una conversación entre dos dispositivos. Esto permite establecer varias conversaciones simultáneamente. En otras palabras, un dispositivo puede enviar varias solicitudes de servicio HTTP a un servidor Web al mismo tiempo. El seguimiento de las conversaciones por separado se basa en los puertos de origen.
Los puertos de origen y de destino se colocan dentro del segmento. Los segmentos se encapsulan dentro de un paquete IP. El paquete IP contiene la dirección IP de origen y de destino. La combinación de las direcciones IP de origen y de destino y de los números de puerto de origen y de destino se conoce como “socket”. El socket se utiliza para identificar el servidor y el servicio que solicita el cliente. Miles de hosts se comunican a diario con millones de servidores diferentes. Los sockets identifican esas comunicaciones.
La combinación del número de puerto de la capa de transporte y de la dirección IP de la capa de red del host identifica de manera exclusiva un proceso de aplicación en particular que se ejecuta en un dispositivo host individual. Esta combinación se denomina socket. Un par de sockets, que consiste en las direcciones IP de origen y destino y los números de puertos, también es exclusivo e identifica la conversación específica entre los dos hosts.
Un socket de cliente puede ser parecido a esto, donde 1099 representa el número de puerto de origen: 192.168.1.5:1099
El socket en un servidor Web podría ser el siguiente: 192.168.1.7:80
Juntos, estos dos sockets se combinan para formar un par de sockets: 192.168.1.5:1099, 192.168.1.7:80
Con la creación de sockets, se conocen los extremos de la comunicación, de modo que los datos puedan moverse desde una aplicación en un host hacia una aplicación en otro host. Los sockets permiten que los procesos múltiples que se ejecutan en un cliente se distingan entre sí. También permiten la diferenciación de múltiples conexiones a un proceso de servidor.
El puerto de origen de la solicitud de un cliente se genera de manera aleatoria. El número de puerto actúa como dirección de retorno para la aplicación que realiza la solicitud. La capa de transporte hace un seguimiento de este puerto y de la aplicación que generó la solicitud de manera que cuando se devuelva una respuesta, esta se envíe a la aplicación correcta. El número de puerto de la aplicación que realiza la solicitud se utiliza como número de puerto de destino en la respuesta que vuelve del servidor.
La Agencia de asignación de números por Internet (IANA) asigna números de puerto. IANA es un organismo normativo responsable de asegurar diferentes estándares de direccionamiento.
Figura 1 |
Existen diferentes tipos de números de puerto, como se muestra en la figura 1:
- Puertos bien conocidos (números del 0 al 1023): estos números se reservan para servicios y aplicaciones. Se utilizan comúnmente para aplicaciones como HTTP (servidor Web), protocolo de acceso a mensajes de Internet (IMAP) o protocolo simple de transferencia de correo (SMTP) (servidor de correo electrónico) y Telnet. Al definir estos puertos bien conocidos para las aplicaciones de los servidores, las aplicaciones cliente se pueden programar para solicitar una conexión a ese puerto en particular y el servicio relacionado.
- Puertos registrados (números del 1024 al 49151): estos números de puerto se asignan a procesos o aplicaciones del usuario. Principalmente, estos procesos son aplicaciones individuales que el usuario elige instalar en lugar de aplicaciones comunes que recibiría un número de puerto bien conocido. Cuando no se utilizan para un recurso del servidor, un cliente puede seleccionar estos puertos de forma dinámica como su puerto de origen.
- Puertos dinámicos o privados (números 49152 a 65535): también conocidos como puertos efímeros, generalmente se los asigna de forma dinámica a las aplicaciones cliente cuando el cliente inicia una conexión a un servicio. El puerto dinámico suele utilizarse para identificar la aplicación cliente durante la comunicación, mientras que el cliente utiliza el puerto bien conocido para identificar el servicio que se solicita en el servidor y conectarse a dicho servicio. No es común que un cliente se conecte a un servicio mediante un puerto dinámico o privado (aunque algunos programas de intercambio de archivos punto a punto lo hacen).
Figura 2 |
En la figura 2, se muestran algunos puertos bien conocidos y registrados comunes en TCP. En la figura 3, se muestran algunos puertos bien conocidos y registrados comunes en UDP.
Figura 3 |
Uso de TCP y UDP
Figura 4 |
Algunas aplicaciones pueden utilizar tanto TCP como UDP (figura 4). Por ejemplo, el bajo gasto de UDP permite que DNS atienda rápidamente varias solicitudes de clientes. Sin embargo, a veces el envío de la información solicitada puede requerir la confiabilidad de TCP. En este caso, el número de puerto bien conocido (53) lo utilizan ambos protocolos con este servicio.
Hay una lista de números de puerto y de aplicaciones asociadas en el sitio Web organizacional de la IANA.
A veces es necesario conocer las conexiones TCP activas que están abiertas y en ejecución en el host de red. Netstat es una utilidad de red importante que puede usarse para verificar esas conexiones. Netstat indica el protocolo que se está usando, la dirección y el número de puerto locales, la dirección y el número de puerto externos y el estado de la conexión.
Las conexiones TCP desconocidas pueden presentar una amenaza de seguridad grave, ya que pueden indicar que hay algo o alguien conectado al host local. Además, las conexiones TCP innecesarias pueden consumir recursos valiosos del sistema y, por lo tanto, enlentecer el rendimiento del host. Netstat debe utilizarse para examinar las conexiones abiertas de un host cuando el rendimiento parece estar comprometido.
Existen muchas opciones útiles para el comando netstat.
Segmentación TCP y UDP:
Anteriormente, se explicó la forma en que se construyen las unidades de datos del protocolo (PDU) mediante la transmisión de datos de una aplicación a través de los diversos protocolos para crear una PDU que después se transmita en el medio. En el host de destino, este proceso se revierte hasta que los datos se puedan transferir a la aplicación.
Algunas aplicaciones transmiten grandes cantidades de datos; en algunos casos, muchos gigabytes. Resultaría poco práctico enviar todos estos datos en una sola gran sección. No puede transmitirse ningún otro tráfico de red mientras se envían estos datos. Una gran sección de datos puede tardar minutos y hasta horas en enviarse. Además, si hubiese errores, se perdería el archivo de datos completo o habría que volver a enviarlo. Los dispositivos de red no cuentan con buffers de memoria lo suficientemente grandes como para almacenar esa cantidad de datos durante la transmisión o recepción. El límite varía según la tecnología de red y el medio físico específico en uso.
La división de datos de aplicación en segmentos asegura que estos se transmitan dentro de los límites de los medios y que los datos de diferentes aplicaciones se puedan multiplexar en los medios.
TCP y UDP: manejo distinto de la segmentación
Como se muestra en la ilustración, cada encabezado del segmento TCP contiene un número de secuencia que permite que las funciones de la capa de transporte en el host de destino vuelvan a armar segmentos en el orden en que se transmitieron. Esto asegura que la aplicación de destino tiene los datos en la misma forma que el emisor la planeó.
Aunque los servicios que utilizan UDP rastrean también las conversaciones entre las aplicaciones, no se encargan del orden en que se transmite la información ni de mantener una conexión. No existe número de secuencia en el encabezado UDP. UDP es un diseño simple y genera menos carga que TCP, lo que produce una transferencia de datos más rápida.
La información puede llegar en un orden distinto del de la transmisión, ya que los distintos paquetes pueden tomar diferentes rutas a través de la red. Una aplicación que utiliza UDP debe tolerar el hecho de que los datos no lleguen en el orden en el que fueron enviados.
No hay comentarios.:
Publicar un comentario