[Protocolo TCP] "Tres apretones de manos, cuatro ondas" de gestión de conexión

Hola a todos~ Soy tu viejo amigo: Protege a Xiao Zhou ღ  


Este problema le presenta uno de los mecanismos del protocolo de control de transmisión TCP en la programación de redes para garantizar una transmisión de datos confiable : administración de conexiones Para abrir una conexión, cómo realizar operaciones de "apretón de manos" y "agitar", este artículo lo analizará por usted ~~


Este problema está incluido en la columna del blogger : JavaEE_Protect Xiao Zhouღ's Blog-CSDN Blog

Adecuado para principiantes en programación, los amigos interesados ​​pueden suscribirse para ver otros "Conceptos básicos de JavaEE".
Estén atentos para más aspectos destacados: Proteger Xiaozhou ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*'


1. Revisión del período anterior

1.1 Estructura del mensaje TCP

 Esfuércese por hacer un análisis simple del mensaje TCP:

Número de serie y número de confirmación: cada uno ocupa 32 bits binarios  para una transmisión de datos confiable. Cada byte del flujo de bytes transmitido se numerará en secuencia para garantizar que el orden de transmisión de datos sea el mismo que el orden de recepción. El número de secuencia representa el número de secuencia del paquete de datos enviado actualmente y el número de confirmación representa el número de secuencia del siguiente paquete de datos que se espera recibir. La importancia del número de serie y el número de confirmación es garantizar que el orden de transmisión de datos sea el mismo que el orden de recepción.           

Bits de bandera: incluidos ACK, SYN, FIN, RST, PSH y URG, cada uno de los cuales ocupa un bit binario.

Se establece en 0 de forma predeterminada, si se establece en 1, significa verdadero.

ACK: se utiliza para confirmar la recepción de paquetes de datos;

SYN: determina si las partes de la comunicación han establecido una conexión;

FIN: utilizado para cerrar la conexión; 0

RST: se utiliza para restablecer la conexión;

PSH: se usa para solicitar al receptor que envíe los datos a la aplicación inmediatamente en lugar de ingresar al búfer de recepción;

URG: Se usa para indicar que hay datos urgentes en el paquete TCP.


1.2 Retransmisión de acuse de recibo y tiempo de espera

Respuesta de reconocimiento:

Cuando el receptor recibe los datos enviados por el remitente, le dará al remitente un campo de retroalimentación con un encabezado TCP, donde ACK = 1 (un bit binario), indicando que he recibido los datos. 

Para el mecanismo anterior, existen tres situaciones:

1. Los datos se pierden directamente durante el proceso de transmisión y el receptor no puede dar retroalimentación si no se reciben los datos.

2. Después de recibir los datos, el receptor da retroalimentación al remitente, pero el mensaje de retroalimentación se pierde durante la transmisión.

3. Cuando el remitente no recibe comentarios durante un cierto período de tiempo, activará una retransmisión de tiempo de espera y luego se perderán los datos retransmitidos.

Retransmisión de tiempo de espera:

Si el remitente no espera el reconocimiento del receptor dentro de un cierto período de tiempo, retransmitirá el " ."de datospaquete

Cómo restablecer la conexión y terminar la comunicación de red es el tema de este artículo~~

Para contenido específico, puede leer el blog anterior del blogger: [Protocolo TCP] Formato de mensaje, mecanismo para transmisión de datos confiable (1)_Protección del blog de Xiao Zhouღ-CSDN Blog


2. Gestión de conexiones

Protocolo de capa de transporte TCP, función de protocolo: para garantizar la confiabilidad de la transmisión de datos entre las dos partes en la comunicación.

El factor importante de garantía es el mecanismo de respuesta de reconocimiento y retransmisión de tiempo de espera. El receptor le dará retroalimentación al remitente después de recibir los datos. Esta retroalimentación es un campo con un encabezado fijo de TCP. El encabezado de TCP contiene información de bit de indicador, y cada indicador bit solo ocupa un bit binario, por lo que de acuerdo con el bit indicador del encabezado TCP, podemos juzgar el estado del " paquete TCP " actual

La conexión entre las dos partes en la comunicación del protocolo TCP se establece a través de un protocolo de enlace de tres vías.


2.1 Apretón de manos de tres vías

Apretón de manos (apretón de manos) se refiere a la comunicación entre las dos partes, la interacción de la red, entre el remitente y el receptor, a través de tres interacciones, se establece una relación de conexión. La relación de conexión se refiere a: las dos partes en la comunicación han registrado la información del otro ~

¿Por qué mencionar al cliente y al servidor? Porque en nuestra comunicación diaria, las dos partes de la comunicación no establecen una conexión directamente, sino que primero establecen una conexión con el servidor y la información se "transfiere" a través del servidor.

La "voluntad" de establecer una conexión debe ser iniciada por el cliente

  1. El cliente envía un paquete SYN al servidor , indicando una solicitud para establecer una conexión.

  2. Después de recibir el paquete SYN , el servidor responde con un paquete SYN+ACK , lo que indica que acepta establecer una conexión.

  3. Después de que el cliente recibe el paquete SYN+ACK , responde con un paquete ACK , lo que indica que la conexión se estableció correctamente.

SYN: (un bit binario) establecido en 1 significa que una de las partes desea solicitar una conexión con la otra parte. Indica que el datagrama TCP actual es un mensaje síncrono.

ACK: un bit binario), establecer 1 significa dar retroalimentación y confirmar la recepción de datos. Indica que el datagrama TCP actual es un mensaje de respuesta.

Diagrama esquemático del establecimiento de una conexión entre las dos partes que se comunican :

