TCP
Protocolo de Control de Transmisión (TCP)
A finales de los años 1960 y principios de los 1970, las redes no estaban diseñadas de forma que fuera posible compartir recursos entre redes diferentes. Desde entonces se ha hecho cada vez más necesario que las aplicaciones de usuario compartan recursos. Pero para que puedan hacerlo, los administradores de las redes deben acordar primero un conjunto de tecnologías y normas comunes para que las redes puedan comunicarse, hay que tener en cuenta que en Internet se encuentran conectados ordenadores de clases muy diferentes y con hardware y software incompatibles en muchos casos, además de todos los medios y formas posibles de conexión.
TCP es un protocolo que nos permite transmitir datos ya sea de una red a otra, o bien, dentro de la misma de tal forma que hace que los datos se entreguen sin errores, sin omisión y en secuencia, a pesar de las diferentes arquitecturas que puedan tener los ordenadores.
Las principales características del protocolo TCP son las siguientes:
· TCP permite colocar los datagramas nuevamente en orden cuando vienen del protocolo IP.
· TCP permite que el monitoreo del flujo de los datos y así evita la saturación de la red.
· TCP permite que los datos se formen en segmentos de longitud variada para "entregarlos" al protocolo IP.
· TCP permite multiplexar los datos, es decir, que la información que viene de diferentes fuentes (por ejemplo, aplicaciones) en la misma línea pueda circular simultáneamente.
· Por último, TCP permite comenzar y finalizar la comunicación amablemente.
Aperturas activa y pasiva
Los puertos TCP pueden establecer dos tipos de conexiones. El modo de apertura pasiva permite que el protocolo de nivel superior (por ejemplo, un servidor) que indique al TCP y al sistema operativo del computador que va a esperar la llegada de solicitudes de conexión procedentes del sistema remoto, en lugar de enviar una apertura activa.
Tras recibir esta solicitud, el sistema operativo asigna un número de puerto a este extremo. Esta utilidad se puede usar para realizar comunicaciones con usuarios remotos sin tener el retardo de la apertura activa. Los procesos de aplicaciones que solicitan la apertura pasiva pueden aceptar una solicitud de cualquier usuario (supuesto que se cumplen algunos requisitos de compatibilidad).
Enrutamiento
Enrutamiento es el proceso de dirigir un paquete a través de la red desde una máquina origen a otra destino. La idea es enviar los paquetes a algún sitio donde pueden tener más información de cómo llegar al destino deseado.
La tabla de ruteo se recorre de lo más específico a lo más general. Si no hay ruta específica para dirigirse a un destino y no hay ruta default, el sistema enviará un mensaje de "network unreacheable". Esta especificidad se determina por el largo de la máscara. Cuanto más cantidad de unos tenga la máscara, más específica será la ruta.
No existe una ruta previamente definida por donde se envían todos los paquetes.
Segmentos:
TCP debe convertir los flujos de datos salientes de una aplicación de forma que se puedan entregar como datagramas. La aplicación traslada los datos a TCP y este los sitúa en un búfer de envío. Toma un trozo de los datos, le añade una cabecera, creando un segmento.
TCP traslada el segmento a IP para que lo entregue como un único datagrama. El empaquetado de datos en trozos del tamaño adecuado permite usar de manera más eficiente los servicios de transmisión, por lo que TCP debería esperar a recoger una cantidad razonable de datos antes de crear un segmento.
Ahora que ya se sabe como funciona el protocolo TCP veremos como se transfiere la informacion. Cada parte de la informacion que es mandada y que utiliza el protocolo TCP es divivida en segmentos que despues de llegar a su destino se pueden volver a a agrupar, veamos mas a fondo de que trata todo eso:
TCP se ocupa de convertir el flujo de datos saliente de una aplicación de forma que se pueda entregar como fragmentos. La aplicación traslada los datos a TCP y éste sitúa los datos en un buffer de envío. TCP toma un trozo de esos datos y le añade una cabecera, creando de esta forma un segmento. Este segmento es trasladado a IP para que lo entregue como un único datagrama. El empaquetado de estos datos en trozos de tamaño adecuado permite usar de una manera eficiente los servicios de transmisión.
El segmento TCP está compuesto por los datos enviados desde la capa de aplicación y la cabecera añadida por el protocolo de transporte. El segmento TCP es luego encapsulado en un datagrama IP para ser enviado por la capa de red.
El formato de la cabecera TCP se detalla a continuación:
- Puerto origen (16 bits): Identifica el puerto emisor.
- Puerto destino (16 bits): Identifica el puerto receptor.
Estos dos valores identifican la aplicación receptora y la emisora, junto con las direcciones IP del emisor y receptor identifican de forma unívoca cada conexión. La combinación de una dirección IP y un puerto es llamado socket. Es el par de sockets (dirección IP + puerto del emisor y dirección IP+ puerto del receptor) emisor y receptor el que especifica los dos puntos finales que unívocamente se corresponden con cada conexión TCP en internet.
- Número de secuencia (32 bits): Identifica el byte del flujo de datos enviado por el emisor TCP al receptor TCP que representa el primer byte de datos del segmento.
Si consideramos un flujo de bytes unidireccional entre las dos aplicaciones, TCP numera cada byte con un número de secuencia. Este número de secuencia es de 32 bits sin signo que retorna a 0 al llegar a 232 -1.
- Número de acuse de recibo (32 bits): Contiene el valor del siguiente número de secuencia que el emisor del segmento espera recibir.
Una vez que la conexión ha sido establecida, este número se envía siempre y se valida con el flag ACK activado. Enviar ACKs no cuesta nada ya que el campo de acuse de recibo siempre forma parte de la cabecera, al igual que el flag ACK. TCP se puede describir como un protocolo sin asentimientos selectivos o negativos ya que el número de asentimiento en la cabecera TCP significa que se han recibido correctamente los bytes anteriores pero no se incluye ese byte.
No se pueden asentir partes selectivas del flujo de datos (suponiendo que no estamos usando la opción SACK de asentimientos selectivos). Por ejemplo si se reciben correctamente los bytes 1-1024 y el siguiente segmento contiene los bytes 2049-3072, el receptor no puede asentir este último segmento. Todo lo que puede enviar es un ACK con 1025 como número de asentimiento, al igual que si llega el segmento 1025-2048 pero con un error de cheksum.
- Longitud de cabecera (4 bits): especifica el tamaño de la cabecera en palabras de 32 bits.
Es requerido porque la longitud del campo “opciones” es variable. Por lo tanto el tamaño máximo de la cabecera está limitado a 60 bytes, mientras que sin “opciones” el tamaño normal será de 20 bytes. A este campo también se le suele llamar “data offset” por el hecho de que es la diferencia en bytes desde el principio del segmento hasta el comienzo de los datos.
- Reservado (3 bits): para uso futuro. Debe estar a 0.
- Flags (9 bits):
- NS (1 bit): ECN-nonce concealment protection. Para proteger frente a paquetes accidentales o maliciosos que se aprovechan del control de congestión para ganar ancho de banda de la red.
- CWR (1bit): Congestion Window Reduced. El flag se activa por el host emisor para indicar que ha recibido un segmento TCP con el flag ECE activado y ha respondido con el mecanismo de control de congestión.
- ECE (1 bit): Para dar indicaciones sobre congestión.
- URG (1 bit): Indica que el campo del puntero urgente es válido.
- ACK (1 bit): Indica que el campo de asentimiento es válido. Todos lo paquetes enviados después del paquete SYN inicial deben tener activo este flag.
- PSH (1 bit): Push. El receptor debe pasar los datos a la aplicación tan pronto como sea posible.
- RST (1 bit): Reset. Reinicia la conexión.
- SYN (1 bit): Synchronice. Sincroniza los números de secuencia para iniciar la conexión.
- FIN (1 bit): El emisor finaliza el envío de datos.
- Tamaño de ventana (16 bits): Tamaño de la ventana de recepción que especifica el número máximo de bytes que pueden ser metidos en el buffer de recepción o dicho de otro modo, el número máximo de bytes pendientes de asentimiento.
- Suma de verificación (16 bits): Checksum utilizado para la comprobación de errores tanto en la cabecera como en los datos.
- Puntero urgente (16 bits): Cantidad de bytes desde el número de secuencia que indica el lugar donde acaban los datos urgentes.
- Opciones: Para poder añadir características no cubiertas por la cabecera fija.
- Relleno: Se utiliza para asegurarse que la cabecera acaba con un tamaño múltiplo de 32 bits.
Confiabilidad de las transferencias
El protocolo TCP permite garantizar la transferencia de datos confiable, a pesar de que usa el protocolo IP, que no incluye ningún monitoreo de la entrega de datagramas.
De hecho, el protocolo TCP tiene un sistema de acuse de recibo que permite al cliente y al servidor garantizar la recepción mutua de datos.
Cuando se emite un segmento, se lo vincula a un número de secuencia. Con la recepción de un segmento de datos, la máquina receptora devolverá un segmento de datos donde el indicador ACK esté fijado en 1 (para poder indicar que es un acuse de recibo) acompañado por un número de acuse de recibo que equivale al número de secuencia anterior.
Cuando se emite un segmento, se lo vincula a un número de secuencia. Con la recepción de un segmento de datos, la máquina receptora devolverá un segmento de datos donde el indicador ACK esté fijado en 1 (para poder indicar que es un acuse de recibo) acompañado por un número de acuse de recibo que equivale al número de secuencia anterior.
Además, usando un temporizador que comienza con la recepción del segmento en el nivel de la máquina originadora, el segmento se reenvía cuando ha transcurrido el tiempo permitido, ya que en este caso la máquina originadora considera que el segmento está perdido.
Sin embargo, si el segmento no está perdido y llega a destino, la máquina receptora lo sabrá, gracias al número de secuencia, que es un duplicado, y sólo retendrá el último segmento que llegó a destino.
Veamos todo esto con una animación que nos mostrara como se va llevando a cabo todo el proceso de comunicación y transferencia de datos en el protocolo TCP:
Cómo terminar una conexión
El cliente puede pedir que se termine una conexión del mismo modo que el servidor.
Para terminar una conexión se procede de la siguiente manera:
Para terminar una conexión se procede de la siguiente manera:
- Una de las máquinas envía un segmento con el indicador FIN fijado en 1, y la aplicación se autocoloca en estado de espera, es decir que deja de recibir el segmento actual e ignora los siguientes.
- Después de recibir este segmento, la otra máquina envía un acuse de recibo con el indicador FIN fijado en 1 y sigue enviando los segmentos en curso. Después de esto, la máquina informa a la aplicación que se ha recibido un segmento FIN y luego envía un segmento FIN a la otra máquina, que cierra la conexión.
Conclusión:
Debido al avance de la tecnología y al nuevo estilo de vida que nos hemos forzado a llevar, es muy importante poder “manejar” (muchas veces es tanta que no podemos manejarla) grandes cantidades de información, para ello es necesario administrar la red y encontrar la forma de poder cambiar la forma de compartir mayor cantidades de recursos, aunque las distancias sean enormes. A diario utilizamos los medios de comunicación masiva para diversas tareas, pero en verdad ignoramos cómo funcionan las computadoras, de qué forma se comunican, como transmiten la información y los procesos que nos aseguran que nuestro paquete ya fue entregado a su destino de forma correcta. Y nuestro propósito es el poder simplificar estos procesos de tal forma que realice las entregas de forma más rápida.
Referencias Electronicas: