Misterios clave del corredor de paquetes de red Conexiones TCP: desmitificó la necesidad de apretón de manos triple

Configuración de conexión TCP
Cuando navegamos por la web, enviamos un correo electrónico o jugamos un juego en línea, a menudo no pensamos en la compleja conexión de red detrás de ella. Sin embargo, son estos pasos aparentemente pequeños los que aseguran una comunicación estable entre nosotros y el servidor. Uno de los pasos más importantes es la configuración de la conexión TCP, y el núcleo de esto es el apretón de manos de tres vías.

Este artículo discutirá el principio, el proceso y la importancia del apretón de manos de tres vías en detalle. Paso a paso, explicaremos por qué se necesita el apretón de manos de tres vías, cómo garantiza la estabilidad y la confiabilidad de la conexión, y cuán importante es para la transferencia de datos. Con una comprensión más profunda del apretón de manos de tres vías, obtendremos una mejor comprensión de los mecanismos subyacentes de la comunicación de la red y una visión más clara de la confiabilidad de las conexiones TCP.

TCP Proceso de apretón de manos de tres vías y transiciones estatales
TCP es un protocolo de transporte orientado a la conexión, que requiere el establecimiento de conexión antes de la transmisión de datos. Este proceso de establecimiento de conexión se realiza mediante un apretón de manos de tres vías.

 TCP Tres apretones de manos

Echemos un vistazo más de cerca a 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 está en el estado de escucha, lo que significa que el servidor debe iniciarse. A continuación, el cliente está listo para comenzar a acceder a la página web. Debe establecer una conexión con el servidor. El formato del primer paquete de conexión es el siguiente:

 Paquete de 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 establece la posición Syn Flag en 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 al servidor. Este paquete no contiene datos de capa de aplicación (es decir, datos enviados). En este punto, el estado del cliente está marcado 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 luego pone ese número en el campo "Número de serie" del encabezado TCP. A continuación, el servidor ingresa a Client_ISN + 1 en el campo "Número de reconocimiento" y establece bits SYN y ACK a 1. Finalmente, el servidor envía el paquete al cliente, que no contiene datos de capa de aplicación (y no hay datos para que el servidor envíe). En este momento, el servidor está en el 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 a 1; En segundo lugar, el cliente ingresa al Value Server_Isn + 1 en el campo "Confirmar Número de respuesta"; Finalmente, el cliente envía el paquete al servidor. Este paquete puede transportar datos del cliente al servidor. Al finalizar estas operaciones, el cliente ingresará al estado establecido.

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

Como puede ver en el proceso anterior, al realizar un apretón de manos de tres vías, el tercer apretón de manos puede llevar datos, pero los dos primeros apretones de manos no lo son. Esta es una pregunta que a menudo se hace en las entrevistas. Una vez que se completa el apretón de manos de tres vías, ambas partes ingresan al estado establecido, lo que indica que la conexión se ha establecido con éxito, momento en el cual el cliente y el servidor pueden comenzar a enviar datos entre sí.

¿Por qué tres apretones de manos? No dos veces, cuatro veces?
La respuesta común es: "Porque el apretón de manos de tres vías garantiza la capacidad de recibir y enviar". Esta respuesta es correcta, pero es solo la razón de la superficie, no presenta la razón principal. A continuación, analizaré las razones del triple apretón de manos de tres aspectos para profundizar nuestra comprensión de este problema.

El apretón de manos de tres vías puede evitar efectivamente la inicialización de conexiones históricamente repetidas (la razón principal)
El apretón de manos de tres vías garantiza que ambas partes hayan recibido un número de secuencia inicial confiable.
El apretón de manos de tres vías evita desperdiciar recursos.

Razón 1: Evite las uniones de duplicado histórico
En pocas palabras, la razón principal del apretón de manos de tres vías es evitar la confusión causada por la vieja inicialización de la conexión duplicada. En un entorno de red complejo, la transmisión de paquetes de datos no siempre se envía al host de destino de acuerdo con el tiempo especificado, y los paquetes de datos antiguos pueden llegar primero al host de destino debido a la congestión de la red y otras razones. Para evitar esto, TCP utiliza un apretón de manos de tres vías para establecer la conexión.

