domingo, 20 de noviembre de 2016

TCP/IP (4): La clave se llama confiabilidad (TCP)

TCP es el protocolo que permite a millones de aplicaciones confiar en que miles de millones de paquetes de datos van a llegar a su destino.
Entradas de la serie -> TCP/IP

PROTOCOLO DE CONTROL DE TRANSMISIONES (TCP)

A diferencia de UDP, que no añade nada sustancial a la semántica de entrega no confiable de IP, el Protocolo de Control de Transmisiones (TCP, Transmission Control Protocol) añade la funcionalidad fundamental de la entrega confiable, a cambio de una mayor complejidad.

El diseño de TCP ha sido realizado con gran acierto, manteniendo una separación completa con la red subyacente, o cual permite que pueda ser utilizado con muchos sistemas de entrega, aparte de IP. Su importancia es tal que da nombre, junto con IP, a la familia completa de protocolos TCP/IP, y ha facilitado más que cualquier otro desarrollo la universalización de Internet como red de alcance global. Tiene su origen en los trabajos de Vinton G. Cerf Bob Kahn en la década de 1970. Por ello en muchas ocasiones se ha reconocido a Cerf y Kahn como los "padres" de Internet.

TCP usa el mismo concepto de puerto de protocolo que UDP para implementar el concepto de punto de destino abstracto dentro de una máquina, lo que le permite mantener muchas conexiones en la misma máquina sin mezclarse. Los números de puerto UDP y TCP no se confunden, pues el código de protocolo de la cabecera IP hace que cada protocolo nunca trate con los paquetes del otro.

LA ENTREGA CONFIABLE

Un servicio de entrega confiable se ha de encargar de cinco funciones:

a)    Envío de flujo de datos

Los programas de aplicación normalmente requieren en envío de los datos en forma de flujos de octetos. El servicio de entrega de la máquina destino ha de pasar al proceso receptor exactamente el mismo flujo que se ha transmitido en origen.

Esto evita cualquier tipo de programación adicional en las aplicaciones, ni que éstas conozcan el formato de los paquetes de datos.

b)    Orientación a conexión

Antes de realizarse el envío de los datos, las máquinas implicadas han de negociar la apertura de una conexión o circuito virtual, equivalente al establecimiento de una llamada telefónica, en lugar de tratar por separado el envío de cada segmento.

TCP permite dos formas de abrir una conexión: activa o pasiva. Antes de recibir la petición de conexión, en un extremo se realiza una apertura pasiva en espera de que el otro extremo solicite la entrada mediante una apertura activa. La máquina pasiva establece previamente el puerto en el que va a aceptar conexiones.

c)    Memoria intermedia

Para optimizar el tráfico de red, el software de protocolo ha de recolectar datos suficientes del flujo que genera la aplicación, en una memoria intermedia o buffer, para llenar un segmento razonablemente largo antes de transmitirlo.

Igualmente, se ha de proporcionar un mecanismo push (empuje) que permita que la aplicación fuerce el envío inmediato del contenido del buffer, si fuera necesario. El uso típico de esta característica es en terminales interactivas.

d)    Flujo no estructurado

Los programas de aplicación tienen la responsabilidad de ponerse de acuerdo para entender las fronteras entre registros dentro del flujo de datos; el protocolo de entrega no está obligado a respetar separaciones de registros en las divisiones de paquetes que realiza.

e)    Conexión full-duplex

El servicio de transporte ha de permitir la transmisión concurrente de flujos independientes en ambas direcciones.

IMPLEMENTACIÓN DE LA CONFIABILIDAD

El concepto de asentimiento positivo

La tarea de proporcionar una transferencia confiable sobre un sistema subyacente de entrega no confiable es tarea complicada. La mayor parte de los protocolos existentes hacen uso de la técnica denominada asentimiento positivo con retransmisión.

Un asentimiento positivo implica que el receptor de un mensaje envíe de vuelta al remitente un acuse de recibo (ACK) indicándole que éste ha llegado correctamente. El remitente espera que cada mensaje que envía sea asentido y, en caso de no recibirlo en un tiempo prudencial, lo retransmite.

Esta técnica requiere acciones cuidadosas para controlar las duplicaciones, pues tanto los paquetes como los asentimientos se puede aparecer duplicados. Para controlar esto, se incluyen números de secuencia para que el receptor pueda asociar cada acuse de recibo con su paquete correspondiente y pueda desechar los duplicados.

