El apretón de manos de la cara frontal tres veces y agitó cuatro veces a través de TCP


Primero, comprenda las características de TCP

Características de TCP

  1. TCP está orientado a la conexión
  2. TCP proporciona servicios confiables: los datos están libres de errores, pérdidas, repetición y llegan en orden
  3. TCP está orientado a la secuencia de bytes
  4. TCP es uno a uno

Protocolo de enlace de tres vías TCP

Bandera TCP

Antes de comprender el proceso de protocolo de enlace de tres vías de TCP, debe comprender los indicadores clave de TCP

  1. SYN, abreviado como S, bit de bandera de sincronización, utilizado para establecer una solicitud de sesión y sincronizar el número de serie;
  2. ACK, abreviado como., Confirmar el bit de bandera, confirmar el paquete de datos recibido;
  3. FIN, abreviado como F, marca completa, que indica que la transferencia está completa y la conexión se cerrará

Si SYN = 1 y ACK = 0, significa una "solicitud de conexión" del remitente;
si SYN = 1 y ACK = 1, significa que el receptor "acepta aceptar la solicitud de conexión".

Diagrama de protocolo de enlace de tres vías TCP

Inserte la descripción de la imagen aquí

Descripción del protocolo de enlace de tres vías TCP

El primer apretón de manos : el cliente abre activamente la conexión , establece el indicador de paquete TCP SYN en 1 y genera aleatoriamente un valor de número de secuencia seq = x (SYN = 1, ACK = 0, seq = x, solicitar conexión) y envía datos Empaquete al servidor. Después del envío, ingrese al estado SYN-SENT; el
segundo protocolo de enlace : el servidor recibe el paquete de datos con el bit de bandera SYN = 1 y ACK = 0, y se entera de que el cliente solicita establecer una conexión. El servidor establece la posición de la bandera como: SYN = 1, ACK = 1, ack = x + 1, y genera aleatoriamente el valor del número de secuencia seq = y; envía el paquete de datos al cliente y acepta establecer una conexión. Ingrese el estado SYN-RCVD.
El tercer protocolo de enlace : el cliente ha sido confirmado por el servidor. Compruebe si ACK es 1 y ack es x + 1. Si es así, entonces ACK = 1, ack = y + 1. A continuación, el servidor comprueba si ACK es 1 y ack es y + 1. Si es correcto, se establece el canal de conexión.

¿Por qué necesitas tres apretones de manos?

Si no desea el tercer protocolo de enlace : siempre que A envíe una solicitud y B acepte la solicitud, se establece la conexión.
¿Por qué tenemos que darnos la mano por tercera vez?
Por ejemplo:
el primer mensaje de solicitud de conexión enviado por el cliente A, por alguna razón, permanece durante mucho tiempo. Hasta que llegue la segunda solicitud de conexión del cliente A, el servidor B pensará que A ha enviado otra solicitud de conexión, por lo que acepta la primera solicitud de conexión de A y confirma la conexión. Porque la conexión solo se puede establecer a través de los dos primeros apretones de manos. Sin embargo, B ha estado esperando que A envíe datos y A no envía datos, lo que provoca un desperdicio de recursos de B.
Si hay un tercer protocolo de enlace:
A envía una solicitud de conexión a B, B confirma la conexión y se necesita la reconfirmación de A antes de que se pueda establecer la conexión. En el ejemplo anterior, si hay un tercer apretón de manos, A no puede volver a confirmar a B para establecer esta conexión, y la conexión no se establecerá. Esta vez se invalida la solicitud de conexión.

TCP saludó cuatro veces

Ilustración de la onda TCP cuatro veces:

Inserte la descripción de la imagen aquí

TCP saludó cuatro veces para explicar

La liberación de la conexión TCP requiere cuatro movimientos de manos. El ejemplo de la figura anterior es que el cliente solicita activamente la liberación de la conexión y el servidor acepta pasivamente la liberación de la conexión.
Primera ola: el cliente quiere liberar la conexión. Hacer FIN = 1, lo que significa que se solicita la liberación de la conexión, y seq = x se genera aleatoriamente; se envía al cliente y entra en la fase FIN-WAIT-1 (estado semicerrado, que impide que el cliente envíe datos al servidor). Pero, de hecho, el cliente también puede enviar un mensaje de confirmación ACK al servidor.
La segunda ola: el servidor recibe una solicitud del cliente para liberar la conexión. Sea ACK = 1, ack = x + 1 y genere aleatoriamente seq = y. Enviado al cliente, significa "recibido la solicitud del cliente para liberar la conexión". El servidor entra en la fase CLOSE-WAIT.
El cliente recibe el mensaje y entra en la fase FIN-WAIT-2.

Los dos primeros apretones de manos: el cliente le avisa al servidor: quiero liberar la conexión; el servidor le avisa al cliente: sé que desea liberar la conexión. ¡Entonces puede confirmar que la conexión del cliente al servidor está cerrada y que se completa la liberación de la conexión en una dirección!

El tercer movimiento de la mano: cuando el segundo movimiento de la mano envía un mensaje al cliente, el servidor entra en la fase de CLOSE-WAIT. Cuando finaliza el CLOSE-WAIT, el servidor está listo para liberar la conexión de "dirección de servidor a cliente". Luego envíe un mensaje con FIN = 1 y ACK = 1, indicando que la conexión está lista para ser liberada. ack = x + 1, seq = z; Luego, el servidor entra en la fase LAST-ACK. Deje de enviar datos del servidor al cliente, pero puede aceptar datos del cliente.
Cuarta ola: El cliente envía un mensaje: ACK = 1 significa que ha recibido "El servidor está listo para liberar la conexión" .ack = z + 1, seq = w ;.

¿Por qué saludar cuatro veces?

Debido a que TCP está en modo dúplex completo, la comunicación se puede realizar en ambas direcciones, por lo que se requieren cuatro ondas de mano para cerrar la conexión en ambas direcciones.

Espere 2MSL en la fase de TIEMPO DE ESPERA

2MSL: es la vida útil máxima de un segmento de mensaje, que es el tiempo más largo que un segmento de mensaje puede existir en la red antes de ser descartado.
¿Por qué esperar a 2MSL?

  1. Asegúrese de que la conexión TCP full-duplex se pueda cerrar de manera confiable;
    probablemente debido a razones de red, el servidor no recibió el mensaje ACK para la cuarta ola del cliente. Luego, el servidor volverá a enviar el FIN después del tiempo de espera (y saludará nuevamente por tercera vez). Si el cliente no espera 2MSL y el cliente entra directamente en la fase CERRADO, el cliente no puede recibir el FIN reenviado. Como resultado, no se puede completar la liberación de la conexión full-duplex. Por lo tanto, es necesario esperar a 2MSL para asegurarse de que si se reenvía el FIN, se puede recibir la señal FIN y se dará una respuesta para completar el cierre de la conexión full-duplex.
  2. Asegúrese de que los datos de esta conexión desaparezcan en la Red.
    Si el cliente entra directamente en la fase CERRADA, entrará directamente en la fase CERRADA sin esperar la desaparición de los datos del segmento de esta conexión. Entonces, si el cliente inicia una nueva conexión, es posible que los datos restantes de la última conexión se mezclen en la nueva conexión, provocando que la nueva conexión reciba datos sucios. Por tanto, es necesario esperar a 2MSL para asegurarse de que los datos de esta conexión se descartan en la red para evitar datos sucios en la próxima conexión.

Supongo que te gusta

Origin blog.csdn.net/qq_43263320/article/details/113781553
Recomendado
Clasificación