La capa de transporte en Internet : TCP a fondo. Establecimiento de la conexión. Volumen VI

Escrito por Sergio De Luz
Redes
4

En anteriores artículos hemos hablado de las principales características de TCP, incluyendo una de las características principales de este protocolo como es el control de flujo.

Ahora hablaremos de como TCP establece una conexión, popularmente se denomina establecimiento de las tres fases.

Imaginemos que nosotros somos el cliente (usuario de a partir de ahora), y esta página web es el servidor.

El usuario envía un segmento TCP especial al servidor web, este segmento no contiene datos válidos para nosotros, únicamente pone el bit SYN a 1 (segmento SYN).

¿Qué es el bit SYN? Es un bit de control dentro del segmento TCP, que se utiliza para sincronizar los números de secuencia iniciales ISN de una conexión.

Una vez que el bit SYN está a 1, el usuario selecciona un número de secuencia inicial de forma aleatoria (así evitamos problemas si anteriormente hemos envíado otros paquetes con el mismo número de seucencia y hay cierto “retraso” o retransmisiones en los envíos). Este número de secuencia lo coloca en el campo número de secuencia del segmento TCP inicial SYN, este segmento  es encapsulado dentro de un datagrama IP y se envía al servidor.

Llegados hasta aquí, os sonará el famoso ataque SYN, ¿Qué es un ataque SYN?

Consiste básicamente en enviar este segmento SYN desde una dirección de origen falsa, cuando recibimos el segmento SYN y lo contestamos con un SYN-ACK, el servidor se quedará esperando para recibir respuesta…y como el origen es falso, se quedará a la espera consumiendo recursos del servidor y limitando el número de conexiones verdaderas que tengamos.

SYN cookies provee un mecanismo de protección contra Inundación SYN, eliminando la reserva de recursos en el host destino, para una conexión en momento de su gestión inicial.

Con la explicación del ataque SYN nos hemos adelantado un poco a lo que viene ahora, sigamos…

El segundo paso del establecimiento de la conexión es que el segmento SYN llega el servidor, el servidor extrae este segmento y asigna los buffers y variables TCP a la conexión, a continuación envía un segmento ACK al servidor (SYN-ACK). Este segmento tampoco contiene datos útiles para nosotros, pero tiene información importante para el establecimiento: bit SYN a 1, el campo de reconocimiento de la cabecera es (núm_secuencia + 1) y por último, el servidor elige su propio número de secuencia inicial y lo almacena en la cabecera del segmento TCP.

El tercer y último paso de esta conexión es que el usuario recibe el segmento SYN-ACK y el usuario asigna los buffers y variables a la conexión. El usuario envía al servidor otro segmento diciendo que todo se ha recibido correctamente (ACK) y almacena el valor del núm_secuencia_servidor+1 en el campo de reconocimiento de la cabecera, entonces el bit SYN se pone a 0 indicando que la conexión se ha establecido satisfactoriamente. Este último segmento puede enviar datos útiles.

A partir de este momento, el usuario y el servidor puede enviar información entre ellos.

Supongamos que el cliente (usuario) decide cerrar la conexión TCP, el usuario debe enviar un segmento especial TCP al servidor (este bit es el llamado bit FIN y se pone a 1). Cuando el servidor recibe este segmento, devuelve al usuario un ACK. Posteriormente el servidor realiza el mismo proceso y finaliza con el ACK del cliente.

En el siguiente artículo hablaremos del control de congestión de TCP.


Continúa leyendo