Protocolo TCP: qué es, para qué sirve, ejemplos...
TCP (que significa Protocolo de Control de Transmisión) es uno de los principales protocolos de la capa de transporte del modelo TCP/IP.
¿Qué es el protocolo TCP?
En el nivel de aplicación, posibilita la administración de datos que vienen del nivel más bajo del modelo, o van hacia él, (es decir, el protocolo IP). Cuando se proporcionan los datos al protocolo IP, los agrupa en datagramas IP, fijando el campo del protocolo en 6 (para que sepa con anticipación que el protocolo es TCP). TCP es un protocolo orientado a conexión, es decir, que permite que dos máquinas que están comunicadas controlen el estado de la transmisión.
¿Cuáles son las características del protocolo TCP?
Entre las principales características del protocolo TCP se pueden mencionar las siguientes: permite poner nuevamente los datagramas en orden cuando vienen del protocolo IP, permite que el monitoreo del flujo de los datos y así evita la saturación de la red, permite que los datos se formen en segmentos de longitud variada para entregarlos al protocolo IP, permite multiplexar los datos, es decir, que la información que viene de diferentes fuentes (por ejemplo, aplicaciones) en la misma línea pueda circular simultáneamente. Por último, TCP permite comenzar y finalizar la comunicación amablemente.
¿Para qué sirve el protocolo TCP?
Con el uso del protocolo TCP, las aplicaciones pueden comunicarse en forma segura (gracias al sistema de acuse de recibo del protocolo TCP) independientemente de las capas inferiores. Esto significa que los routers (que funcionan en la capa de Internet) solo tienen que enviar los datos en forma de datagramas, sin preocuparse con el monitoreo de datos porque esta función la cumple la capa de transporte (o más específicamente el protocolo TCP).
Durante una comunicación usando el protocolo TCP, las dos máquinas deben establecer una conexión. La máquina emisora (la que solicita la conexión) se llama cliente, y la máquina receptora se llama servidor. Por eso es que decimos que estamos en un entorno Cliente-Servidor.
Las máquinas de dicho entorno se comunican en modo en línea, es decir, que la comunicación se realiza en ambas direcciones.
Para posibilitar la comunicación y que funcionen bien todos los controles que la acompañan, los datos se agrupan; es decir, que se agrega un encabezado a los paquetes de datos que permitirán sincronizar las transmisiones y garantizar su recepción.
Otra función del TCP es la capacidad de controlar la velocidad de los datos usando su capacidad para emitir mensajes de tamaño variable. Estos mensajes se llaman segmentos.
¿Qué es la función multiplexión?
TCP posibilita la realización de una tarea importante: multiplexar/demultiplexar; es decir transmitir datos desde diversas aplicaciones en la misma línea o, en otras palabras, ordenar la información que llega en paralelo.
Estas operaciones se realizan empleando el concepto de puertos (o conexiones), es decir, un número vinculado a un tipo de aplicación que, cuando se combina con una dirección de IP, permite determinar en forma exclusiva una aplicación que se ejecuta en una máquina determinada.
¿Qué es el formato de los datos en TCP?
Un segmento TCP está formado de la siguiente manera:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Puerto de origen | Puerto de destino | ||||||||||||||||||||||||||||||
Número de secuencia | |||||||||||||||||||||||||||||||
Número de acuse de recibo | |||||||||||||||||||||||||||||||
Margen de los datos |
Reservado | URG | ACK | PSH | RST | SYN | FIN | Ventana | |||||||||||||||||||||||
Suma de control | Puntero urgente | ||||||||||||||||||||||||||||||
Opciones | Relleno | ||||||||||||||||||||||||||||||
Datos |
Significado de los diferentes campos:
- Puerto de origen (16 bits): puerto relacionado con la aplicación en curso en la máquina origen.
- Puerto de destino (16 bits): puerto relacionado con la aplicación en curso en la máquina destino.
- Número de secuencia (32 bits): cuando el indicador SYN está fijado en 0, el número de secuencia es el de la primera palabra del segmento actual.
- Cuando SYN está fijado en 1, el número de secuencia es igual al número de secuencia inicial utilizado para sincronizar los números de secuencia (ISN).
- Número de acuse de recibo (32 bits): el número de acuse de recibo, también llamado número de descargo se relaciona con el número (secuencia) del último segmento esperado y no el número del último segmento recibido.
- Margen de datos (4 bits): esto permite ubicar el inicio de los datos en el paquete. Aquí, el margen es fundamental porque el campo opción es de tamaño variable.
- Reservado (6 bits): un campo que actualmente no está en uso pero se proporciona para el uso futuro.
- Indicadores (6x1 bit): los indicadores representan información adicional:
- URG: si este indicador está fijado en 1, el paquete se debe procesar en forma urgente.
- ACK: si este indicador está fijado en 1, el paquete es un acuse de recibo.
- PSH (PUSH): si este indicador está fijado en 1, el paquete opera de acuerdo con el método PUSH.
- RST: si este indicador está fijado en 1, se restablece la conexión.
- SYN: el indicador SYN de TCP 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 (CRC): la suma de control se realiza tomando la suma del campo de datos del encabezado para poder verificar la integridad del encabezado.
- Puntero urgente (16 bits): indica el número de secuencia después del cual la información se torna urgente.
- Opciones (tamaño variable): diversas opciones
- Relleno: espacio restante después de que las opciones se rellenan con ceros para tener una longitud que sea múltiplo de 32 bits.
¿En qué consiste la confiabilidad de las transferencias mediante el protocolo TCP?
El protocolo TCP permite garantizar la transferencia de datos confiable, a pesar de que usa el protocolo IP, que no incluye ningún monitoreo de la entrega de datagramas. De hecho, el protocolo TCP tiene un sistema de acuse de recibo que permite al cliente y al servidor garantizar la recepción mutua de datos.
Cuando se emite un segmento, se lo vincula a un número de secuencia. Con la recepción de un segmento de datos, la máquina receptora devolverá un segmento de datos donde el indicador ACK esté fijado en 1 (para poder indicar que es un acuse de recibo) acompañado por un número de acuse de recibo que equivale al número de secuencia anterior.
Además, usando un temporizador que comienza con la recepción del segmento en el nivel de la máquina originadora, el segmento se reenvía cuando ha transcurrido el tiempo permitido, ya que en este caso la máquina originadora considera que el segmento está perdido.
Sin embargo, si el segmento no está perdido y llega a destino, la máquina receptora lo sabrá, gracias al número de secuencia, que es un duplicado, y sólo retendrá el último segmento que llegó a destino.
¿Cómo establecer una conexión TCP?
Considerando que este proceso de comunicación, que se produce con la transmisión y el acuse de recibo de datos, se basa en un número de secuencia, las máquinas originadora y receptora (cliente y servidor) deben conocer el número de secuencia inicial de la otra máquina.
La conexión establecida entre las dos aplicaciones a menudo se realiza siguiendo el siguiente esquema: los puertos TCP deben estar abiertos; la aplicación en el servidor es pasiva, es decir, que la aplicación escucha y espera una conexión; la aplicación del cliente realiza un pedido de conexión al servidor en el lugar donde la aplicación es abierta pasiva. La aplicación del cliente se considera abierta activa.
Las dos máquinas deben sincronizar sus secuencias usando un mecanismo comúnmente llamado negociación en tres pasos que también se encuentra durante el cierre de la sesión.
Este diálogo posibilita el inicio de la comunicación porque se realiza en tres etapas, como su nombre lo indica. En la primera etapa, la máquina originadora (el cliente) transmite un segmento donde el indicador SYN está fijado en 1 (para indicar que es un segmento de sincronización), con número de secuencia N llamado número de secuencia inicial del cliente. En la segunda etapa, la máquina receptora (el servidor) recibe el segmento inicial que viene del cliente y luego le envía un acuse de recibo, que es un segmento en el que el indicador ACK está fijado en 1 y el indicador SYN está fijado en 1 (porque es nuevamente una sincronización). Este segmento incluye el número de secuencia de esta máquina (el servidor), que es el número de secuencia inicial para el cliente. El campo de mayor importancia en este segmento es el de acuse de recibo que contiene el número de secuencia inicial del cliente incrementado en 1. Por último, el cliente transmite un acuse de recibo, que es un segmento en el que el indicador ACK está fijado en 1 y el indicador SYN está fijado en 0 (ya no es un segmento de sincronización). Su número de secuencia ha sido incrementado y el acuse de recibo indica el número de secuencia inicial del servidor incrementado en 1.
Después de esta secuencia con tres intercambios, las dos máquinas están sincronizadas y la comunicación puede comenzar.
Existe una técnica de piratería llamada falsificación de IP, que permite corromper este enlace de aprobación con fines maliciosos.
¿Qué es el método de la ventana corrediza?
En muchos casos, es posible limitar la cantidad de acuses de recibo con el fin de aliviar el tráfico en la red. Esto se logra fijando un número de secuencia después del cual se requiera un acuse de recibo. Este número en realidad se guarda en el campo ventana del encabezado TCP/IP.
Este método se llama efectivamente el método de la ventana corrediza porque, en cierta medida, se define una serie de secuencias que no necesitan acuses de recibo y que se desplaza a medida que se reciben los acuses de recibo.
Además, el tamaño de esta ventana no es fijo. De hecho, el servidor puede incluir el tamaño de la ventana que considera más apropiado en sus acuses de recibo guardándolo en el campo ventana. De este modo, cuando el acuse de recibo indica un pedido para aumentar la ventana, el cliente se desplazará al borde derecho de la ventana.
Por el contrario, en el caso de una reducción, el cliente no desplazará el borde derecho de la ventana hacia la izquierda sino que esperará que avance el borde izquierdo (al llegar los acuses de recibo).
¿Cómo terminar una conexión TCP?
El cliente puede pedir que se termine una conexión del mismo modo que el servidor.
Para terminar una conexión se procede de la siguiente manera: una de las máquinas envía un segmento con el indicador FIN fijado en 1, y la aplicación se pone en estado de espera, es decir que deja de recibir el segmento actual e ignora los siguientes. Después de recibir este segmento, la otra máquina envía un acuse de recibo con el indicador FIN fijado en 1 y sigue enviando los segmentos en curso. Después de esto, la máquina informa a la aplicación que se ha recibido un segmento FIN y luego envía un segmento FIN a la otra máquina, que cierra la conexión.