El blogger lo usó aquí y simuló la escena de hacer una llamada para "establecer una conexión". Tal vez haya un cierto período de tiempo antes de dicha llamada, pero el objetivo principal es verificar si las capacidades de envío y recepción de los dos las partes que se comunican son normales Se confirma la normalidad del proceso de interacción, que también es la base para la posterior transmisión confiable de datos.

¿Por qué hay un apretón de manos de tres vías, se puede hacer dos veces, se puede hacer cuatro veces?

En primer lugar, dos apretones de manos solo pueden confirmar que la función de envío y recepción de una de las partes es normal.

Para múltiples protocolos de enlace, dividir el AYN y el ACK en el medio y enviarlos por separado también puede lograr el propósito de la verificación, pero es completamente innecesario, porque un segmento de datos TCP debe encapsularse y dividirse capa por capa (TCP / IP Five- modelo de comunicación de capa), envío en dos tiempos, la eficiencia es muy baja.


2.3 Cuatro olas

Saludar cuatro veces significa que las dos partes en comunicación están desconectadas, que también es un buen nombre.

La "voluntad" de desconectarse puede ser iniciada tanto por el cliente como por el servidor.

  1. El cliente envía un paquete FIN al servidor , indicando que quiere desconectarse.

  2. Después de recibir el paquete FIN, el servidor responde con un paquete ACK , lo que indica que se ha recibido la solicitud de desconexión.

  3. Luego, el servidor envía un paquete FIN y acepta desconectarse.

  4. Después de que el cliente recibe el paquete FIN, responde con un paquete ACK , lo que indica que se recibió la solicitud de desconexión.

FIN: (un bit binario) establecido en 1 significa que una de las partes desea solicitar la desconexión de la otra parte . Indica que el datagrama TCP actual es un mensaje final.

Diagrama esquemático de la desconexión entre las dos partes comunicantes :

A través del proceso anterior, lo que desconecta es que las dos partes que se comunican envían cada una un FIN (mensaje final) a la otra parte, y luego cada una envía un ACK (mensaje de respuesta) a esta.

Después de aprender el "apretón de manos de tres vías", encontraremos que hay una operación SYN + ACK, solicitud de conexión + respuesta de confirmación, y los dos bits de bandera se pueden retroalimentar en el mismo datagrama TCP, por lo que hay tres


Pero en la desconexión, FIN y ACK se transmiten por separado, por lo que la desconexión requiere cuatro .

La razón es que SYN + ACK son completados por el kernel del sistema operativo y pueden activarse al mismo tiempo.

TCP pertenece al protocolo de la capa de transporte. Como desarrollador de programas, la atención se centra en realidad en el desarrollo de la capa de aplicación, pero eligen utilizar la interfaz de socket (API) basada en el protocolo TCP para el desarrollo. Capa de transporte-capa de red-capa de enlace de datos-capa física, estas 4 capas en realidad han sido encapsuladas por el sistema operativo y se denominan capa por capa, por lo que la capa de aplicación utiliza directamente la interfaz proporcionada por el protocolo de la capa de transporte, por lo que hay No es necesario prestar demasiada atención a otras implementaciones internas.

Saluda cuatro veces:

ACK y FIN son activados por diferentes máquinas, y el kernel del sistema completa ACK, por lo que después de recibir la solicitud de desconexión de FIN, el remitente recibirá una respuesta de confirmación la primera vez.

FIN: la desconexión está controlada por el código de la aplicación. En la programación de red de Java, FIN se activa cuando se llama al método close () en Socket (interfaz)envíe un datagrama TCP y FIN se establece en 1 como mensaje final.

Por ejemplo: el servidor descubre que el cliente ha enviado un mensaje final, por lo que llama al método close() por sí mismo, activando así el segundo mensaje final. Por supuesto, qué usar para llamar al método close() depende de cómo esté escrito el programa.


Acerca de la situación en la que el programa no llama a close() para activar el mensaje final

Por ejemplo: en el programa del lado del cliente, no se escribe close() en absoluto. En este caso, el servidor envía una solicitud final FIN al cliente: el servidor no puede recibir el mensaje final devuelto por el extremo del servicio al cliente. . Es imposible desconectar la conexión, no no no

Si el programa del cliente finaliza, el proceso finaliza, la aplicación finaliza, como qq finaliza la ejecución, activará automáticamente "cerrar ()", y el recurso finalizará con el final del proceso, y el sistema controlará la recuperación, por lo que desencadenará el informe final FIN arts. En este punto, la aplicación qq del cliente se está ejecutando, pero la conexión TCP sigue ahí (mantenida por el kernel del sistema operativo), hasta que termina de ondear cuatro veces con el servidor qq~y viceversa.

Cabe señalar que el protocolo TCP es full-duplex, es decir, el cliente y el servidor pueden enviar y recibir datos al mismo tiempo. Por lo tanto, al desconectarse, debe agitar cuatro veces, y el kernel del sistema operativo mantiene el proceso de ola para garantizar que ambas partes se hayan desconectado.


Bueno, aquí,  el blogger  del "apretón de manos de tres vías y onda de cuatro vías" de la gestión de conexiones [protocolo TCP]  en ​​la programación de red ha terminado de compartir, espero que pueda ser útil para todos, y agradezco las críticas y correcciones si hay nada malo.

Gracias a todos los que leyeron este artículo, y se avecinan más eventos emocionantes: Proteger Xiaozhou ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

Cuando te conocí, todas las estrellas cayeron sobre mi cabeza ...

Supongo que te gusta

Origin blog.csdn.net/weixin_67603503/article/details/130354669
Recomendado
Clasificación