lunes, 19 de septiembre de 2011

Como se inician las conexiones TCP: La Negociación en tres pasos

Una de las características del Protocolo de Control de Transferencia, o TCP, es e que esta orientado a conexiones.

Esto sencillamente significa que antes de realizar una transferencia de datos el emisor y receptor se identifican y se ponen de a acuerdo en como enviar los datos.

Como la mayoría de los protocolos usados en Internet operan sobre el protocolo TCP, observar esta característica podria ser de utilidad.

Figura 1: Negociación en tres pasos.
La figura 1 muestra como se realiza el proceso, como su nombre lo indica la negociación se realiza por medio de tres transmisiones, durante las cuales el campo "Sequence Number" y las banderas en el paquete TCP toman una serie de valores específicos.

En proceso es en esencia el siguiente:

  1. El cliente envía un paquete con la bandera SYN al servidor
  2. Si el servidor proporciona el servicio deseado responde con un paquete con las banderas SYN y ACK activadas.
  3. En cliente responde enviando un paquete con la bandera ACK.
  4. El cliente comienza las peticiones al servidor.
Con el propósito de demostrar esto, se usara Wireshark para capturar y analizar los paquetes que conforman la negociación de tres pasos.

El primer paso consiste en usar el Wireshark para capturar una transferencia de algún protocolo que funcione sobre TCP, para el ejemplo se capturara una transmisión en HTTP, como se vio en un experimento anterior.

Una vez que se hallan capturado los paquetes se obtendrá una pantalla similar a la figura 2.

Figura 2: Paquetes capturados.
Ahora aplicaremos un filtro para solo observar los paquetes TCP, para esto escriba "tcp" en el campo filtro y presione aplicar, esto le dara una pantalla similar a la Figura 3.
Figura 3: Paquetes TCP.
Si observa la columna tipo, notara que los paquetes HTTP también fueron incluidos por el filtro, esto se debe a, que como se menciono anteriormente, el protocolo HTTP funciona sobre TCP, por lo que incluye las cabeceras y tramas del ultimo protocolo.

Observando la columna Info de los paquetes notara que existen varios donde aparecen las cadenas de texto "[SYN]", "[SYN, ACK]" y "[ACK]", estos son los paquetes que examinaremos a detalle.

Figura 4: Contenido del paquete SYN.
Para esto de doble click sobre alguno de los paquetes que contenga la cadena de texto "[SYN]", esto abrirá una ventana similar a la figura 4.

Observe los campos "Sequence Number" y "Flags", ya que estos le indican al servidor que se desea iniciar una conexión.

Ahora busque algún paquete con la cadena "[SYN, ACK]" en el campo info y de doble click sobre este, conseguirá una ventana como muestra la figura 5.

Figura 5: Contenido del paquete SYN, ACK.
En este paquete hay varios detalles que a los cuales prestar atencion, el primero que si bien podria parecer obvio es que el paquete fue enviado por el servidor, a diferencia del paquete SYN que fue generado por el cliente.

Tambien notara que hay un campo nuevo que no apareció en el paquete SYN el campo
"Acknowledgement Number" y que el campo de banderas ahora tiene activas las banderas SYN y ACK, pero el campo "Sequence Number" permaneció sin cambios.

Ahora bosque y de doble click sobre un paquete con la cadena de texto "[ACK]" en el campo info, la ventana resultante lucirá como la figura 6.
Figura 6: Paquete ACK.
Este paquete fue generado por el cliente y enviado al servidor y es la parte final de la negociación en tres pasos, los cambios que pueden observarse con respecto al paquete SYN-ACK estan en los campos "Sequence Number" el cual ahora tiene el valor de 1 y en la campod e banderas el cual ya solo contiene la bandera ACK, el campo "Acknowledgement Number" permanece sin cambios.

Una vez que estos tres paquetes se han enviado y recibido exitosamente el cliente puede comenzar las solicitudes al servicio que desea utilizar.