Sie sind auf Seite 1von 6

EL PROTOCOLO TCP

El protocolo TCP (Transmission Control Protocol) fue creado entre los aos 1973-1974 por Vint Cerf y Robert Kahn. Este protocolo est en la capa de transporte, por lo tanto muchos programas dentro de una red de ordenadores pueden utilizarlo para comunicarse entre s mediante el envo de un flujo de datos. Es en esta parte de la comunicacin donde se asegura que los paquetes lleguen sin errores y ordenados a la capa de aplicacin. Tambin proporciona un mecanismo para distintas aplicaciones dentro de una misma mquina. Esto es lo que conocemos como puerto. Como vimos anteriormente, es el protocolo TCP el que se encarga del fraccionado de la informacin en datagramas el tamao ms manejable para que luego sean enviados a travs del protocolo IP como partes independientes, de manera segura. Para conseguir esto, el protocolo TCP aade a cada uno de los datagramas una informacin en forma de cabecera. Esta cabecera contiene una serie de campos obligatorios que se utilizarn para asegurar en el destino que la informacin lleg correctamente y para reconstruir la informacin original de manera ordenada, adems podemos incluir de manera adicional hasta 132 bits. De cualquier manera el tamao total de la cabecera debe ser mltiplo de 32 bits, as que hay veces que es necesario utilizar este campo adicional relleno a cero para completar el tamao requerido.

1.- CAMPOS DE LOS DATAGRAMAS TCP


(Falta la TABLA)

Puerto de Origen (16 bits): Dado que en un mismo ordenador se pueden estar ejecutando distintos servicios hace falta asignar un puerto a cada uno de ellos para distinguirlos. Puerto destino (16 bits): En el destino nos pasa lo mismo, como puede haber diferentes servicios ejecutndose al mismo tiempo es necesario indicar para cual de ellos es el paquete enviado. Para que el cliente pueda conocer el puerto el que enva los paquetes, los servidores suelen hacer uso de nmeros de puerto estndar, por ejemplo, el 21 para el protocolo FTP o el 23 para el protocolo TELNET. Nmero de secuencia (32 bits): Indica el nmero de secuencia del primer byte de datos del segmento TCP. Se utiliza tanto para organizar los paquetes en el destino, como para eliminar los duplicados. Cuando el flag SYNC est activo (establecimiento de la conexin), este se considera como parte de los datos y se usa el nmero inicial de la secuencia.

Numero de Confirmacin (32 bits): Si el flag ACK est activo, este campo contiene el valor del siguiente nmero de secuencia que el sistema espera recibir. Este campo siempre tendr un valor una vez que la conexin se haya establecido. Flags (6 bits): Determina el funcionamiento de la conexin TCP: URG: Flag de urgencia, especifica el existencia de informacin urgente, indicando que la informacin contenida en el campo Urgent Pointer es significativa. ACK: Reconoce una recepcin correcta de datos indicando que el campo Nmero de confirmacin es significativo. PSH: Funcin push, la cual indica al receptor que ha de pasar los datos a la capa de aplicacin tan rpido como sea posible. RST: Indica reinicio de la conexin. SYN: Indica que se trata de una paquete que se utiliza al inicio de la sesin para sincronizar los nmeros de secuencia. FIN: Indica que no existen ms datos y se comienza la negociacin del fin del a conexin. Ventana (16 bits): Usado en segmentos con el flag ACK activo para el control del flujo de datos. Especifica el nmero de bytes de datos que pueden ser recibidos empezando por el indicado en el campo Nmero de confirmacin. Checksum (16 bits): Campo que se utiliza para la integridad de la transmisin. Para el clculo de este valor tambin se utilizan los campos que el protocolo IP van a incluir, de manera que se calcula una pseudo cabecera exclusivamente a efectos del clculo. Urgent Pointer (16 bits): Indica el desplazamiento en el que se encuentran los datos urgentes con el propsito de que el receptor pueda acceder directamente. Este campo slo es vlido cuando el flag URG est marcado. Options: Este campo es opcional. Permite que una aplicacin negocie durante la configuracin de la conexin caractersticas como el tamao mximo de segmento (MSS, Maximun Segment Size). Si este campo tiene le primer octeto a cero indica que no hay opciones. Padding: Tiene como misin conseguir que la cabecera tenga un tamao mltiplo de 32 bits aadiendo os ceros necesarios para conseguirlo. Datos: En este campo es donde se almacenan los datos del envo.

