Misterios clave de las conexiones TCP de los intermediarios de paquetes de red: Se desmitifica la necesidad del triple handshake.

Configuración de conexión TCP
Cuando navegamos por internet, enviamos un correo electrónico o jugamos en línea, a menudo no pensamos en la compleja conexión de red que hay detrás. Sin embargo, son estos pasos aparentemente sencillos los que garantizan una comunicación estable entre nosotros y el servidor. Uno de los pasos más importantes es el establecimiento de la conexión TCP, cuyo núcleo es el protocolo de enlace de tres vías.

Este artículo analizará en detalle el principio, el proceso y la importancia del protocolo de enlace de tres vías. Explicaremos paso a paso por qué es necesario, cómo garantiza la estabilidad y la fiabilidad de la conexión, y su importancia para la transferencia de datos. Una comprensión más profunda del protocolo de enlace de tres vías nos permitirá comprender mejor los mecanismos subyacentes de la comunicación en red y tener una visión más clara de la fiabilidad de las conexiones TCP.

Proceso de establecimiento de conexión de tres vías (TCP) y transiciones de estado
TCP es un protocolo de transporte orientado a la conexión, que requiere el establecimiento de una conexión antes de la transmisión de datos. Este proceso de establecimiento de conexión se realiza mediante un intercambio de claves de tres vías.

 Protocolo de enlace de tres vías TCP

Analicemos más de cerca los paquetes TCP que se envían en cada conexión.

Inicialmente, tanto el cliente como el servidor están CERRADOS. Primero, el servidor escucha activamente en un puerto y se encuentra en estado de ESCUCHA, lo que significa que debe iniciarse. A continuación, el cliente está listo para acceder a la página web. Necesita establecer una conexión con el servidor. El formato del primer paquete de conexión es el siguiente:

 Paquete SYN

Cuando un cliente inicia una conexión, genera un número de secuencia inicial aleatorio (client_isn) y lo coloca en el campo "Número de secuencia" del encabezado TCP. Al mismo tiempo, el cliente activa el indicador SYN (posición 1) para indicar que el paquete saliente es un paquete SYN. ​​El cliente indica que desea establecer una conexión con el servidor enviando el primer paquete SYN. ​​Este paquete no contiene datos de la capa de aplicación (es decir, datos enviados). En este punto, el estado del cliente se marca como SYN-SENT.

Paquete SYN+ACK

Cuando un servidor recibe un paquete SYN de un cliente, inicializa aleatoriamente su propio número de serie (server_isn) y lo coloca en el campo "Número de serie" del encabezado TCP. A continuación, el servidor introduce client_isn + 1 en el campo "Número de acuse de recibo" y establece los bits SYN y ACK en 1. Finalmente, el servidor envía el paquete al cliente, el cual no contiene datos de la capa de aplicación (ni datos que el servidor deba enviar). En este momento, el servidor se encuentra en estado SYN-RCVD.

Paquete ACK

Una vez que el cliente recibe el paquete del servidor, debe realizar las siguientes optimizaciones para responder al paquete de respuesta final: Primero, el cliente establece el bit ACK del encabezado TCP del paquete de respuesta en 1; segundo, el cliente introduce el valor server_isn + 1 en el campo "Número de respuesta de confirmación"; finalmente, el cliente envía el paquete al servidor. Este paquete puede transportar datos del cliente al servidor. Al completarse estas operaciones, el cliente pasará al estado ESTABLISHED.

Una vez que el servidor recibe el paquete de respuesta del cliente, también cambia al estado ESTABLISHED.

Como se puede observar en el proceso anterior, al realizar un intercambio de tres señales (handshake), la tercera señal permite la transmisión de datos, pero las dos primeras no. Esta es una pregunta frecuente en las entrevistas de trabajo. Una vez completado el intercambio de tres señales, ambas partes entran en el estado ESTABLISHED, lo que indica que la conexión se ha establecido correctamente. En ese momento, el cliente y el servidor pueden comenzar a enviarse datos mutuamente.

¿Por qué tres apretones de manos? ¿No dos, sino cuatro?
La respuesta común es: "Porque el protocolo de enlace triple garantiza la capacidad de enviar y recibir mensajes". Esta respuesta es correcta, pero solo ofrece una explicación superficial, sin exponer la razón principal. A continuación, analizaré las razones del protocolo de enlace triple desde tres perspectivas para profundizar en la comprensión de este tema.

El protocolo de enlace de tres vías puede evitar eficazmente la inicialización de conexiones repetidas históricamente (la razón principal).
El protocolo de enlace a tres bandas garantiza que ambas partes hayan recibido un número de secuencia inicial fiable.
El saludo a tres bandas evita el desperdicio de recursos.

Razón 1: Evitar uniones duplicadas históricas
En resumen, la principal razón del protocolo de enlace de tres vías es evitar la confusión causada por la inicialización de conexiones duplicadas. En un entorno de red complejo, la transmisión de paquetes de datos no siempre se realiza al host de destino en el tiempo especificado, y es posible que lleguen primero paquetes de datos antiguos debido a la congestión de la red y otros motivos. Para evitar esto, TCP utiliza el protocolo de enlace de tres vías para establecer la conexión.

El protocolo de enlace de tres vías evita las conexiones duplicadas históricas.

Cuando un cliente envía varios paquetes SYN de establecimiento de conexión de forma consecutiva, en situaciones como la congestión de la red, puede ocurrir lo siguiente:

