Qué es TCP

Qué es TCP y UDP

Los protocolos TCP y UDP son dos formas que tiene Internet para transferir los datos desde la aplicación de origen a la de destino. Con un protocolo se prioriza que los datos recibidos se correspondan exactamente con los transmitidos y con el otro se prioriza que la comunicación sea rápida y constante, aunque se pierda algún dato. Veamos qué es TCP y UDP.

Por la red Internet fluyen millones de comunicaciones por segundo. Para garantizar que toda la información que sale de un terminal llegue a su destino, resulta muy eficiente dividir cada flujo de datos en paquetes pequeños que son tratados por la red como si fueran una comunicación independiente. Al llegar los paquetes al terminal de destino, se juntan de nuevo antes de ser entregados a la aplicación correspondiente (navegador web, correo electrónico, mensajería, etc.). Para identificar los paquetes que forman parte de una misma comunicación, se le añade información de control en su cabecera.

La información de la cabecera se utiliza para distintas funciones. Las comunicaciones en Internet divide las distintas funciones de gestión en grupos de responsabilidades a los que llama capas. La capa de red, se responsabiliza de añadir la información de control necesaria en la cabecera para que el flujo de información que sale de un terminal llegue al otro (básicamente son el direccionamiento IP). Por su parte, la capa de transporte, se encarga de añadir en la cabecera la información de control necesaria para relacionar los paquetes con las aplicaciones de origen y destino de la comunicación, así como organizarlos antes de entregarlos al destinatario. Existen dos protocolos distintos que pueden hacer esta labor: TCP y UDP.

Los protocolos TCP y UDP en el modelo de capas de Internet

En estos otros artículos se puede consultar información adicional sobre el funcionamiento de los protocolos de internet (Cómo funcionan los protocolos de Internet) y sobre las cabeceras (Cabeceras de los paquetes de internet).

En qué se diferencia TCP y UDP

TCP (Transmission Control Protocol, ‘Protocolo de Control de Transmisión’) y UDP (User Datagram Protocol, ‘Protocolo de Datagrama de Usuario’) se encargan de definir la información que hay que añadir a las cabeceras para que los terminales origen y destino puedan identificar la aplicaciones afectadas. Básicamente, esto se lleva a cabo añadiendo una cabecera en la que se identifica el terminal y la aplicación de origen y destino de la transmisión, así como la información necesaria que permita reordenar los paquetes, antes de formar el flujo de datos que se le entrega a la aplicación de destino.

Lo que identifica a cada terminal (ordenador, smartphone o servidor) conectado a Internet es su número IP. Por otro lado, lo que identifica a cada aplicación dentro de un mismo terminal es el número de puerto. El número de puerto que debe utilizar cada aplicación está regulado, tanto para las aplicaciones de servidor, como para las de los usuarios (clientes). Puede obtener más información sobre los números de puertos en el artículo Cómo funciona un router.

Internet es una red genérica que se utiliza para una multitud de aplicaciones muy diferentes unas de otras. Aunque cada una de ellas puede tener requisitos técnicos muy distintos, básicamente se tienen dos necesidades distintas de transferir los datos por la red:

  • TCP. Transmite los datos exactos. Se utiliza cuando es importante que lo que llegue al destino se corresponda exactamente con lo que salió del origen. Por ejemplo, un texto, datos de control, etc.
  • UDP. Transmite datos en tiempo real. Cuando se transmite voz y vídeo, importa más la velocidad de transmisión del flujo de datos, que el hecho de que algún paquete no sea exacto (de que haya ruido).
TCP vs UDP. Características
TCP vs UDP. Características

Los servicios como correo electrónico, transferencia de archivo o web, necesitan que la información generada en un extremo de la conexión llegue al otro extremo con garantías, en el orden original y sin que se pierda o duplique ningún bit. En estos casos, el protocolo adecuado es TCP.

Cuando se necesita transmitir voz o vídeo, es más importante transmitir con velocidad que garantizar el hecho de que lleguen absolutamente todos los bits, o de que no haya ninguno duplicado. Esto es, es mejor reproducir un pequeño ruido esporádico que parar la comunicación para corregirlo. Para estos casos, el protocolo de transporte utilizado es UDP.

En ambos casos, lo fundamental que debe incluir cada cabecera es la identificación de los terminales y de las aplicaciones de origen y destino de la comunicación. En el caso de TCP, adicionalmente debe incluir el número de orden del paquete dentro de la secuencia y una serie de datos de control que permita detectar los posibles errores de transmisión.

Cabe mencionar que, debido a la naturaleza de cada comunicación, TCP solo se utiliza en comunicaciones punto a punto (unicast), mientras que UDP permite también comunicaciones del tipo multipunto (multicast) o difusión (broadcast).

Protocolo orientado a la conexión

TCP proporciona un flujo fiable de bits en los dos sentidos de la conexión. Garantiza que los bits que salen de la aplicación origen son entregados a la aplicación de destino de una forma exacta, en su mismo orden y sin duplicación. Para hacerlo posible, este tipo de comunicaciones necesita establecer una conexión entre la aplicación de un extremo y otro de la comunicación antes de empezar a transferir datos. Es lo que se conoce como protocolo orientado a la conexión.