Técnica de la ventana deslizante

Si el sistema de los asentimientos positivos tuviese que esperar cada acuse de recibo antes de enviar el siguiente paquete, se desperdiciaría una cantidad enorme de ancho de banda.

La técnica conocida como ventana deslizante permite que se envíen varios paquetes seguidos sin esperar asentimientos, optimizando el uso del ancho de banda.

Se establece una ventana de un tamaño fijo, la cual es el marco en el que cabe la máxima cantidad de paquetes que se pueden enviar sin recibir asentimiento. El tamaño de la ventana es proporcional a la memoria intermedia disponible, debido a que cada paquete se ha de mantener en memoria mientras no se haya acusado su recibo, pues puede ser necesaria su retransmisión. Se dice que los paquetes dentro de la ventana están en estado de espera de confirmación (unacknowledged)..

En un primer momento, se pueden transmitir todos los paquetes que caben en la ventana sin asentimiento. En el momento de recibir un acuse de recibo, la ventana se desliza para alcanzar el siguiente paquete y poder enviarlo. Al mismo tiempo, el deslizamiento saca fuera el paquete que se ha asentido, el cual no es necesario mantenerlo más en memoria.

Con un tamaño de ventana suficientemente ajustado a la capacidad de la red, es posible eliminar cualquier tiempo muerto, obteniéndose la velocidad máxima de entrega.
Diagrama de la ventana deslizante
Los tres estados en que puede estar un paquete son:

* Los paquetes que están a un lado de la ventana aún no se han transmitido.
* Al otro lado, los paquetes están enviados y confirmada su recepción.
* Dentro de la ventana, los paquetes han sido enviados, pero están a la espera de ser confirmados. Un temporizador controla su retransmisión en un intervalo razonable.
Detalles del mecanismo de ventana deslizante de TCP

La implementación que TCP hace del mecanismo de la ventana deslizante, además de dar confiabilidad a la comunicación, integra el control de flujo, de manera que el receptor pueda restringir el envío de datos según el espacio que tenga disponible y su capacidad de procesamiento.

Se mantienen ventanas separadas para el flujo de entrada y el de salida, para que así sean totalmente independientes (full-duplex). Por tanto, en una conexión hay cuatro ventanas implicadas: dos en cada extremo.

El trabajo se realiza a nivel de octeto, no por segmentos ni paquetes. Los octetos del flujo de datos se ordenan de manera secuencial, guardando el transmisor tres punteros asociados con cada conexión:

* Un apuntador marca el extremo izquierdo de la ventana, separando los octetos que están pendientes de acuse de recibo de los que ya han sido asentidos.
* Otro apuntador marca el extremo derecho de la ventana, definiendo el octeto más alto que se puede enviar sin recibir más asentimientos.
* Un puntero intermedio indica la frontera entre los octetos que efectivamente se han enviado y los que no.
Una diferencia importante con la definición tradicional de ventana deslizante es que en TCP el tamaño de la ventana es variable. Esto se hace para adaptarse a los cambios en la capacidad de recepción del otro extremo (control de flujo). Un campo en la cabecera TCP de los asentimientos informa de cuántos octetos está preparado para aceptar el receptor en el próximo envío , lo cual permite redimensionar la ventana.

Debido a lo variable del tamaño de los segmentos y de la ventana, los acuses de recibo indican posiciones en el flujo de octetos, sin referirse a datagramas o segmentos completos. El receptor indica en el campo de asentimiento de la cabecera la posición siguiente a la parte de flujo que ha logrado reconstruir completamente, es decir, el número de secuencia del siguiente octeto que espera recibir.

A este tipo de acuse de recibo se le llama acumulativo, pues informa sobre la cantidad de flujo contiguo que ha acumulado el receptor. Su uso tiene las siguientes ventajas:

* Los asentimientos son fáciles de generar.
* No hay ambigüedad posible sobre la información que es asentida.
* La pérdida de algunos asentimientos no fuerzan necesariamente la retransmisión.
A pesar de estas ventajas, este esquema es menos eficiente que otros, pues el receptor no obtiene información sobre las transmisiones exitosas que aún no han producido un bloque contiguo. Esto puede hacer que se retransmitan segmentos inútilmente o bien no se use toda la capacidad de la ventana, según se tome una estrategia pesimista u optimista, respectivamente.

No hay comentarios:

Publicar un comentario

Expresa tu opinión respetando a los demás y a unas mínimas reglas del lenguaje castellano.