05
junio
2020

Protocolo TCP

tcp

Protocolo TCP

Dentro de la familia de protocolos de Internet, el TCP (Transmission Control Protocol o Protocolo de Control de Transmisión), conforma el grupo asociado a la Capa de Transporte del Modelo de Referencia OSI, y permite establecer una conexión entre dos puntos terminales en una red informática para el intercambio mutuo de información

En el proceso de comunicación mediante el empleo del protocolo TCP, cualquier pérdida de datos que se detecte, se soluciona, por lo que se considera un protocolo fiable.

El protocolo TCP es una forma segura de intercambio de datos, al requerir de la conexión y autorización entre el emisor y el receptor, o el cliente y el servidor, antes de producirse la transferencia; una vez ambas partes hayan autorizado la transmisión, podrá iniciarse el envío y recepción de datos. En este sentido, se considera orientado a la conexión.

Comúnmente, el protocolo TCP se combina con el IP (Internet Protocol o Protocolo de Internet) y ese protocolo forma la base de la trasmisión de datos de la gran mayoría de las redes y sus servicios sobre Internet, conocida como TCP/IP.


Funcionamiento

El protocolo TCP permite la transmisión de información en ambas direcciones, por tanto, los sistemas que se comunican pueden enviar y recibir datos de forma simultánea.

Las unidades de transmisión básicas que emplea el protocolo son paquetes que, aparte de los datos trasmitidos, también pueden contener información de control. El establecimiento y la interrupción de las conexiones, que se pueden catalogar como de terminal a terminal, así como la transmisión de datos en sí, la realiza el protocolo TCP.

El funcionamiento del protocolo TCP se activa mediante distintas aplicaciones de red, como los navegadores (Browsers) o los servidores. Cada conexión se debe identificar siempre claramente mediante dos puntos terminales definidos (cliente y servidor).

En este contexto, qué lado desempeña el papel de cliente y cuál el de servidor es indiferente, lo que importa es que se cuente con una pareja ordenada de dirección IP y puerto (también denominada socket) en cada punto terminal.

Esto significa que un servidor puede proveer a varios clientes, varios servicios a la vez, empleando diferentes números de puertos. Los puertos suelen agruparse en tres categorías básicas: conocidos, registrados y dinámicos/privados:

  • Los puertos conocidos, oscilan entre el 0 y 1023, son establecidos por la Autoridad de Asignación de Números de Internet (IANA: Internet Assigned Numbers Authority), y son utilizados frecuentemente por los proveedores de servicios. Entre ellos se encuentran: FTP (21), SSH (22), TELNET (23), SMTP (25) y HTTP (80).
  • Los puertos registrados, oscilan entre el 1024 y 49151 y pueden ser usados de manera temporal por las aplicaciones, pero también pueden representar servicios registrados por un tercero.
  • Los puertos dinámicos o privados, oscilan entre el 49152 y 65535, y se pueden también utilizar por los usuarios finales, pero son menos comunes.


Triple Apretón de Manos

Para que el establecimiento de una conexión TCP válida sea posible, ambos puntos terminales deben contar con una dirección IP unívoca, y deben haber declarado y habilitado el puerto deseado a través del cual se realizará la transmisión de datos.

Mientras que la dirección IP funciona como característica de identificación, el puerto sirve para asignar las conexiones a las aplicaciones, tanto del emisor como del receptor.

La secuencia específica para establecer una conexión por el protocolo TCP es la siguiente:

  1. El cliente que desea establecer la conexión envía al servidor un paquete o segmento SYN (del inglés synchronize = sincronizar) con un número de secuencia individual y aleatorio. Este número garantiza la transmisión completa en el orden correcto (sin duplicados).
  2. Si el servidor ha recibido el paquete, confirma el establecimiento de la conexión mediante el envío de un paquete SYN-ACK (del inglés acknowledgement = confirmación) incluido el número de secuencia del cliente después de sumarle 1. De forma adicional, transmite un número de secuencia propio al cliente.
  3. Para finalizar, el cliente confirma la recepción del segmento SYN-ACK mediante el envío de un paquete ACK propio, que en este caso cuenta con el número de secuencia propio del servidor después de sumarle 1. En este punto también puede transmitir ya los primeros datos al servidor.

Como el establecimiento de la conexión mediante TCP implica un total de tres pasos para ponerse de acuerdo, se ha acuñado el nombre de triple “apretón de manos” (hand shake) para este proceso.

Es oportuno acotar que en el protocolo TCP, los datos se entregan en la misma secuencia en la que se envían, estableciéndose los parámetros necesarios para un intercambio ordenado, correcto, y sobre todo seguro; además, sirve de capa intermedia entre una aplicación y el protocolo IP, supliendo las carencias de seguridad de este último.


Segmento TCP

Una de las funciones del protocolo TCP es su capacidad para emitir mensajes de tamaño variable para controlar la velocidad, los cuales son conocidos como segmento. En este sentido, cada uno, además de contener los datos útiles, tiene un encabezado con elementos de control, que permitirán sincronizar las transmisiones y garantizar su recepción.

Un segmento TCP está formado por una secuencia de bits que desde su comienzo significan:

  • Puerto de origen (16 bits): puerto relacionado con la aplicación en curso en el dispositivo de origen.
  • Puerto de destino (16 bits): puerto relacionado con la aplicación en curso en el dispositivo de destino.
  • Número de secuencia (32 bits): indica el número de secuencia del segmento. Al establecerse la conexión, como la comunicación puede fluir en ambos sentidos, cada extremo genera un número aleatorio y envía éste como inicio de secuencia para la transmisión de datos.
  • Número de acuse de recibo (32 bits): también llamado número de descargo, indica el número de secuencia del siguiente segmento que se espera recibir; no con el número del último segmento recibido.
  • Margen de datos (4 bits): esto permite ubicar donde comienzan los datos en el segmento, pues estos pueden ser de tamaño variable.
  • Reservado (6 bits): este campo en la actualidad se emplea muy poco, pero se proporciona para uso futuro.
  • Indicadores (6 bit): los indicadores representan información adicional:
    • URG: si este indicador está fijado en 1, el segmento se debe procesar en forma urgente.
    • ACK: si este indicador está fijado en 1, el paquete es un acuse de recibo.
    • PSH: si este indicador está fijado en 1, el paquete opera de acuerdo con el método PUSH (procesar los datos existentes sin esperar a completar el segmento).
    • RST: si este indicador está fijado en 1, se restablece la conexión.
    • SYN: si este indicador está fijado en 1, indica un pedido para establecer una conexión.
    • FIN: si este indicador está fijado en 1, se interrumpe la conexión.
  • Ventana (16 bits): campo que permite saber la cantidad de bytes que el receptor desea recibir sin acuse de recibo.
  • Suma de control (24 bit): suma de comprobación de errores del paquete para verificar la integridad del mismo.
  • Puntero urgente (16 bits): se utiliza para enviar datos urgentes que tienen preferencia sobre todos los demás, e indica además la ubicación de los datos que siguen a los urgentes. Un mismo paquete puede contener tanto datos urgentes (al principio) como normales (después de los urgentes).
  • Opciones (tamaño variable): se emplea para utilizar funciones TCP que no pertenecen al encabezado general.
  • Relleno: se utiliza para que la longitud de la cabecera sea múltiplo de 32 bits.

Antes de la transmisión, el emisor y el receptor se ponen de acuerdo en cuanto al tamaño máximo de los paquetes de datos que se van a enviar. Por defecto se permiten hasta 1500 bytes por paquete, y si se desea otro, es necesario especificarlo a través del campo de opciones.

Lo anterior impide que el protocolo TCP pueda transmitir segmentos muy grandes, como en el caso de imágenes o videos, por ejemplo; sin embargo, para ello emplea la segmentación, en la que los datos de la aplicación se dividen en varios bloques antes del transporte, se numeran y se envían en un orden aleatorio.

Como el receptor debe confirmar la aceptación de cada uno de los paquetes y puede reconstruir el orden real mediante los números de secuencia, no existe ningún problema para recomponer todos los datos recibidos después de la transmisión.


Ventajas y Desventajas

El Protocolo TCP garantiza la recepción y el acuse de recibo de los paquetes de datos que se envían, por lo que se considera fiable; está orientado a la conexión, lo que significa que requiere que los dispositivos establezcan primero un canal seguro antes de transmitir mensajes, y con ello garantiza que ningún paquete se corromperá o se perderá durante el tránsito.

Sin embargo, resulta algo lento en determinados tipos de redes, debido a que su diseño le obliga a constatar que los datos transmitidos realmente hayan sido recibidos en tiempo y con integridad.

En redes inalámbricas, el protocolo TCP no tiene un excelente rendimiento, debido principalmente a que los enlaces tienden a perder paquetes durante el tránsito, producto de las interferencias en el canal de radio. Como el protocolo requiere un conjunto completo de paquetes para entregar el mensaje, puede causar un breve retraso en la transmisión cuando estos se pierden en el camino, lo que se traduce en un tiempo de espera más largo.

No obstante, el protocolo TCP a pesar de tener ya más de cuatro décadas, sigue empleándose en todas las comunicaciones que se producen en la red de redes, y sin su desarrollo, el Internet de la actualidad sería muy diferente.

Como dato curioso, el nacimiento del protocolo TCP, al igual que muchos otros avances tecnológicos, se produjo en un lugar extraño: desde una furgoneta se produjo la primera transmisión usando el protocolo que cambiaría el rumbo de Internet.