El apretón de manos de tres vías evita conexiones duplicadas históricas

Cuando un cliente envía múltiples paquetes de establecimiento de Syn Connection en sucesión, en situaciones como la congestión de la red, puede ocurrir lo siguiente:

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

Con una conexión de dos manos, no hay forma de determinar si la conexión actual es una conexión histórica. El apretón de manos de tres vías permite al cliente determinar si la conexión actual es una conexión histórica basada en el contexto cuando está listo para enviar el tercer paquete:

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

Por lo tanto, la razón principal por la que TCP usa el apretón de manos 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 inicial de ambas partes
Ambos lados 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 juegan un papel importante en las conexiones TCP. Hacen lo siguiente:

El receptor puede eliminar los datos duplicados y garantizar la precisión de los datos.

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

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

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 indica una recepción exitosa del paquete SYN del cliente. Luego, el servidor envía el paquete SYN con el número de secuencia inicial al cliente y espera a que el cliente responda, de una vez por todas, para garantizar que los números de secuencia inicial se sincronizen de manera confiable.

Sincronizar los números de serie iniciales de ambas partes

Aunque también es posible sincronizar de manera confiable los números de secuencia inicial de ambas partes, el segundo y tercer paso se pueden combinar en un solo paso, lo que resulta en un apretón de manos de tres vías. Sin embargo, los dos apretones de manos solo pueden garantizar que el número de secuencia inicial de una parte es recibido con éxito por la otra parte, pero no hay garantía de que el número de secuencia inicial de ambas partes se pueda confirmar. Por lo tanto, el apretón de manos de tres vías es la mejor opción para garantizar la estabilidad y la confiabilidad de las conexiones TCP.

Razón 3: Evite desperdiciar recursos
Si solo hay un "dos manos", cuando la solicitud de SYN del cliente está bloqueada en la red, el cliente no puede recibir el paquete ACK enviado por el servidor, por lo que el SYN se resentirá. Sin embargo, dado que no hay un tercer apretón de manos, el servidor no puede determinar si el cliente recibió un reconocimiento de ACK para establecer la conexión. Por lo tanto, el servidor solo puede establecer proactivamente una conexión después de recibir cada solicitud de SYN. Esto lleva a lo siguiente:

Desperdicio de recursos: si se bloquea la solicitud SYN del cliente, lo que resulta en la transmisión repetida de múltiples paquetes SYN, el servidor establecerá múltiples conexiones inválidas redundantes después de recibir la solicitud. Esto lleva a un desperdicio innecesario de recursos del servidor.

Retención de mensajes: debido a la falta de un tercer apretón de manos, el servidor no tiene forma de saber si el cliente recibió correctamente el reconocimiento de ACK para establecer la conexión. Como resultado, si los mensajes se atascan en la red, el cliente seguirá enviando solicitudes SYN una y otra vez, lo que hace que el servidor establezca constantemente nuevas conexiones. Esto aumentará la congestión y el retraso de la red y afectará negativamente el rendimiento general de la red.

Evite desperdiciar recursos

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

Resumen
ElCorredor de paquetes de redEl establecimiento de conexión TCP se realiza con un apretón de manos de tres vías. Durante el apretón de manos de tres vías, el cliente primero envía un paquete con el indicador SYN al servidor, lo que indica que quiere establecer una conexión. Después de recibir la solicitud del cliente, el servidor responde un paquete con indicadores SYN y ACK al cliente, lo que indica que se acepta la solicitud de conexión y envía su propio número de secuencia inicial. Finalmente, el cliente responde con un indicador ACK al servidor para indicar que la conexión se ha establecido correctamente. Por lo tanto, las dos partes están en el estado establecido y pueden comenzar a enviar datos entre sí.

En general, el proceso de apretón de manos de tres vías para el establecimiento de la conexión TCP está diseñado para garantizar la estabilidad y confiabilidad de la conexión, evitar confusiones y desperdicios de recursos sobre conexiones históricas y garantizar que ambas partes puedan recibir y enviar datos.


Tiempo de publicación: enero-08-2025