Principio de protocolo de enlace de tres vías TCP
El contenido principal de este artículo
1. Formato del paquete TCP
El formato del paquete TCP es el siguiente:
Observe que hay hay algunos en el medio Bit de bandera:
Entre los formatos de paquetes de datos, lo más importante es comprender el número de secuencia y confirmar el número de secuencia. La razón por la que TCP es estable y confiable está estrechamente relacionada con el número de secuencia y el mecanismo del número de secuencia de confirmación, que también es la esencia de TCP.
2. El protocolo de enlace de tres vías de TCP
Como todos sabemos, el protocolo TCP es confiable, mientras que el protocolo UDP no es confiable. TCP debe usarse en algunos escenarios, como cuando un usuario inicia sesión y debe dar una respuesta clara si el inicio de sesión fue exitoso, etc. En algunos escenarios, si el usuario recibe los datos no es tan crítico. Por ejemplo, en un juego en línea, si un jugador dispara una bala, si otros jugadores lo ven depende completamente del entorno de red actual. Los jugadores ya habrán disparado la bala. Después de recibir el disparo, la interfaz aún no se puede actualizar. Esta situación es adecuada para UDP.
Para garantizar la confiabilidad del protocolo TCP, se debe garantizar cuando se establece la conexión.
Inicialmente, los procesos TCP en ambos extremos están en estado CERRADO, A abre activamente la conexión y B abre pasivamente la conexión. (Estado cerrado de A y B CERRADO - Estado de escucha B ESCUCHAR - Estado de sincronización enviada SYN-SENT - Estado de sincronización B recibida SYN-RCVD - Estado de conexión establecida de A, B ESTABLECIDO)
El proceso del servidor B está en el estado LISTEN, esperando la solicitud de conexión del cliente. Si es así, responda.
3. Transmisión y confirmación TCP
La confiabilidad de la transmisión TCP se puede resumir en una oración: cada vez que recibe datos de la otra parte, envía un ACK para confirmación. Después de que el remitente lo envía, no hay Después de recibir el ACK, se reenviará después de un período de tiempo.
Es decir, A envía un mensaje a B (en lo sucesivo, los mensajes TCP se consideran directamente como mensajes y la palabra mensaje se mezcla con los mensajes TCP). Después de recibir el mensaje, B necesita enviar un mensaje. ACK a A. Este ACK equivale a devolver un resultado. Si no se devuelve ningún resultado, A reenviará el mensaje.
En resumen, A tiene 3 tipos de mensajes que deben confirmarse.
Además, A también puede enviar mensajes RST para indicar un error. Los mensajes de error no requieren confirmación. RST también se puede utilizar como interfaz de retorno, reemplazando el ACK normal. Devolver ACK indica que el mensaje se envió y procesó correctamente, y devolver RST indica que el procesamiento del mensaje falló. Porque a través de la transmisión por red, hay un tercer resultado, que es el éxito o el fracaso incierto. Para resumirlo de esta manera. Hay tres tipos de resultados de devolución.
En estas dos situaciones específicas, A no puede reconocerlo en absoluto y solo puede reenviarlo.
4. Número de secuencia TCP y número de secuencia de confirmación
A envía un mensaje a B. Si los mensajes a, b, cyd se envían al mismo tiempo, porque a través del red, el orden de estos mensajes no es fijo. Y B devuelve el resultado ACK, entonces surge la pregunta, ¿a qué mensaje corresponde este resultado? Además, cuando A agota el tiempo y lo reenvía, el mensaje original se retrasa por un período de tiempo y llega nuevamente a B. De esta manera, B recibe dos mensajes idénticos. Entonces, ¿cómo determina B que los dos mensajes son iguales?
Para resolver este problema de correspondencia, cada mensaje debe tener un número y el resultado devuelto también debe tener un número. El número de secuencia TCP puede considerarse como el número del mensaje enviado y el número de secuencia de confirmación puede considerarse como el número del resultado devuelto. Con el número, se pueden ignorar los mensajes duplicados y el resultado devuelto (ACK) se puede hacer coincidir con el mensaje.
Al establecer una conexión, TCP selecciona un número de secuencia inicial y luego incrementa el número de secuencia cada vez que se envía un paquete de datos (mensaje), asegurando que cada vez que se envía un paquete de datos diferente, el número de secuencia del paquete de datos es diferente de.
Así es como TCP lo maneja:
SYN y FIN también necesitan incrementar el número de secuencia. De lo contrario, si A reenvía varios SYN o FIN a B, B no podrá determinar si los SYN son iguales, por lo que los paquetes de datos duplicados no se pueden ignorar.
Cuando TCP envía un ACK, equivale a devolver un resultado, que debe tener un número de secuencia de reconocimiento que corresponda al mensaje enviado.
Cuando el número del paquete de envío es a, la longitud del incremento es len. Entre ellos, se puede considerar que SYN y FIN tienen una longitud de incremento de 1. Este mensaje se puede expresar como:
Ahora revisemos el proceso de protocolo de enlace de tres vías. A envía el número de secuencia x a B, B responde a A con el número de confirmación x+1 y envía el número de secuencia y al mismo tiempo. Después de que A recibe la respuesta de B, responde con el número de confirmación y+1 y envía el número de secuencia x+. 1 al mismo tiempo. La respuesta a la otra parte debe ser el número de secuencia recibido más 1 (o la longitud de los datos), para que la otra parte pueda saber que lo he recibido y esto puede garantizar que TCP sea confiable.