1- Los paquetes SYN antiguos llegan al servidor antes que los paquetes SYN más recientes.
2- El servidor responderá con un paquete SYN + ACK al cliente después de recibir el paquete SYN anterior.
3- Cuando el cliente recibe el paquete SYN + ACK, determina que la conexión es una conexión histórica (número de secuencia caducado o tiempo de espera agotado) según su propio contexto, y luego envía el paquete RST al servidor para abortar la conexión.

Con una conexión de dos intercambios, no hay forma de determinar si la conexión actual es una conexión histórica. El intercambio de tres intercambios permite al cliente determinar si la conexión actual es una conexión histórica en función del contexto cuando está listo para enviar el tercer paquete:

1- Si se trata de una conexión histórica (número de secuencia caducado o tiempo de espera agotado), el paquete enviado por el tercer handshake es un paquete RST para abortar la conexión histórica.
2- Si no se trata de una conexión histórica, el paquete enviado por tercera vez es un paquete ACK, y las dos partes que se comunican establecen la conexión con éxito.

Por lo tanto, la razón principal por la que TCP utiliza el protocolo de enlace de tres vías es que inicializa la conexión para evitar conexiones históricas.

Razón 2: Para sincronizar los números de secuencia iniciales de ambas partes.
Ambos extremos del protocolo TCP deben mantener un número de secuencia, que es un factor clave para garantizar una transmisión confiable. Los números de secuencia desempeñan un papel importante en las conexiones TCP. Hacen lo siguiente:

El receptor puede eliminar los datos duplicados y garantizar la exactitud de los mismos.

El receptor puede recibir los paquetes en el orden del número de secuencia para garantizar la integridad de los datos.

● El número de secuencia permite identificar el paquete de datos recibido por la otra parte, lo que posibilita una transmisión de datos fiable.

Por lo tanto, al establecer una conexión TCP, el cliente envía paquetes SYN con el número de secuencia inicial y requiere que el servidor responda con un paquete ACK que indique la recepción correcta del paquete SYN del cliente. A continuación, el servidor envía el paquete SYN con el número de secuencia inicial al cliente y espera su respuesta, de una vez por todas, para garantizar que los números de secuencia iniciales estén sincronizados de forma fiable.

Sincronizar los números de serie iniciales de ambas partes.

Si bien un protocolo de enlace de cuatro vías también permite sincronizar de forma fiable los números de secuencia iniciales de ambas partes, el segundo y el tercer paso pueden combinarse en uno solo, dando como resultado un protocolo de enlace de tres vías. Sin embargo, estos dos protocolos solo garantizan que la otra parte reciba correctamente el número de secuencia inicial de una de ellas, pero no garantizan la confirmación de los números de secuencia iniciales de ambas. Por lo tanto, el protocolo de enlace de tres vías es la mejor opción para garantizar la estabilidad y fiabilidad de las conexiones TCP.

Razón 3: Evitar el desperdicio de recursos
Si solo hay un "apretón de manos de dos pasos", cuando la solicitud SYN del cliente se bloquea en la red, el cliente no puede recibir el paquete ACK enviado por el servidor, por lo que el SYN se reenviará. Sin embargo, dado que no hay un tercer apretón de manos, el servidor no puede determinar si el cliente recibió una confirmación ACK para establecer la conexión. Por lo tanto, el servidor solo puede establecer una conexión de forma proactiva después de recibir cada solicitud SYN. ​​Esto lleva a lo siguiente:

Desperdicio de recursos: Si la solicitud SYN del cliente se bloquea, lo que provoca la transmisión repetida de múltiples paquetes SYN, el servidor establecerá varias conexiones redundantes e inválidas tras recibir la solicitud. Esto conlleva un desperdicio innecesario de recursos del servidor.

Retención de mensajes: Debido a la falta de un tercer intercambio de mensajes, el servidor no puede saber si el cliente recibió correctamente la confirmación ACK para establecer la conexión. En consecuencia, si los mensajes se quedan atascados en la red, el cliente seguirá enviando solicitudes SYN repetidamente, lo que obligará al servidor a establecer nuevas conexiones constantemente. Esto aumentará la congestión y la latencia de la red, afectando negativamente al rendimiento general de la misma.

Evitar el desperdicio de recursos

Por lo tanto, para garantizar la estabilidad y confiabilidad de la conexión de red, TCP utiliza el protocolo de enlace de tres vías para establecer la conexión y evitar así la aparición de estos problemas.

Resumen
ElAgente de paquetes de redEl establecimiento de una conexión TCP se realiza mediante un protocolo de enlace de tres vías. Durante este protocolo, el cliente envía primero un paquete con la bandera SYN al servidor, indicando que desea establecer una conexión. Tras recibir la solicitud del cliente, el servidor responde con un paquete que contiene las banderas SYN y ACK, confirmando la aceptación de la solicitud de conexión, y envía su propio número de secuencia inicial. Finalmente, el cliente responde con una bandera ACK al servidor para confirmar que la conexión se ha establecido correctamente. De esta forma, ambas partes se encuentran en estado ESTABLISHED y pueden comenzar a intercambiar datos.

En general, el proceso de establecimiento de conexión TCP mediante el protocolo de tres vías está diseñado para garantizar la estabilidad y la fiabilidad de la conexión, evitar confusiones y el desperdicio de recursos en conexiones históricas, y asegurar que ambas partes puedan recibir y enviar datos.


Fecha de publicación: 8 de enero de 2025