Configuración da conexión TCP
Cando navegamos pola web, enviamos un correo electrónico ou xogamos a un xogo en liña, a miúdo 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 disto é o handshake a tres bandas.
Este artigo analizará en detalle o principio, o proceso e a importancia da conexión a tres bandas. Paso a paso, explicaremos por que é necesaria a conexión a tres bandas, como garante a estabilidade e a fiabilidade da conexión e o importante que é para a transferencia de datos. Cunha comprensión máis profunda da conexión a tres bandas, obteremos 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 protocolo de enlace a tres vías de TCP e transicións de estado
TCP é un protocolo de transporte orientado á conexión, que require o establecemento dunha conexión antes da transmisión de datos. Este proceso de establecemento da conexión realízase mediante un protocolo de enlace a tres bandas.
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. Primeiro, o servidor escoita activamente nun porto e está no estado ESCOITA, o que significa que o servidor debe iniciarse. A continuación, o cliente está listo para comezar a acceder á páxina web. 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 aleatorio (client_isn) e colócao no campo "Número de secuencia" da cabeceira TCP. Ao mesmo tempo, o cliente define a posición do indicador 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 márcase como SYN-SENT.
Cando un servidor recibe un paquete SYN dun cliente, inicializa aleatoriamente o seu propio número de serie (server_isn) e logo coloca 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 confirmación" 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 tampouco datos para que o servidor os envíe). Neste momento, o servidor está no estado SYN-RCVD.
Unha vez que o cliente recibe o paquete do servidor, necesita realizar as seguintes optimizacións para responder ao paquete de resposta final: primeiro, o cliente establece o bit ACK da cabeceira TCP do paquete de resposta en 1; segundo, 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 completar 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 ESTABLISHED.
Como se pode ver no proceso anterior, ao realizar un handshake a tres bandas, o terceiro handshake pode transportar datos, pero os dous primeiros handshake non. Esta é unha pregunta que se fai a miúdo nas entrevistas. Unha vez completado o handshake a tres bandas, ambas as partes entran no estado ESTABLECIDA, o que indica 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 apertóns de mans? Non dúas, catro veces?
A resposta habitual é: "Porque o aperto de mans triplo 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 as razóns do aperto de mans triplo desde tres aspectos para afondar na nosa comprensión deste problema.
O aperto de mans a tres bandas pode evitar eficazmente a inicialización de conexións repetidas historicamente (a razón principal)
O handshake a tres bandas garante que ambas as partes recibiron un número de secuencia inicial fiable.
O aperto de mans a tres bandas evita o malgasto de recursos.
Razón 1: Evitar as unións duplicadas históricas
En resumo, a razón principal da negociación a tres bandas é evitar a confusión causada pola inicialización da conexión duplicada antiga. Nun entorno de rede complexo, a transmisión de paquetes de datos non sempre se envía ao host de destino de acordo co tempo especificado, e os paquetes de datos antigos poden chegar primeiro ao host de destino debido á conxestión da rede e outras razóns. Para evitar isto, TCP usa unha negociación 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 ocorrer o seguinte:
1- Os paquetes SYN antigos chegan ao servidor antes que os paquetes SYN máis recentes.
2- O servidor responderá cun paquete SYN + ACK ao cliente despois de recibir o paquete SYN antigo.
3- Cando o cliente recibe o paquete SYN + ACK, determina que a conexión é unha conexión histórica (o número de secuencia caducou ou superou o 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 dobre protocolo de enlace, non hai xeito de determinar se a conexión actual é unha conexión histórica. O protocolo de enlace triplo permite ao cliente determinar se a conexión actual é unha conexión histórica en función do contexto cando estea listo para enviar o terceiro paquete:
1- Se se trata dunha conexión histórica (o número de secuencia caducou ou superou o tempo de espera), o paquete enviado polo terceiro protocolo de enlace é un paquete RST para abortar a conexión histórica.
2- Se non se trata dunha conexión histórica, o paquete enviado por terceira vez é un paquete ACK e as dúas partes que se comunican establecen a conexión correctamente.
Polo tanto, a razón principal pola que TCP usa o protocolo de enlace a tres bandas é 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, o cal é 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 recibiu a outra parte, o que permite 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 require que o servidor responda cun paquete ACK que indica a recepción correcta do paquete SYN do cliente. Despois, o servidor envía o paquete SYN co número de secuencia inicial ao cliente e agarda que o cliente responda, dunha vez por todas, para garantir que os números de secuencia iniciais estean sincronizados de forma fiable.
Aínda que unha negociación a catro vías tamén é posible para sincronizar de forma fiable os números de secuencia iniciais de ambas as partes, o segundo e o terceiro paso pódense combinar nun só paso, o que resulta nunha negociación a tres vías. Non obstante, as dúas negociacións só poden garantir que o número de secuencia inicial dunha das partes sexa recibido correctamente 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, a negociación a tres vías é a mellor opción para garantir a estabilidade e a fiabilidade das conexións TCP.
Razón 3: Evitar o malgasto de recursos
Se só hai un "dobre protocolo de conexión", 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, como non hai un terceiro protocolo de conexión, o servidor non pode determinar se o cliente recibiu un acuse de recibo de 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 invá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 protocolo de enlace, o servidor non ten forma de saber se o cliente recibiu correctamente a confirmación de recepción para establecer a conexión. Como resultado, se as mensaxes quedan atascadas na rede, o cliente seguirá enviando solicitudes SYN unha e outra vez, o que provocará que o servidor estableza constantemente novas conexións. Isto aumentará a conxestión e o atraso da rede e afectará negativamente o rendemento xeral da rede.
Polo tanto, para garantir a estabilidade e a fiabilidade da conexión de rede, TCP usa o three-way handshake para establecer a conexión e evitar que se produzan estes problemas.
Resumo
O/AAxente de paquetes de redeO establecemento da conexión TCP realízase mediante un protocolo de enlace a tres bandas. Durante o protocolo de enlace a tres bandas, o cliente primeiro envía un paquete co indicador SYN ao servidor, indicando que desexa establecer unha conexión. Despois de recibir a solicitude do cliente, o servidor responde cun paquete cos indicadores SYN e ACK ao cliente, indicando que a solicitude de conexión foi aceptada, e envía o seu propio número de secuencia inicial. Finalmente, o cliente responde cun indicador ACK ao servidor para indicar que a conexión se estableceu correctamente. Deste xeito, as dúas partes están no estado ESTABLECIDA e poden comezar a enviarse datos entre si.
En xeral, o proceso de handshake a tres bandas para o establecemento de conexións TCP está deseñado para garantir a estabilidade e a fiabilidade da conexión, evitar confusións e desperdicio de recursos nas conexións históricas e garantir que ambas as partes poidan recibir e enviar datos.
Data de publicación: 08-01-2025