2.- FUNCIONAMIENTO DEL PROTOCOLO TCP


El protocolo TCP est orientado a la conexin. La vida de uan conexin TCP se compone de tres fases: Establecimiento de la conexin (negociacin en tres pasos). Transferencia de datos. Negociacin de la desconexin (negociacin en cuatro pasos).

Para la transferencia de datos el protocolo TCP va a utilizar el principio de ventana para el envo de datagramas y la recepcin de las confirmaciones de entrega. 2.1.- Establecimiento de la conexin (negociacin en tres pasos) Para poder iniciar una comunicacin entre dos mquinas primero tenemos que establecer una conexin, para ello la mquina que va dar servicio abre un socket pasivo, de manera que el servidor se queda a la escucha en un determinado puerto. Por el lado del cliente, cuando este quiere iniciar una conexin abre un socket activo sobre el puerto del servidor enviado un segmento SYN inicial (flag SYN activo) con su nmero de secuencia indicando en el campo Nmero de secuencia de la cabecera TCP. A esta peticin el servidor responder con un datagrama SYN/ACK, enviando, por un lado su propio nmero de activacin de secuencia en el campo Nmero de secuencia de la cabecera y activando el flag SYN, y por otro enviando la confirmacin marcando el flag ACK y enviando el campo Nmero de confirmacin el nmero de secuencia del cliente. Cuando el cliente recibe este paquete de confirmacin enva al servidor un tercer segmento confirmando que lo ha recibido incluyendo en el campo Nmero de Confirmacin e l nmero de inicio de la secuencia del servidor y con el flag ACK activo. A partir de este momento la conexin queda establecida y comienza la transmisin de datos. Un punto crtico en la seguridad de este protocolo es la generacin aleatoria e este nmero inicial de secuencia (ISN, Initial Squence Number), que generalmente utiliza un procedimiento basado en el tiempo de reloj. Aqu encontramos uno de los ataques ms antiguos sobre este protocolo. Si los nmeros de inicio de secuencia pueden ser predichos, puede llegar a ser posible la modificacin de la informacin de la conexin apoderndose de ella mediante hijaking o realizar blind spoofing sobre futuras conexiones.

SYN

SYN ACK

ACK

CONEXIN ESTABLECIDA
(Establecimiento de una conexin TCP en tres pasos.)

