Principais misterios das conexións TCP de Network Packet Broker: Desmitificada a necesidade do Triple Handshake

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.

 Protocolo de enlace TCP 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:

 Paquete SYN

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.

Paquete SYN+ACK

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.

Paquete ACK

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.

A negociación tripartita evita conexións duplicadas históricas

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.

Sincronizar os números de serie iniciais de ambas as partes

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.

Evitar o malgasto de recursos

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