viernes, 8 de mayo de 2009

Analizando TCP

Protocolo TCP (Transmission Control Protocol)

El Protocolo TCP sin duda uno de los mas complejos de los protocolos es uno de los protocolos mas utilizados por los servicios de Internet y uno de los mas “seguros” según por que maneja un identificador de secuencia en una “sesión” entre dos equipos conectados.

El Objetivo de una sesión es el de coordinar una o múltiples conexiones TCP entre par host. Una sesión de TCP se identifica por una tupla {Fila} con los datos importantes del cliente y el servidor Host A (Cliente) y Host B (Servidor), (ipCliente, ipServidor, puertoCliente, puertoServidor).

De esta manera debemos estudiar la cabecera TCP y conocer detenidamente cada campo que se encuentra en el paquete TCP.
Figura 1 : Cabecera TCP

Puerto Origen: Se trata del puerto origen de conexión (16 bits).

Puerto Destino: Se trata del puerto de destino de conexión (16 bits).

Numero de Secuencia: Este número identifica de manera unívoca a un paquete dentro de una misma conexión. Si la bandera SYN esta activada (se esta estableciendo la conexión) y se emplea un numero inicial de secuencia ISN (Initial Sequence Number) de esta manera el numero del campo es ISN+1 (32 bits).

Numero de Confirmación: Es un número que sirve para confirmar la recepción de un paquete de datos. Si el la bandera ACK esta activa contiene el numero de secuencia que el sistema debe recibir (32 bits).

Inicio de Datos: Este campo indica donde comienzan los datos y donde inicializa y finaliza la cabecera (4 bits).

Reservado: Espacio reservado su valor siempre es 00000 (6 bits)

Banderas (Flag’s): (6 bits) un BIT por cada Bandera

URG (Urgent): Este flag indica que el paquete contiene datos urgentes, en un paquete pueden combinarse datos urgentes y no urgentes, cuando esta bandera está activa el campo de Puntero de urgencia identifica donde comienzan y finalizan los datos de urgentes.

ACK (Acknowledgement):
Este flag indica que además de recibir datos confirma la recepción de un paquete anteriormente recibido, para que el numero de secuencia sea tomado en cuenta en una sesión TCP el flag ACK debe estar activa.

PSH (Push): Cuando esta el flag activado debe vaciarse el buffer de recepción o envió (según se trate de un transmisor o un receptor). Cuando enviamos grandes cantidades de información divididas en paquetes estos se sitúan en un buffer de transmisión FIFO (Primero en entrar, primero en salir) hasta que se prepare el ultimo y este contiene el flag PSH activada indicando que el buffer esta lleno y que debe vaciarse y enviarse los datos.

Cuando los datos llegan al receptor estos son almacenados en un buffer de recepción. En el momento que llega el Paquete con el Flag PSH activado los paquetes son vaciados del buffer y pasan a la pila.

RST (Reset): Cuando se envía el flag RST activado se le avisa al otro extremo de la conexión que ha habido algún tipo de problema con la sincronización de la conexión (Número de secuencia o Número de recepción incorrecto) y que se cerrara la conexión y se establecerá una nueva sincronización.

SYN (Synchorization):
Este flag es utilizado cuando intentamos establecer una nueva conexión con otro host.

FIN (Finalization): El flag activo indica que la conexión debe cerrarse y esperamos que el otro host este listo para cerrar la conexión

Una sesión TCP comienza por una sincronización entre el cliente y el servidor. A este suceso se lo conoce como el Three way handshake que se hace para que los equipos que van a establecer una conexión conozcan la especificación del otro y su configuración de manejar sesiones TCP. Veamos en el siguiente ejemplo de una sincronización de dos equipos.

Figura 2: Inicio de una sesión TCP

Aunque la sesión consta de tres partes en la imagen se observa 4 esto va de la siguiente manera 1) El host A envía su numero de secuencia al Host B,2) El host B confirma el numero de secuencia del host A y envía su numero de secuencia al host A, 3) El host A confirma el numero de secuencia del hot b.

De igual forma que una conexión TCP debe realizarse de manera correcta, la finalización debe efectuarse de un modo correcto.

Figura 3: Finalizacion de una sesión TCP

Tras un envió bidireccional de paquetes de datos, 1) El host A envía el Flag FIN activado, 2) El host B responde con un ACK confirmando la recepción del ultimo paquete enviado,3) Se terminan de enviar los paquetes que estuvieran pendientes, cuando los datos son enviados completamente, 4) El host b envía el Flag FIN activado, 5) El host A responde con el flag ACK confirmando la recepción y se da por finalizada la conexión TCP.

Estado de las conexiones TCP, como ya sabemos hasta ahora este protocolo está orientado a conexiones y como tal tiene estados definidos según en que punto de la conexión se encuentre el socket y están detallados en el RFC 793 y son:

LISTEN:Un host que espera conexiones de un cliente y escucha en un puerto genera un socket con un estado en Listen, Cuando un cliente se conecta al host el socket pasa a un estado de Established y otro socket pasa al estado Listen.

SYN-SENT: Cuando se envía un paquete con el flag SYN activado como primer paso para el saludo de tres tiempos el socket queda con el estado SYN-SENT.

SYN-RECEIVED: Este estado es seguidamente después de un SYN se responde con un SYN/ACK los socket tienen estado SYN-RECEIVED

ESTABLISHED: Cuando finaliza el saludo de tres tiempos el estado de los socket es de ESTABLISHED, y permanece con este estado durante todo el tiempo que dura la conexión.

FIN-WAIT-1: El socket entra en este estado cuando se envía el flag FIN activado pero aun no se ha recibido la confirmación de ese paquete.

FIN-WAIT-2: Una vez se reciba la confirmación ACK del paquete de FIN, el socket ingresa a ese estado (solo se reciben datos).

CLOSE-WAIT: Si recibimos el flag FIN activado y aún no hay datos para enviar el socket pasa al estado CLOSE-WAIT.

CLOSING: Si ambos host desean finalizar la conexión, los socket pasan al estado CLOSING.

LAST-ACK: Una vez enviados los datos y el flag FIN activado en la finalización de una conexión TCP, cuando el ultimo en haber recibido un paquete esta pendiente de recibir la confirmación, el socket entra en el estado LAST-ACK.

TIME-WAIT: Una vez que es enviado el paquete de datos y el flag FIN activado en la finalización de una conexión TCP cuando el primero en haber enviado el paquete envía la confirmación al último paquete FIN ingresa a un estado TIME –WAIT para esperar un tiempo moderado confirmando que fue decepcionado de manera correcta

Related Posts Plugin for WordPress, Blogger...