NOTA: Es interesante comentar que existe un nmero de secuencia generado por cada host, ayudando de este modo a que no se puedan establecer conexiones falseadas (spoofing). 2.2.- Transferencia de datos. Durante la transferencia de los datos hay una serie de campos de la cabecera que nos ayudan a asegurar la robustez de la comunicacin. A lo largo de la transmisin se van a utilizar como nmeros de secuencia los que se han pactado durante el establecimiento de la conexin. En toda la conexin estarn presentes un par de nmeros de secuencia que son los que van a servir para ordenar los paquetes, evitar duplicados y asegurar la recepcin del envo, estos son los campos Nmero de secuencia y Nmero de confirmacin. Con el Nmero de secuencia el emisor se refiere a su propio numero de secuencia y con el nmero de Confirmacin al nmero de secuencia del receptor. Otro de los campos que utilizaremos con este propsito es el checksum, la funcin de este campo es asegurar que los datos recibidos no estn corruptos, descartando los que s lo estn. Para el clculo de este valor se utiliza la totalidad del paquete TCP(sumando el valor de la cabecera ms el valor de datos), al que adems hay que aadir una pseudocabecera IP, que incluye la direccin IP fuente, la direccin IP destino, el campo de protocolo de la cabecera de IP y la longitud del paquete(TCP o UDP). Esta pseudocabecera proporciona proteccin adicional contra paquetes recibidos errneamente por problemas de enrutado. El checksum es el complemento a uno de 16 bits de la suma en complemento a uno de todas las palabras de 16 bits de la pseudocabecera, cabecera y texto del paquete (TCP o UDP). Si el paquete contiene un nmero impar de octetos, el ltimo octeto del paquete se rellena con ceros por la derecha hasta obtener una palabra de 16 bits con propsito de calcular el checksum. 32- bit source IP address 32-bit destination IP address zero 8-bit protocol 16-bit segment lengh 16-bits source port number 16-bit destination port number 32-bits sequence number 32-bits acknowledge number Hdr len 16-bit window size 16-bits TCP checksum 16-bits urgent pointer Options (if any) Data(if any)

PAD byte (0) (Clculo de checksum en TCP)

Para asegurar el envo completo de los datos, el protocolo TCP utiliza asentimientos junto con temporizadores, de manera que el emisor est al tanto de los paquetes recibidos por el receptor procedido a reenviar los que, pasado un cierto tiempo, no ha recibido confirmacin. Para la optimizacin de todo este proceso el protocolo TCP utiliza una serie de mecanismos, entre ellos podemos destacar: Uso de ventana deslizante. Algoritmo de comienzo lento. Algoritmo de control de congestin. Retrasmisin rpida. Recuperacin rpida.

2.3.- El protocolo TCP y la ventana deslizante El principio de ventana deslizante se basa en que el emisor no necesita esperar la confirmacin de la entrega de cada uno de los paquetes que envi, sino que puede mandar una serie de paquetes (tamao de ventana) sin recibir el ACK, disparando un timeout para cada uno de ellos. El receptor debe enviar un ACK para el ltimo paquete recibido correctamente, y as el emisor desplazar la ventana para continuar con el envo As el protocolo TCP adapta este principio con una serie de puntualizaciones. Como TCP proporciona una conexin con flujo de bytes, dividiendo este flujo en segmentos, el principio de ventana se va a aplicar a nivel de byte, es decir, que el tamao de ventana va a estar fijado durante la conexin como el nmero de bytes que pueden ser metidos en el buffer de recepcin. En toda transmisin este tamao es controlado por el receptor. Como campo que fija el tamao de la ventana tiene un tamao de 16 bits, el tamao mximo de la ventana viene fijado por 65536 bytes. Para optimizar el envo en las redes de banda ancha se ha definido una opcin, que es el Factor de escala de ventana, dejando un tamao de 3 bits dentro de este campo de la cabecera con este propsito. El Escalado de la ventana se utiliza durante la negociacin. El valor de la escala representa el nmero de bits desplazados a la izquierda de los 16 bits que forman el campo del tamao de ventana. 2.4.- Fin de la conexin (negociacin en cuatro pasos) La fase de cierre de la conexin lleva una negociacin en cuatro pasos, terminando de manera independiente la conexin en ambas partes. Cuando una de las partes desea terminar la comunicacin enva un paquete con el flag FIN activo y al cual se responder con un ACK. Es posible que en este estado la comunicacin por la parte que envi el fin de la comunicacin est terminada, pero queden aun pendientes de envos por parte del receptor, por ello, en este punto, el sistema que envo el paquete de FIN deja de poder enviar pero sigue pudiendo recibir, hasta que el otro le enva igualmente un segmento FIN, enviando primero el ACK.

CONEXIN ESTABLECIDA
EMISOR TCP FIN RECEPTOR TCP

ACK M+1

FIN

ACK M+1

CONEXIN PERDIDA