Ilustración de todo el proceso de establecimiento de una conexión TCP
TCP es el protocolo de capa de transporte en Internet. Utiliza el protocolo de enlace de tres vías para establecer una conexión. El siguiente es el proceso completo para que TCP establezca una conexión.
La imagen de arriba muestra el proceso por el cual TCP establece una conexión. Supongamos que el host A es un cliente TCP y B es un servidor. Inicialmente, los procesos TCP en ambos extremos están en estado CERRADO. Debajo del host en la figura se encuentra el estado del proceso TCP. A abre la conexión de forma activa y B abre la conexión de forma pasiva.
Primero, A envía un segmento de solicitud de conexión a B. En este momento, el bit de sincronización SYN=1 en el encabezado y se selecciona un número de secuencia inicial seq=x. TCP estipula que el segmento SYN no puede transportar datos, pero debe consumir un número de secuencia. En este momento, A ingresa al estado SYN-SENT.
Después de recibir la solicitud, B envía una confirmación a A. En el segmento del mensaje de confirmación, establezca los bits SYN y ACK en 1, el número de confirmación es ack=x 1 y también elija un número de secuencia inicial seq=y para usted. Tenga en cuenta que este segmento no puede transportar datos, pero también consume un número de secuencia. En este momento, B ingresa al estado SYN-RCVD.
Después de que A recibe la confirmación de B, también debe darle una confirmación a B. El ACK del segmento del mensaje de confirmación se establece en 1, el número de confirmación ack=y 1 y su propio número de secuencia seq=x 1. En este momento, la conexión TCP se ha establecido y A ingresa al estado ESTABLECIDO. Cuando B recibe la confirmación de A, también ingresará al estado ESTABLECIDO.
El proceso de establecimiento de conexión descrito anteriormente se suele denominar protocolo de enlace de tres vías TCP.
¿Por qué A todavía necesita enviar una confirmación? Esto es principalmente para evitar que el segmento de solicitud de conexión no válida se transmita repentinamente a B, provocando así un error.
De esta forma se genera el llamado segmento de mensaje de solicitud de conexión caducada. A envía una solicitud de conexión, pero no recibe confirmación porque el mensaje de solicitud de conexión se pierde, por lo que A reenvía la solicitud de conexión y la conexión se establece después del éxito. La conexión se libera una vez completada la transferencia de datos. Ahora supongamos que el primer segmento de solicitud enviado por A no se perdió, sino que se retrasó en un determinado nodo de red durante mucho tiempo, por lo que se retrasó en llegar a B algún tiempo después de que se liberó la conexión. Resulta que este es un segmento de mensaje que expiró hace mucho tiempo. Sin embargo, después de que B recibió este segmento de solicitud de conexión no válido, pensó erróneamente que A había enviado una nueva solicitud de conexión, por lo que envió un segmento de confirmación a A y aceptó establecer la conexión. Si no se utiliza el protocolo de enlace de tres vías, siempre que B envíe una confirmación, se establecerá una nueva conexión.
Dado que A no ha emitido una solicitud para establecer una conexión, no prestará atención a la confirmación de B y no enviará datos a B. Pero B pensó que se había establecido la nueva conexión de transporte y siguió esperando a que A enviara datos, desperdiciando así muchos recursos.
El uso del método de protocolo de enlace de tres vías de TCP puede evitar que ocurra el fenómeno anterior. Por ejemplo, en el caso de ahora, dado que A no enviará una confirmación a B, la conexión no se establecerá. Aquí tienes una pregunta para que pienses: ¿Qué pasará si se pierde el segmento del mensaje en el tercer protocolo de enlace TCP?