Configuración da conexión TCP
Cando navegamos pola web, enviamos un correo electrónico ou xogamos a un xogo en liña, moitas veces non pensamos na complexa conexión de rede que hai 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 da conexión TCP, e o núcleo desta é o apretón de mans de tres vías.
Este artigo discutirá o principio, o proceso e a importancia do apretón de mans de tres vías en detalle. Paso a paso, explicaremos por que é necesario o apretón de mans de tres vías, como garante a estabilidade e fiabilidade da conexión e o importante que é para a transferencia de datos. Cunha comprensión máis profunda do apretón de mans de tres vías, conseguiremos unha mellor comprensión dos mecanismos subxacentes da comunicación de rede e unha visión máis clara da fiabilidade das conexións TCP.
Proceso de apretón de mans de tres vías TCP e transicións de estado
TCP é un protocolo de transporte orientado á conexión, que require o establecemento de conexión antes da transmisión de datos. Este proceso de establecemento de conexión realízase mediante un apretón de mans de tres vías.
Vexamos máis de cerca 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 LISTEN, o que significa que o servidor debe iniciarse. A continuación, o cliente está preparado para comezar a acceder á páxina web. Debe 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 aleatorio (client_isn) e colócao no campo "Número de secuencia" da cabeceira TCP. Ao mesmo tempo, o cliente establece a posición da marca SYN en 1 para indicar que o paquete de saída é 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 da capa de aplicación (é dicir, datos enviados). Neste punto, 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 (server_isn) e despois pon ese número no campo "Número de serie" da cabeceira TCP. A continuación, o servidor introduce client_isn + 1 no campo "Número de recoñecemento" e establece os bits SYN e ACK en 1. Finalmente, o servidor envía o paquete ao cliente, que non contén datos da capa de aplicación (e ningún dato para o servidor). enviar). Neste momento, o servidor está no estado SYN-RCVD.
Unha vez que o cliente recibe o paquete do servidor, debe realizar as seguintes optimizacións para responder ao paquete de resposta final: En primeiro lugar, o cliente establece o bit ACK da cabeceira TCP do paquete de resposta en 1; En segundo lugar, o cliente introduce o valor server_isn + 1 no campo "Confirmar 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 pasará ao 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 apretón de mans de tres vías, o terceiro apretón de mans pode transportar datos, pero os dous primeiros apretóns de mans non. Esta é unha pregunta que adoita facerse nas entrevistas. Unha vez completado o apretón de contactos de tres vías, ambas as partes entran no estado ESTABLECIDO, indicando que a conexión se estableceu correctamente, momento no que o cliente e o servidor poden comezar a enviarse datos entre si.
Por que tres apertas de mans? Non dúas, catro veces?
A resposta común é: "Porque o apretón de mans de tres vías garante a capacidade de recibir e enviar". Esta resposta é correcta, pero é só a razón superficial, non expón a razón principal. A continuación, analizarei os motivos do triplo apretón de mans desde tres aspectos para afondar na comprensión desta cuestión.
O apretón de mans de tres vías pode evitar eficazmente a inicialización de conexións repetidas historicamente (o motivo principal)
O apretón de mans de tres vías garante que ambas as partes recibiron un número de secuencia inicial fiable.
O apretón de mans a tres vías evita o desperdicio de recursos.
Razón 1: Evite as unións duplicadas históricas
En poucas palabras, o principal motivo do apretón de mans de tres vías é evitar a confusión causada pola antiga inicialización da conexión duplicada. Nun entorno de rede complexo, a transmisión de paquetes de datos non sempre se envía ao host de destino de acordo coa hora especificada, e os paquetes de datos antigos poden chegar primeiro ao host de destino debido á conxestión da rede e outros motivos. Para evitar isto, TCP usa un apretón de mans de tres vías para establecer a conexión.
Cando un cliente envía varios paquetes de establecemento de conexión SYN en sucesión, en situacións como a conxestión da rede, pode ocorrer o seguinte:
1- Os antigos paquetes SYN chegan ao servidor antes dos últimos paquetes SYN.
2- O servidor responderá 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 caducado ou tempo de espera) segundo o seu propio contexto, e despois envía o paquete RST ao servidor para abortar a conexión.
Cunha conexión de dous apretóns de mans, non hai forma de determinar se a conexión actual é unha conexión histórica. O enlace de tres vías permite ao cliente determinar se a conexión actual é unha conexión histórica en función do contexto cando está listo para enviar o terceiro paquete:
1- Se se trata dunha conexión histórica (número de secuencia caducado ou tempo de espera), o paquete enviado polo terceiro enlace é un paquete RST 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 que se comunican establecen correctamente a conexión.
Polo tanto, a principal razón pola que TCP usa o apretón de mans de tres vías é que inicializa a conexión para evitar conexións históricas.
Razón 2: para sincronizar os números de secuencia iniciais de ambas as partes
Ambos os dous lados do protocolo TCP deben manter un número de secuencia, que é un factor clave para garantir unha transmisión fiable. Os números de secuencia xogan un papel importante nas conexións TCP. Fan o seguinte:
O receptor pode eliminar datos duplicados e garantir 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 foi recibido pola outra parte, permitindo unha 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 esixe que o servidor responda cun paquete ACK que indica a recepción exitosa do paquete SYN do cliente. Entón, o servidor envía o paquete SYN co número de secuencia inicial ao cliente e agarda a que o cliente responda, dunha vez por todas, para garantir que os números de secuencia iniciais están sincronizados de forma fiable.
Aínda que tamén é posible sincronizar de forma fiable os números de secuencia iniciais de ambas as partes, o segundo e o terceiro paso pódense combinar nun único paso, dando como resultado un apretón de mans de tres vías. Non obstante, os dous apretóns de mans só poden garantir que o número de secuencia inicial dunha parte sexa recibido con éxito pola outra parte, pero non hai garantía de que se poida confirmar o número de secuencia inicial de ambas as partes. Polo tanto, o apretón de mans de tres vías é a mellor opción para garantir a estabilidade e fiabilidade das conexións TCP.
Razón 3: evitar o desperdicio de recursos
Se só hai un "apretón de 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á reenviado. Non obstante, dado que non hai un terceiro apretón de mans, o servidor non pode determinar se o cliente recibiu un acuse de recibo ACK para establecer a conexión. Polo tanto, o servidor só pode establecer unha conexión de forma proactiva despois de recibir cada solicitude SYN. Isto leva ao seguinte:
Desperdicio de recursos: se a solicitude SYN do cliente está bloqueada, o que resulta na transmisión repetida de varios paquetes SYN, o servidor establecerá varias conexións redundantes non válidas despois de recibir a solicitude. Isto leva a un desperdicio innecesario de recursos do servidor.
Retención de mensaxes: debido á falta dun terceiro apretón de mans, o servidor non ten forma de saber se o cliente recibiu correctamente o acuse de recibo ACK para establecer a conexión. Como resultado, se as mensaxes quedan atrapadas na rede, o cliente seguirá enviando solicitudes SYN unha e outra vez, facendo que o servidor estableza constantemente novas conexións. Isto aumentará a conxestión e o atraso da rede e afectará negativamente ao rendemento xeral da rede.
Polo tanto, para garantir a estabilidade e fiabilidade da conexión de rede, TCP usa o axuste de mans de tres vías para establecer a conexión e evitar a aparición destes problemas.
Resumo
OCorretor de paquetes de redeO establecemento da conexión TCP realízase cun apretón de mans de tres vías. Durante o enlace de tres vías, o cliente envía primeiro un paquete coa bandeira 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 marca ACK ao servidor para indicar que a conexión se estableceu correctamente. Así, as dúas partes están no estado ESTABLECIDO e poden comezar a enviarse datos entre si.
En xeral, o proceso de conexión de tres vías para o establecemento de conexións TCP está deseñado para garantir a estabilidade e fiabilidade da conexión, evitar a confusión e o desperdicio de recursos nas conexións históricas e garantir que ambas as partes poidan recibir e enviar datos.
Hora de publicación: Xaneiro-08-2025