Sliding Window - tectijuana/redes7a-Archived GitHub Wiki
Sliding Window#
Funcionamiento
El protocolo de ventana deslizante permite al emisor transmitir múltiples segmentos de información antes de comenzar la espera para que el receptor le confirme la recepción de los segmentos, tal confirmación se llama validación, y consiste en el envío de mensajes denominados ACK del receptor al emisor. La validación se realiza desde el receptor al emisor y contiene el número de la siguiente trama que espera recibir el receptor, o el de la última trama recibida con éxito, ACK n (siendo n el número de la trama indicada). Con esta indicación el emisor es capaz de distinguir el número de los envíos realizados con éxito, los envíos perdidos y envíos que se esperan recibir. Los segmentos se denominaran Unacknowledge si han sido enviados pero no han sido validados.
Técnicamente el número de segmentos que pueden ser Unacknowledge en un momento dado está limitado por el tamaño de la ventana, un número pequeño y fijo,se denomina el ancho de ventana.
Por ejemplo: El emisor puede transmitir hasta 8 segmentos sin recibir validación de ninguno de ellos. Entonces esperará una confirmación de recepción procedente del receptor sin enviar ningún paquete más. Una vez el emisor reciba una validación del primer paquete que envió, perteneciente al número 1 de 8 de la ventana deslizante, la ventana se deslizará abarcando 8 posiciones (su ancho de ventana definido), pero en este caso desde la 2 hasta la 9 y enviará la trama número 9 continuando a la espera de recibir más confirmaciones para poder seguir deslizándose y enviando las tramas siguientes. Si el protocolo esperase una validación por cada trama enviada, no se enviarían más segmentos hasta recibir el reconocimiento del último paquete enviado. El concepto de ventana deslizante hace que exista una continua transmisión de información, mejorando el desempeño de la red.
El transmisor deberá guardar en un buffer todas aquellas tramas enviadas y no validadas (Unacknowledge packets), por si necesitase retransmitirlas. Sólo puede borrarlas del buffer al recibir su validación procedente del receptor, y deslizar así la ventana una unidad más.
El receptor posee una ventana de recepción, similar a la de transmisión, pero con una finalidad totalmente distinta. Su funcionalidad permite al receptor recibir un conjunto de tramas que le llegan desordenadas. La ventana de recepción es la lista que tiene el receptor con los números de la secuencia consecutivos de las tramas que puede aceptar. Almacena las tramas temporalmente en un buffer hasta el momento que posea todas las tramas esperadas, la secuencia de tramas esperada al completo, y así ordenarlas. El receptor debe disponer de un buffer de igual tamaño que su ventana de recepción para almacenar temporalmente las tramas hasta ordenarlas. Existen 2 modos de trabajo en función del tamaño de su ventana:
- Tamaño ventana recepción=1: con lo cual la ventana de recepción dispone de un buffer. Sólo puede almacenar la trama que le llega en cada instante, es decir, debe recibir las tramas en la secuencia correcta, ya que no dispone de recursos para ordenarlas después.
- Tamaño ventana recepción>1: La ventana de recepción dispone de N buffers (N=tamaño ventana de recepción) que le permiten recibir hasta N tramas desordenadas, almacenarlas y proceder a su ordenamiento posterior. Le permite al emisor transmitir tramas desordenadas, tantas como quepan en los buffers del receptor.
Recuperación de errores
El receptor es capaz de reconocer una trama errónea mediante los códigos de Control de redundancia cíclica. El receptor cuando detecta que una trama no es correcta, por que se han producido errores en la transmisión, la descarta siempre.
Existen 2 estrategias diferentes para la recuperación de errores:
- Estrategia de rechazo simple (retroceso N, vuelta atrás, pullback NACK).
- Estrategia de rechazo selectivo (repetición selectiva, selective repeat).
Ejemplo
Tenemos una fila de tres cubos de agua vacíos uno tras otro esperando que el grifo de agua los llene, si lo ponemos en conceptos informáticos podemos decir que se tiene una ventana de tamaño tres, pues tenemos tres cubos de agua disponible, entonces cuando llega el momento de abrir la llave de agua y empezar a llenar cubos de agua, cuando se llena el primero lo retirados ponemos el segundo y mientras se llena vaciamos ese primer cubo de agua y lo ponemos de nuevo en la fila de espera, con esto, hemos “deslizado” la ventana disponible. Cuando se llena el segundo lo retirados y ponemos el tercero en su lugar vaciamos el segundo y lo ponemos vacío de nuevo en la fila de espera, quizá ya habrás intuido que hacemos esto de forma cíclica así no es necesario cerrar la llave cada que se llena un cubo de agua excepto si por alguna razón se llenen los tres cubos de agua sin poder vaciar ninguno de ellos, cosa que no sucede con frecuencia pero en los datos se podría interpretar por ejemplo como una confirmación de recepción de una trama que nunca llego y quedó guardada en la ventana de datos por si se necesita su retransmisión.
Bibliografías
Telecomunicaciones I. (2017). Protocolos de ventana corrediza o deslizante. [online] Available at: https://telecomunicacionesi.wordpress.com/2014/09/29/protocolos-de-ventana-corrediza-o-deslizante/ [Accessed 27 Jan. 2017].
Es.wikipedia.org. (2017). Ventana deslizante. [online] Available at: https://es.wikipedia.org/wiki/Ventana_deslizante [Accessed 27 Jan. 2017].