Configuración de conexión TCP
Cando navegamos pola web, enviamos un correo electrónico ou xogan un xogo en liña, moitas veces non pensamos na complexa conexión de rede detrás. Non obstante, son estes pasos aparentemente pequenos os que garanten unha comunicación estable entre nós e o servidor. Un dos pasos máis importantes é a configuración de conexión TCP, e o núcleo deste é o aperto de man a tres bandas.
Este artigo discutirá en detalle o principio, o proceso e a importancia do aperto de man a tres bandas. Paso a paso, explicaremos por que se necesita o aperto de man a tres vías, como asegura a estabilidade e a fiabilidade da conexión e o importante que é para a transferencia de datos. Cunha comprensión máis profunda do aperto de man a tres bandas, obteremos unha mellor comprensión dos mecanismos subxacentes de comunicación en rede e unha visión máis clara da fiabilidade das conexións TCP.
Proceso de apertura de man a tres vías TCP e transicións estatais
TCP é un protocolo de transporte orientado á conexión, que require un establecemento de conexión antes da transmisión de datos. Este proceso de establecemento de conexión faise por un aperto de man a tres bandas.
Vexamos máis de preto os paquetes TCP que se envían en cada conexión.
Inicialmente, tanto o cliente como o servidor están pechados. En primeiro lugar, o servidor escoita activamente nun porto e está no estado de escoita, o que significa que o servidor debe iniciarse. A continuación, o cliente está preparado para comezar a acceder á páxina web.it necesita establecer unha conexión co servidor. O formato do primeiro paquete de conexión é o seguinte:
Cando un cliente inicia unha conexión, xera un número de secuencia inicial aleatoria (client_isn) e sitúana no campo "número de secuencia" do encabezado TCP. Ao mesmo tempo, o cliente establece a posición de marca SYN a 1 para indicar que o paquete saínte é un paquete SYN. O cliente indica que desexa establecer unha conexión co servidor enviando o primeiro paquete SYn ao servidor. Este paquete non contén datos de capa de aplicacións (é dicir, datos enviados). Neste momento, o estado do cliente está marcado como Syn-Sent.
Cando un servidor recibe un paquete SYN dun cliente, inicializa aleatoriamente o seu propio número de serie (servidor_isn) e logo coloca ese número no campo "número de serie" do encabezado TCP. A continuación, o servidor entra no client_isn + 1 no campo "número de recoñecemento" e establece bits SYN e ACK a 1. Finalmente, o servidor envía o paquete ao cliente, que non contén datos de capa de aplicación (e non hai datos para que o servidor envíe). Neste momento, o servidor está en estado SYN-RCVD.
Unha vez que o cliente reciba o paquete do servidor, necesita realizar as seguintes optimizacións para responder ao paquete de resposta final: En primeiro lugar, o cliente establece o bit ACK do encabezado TCP do paquete de resposta a 1; En segundo lugar, o cliente entra no valor de valor_isn + 1 no campo "Confirmar o número de resposta"; Finalmente, o cliente envía o paquete ao servidor. Este paquete pode transportar datos do cliente ao servidor. Ao finalizar estas operacións, o cliente entrará no estado establecido.
Unha vez que o servidor recibe o paquete de resposta do cliente, tamén cambia ao estado establecido.
Como podes ver no proceso anterior, ao realizar un aperto de man a tres bandas, o terceiro aperto de mans pode levar datos, pero os dous primeiros apertos de man non o son. Esta é unha pregunta que a miúdo se fai nas entrevistas. Unha vez finalizado o aperto de man a tres bandas, ambas as partes entran no estado establecido, o que indica que a conexión foi establecida con éxito, momento no que o cliente e o servidor poden comezar a enviar datos entre si.
Por que tres apertos de man? Non dúas veces, catro veces?
A resposta común é: "Porque o aperto de man a tres bandas garante a capacidade de recibir e enviar". Esta resposta é correcta, pero só é a razón superficial, non presenta a razón principal. A continuación, analizarei os motivos do triple aperto de man de tres aspectos para profundizar na nosa comprensión deste problema.
O aperto de man a tres bandas pode evitar eficazmente a inicialización de conexións repetidas historicamente (o motivo principal)
O aperto de man a tres bandas garante que ambas as partes recibiron un número de secuencia inicial fiable.
O aperto de man a tres bandas evita desperdiciar recursos.
Motivo 1: Evite unións históricas duplicadas
En poucas palabras, o motivo principal do aperto de man a tres vías é evitar a confusión causada pola antiga inicialización de conexión duplicada. Nun ambiente complexo de rede, a transmisión de paquetes de datos non sempre se envía ao servidor de destino de acordo co tempo especificado e os paquetes de datos antigos poden chegar ao host de destino por mor da conxestión da rede e outras razóns. Para evitalo, TCP usa un aperto de man a tres bandas para establecer a conexión.
Cando un cliente envía varios paquetes de establecemento de conexión SYN sucesivamente, en situacións como a conxestión da rede, pode producirse a continuación:
1- Os antigos paquetes SYN chegan ao servidor antes dos últimos paquetes SYN.
2- O servidor responderá a un paquete SYN + ACK ao cliente despois de recibir o antigo paquete SYN.
3- Cando o cliente recibe o paquete SYN + ACK, determina que a conexión é unha conexión histórica (número de secuencia caducada ou tempo de espera) segundo o seu propio contexto e, a continuación, envía o paquete RST ao servidor para abortar a conexión.
Cunha conexión de dúas mans, non hai xeito de determinar se a conexión actual é unha conexión histórica. O aperto de man a tres bandas permite ao cliente determinar se a conexión actual é unha conexión histórica baseada no contexto cando estea listo para enviar o terceiro paquete:
1- Se se trata dunha conexión histórica (número de secuencia caducada ou tempo de espera), o paquete enviado polo terceiro aperto de man é un primeiro paquete para abortar a conexión histórica.
2- Se non é unha conexión histórica, o paquete enviado por terceira vez é un paquete ACK e as dúas partes comunicadoras establecen con éxito a conexión.
Polo tanto, a principal razón de que TCP usa o aperto de man a tres bandas é que inicializa a conexión para evitar conexións históricas.
Motivo 2: Para sincronizar os números de secuencia inicial de ambas partes
Os dous lados do protocolo TCP deben manter un número de secuencia, o que é un factor clave para garantir unha transmisión fiable. Os números de secuencia xogan un papel importante nas conexións TCP.
O receptor pode eliminar os datos duplicados e asegurar a precisión dos datos.
O receptor pode recibir paquetes na orde do número de secuencia para garantir a integridade dos datos.
● O número de secuencia pode identificar o paquete de datos que recibiu a outra parte, permitindo a transmisión de datos fiable.
Polo tanto, ao establecer unha conexión TCP, o cliente envía paquetes SYN co número de secuencia inicial e require que o servidor responda cun paquete ACK que indique a recepción exitosa do paquete SYN do cliente. A continuación, o servidor envía o paquete SYN co número de secuencia inicial ao cliente e espera que o cliente responda, dunha vez por todas, para asegurarse de que os números de secuencia iniciais sexan sincronizados de forma fiable.
Aínda que tamén é posible un aperto de man de catro vías para sincronizar de forma fiable o número de secuencia inicial de ambas as partes, o segundo e o terceiro paso pódense combinar nun só paso, obtendo un aperto de man a tres bandas. Non obstante, os dous apertos de man só poden garantir que o número de secuencia inicial dunha parte sexa recibido con éxito pola outra parte, pero non hai ningunha garantía de que se poida confirmar o número de secuencia inicial de ambas as partes. Polo tanto, o aperto de man a tres bandas é a mellor opción para tomar para garantir a estabilidade e fiabilidade das conexións TCP.
Motivo 3: Evite malgastar recursos
Se só hai un "sshake de dúas mans", cando a solicitude SYN do cliente está bloqueada na rede, o cliente non pode recibir o paquete ACK enviado polo servidor, polo que o SYN será resentido. Non obstante, dado que non hai un terceiro aperto de man, o servidor non pode determinar se o cliente recibiu un recoñecemento ACK para establecer a conexión. Polo tanto, o servidor só pode establecer de xeito proactivo unha conexión despois de recibir cada solicitude SYN. Isto leva aos seguintes:
Desperdicio de recursos: se a solicitude SYN do cliente está bloqueada, obtendo unha transmisión repetida de múltiples paquetes SYN, o servidor establecerá múltiples conexións non válidas redundantes despois de recibir a solicitude. Isto leva a un desperdicio innecesario de recursos do servidor.
Retención de mensaxes: debido á falta dun terceiro aperto de man, o servidor non ten xeito de saber se o cliente recibiu correctamente o recoñecemento de ACK para establecer a conexión. Como resultado, se as mensaxes quedan atascadas na rede, o cliente seguirá enviando unha e outra vez solicitudes de SYN, facendo que o servidor estableza constantemente novas conexións. Isto aumentará a conxestión e o atraso da rede e afectará negativamente ao rendemento global da rede.
Polo tanto, para garantir a estabilidade e fiabilidade da conexión de rede, TCP usa o aperto de man a tres bandas para establecer a conexión para evitar a aparición destes problemas.
Resumo
OCorredor de paquetes de redeO establecemento de conexión TCP faise cun aperto de man a tres bandas. Durante o aperto de man a tres bandas, o cliente envía primeiro un paquete coa marca SYN ao servidor, indicando que quere establecer unha conexión. Despois de recibir a solicitude do cliente, o servidor responde un paquete con bandeiras SYN e ACK ao cliente, indicando que a solicitude de conexión é aceptada e envía o seu propio número de secuencia inicial. Finalmente, o cliente responde cunha bandeira ACK ao servidor para indicar que a conexión foi establecida con éxito. Así, as dúas partes están no estado establecido e poden comezar a enviar datos entre si.
En xeral, o proceso de apertura de man a tres bandas para o establecemento de conexión TCP está deseñado para garantir a estabilidade e fiabilidade da conexión, evitar confusións e residuos de recursos sobre conexións históricas e asegurarse de que ambas as partes sexan capaces de recibir e enviar datos.
Tempo de publicación: xaneiro-08-2025