Configuración de la conexión TCP
Cuando navegamos por la web, enviamos un correo electrónico o jugamos a 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 su 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 comprender mejor la fiabilidad de las conexiones TCP.
Proceso de protocolo de enlace 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 la conexión antes de la transmisión de datos. Este proceso 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 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:
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. 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 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, que no contiene datos de la capa de aplicación (ni datos que el servidor pueda enviar). En este momento, el servidor se encuentra en estado SYN-RCVD.
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; segundo, 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 se puede observar en el proceso anterior, al realizar un protocolo de enlace de tres vías, el tercer protocolo puede transmitir datos, pero los dos primeros no. Esta es una pregunta frecuente en entrevistas. Una vez completado el protocolo de enlace de tres vías, ambas partes entran en el estado ESTABLECIDO, lo que indica que la conexión se ha establecido correctamente. En ese momento, el cliente y el servidor pueden comenzar a intercambiar datos.
¿Por qué tres apretones de manos? ¿No dos, sino cuatro?
La respuesta habitual es: "Porque el protocolo de enlace triple garantiza la capacidad de recibir y enviar". Esta respuesta es correcta, pero solo presenta una razón superficial y no plantea la principal. A continuación, analizaré las razones del protocolo de enlace triple desde tres perspectivas para profundizar en 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 de tres vías garantiza que ambas partes hayan recibido un número de secuencia inicial confiable.
El protocolo de enlace de tres vías evita el desperdicio de recursos.
Razón 1: Evitar uniones duplicadas históricas
En resumen, la razón principal del protocolo de enlace de tres vías es evitar la confusión causada por la inicialización duplicada de una conexión antigua. En un entorno de red complejo, la transmisión de paquetes de datos no siempre se envía al host de destino según el tiempo especificado, y los paquetes de datos antiguos pueden llegar primero debido a la congestión de la red, entre otros motivos. 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 en sucesión, en situaciones como 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 expirado o timeout) según su propio contexto, y luego envía el paquete RST al servidor para abortar la conexión.
Con una conexión de doble enlace, no es posible determinar si la conexión actual es histórica. El enlace de tres vías permite al cliente determinar si la conexión actual es histórica según 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 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 exitosamente.
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: Sincronizar los números de secuencia iniciales de ambas partes
Ambos lados del protocolo TCP deben mantener un número de secuencia, lo cual es clave para garantizar una transmisión fiable. Los números de secuencia desempeñan un papel importante en las conexiones TCP. Cumplen las siguientes funciones:
El receptor puede eliminar 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 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 solicita al servidor que responda con un paquete ACK que indica 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 definitiva para garantizar la sincronización fiable de los números de secuencia iniciales.
Aunque 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, lo que resulta en un protocolo de enlace de tres vías. Sin embargo, estos dos protocolos solo garantizan que el número de secuencia inicial de una parte sea recibido correctamente por la otra, pero no garantizan que se confirme 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 la fiabilidad de las conexiones TCP.
Razón 3: Evitar el desperdicio de recursos
Si solo existe un "doble protocolo de enlace", cuando la solicitud SYN del cliente se bloquea en la red, este no puede recibir el paquete ACK enviado por el servidor, por lo que el SYN se reenvía. Sin embargo, al no existir un tercer protocolo de enlace, el servidor no puede determinar si el cliente recibió un acuse de recibo ACK para establecer la conexión. Por lo tanto, el servidor solo puede establecer una conexión proactivamente tras recibir cada solicitud SYN. Esto conlleva 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 redundantes inválidas tras recibir la solicitud. Esto genera un desperdicio innecesario de recursos del servidor.
Retención de mensajes: Debido a la falta de un tercer protocolo de enlace, el servidor no puede 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 enviará solicitudes SYN una y otra vez, lo que obliga al servidor a establecer nuevas conexiones constantemente. Esto aumenta la congestión y los retrasos de la red, y afecta negativamente al rendimiento general de la misma.
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 la aparición de estos problemas.
Resumen
ElBroker de paquetes de redEl establecimiento de la 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 el indicador SYN al servidor, indicando que desea establecer una conexión. Tras recibir la solicitud del cliente, el servidor responde con un paquete con los indicadores SYN y ACK, indicando que la solicitud de conexión se acepta y enviando 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. De esta forma, ambas partes se encuentran en el estado ESTABLECIDO y pueden comenzar a intercambiar datos.
En general, el proceso de protocolo de enlace 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 desperdicio de recursos en conexiones históricas y garantizar que ambas partes puedan recibir y enviar datos.
Hora de publicación: 08-ene-2025