domingo, 27 de julio de 2008

Acknowledgments (acuse de recibo)

La entrega confiable de datos asegura la intergidad de un chorro de datos enviados de una máquina a otra a través de un enlace de datos totalmente funcional. Así se asegura que los datos no serán duplicados o perdidos.

Para ello se utiliza una técnica que requiere que la máquina receptora se comunique con la transmisora enviando un acuse de recibo cuando recibe los datos, ésto se llama possitive acknowledgement with retransmission. El transmisor documenta cada segmento de datos que envía y comienza un contador de tiempo, y reenvía el segmento en caso de que el contador termine y no se haya recibdo un acuse de recibo de parte del receptor.



En el ejemplo vemos como se envían 3 segmentos, y entonces el receptor contesta con un ACK, y se envían otros 3 segmentos, con una falla en el segmento 5, por lo que se envía un ACK pidiendo el segmento 5, que es enviado a continuación.

[caption id="" align="alignnone" width="511" caption="Transport layer reliable delivery"]Transport layer reliable delivery[/caption]

windowing

Podemos imaginar que si la comunicación tuviera que esperar un acuse de recibo (Ack) por cada paquete se volvería muy lenta, por lo cual se cuenta con un mecanismo de ventana que aprovecha el tiempo disponible después de que el transmisor envía el segmento de datos y antes de que termine de procesar los acknowledgements del receptor, este tiempo se usa para transmitir más datos. La cantidad de segmentos de datos (medida en bytes) que se le permite al transmisor enviar sin recibir un acuse se llama ventana (window).

Así, el tamaño de la ventana controla cuanta información es enviada de un extremo a otro. Mientras, algunos protocolos cuantifican la información mediante la observación del número de paquetes, TCP/IP los mide contando el número de bytes.



Aquí tenemos una ventana de tamaño 1 y enseguida de tamaño 3.



Con una ventana de tamaño 1, el transmisor espera un acuse por cada segmento que envía antes de transmitir uno nuevo; y con el tamaño 3 espera un acuse cada 3 segmentos enviados.

Comunicación Orientada a Conexión.

En una operación de transporte confiable donde un dispositivo quiere enviar una comunicación orientada a conexión, se debe comunicar con el dispositivo remoto para establecer una sesión. Este proceso se llama establecimiento de llamada (call set up o three-way handshake). Se transmiten los datos y entonces se hace una terminación de llamada para desprenderse del circuito virtual.

Las aplicaciones en ambas terminales le dicen a sus sistemas operativos que se va a iniciar una conexión. Los sistemas operativos se comunican enviando mensajes que dicen que la comunicación es aprobada y ambos lados están listos.

Comunicación Orientada a Conexión


Mientras se lleva a cabo la transferencia, ambos hosts se comunican entre ellos periódicamente con sus protocolos para asegurar que todo funciona bien y se reciben los datos correctamente.



Los pasos del three-way handshake son:

Se envía un segmento de acuerdo de conexión que es una petición de sincronización.

Los segmentos segundo y tercero responden la petición (acknowledge o ACK) y establecen los parámetros de conexión o reglas entre los hosts. Entonces el receptor se sincroniza y se forma una conexión bidireccional.

El último segmento es un acknowledge también que le dice al host de destino que se acepta el acuerdo de conexión, y que la conexión actual se ha establecido, se comienza a transferir datos.

Se pueden presentar problemas en este proceso, por ejemplo cuando una computadora genera datos más rápido de lo que la red puede efectuar la transferencia, o porque varias computadoras envían sus segmentos al gateway para que sean enviados a un destino y se crean congestiones.

En los casos donde una computadora recibe demasiados segmentos que no puede procesar, los almacena en una parte de su memoria llamada buffer. Esto ayuda sólo si los datagramas son parte de una ráfaga pequeña, en caso de que se trate de una serie de datos más grande que el buffer, este se verá rebasado y comenzará a descartar los datos que recibe.

Pero una de las funciones de la los sistemas de control de la red ayuda aquí, en lugar de tirar el tráfico, los protocolos de transporte pueden decir no estoy listo, con lo que el transmisor se detiene en espera de una indicación para continuar, es un proceso similar a contar con un semáforo, con señales de alto y avance. Una vez que se procesa la información en el buffer, se envía un segmento al transmisor indicándole que puede enviar más información, y se comienza nuevamente con el envío.



Es importante notar que en una transferencia de datos orientada a conexión, los datagramas se reciben en el orden en que se envían, y si no es así, la comunicación falla. También si se pierde, se duplica o se daña un datagrama. Debido a esta razón se usa un acuse de recibo (acknowledge o ACK) que el receptor envía cada que recibe un segmento como confirmación.

Un servicio se considera orientado a conexión si cuenta con lo siguiente:


  • Se establece un circuito virtual

  • Se usa una secuencia

  • Usa acuses de recibo (acknowledge)

  • Usa control de flujo (Flow Control)


Los tipos de control de flujo son:


  • Buffering

  • Windowwing

  • Congestion Avoidance


(más adelante en el blog)

Hay un post dedicado a explicar una captura de paquetes del 3-way handshake, y es la manera real en que opera.
http://ipref.blogspot.com/2009/03/three-way-handshake.html

Ventajas de los Modelos de Referencia

El Modelo de Referencia OSI es jerárquico, y de cualquier otro modelo se pueden obtener las mismas ventajas, y su objetivo principal es que las redes de diferentes fabricantes puedan operar en conjunto. Algunas de las ventajas son:

  • Divide los procesos de comunicación de la red en pequñas porciones que son más simples de analizar, permitiendo desarrollar componentes, diseñar y resolver problemas para una capa específica de la red.

  • Evita que cambios en una capa afecten a otras capas, facilitando el desarrollo.

  • Permite que distintos tipos de hardware y software de red se comuniquen entre si.

  • Permite que los desarrollos de múltiples fabricantes se comuniquen entre si por medio de la estandarización de los componentes de red.