Configuración de la 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 que hay detrás. Sin embargo, son estos pasos aparentemente pequeños los que garantizan 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 protocolo de enlace de tres vías.
Este artículo discutirá en detalle el principio, el proceso y la importancia del apretón de manos de tres vías. Paso a paso, explicaremos por qué es necesario el protocolo de enlace de tres vías, cómo garantiza la estabilidad y confiabilidad de la conexión y qué tan importante es para la transferencia de datos. Con una comprensión más profunda del protocolo de enlace de tres vías, obtendremos una mejor comprensión de los mecanismos subyacentes de la comunicación de red y una visión más clara de la confiabilidad de las conexiones TCP.
Proceso de protocolo de enlace de tres vías de 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 protocolo de enlace de tres vías.
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 estado LISTEN, lo que significa que se debe iniciar el servidor. A continuación, el cliente está listo para comenzar a acceder a la página web y necesita establecer una conexión con el servidor. El formato del primer paquete de conexión es el siguiente:
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 del indicador SYN 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 la capa de aplicación (es decir, datos enviados). En este punto, el estado del cliente se marca como SYN-SENT.
Cuando un servidor recibe un paquete SYN de un cliente, inicializa aleatoriamente su propio número de serie (server_isn) y luego coloca ese número en el campo "Número de serie" del encabezado TCP. A continuación, el servidor ingresa client_isn + 1 en el campo "Número de reconocimiento" y establece los bits SYN y ACK en 1. Finalmente, el servidor envía el paquete al cliente, que no contiene datos de la capa de aplicación (ni datos para el servidor). enviar). En este momento, el servidor está en estado SYN-RCVD.
Una vez que el cliente recibe el paquete del servidor, necesita 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; En segundo lugar, el cliente ingresa el valor 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 entrará en el 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, cuando se realiza un protocolo de enlace de tres vías, el tercer protocolo de enlace puede transportar datos, pero los dos primeros no. Esta es una pregunta que se hace a menudo en las entrevistas. Una vez que se completa el protocolo de enlace de tres vías, ambas partes ingresan al estado ESTABLECIDO, lo que indica que la conexión se ha establecido exitosamente, momento en el cual el cliente y el servidor pueden comenzar a enviarse datos entre sí.
¿Por qué tres apretones de manos? ¿No dos veces, cuatro veces?
La respuesta común es: "Porque el protocolo de enlace de tres vías garantiza la capacidad de recibir y enviar". Esta respuesta es correcta, pero es sólo la razón superficial, no expone la razón principal. A continuación, analizaré las razones del triple apretón de manos desde tres aspectos para profundizar nuestra comprensión de este tema.
El protocolo de enlace de tres vías puede evitar eficazmente la inicialización de conexiones históricamente repetidas (la razón principal)
El protocolo de enlace 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 el desperdicio de recursos.
Razón 1: evitar uniones históricas duplicadas
En pocas palabras, la razón principal del protocolo de enlace de tres vías es evitar la confusión causada por la antigua 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 protocolo de enlace de tres vías para establecer la conexión.
Cuando un cliente envía varios paquetes de establecimiento de conexión SYN sucesivamente, 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á un paquete SYN + ACK al cliente después de recibir el paquete SYN antiguo.
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) según su propio contexto, y luego envía el paquete RST al servidor para cancelar la conexión.
Con una conexión de dos protocolos de enlace, no hay forma de determinar si la conexión actual es una conexión histórica. El protocolo de enlace de tres vías permite al cliente determinar si la conexión actual es una conexión histórica según el contexto cuando está listo para enviar el tercer paquete:
1- Si es una conexión histórica (número de secuencia caducado o tiempo de espera agotado), el paquete enviado por el tercer protocolo de enlace es un paquete RST 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 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 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 datos duplicados y garantizar la exactitud 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 que ha recibido la otra parte, lo que permite una 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 la 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 iniciales estén sincronizados de manera confiable.
Aunque también es posible un protocolo de enlace de cuatro vías para sincronizar de manera confiable los números de secuencia iniciales de ambas partes, el segundo y tercer paso se pueden combinar en un solo paso, lo que da como resultado un protocolo de enlace de tres vías. Sin embargo, los dos apretones de manos solo pueden garantizar que la otra parte reciba con éxito el número de secuencia inicial de una parte, pero no hay garantía de que se pueda confirmar el número de secuencia inicial de ambas partes. Por lo tanto, el protocolo de enlace de tres vías es la mejor opción para garantizar la estabilidad y confiabilidad de las conexiones TCP.
Razón 3: Evite desperdiciar recursos
Si solo hay un "dos apretones de manos", cuando la solicitud SYN del cliente está bloqueada en la red, el cliente no puede recibir el paquete ACK enviado por el servidor, por lo que se reenviará el SYN. Sin embargo, dado que no existe un tercer protocolo de enlace, 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 resulta en la transmisión repetida de múltiples paquetes SYN, el servidor establecerá múltiples conexiones redundantes no válidas después de recibir la solicitud. Esto conduce a un desperdicio innecesario de recursos del servidor.
Retención de mensajes: debido a la falta de un tercer protocolo de enlace, el servidor no tiene forma de saber si el cliente recibió correctamente el acuse de recibo 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 hará que el servidor establezca nuevas conexiones constantemente. Esto aumentará la congestión y los retrasos de la red y afectará negativamente el rendimiento general de la red.
Por lo tanto, para garantizar la estabilidad y confiabilidad de la conexión de red, TCP utiliza un protocolo de enlace de tres vías para establecer la conexión y evitar estos problemas.
Resumen
ElAgente de paquetes de redEl establecimiento de la conexión TCP se realiza con un protocolo de enlace de tres vías. Durante el protocolo de enlace de tres vías, el cliente primero envía un paquete con el indicador SYN al servidor, indicando que desea establecer una conexión. Después de recibir la solicitud del cliente, el servidor responde un paquete con indicadores SYN y ACK al cliente, indicando 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 exitosamente. Por lo tanto, las dos partes están en el estado ESTABLECIDO y pueden comenzar a enviarse datos entre sí.
En general, el proceso de protocolo de enlace de tres vías para el establecimiento de una conexión TCP está diseñado para garantizar la estabilidad y confiabilidad de la conexión, evitar confusión y desperdicio de recursos en conexiones históricas y garantizar que ambas partes puedan recibir y enviar datos.
Hora de publicación: 08-ene-2025