Programación de red Linux (relación de transición de estado TCP)


prefacio

Este artículo explicará la relación de transición de estado de TCP. Aprender esta relación de transición de estado es muy necesario para que tengamos una comprensión profunda de la programación de redes.

1. Diagrama de transición de estado de TCP

Insertar descripción de la imagen aquí

2. Análisis de transición del estado de la conexión TCP

客户端状态转换:

1.CERRADO -> SYN-SENT: cuando el cliente intenta establecer una conexión con el servidor, el cliente pasa del estado CERRADO al estado SYN-SEND. En este momento, el cliente envía un paquete SYN (sincronización), indicando una solicitud para establecer una conexión y espera la confirmación del servidor.

2. Cuando el servidor confirma, envía un paquete SYN (sincronización) y un ACK (paquete de reconocimiento) al cliente. El cliente aún mantiene el estado SYN-SEND. Cuando el cliente recibe la confirmación, enviará un ACK (acuse de recibo). paquete) al servidor.

3. Una vez que el servidor recibe el ACK (paquete de confirmación), puede comunicarse con los datos. En este momento, tanto el cliente como el servidor han entrado en el estado ESTABLECIDO.

服务器状态转换:

1.CERRADO -> ESCUCHAR: Cuando el servidor comienza a escuchar las solicitudes de conexión entrantes, el servidor pasa del estado CERRADO al estado ESCUCHA. En este punto, el servidor está listo para recibir la solicitud de conexión del cliente.

2.ESCUCHAR -> SYN-RECEIVED: cuando el servidor recibe la solicitud de conexión del cliente, el servidor pasa del estado ESCUCHA al estado SYN-RECEIVED. El servidor envía un paquete de confirmación (ACK) al cliente y espera la confirmación del cliente.

3.SYN-RECEIVED -> ESTABLECIDO: Cuando el servidor recibe la confirmación del cliente (ACK), el servidor pasa del estado SYN-RECEIVED al estado ESTABLECIDO. En este punto se ha establecido la conexión y ambas partes pueden iniciar la transmisión de datos.
Insertar descripción de la imagen aquí

3. Análisis de transición del estado de desconexión de TCP

Insertar descripción de la imagen aquí

客户端状态转换:
1.ESTABLECIDO -> FIN-WAIT-1: cuando el cliente decide finalizar la conexión, el cliente pasa del estado ESTABLECIDO al estado FIN-WAIT-1. El cliente envía un paquete FIN (terminación), indicando una solicitud para finalizar la conexión y espera la confirmación del servidor.

2.FIN-WAIT-1 -> FIN-WAIT-2: cuando el cliente recibe la confirmación (ACK) del servidor, el cliente pasa del estado FIN-WAIT-1 al estado FIN-WAIT-2. En este punto, el cliente está esperando que el servidor envíe una solicitud para confirmar la finalización de la conexión.

3. FIN-WAIT-2 -> TIME-WAIT: cuando el cliente recibe la solicitud del servidor para confirmar la terminación de la conexión, el cliente pasa del estado FIN-WAIT-2 al estado TIME-WAIT. En este momento, el cliente ingresa al estado de espera y espera un período de tiempo antes de ingresar al estado CERRADO.

4.TIEMPO DE ESPERA -> CERRADO: Después de un período de espera, el cliente pasa del estado de TIEMPO DE ESPERA al estado CERRADO, lo que indica que la conexión está completamente cerrada.

服务器状态转换:

1.ESTABLECIDO -> CERRAR-ESPERAR: Cuando el servidor decide finalizar la conexión, el servidor pasa del estado ESTABLECIDO al estado CERRAR-ESPERAR. El servidor envía un paquete FIN (terminación) al cliente y espera la confirmación del cliente.

2.CLOSE-WAIT -> ÚLTIMO ACK: Cuando el servidor recibe la confirmación del cliente (ACK), el servidor pasa del estado CLOSE-WAIT al estado ÚLTIMO-ACK. En este punto, el servidor está esperando que el cliente envíe una solicitud para confirmar la finalización de la conexión.

3.ÚLTIMO-ACK -> CERRADO: cuando el servidor recibe la solicitud del cliente para confirmar la terminación de la conexión, el servidor pasa del estado ÚLTIMO-ACK al estado CERRADO. Indica que la conexión está completamente cerrada.

4. ¿Por qué se requiere 2MLS?

2MSL (Vida útil máxima del segmento) significa que cuando se cierra una conexión TCP, debe esperar el doble de la vida útil máxima del paquete, es decir, el doble de la vida útil máxima del paquete para recuperar los recursos relacionados. Este es un tiempo de espera establecido en el protocolo TCP para garantizar que ambas partes de la conexión reciban las solicitudes de terminación del otro.

2MSL的存在是为了处理网络上可能存在的延迟、重传和乱序等问题,以确保连接的可靠关闭。在TCP连接关闭过程中,双方会交换终止连接的请求和确认,以保证数据传输的完整性和正确性。2MSL的设定时间可以确保在该时间段内,网络中所有与这个连接相关的报文段都能够被丢弃。

具体原因如下:

1. Asegurar que la conexión esté completamente cerrada: 2. La existencia de MSL puede asegurar que tanto el cliente como el servidor reciban la solicitud de terminación y la confirmación de la otra parte, evitando que la conexión se cierre completamente debido a retrasos o desorden en la conexión. red. Dentro del período 2MSL, cualquier segmento caducado se descartará para garantizar que la conexión esté completamente cerrada.

2. Asegúrese de que las conexiones antiguas no entren en conflicto con las nuevas: durante un período de tiempo después de cerrar una conexión TCP, pueden aparecer segmentos retrasados ​​relacionados con conexiones previamente cerradas. Si la nueva conexión utiliza el número de puerto utilizado para cerrar la conexión antes, es posible que estos segmentos retrasados ​​se reciban y procesen incorrectamente. Al esperar 2MSL, se garantiza que todos los segmentos de la conexión anterior hayan caducado y no se confundan con la nueva conexión.

3. Evite el impacto de los segmentos de mensajes retrasados ​​en las nuevas conexiones: después de cerrar la conexión TCP, pueden aparecer segmentos de mensajes retrasados, que pueden enviarse en el último momento antes de que se cierre la conexión. Si el número de puerto utilizado por la nueva conexión entra en conflicto con el número de puerto de origen de estos segmentos retrasados, el segmento puede confundirse con parte de la nueva conexión y puede ocurrir un error. El tiempo de espera de 2MSL puede garantizar que todos los segmentos de mensajes retrasados ​​se descarten y no interfieran con nuevas conexiones.

Resumir

Este artículo termina aquí: esta parte del conocimiento debe ser comprendida y asimilada por todos.

Supongo que te gusta

Origin blog.csdn.net/m0_49476241/article/details/132333167
Recomendado
Clasificación