Dicho de otra forma, TCP funciona como las comunicaciones telefónicas: se marca el número de destino, se espera a que conteste y, cuando lo hace, se empieza la conversación.

Flujo de datos en TCP y UDP
Flujo de datos en TCP y UDP

Protocolo no orientado a la conexión

UDP no tiene mecanismos para confirmar la recepción de los paquetes, por lo que, entre los paquetes enviados con este protocolo, algunos pueden llegar desordenados, duplicados o puede que no lleguen. En este contexto, no es necesario establecer una conexión entre origen y destino antes de empezar a transmitir. Simplemente se transmite y ya llegará. UDP es un protocolo no orientado a la conexión.

Dicho de otra forma, en este sentido, UDP funciona como el servicio de correo postal: se le pone la dirección del destinatario a la carta y se envía, ya llegará.

Básicamente, el protocolo UDP puede ser especialmente útil para:

  • Aquellas redes que ya son suficientemente fiables por sí mismas.
  • Comunicaciones que no requieren más de un paquete.
  • Servicios que disponen de sus propios procedimientos de corrección de error.
  • Servicios de transmisión de voz o vídeo donde la velocidad es más importante que la fiabilidad.

Otros protocolos de transporte

Aunque TCP y UDP son los protocolos de la capa transporte más utilizados por las aplicaciones de Internet, en realidad existe una larga lista de protocolos de este tipo. La IANA (Internet Assigned Numbers Authority, ‘Agencia de Asignación de Números de Internet’) dispone de una lista completa (www.iana.org/assignments/protocol-numbers).

Cada aplicación tiene establecido el protocolo de la capa de transporte que va a utilizar. Evidentemente, ese protocolo lo tienen que saber manejar tanto un extremo como otro de la comunicación.

Cabecera de los paquetes TCP

Si se necesita comprender mejor el funcionamiento de las comunicaciones TCP, es necesario analizar los datos de su cabecera. Los componentes, los campos de la cabecera del protocolo TCP son los siguientes:

  • Puerto origen. Son 16 bits que representan el número de puerto del equipo remitente. Este número identifica la aplicación concreta que transmite los datos. Existen números de puertos ya asignados a ciertas aplicaciones conocidas. Por ejemplo, este es el caso del puerto 80, asignado al programa servidor de páginas Web.
  • Puerto de destino. Se trata de 16 bits que representan el número de puerto del equipo destino. Este número identifica la aplicación concreta del equipo de destino que recibirá los datos.
  • Número de secuencia (Sequence number). Es un número secuencial de 32 bits dedicado a asegurar que los paquetes en el destino son reensamblados en el orden correcto.
  • Confirmación (Acknowledgement). El extremo que envía el paquete le indica al otro extremo que ha recibido correctamente todos los paquetes anteriores a este número.
Formato de la cabecera de un paquete TCP
Formato de la cabecera de un paquete TCP
  • Tamaño (Offset). Indica la cantidad de bloques de 32 bits incluidos en la cabecera del paquete.
  • Reservado. Se trata de 6 bits que están siempre puestos a cero.
  • Indicadores (Flags). Se trata de 6 bits dedicados a determinadas labores de control. El objetivo de cada uno de ellos es el siguiente:
    • URG. Urgencia. Cuando está a uno le indica al receptor que lea el dato del campo Puntero de urgencia.
    • ACK. Cuando está a uno le indica al receptor que este paquete incluye un número de confirmación.
    • PSH. Envío forzado (Push). Cuando está a uno le indica a la capa TCP del destino que debe pasar a la capa aplicación estos datos sin demora. Esto evita que los datos puedan estar esperando en TCP a que se complete un segmento. En ocasiones, una aplicación necesita estar segura de que la aplicación de destino ha recibido todos los datos enviados.
    • RST. Inicializar (Reset). Indica que se corte la conexión actual.
    • SYN. Sincronización. Este bit se pone a uno en el primer paquete de una sesión TCP para indicarle al destino que empiece a contar la secuencia de números de los paquetes. Este bit nunca estará a uno durante el resto de la sesión.
    • FIN. Indica que el remitente ha terminado de enviar datos. Esto hace que se termine la sesión.
  • Ventana (Window). Indica el número de octetos (bytes) que puede aceptar el destinatario. Esta información la envía el destinatario con cada paquete de confirmación (Acknowledgment). El emisor no puede enviar más datos, octetos, que los indicados por este tamaño de ventana.
  • Suma de verificación (Checksum). Este valor se utiliza para comprobar la integridad de la cabecera y de los datos. La suma de verificación de los paquetes IP verifica la integridad de la cabecera, pero la de los paquetes TCP comprueba también la integridad de los datos.
  • Puntero de datos urgentes.Cuando el indicador URG está a uno, indica cuál es el último byte de datos que es urgente. Al destinatario le sirve para saber cuántos datos urgentes llegan. Este campo lo utilizan algunas aplicaciones como Telnet o FTP.
  • Opciones. Este espacio hace posible que determinadas aplicaciones puedan intercambiarse parámetros adicionales.
  • Relleno (Padding). Se tratan de bits de relleno para completar los 32 bits no cubiertos por los datos de opciones.

