Durante los primeros años de Internet, el Protocolo de Internet (IP) era el único protocolo que la gente usaba para conectarse a Internet. El problema con IP era que podías enviar un mensaje y no estar seguro de si el destinatario lo recibiría o no. Por esta razón, se estableció TCP/IP.
TCP/IP asegura que todos los datos que envías lleguen a su destinatario. Lo hace proporcionando al cliente y al servidor una conexión segura antes de enviar datos. Esta conexión segura se establece a través de un proceso conocido como protocolo de enlace de tres vías, también conocido como protocolo de enlace TCP/IP.
¿Qué es un apretón de manos de tres vías?
Un protocolo de enlace de tres vías (intercambio de enlace TCP/IP) son las tres primeras interacciones entre un cliente y un servidor que intentan establecer una conexión TCP. Estas interacciones iniciales son esenciales para establecer una conexión segura. En esta fase, tanto el cliente como el servidor acordarán los parámetros que utilizarán para comprobar y verificar los paquetes de datos entrantes y salientes. Estos parámetros estarán en forma de segmentos TCP.
¿Qué es un segmento TCP?
En una conexión TCP/IP, todos los datos que se envían deben cortarse y estructurarse en lo que se conoce como segmentos TCP. Estos segmentos contienen información como direcciones IP, puertos, bits de marca, números de secuencia, números de reconocimiento y datos opcionales o carga útil.
Las primeras tres interacciones (apretón de manos de tres vías) solo contendrán encabezados de segmento TCP sin carga útil ni datos adjuntos. Aquí hay una muestra de un segmento TCP
Tenga en cuenta que la ilustración anterior es solo para TCP. Un segmento TCP/IP completo requiere ambos Direcciones IP del remitente y el receptor en la parte superior del segmento TCP anterior.
Cada vez que envía un paquete a una persona, el servicio de entrega le solicita que complete un formulario de información y luego lo adjunte al paquete antes del envío. De manera similar, TCP requiere que el remitente adjunte un encabezado de segmento (formulario de información) a los datos (paquete) antes de comenzar a enviar el segmento (paquete) al destinatario.
Cada vez que un cliente se comunica con un servidor, ambas partes deberán formatear sus interacciones en forma de un segmento TCP. Un segmento TCP comprende un encabezado de segmento TCP adjunto a los datos que intenta enviar. El remitente deberá completar la información que requiere el jefe de segmento.
Para un apretón de manos de tres vías, el remitente deberá completar lo siguiente:
- Puerto de origen: Identifica el puerto del remitente
- Puerto de destino: Identifica el puerto del receptor
- Secuencia de números: Indica la secuencia del segmento.
- Número de acuse de recibo: Significa que un segmento ha sido reconocido agregando uno al número de secuencia dado
Además de completar los campos de encabezado de segmento, el remitente también debe seleccionar un bit de marca. Hay seis bits de bandera en total, pero para un apretón de manos de tres vías, solo necesitará los dos siguientes:
- SYN: Da un número de secuencia. Este número de secuencia se utilizará para contar la secuencia de todos los segmentos entrantes durante el resto de la interacción.
- RECONOCIMIENTO: Indica que el receptor del número SYN acepta la solicitud de conexión sumando uno (1) al número SYN proporcionado.
Ahora que sabe qué es un segmento TCP, veamos cómo se usa en un protocolo de enlace de tres vías.
Cómo funciona un apretón de manos de tres vías
Se establece un protocolo de enlace de tres vías cuando tanto el cliente como el anfitrión han intercambiado información y reconocido los números de secuencia del otro. Como su nombre lo indica, un apretón de manos de tres vías se realiza en tres pasos.
Primero, el cliente envía un segmento SYN puro que indica que quiere una conexión. En segundo lugar, el servidor responde con un segmento SYN-ACK, lo que significa que ha reconocido la solicitud y está enviando su propio número SYN para que el cliente lo reconozca. En tercer lugar, el cliente envía un segmento ACK al servidor para notificarle que el número SYN del servidor ha sido reconocido y se utilizará para conexiones posteriores.
Un apretón de manos de tres vías se verá así:
Desglosémoslo y observemos los segmentos para que sepa qué sucede exactamente cuando el cliente y el servidor intercambian y reconocen los números de secuencia.
Paso 1: el cliente envía un segmento SYN
El cliente envía una solicitud de conexión enviando un segmento SYN al servidor. El cliente usa la dirección IP del cliente para ubicar el servidor y enviar el segmento TCP.
Para reducir la complejidad del segmento, ignoremos algunos campos de segmento y concentrémonos en las necesidades básicas para una conexión de protocolo de enlace de tres vías. Esto incluye el puerto de origen, el puerto de destino, el número de secuencia, el número de reconocimiento y qué tipo de bit de bandera se usa.
Y con eso, un segmento SYN/request debería verse así:
El puerto del cliente es un número aleatorio entre 49152 y 65536. Este rango de puertos es el rango acordado que los dispositivos públicos pueden usar dinámicamente para conectarse a Internet. Los intervalos de puertos del 1024 al 49151 son privados. Tendrán que estar registrados por una entidad para utilizar un puerto dentro del rango especificado. Los números de puerto inferiores a 1024 son puertos reservados para diversas funciones y protocolos de Internet, como FTP (puerto 20), SMTP (puerto 25), DNS (puerto 53) y HTTP (puerto 80).
En la vida real, un número de secuencia es un número aleatorio. Para el ejemplo, usamos 0000000000 para que sea más fácil de visualizar.
Tome nota del número de secuencia a medida que avanzamos en los pasos. Actualmente, es 000000000. Actualmente no hay un número de reconocimiento ya que no hay nada que reconocer.
Paso 2: el servidor responde con un segmento SYN-ACK
Una vez que el servidor recibe un segmento SYN, responderá enviando un segmento ACK que contiene el número de reconocimiento. El número de reconocimiento será el número de secuencia del cliente más uno (1).
Mira el puerto de origen. Muestra que el segmento es del puerto 20, lo que indica que vino del servidor como respuesta.
Ahora, mire el número de reconocimiento. Es 0000000001, que es el número de secuencia del cliente (0000000000) más uno (1). Así es como se rastrea un segmento. Digamos que el cliente recibió una respuesta de segmento ACK donde el número de reconocimiento es 0000000002. Esto le indicaría al cliente que faltaba el segmento 0000000001 y que el cliente tendrá que esperar hasta que llegue para que no experimente pérdida de paquetes.
Como puede ver, se activan dos bits de bandera: SYN y ACK.
Además de reconocer el número de secuencia del cliente, el servidor también enviará su propio número de secuencia para que el cliente reconozca el número de secuencia del servidor más uno (1). En nuestro ejemplo, usamos 1111111111 como el número de secuencia del servidor. Nuevamente, en el mundo real, este número es aleatorio.
Tenga en cuenta que los números de secuencia del cliente y del servidor no tienen que coincidir. Siempre que ambas partes reconozcan el número de secuencia único del otro, la conexión será confiable.
Paso 3: el cliente responde con un segmento ACK
Finalmente, el cliente reconoce el número de secuencia del servidor.
El segmento final es un segmento ACK del cliente.
Como puede, el cliente reconocerá el número de secuencia del servidor respondiendo con el número de secuencia del servidor (1111111111) más uno (1), que es 1111111112.
El cliente y el servidor ya no enviarán un número de secuencia ya que el inicio de la secuencia ya ha sido reconocido. Sin embargo, ambas partes esperarán segmentos de reconocimiento que continúen con números de secuencia más uno (1) y el número de bytes a lo largo de la interacción. En este caso, el cliente espera que la siguiente respuesta del servidor tenga un ACK de 0000000002 (si no hay datos adjuntos).
¡Después de lo cual, se establece el apretón de manos de tres vías!
Comprender cómo funcionan las conexiones de red
Ahora que ha aprendido cómo funciona un protocolo de enlace de tres vías, también le resultará más fácil comprender cómo funciona TCP después del protocolo de enlace. El cliente y el servidor comenzarán a enviar datos cuando se establezca el protocolo de enlace. Esta vez se usará el formato de segmento completo, más los datos opcionales o la carga útil.
Los datos generalmente se segmentan/cortan en partes más pequeñas para facilitar las transferencias. Cada segmento de datos tiene su propio encabezado de segmento que contiene un número de secuencia y un número de reconocimiento. El motivo de un número de secuencia es conocer la secuencia de los segmentos cuando finalmente se volverán a ensamblar. Los números de reconocimiento están ahí para verificar con el remitente que se ha recibido su segmento y que coincide con la secuencia de segmentos entrantes.
Teniendo en cuenta un número de secuencia y verificándolo con un reconocimiento es cómo TCP puede transportar de manera confiable grandes cantidades de datos sin que falten paquetes de datos.
Y con eso, deberías tener una idea bastante buena de cómo funciona TCP.