El valor del campo Ventana depende del tiempo que necesita un paquete para viajar de un extremo a otro. Es lo que se conoce como latencia. Tiempos menores a 100 milisegundos se considera una latencia baja, mientras que tiempos mayores a 200 milisegundos se considera una latencia alta. Los tiempos normales están entre ambos valores. A mayor tamaño de ventana menor latencia.

Para comprobar la latencia de nuestra conexión se puede utilizar la utilidad Tracert, presente en la mayoría de los sistemas operativos. Por otro lado, en Windows se puede modificar el tiempo de latencia con la utilidad Regedit.

Cabecera de los paquetes TCP

En cuanto a los paquetes UDP, este protocolo es muy ligero y su cabecera sólo necesita estos pocos datos:

  • Números de puerto origen.
  • Número de puerto destino.
  • Longitud del paquete UDP.
  • Suma de verificación.
Formato de la cabecera de un paquete UDP
Formato de la cabecera de un paquete UDP

Establecimiento de una sesión TCP

Como se ha visto anteriormente, la diferencia principal entre UDP y TCP es que el primero permite enviar información muy rápidamente, ya que no es necesario establecer una conexión con el receptor ni esperar una respuesta. Sin embargo, las comunicaciones con TCP requieren que se inicie una sesión antes del intercambio de datos. De igual modo, cuando se termina la comunicación hay que cerrar dicha sesión. La apertura y cierre de sesión se lleva a efecto intercambiándose algunas cabeceras TCP sin carga de datos, sin añadir datos.

La cabecera TCP tiene un campo llamado Indicadores (Flags) que se utiliza para labores de control. Una de esas labores es el inicio y cierre de sesión. Para ello se hace uso de los bits SYN (sincronización), ACK (confirmación) y FIN (terminar).

Una sesión TCP se inicia con el envío de un paquete TCP, con el bit SYN puesto a uno y un número de secuencia inicial indicado en el campo número de secuencia. El extremo B responde con un paquete con los bits SYN y ACK puestos a uno, su propio número de secuencia, y el número de confirmación igual al número de secuencia enviado por el extremo A más uno.

Cuando el extremo A recibe este paquete considera que la sesión se ha establecido y responde con un paquete con el bit ACK a uno y el número de confirmación igual al número de secuencia enviado por el extremo B más uno. Con esto, el extremo B considera también que la sesión está establecida. A partir de este momento los datos pueden fluir en cualquier dirección. A este procedimiento de establecimiento de sesión se le conoce como establecimiento en tres pasos (Three way Handshake).

Establecimiento de sesión en tres pasos
Establecimiento de sesión en tres pasos

Además de los datos anteriores, el extremo A debe incluir en su primer paquete el número de puerto de destino y de origen. El número de puerto de destino depende del tipo de servidor al que se conecte. Por ejemplo, para un servidor Web el número de puerto sería el 80 y para un servidor FTP el 20. Por su parte, el número de puerto origen dependerá de la aplicación utilizada. En cualquier caso, se tratará de un número entre 1.024 y 65.536.

En el flujo de la comunicación se puede dar la circunstancia de que un equipo envíe datos más rápidamente de lo que el otro equipo puede asimilar. Cada equipo va guardando los datos que va recibiendo del otro extremo en una memoria intermedia llamada ventana. Cuando lee los datos de la ventana la vacía y envía un mensaje de confirmación al remitente. Por tanto, en el peor de los casos (que se quede bloqueado), un equipo siempre podrá recibir, al menos, los bytes que le quepan en la ventana. Esto quiere decir que, entre cada mensaje de confirmación, cada extremo sólo debe enviar, como máximo, el número de bytes de la ventana del otro extremo. El campo ventana está incluido en todos los paquetes TCP, por lo que cada extremo de la comunicación es consciente de las limitaciones del otro extremo.

Para cerrar la sesión se sigue un proceso de cuatro pasos. El terminal A envía un paquete con el bit FIN puesto a uno. El terminal B le responde con ACK puesto a uno (confirmando la recepción de FIN) y a continuación envía el bit FIN puesto a uno. Para terminar, el terminal A responde con ACK puesto a uno (confirmando la recepción de FIN). En este momento la sesión queda cerrada.

Más información

Aquí se ha expuesto de forma resumida qué son los protocolos TCP y UDP, para qué valen y cómo se utilizan. Si se tiene interés en profundizar en este tema, este blog dispone de muchos otros contenidos relacionados. Por favor, utilice el buscador de contenidos que tenemos en la cabecera del blog.

Estos son algunos ejemplos de otros artículos que pueden ser de interés:

REF: FW-PG50

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *