networking - una - ¿Por qué el tamaño de la ventana es menor o igual a la mitad del número de secuencia en el protocolo SR?
tamaño maximo ventana deslizante (4)
El espacio de secuencia se ajusta a cero después de alcanzar el número máximo. Considere el caso de la esquina donde todos los ACK se pierden: el remitente no mueve su ventana, pero el receptor sí lo hace (ya que no sabe que el remitente no está recibiendo los ACK). Si no limitamos el tamaño de la ventana a la mitad del espacio de la secuencia, terminamos con un remitente superpuesto "enviado pero no reconocido" y un receptor "nuevo" válido de la secuencia. Esto daría lugar a que las retransmisiones se interpreten como nuevos paquetes.
En el protocolo de repetición selectiva, el tamaño de la ventana debe ser menor o igual a la mitad del tamaño del espacio del número de secuencia para el protocolo SR. ¿Por qué esto es así y cómo?
Este enlace tiene una animación que recorre cada uno de los pasos del protocolo para explicar por qué es importante el tamaño de la ventana:
http://webmuseum.mi.fh-offenburg.de/index.php?view=exh&src=73
Básicamente, si el tamaño de la ventana es demasiado alto, la corrupción en la transmisión puede provocar suposiciones incorrectas y provocar la corrupción de los datos en el resultado final.
Esto es para evitar que los paquetes sean reconocidos incorrectamente.
Si el tamaño de Windows es mayor que la mitad del espacio del número de secuencia, entonces si se pierde un ACK, el remitente puede enviar nuevos paquetes que el receptor cree que son retransmisiones.
Por ejemplo, si nuestro rango de números de secuencia es 0-3 y el tamaño de la ventana es 3, esta situación puede ocurrir.
A -> 0 -> B
A -> 1 -> B
A -> 2 -> B
A <- 2ack <- B (esto se pierde)
A -> 0 -> B
A -> 1 -> B
A -> 2 -> B
Después del paquete perdido, B ahora espera que los siguientes paquetes tengan los números de secuencia 3, 0 y 1.
Pero, el 0 y el 1 que A está enviando son en realidad retransmisiones, por lo que B los recibe fuera de orden.
Al limitar el tamaño de la ventana a 2 en este ejemplo, evitamos este problema porque B esperará 2 y 3, y solo 0 y 1 pueden ser retransmisiones.
Porque el receptor no podrá distinguir entre un paquete antiguo o un paquete nuevo. El receptor identifica paquetes basados en números de secuencia, y hay un número finito de números únicos para cada conexión. No puedes tener un búfer infinito.
Veamos un escenario de falla obvio:
El tamaño de la ventana es mayor que el espacio del número de secuencia. Digamos que tenemos los números de secuencia 0, 1, 2. Y nuestro tamaño de ventana es 4. Esto significa que la ventana tiene dos apariciones de 0.
0,1,2,0 <- modulo wrap. Cuando obtenemos un paquete con un seq de 0. ¿Es el primer paquete o el cuarto? Ninguna pista. Ahora, este problema ocurrirá en la medida en que el tamaño de la ventana sea mayor que la mitad del espacio del número de secuencia. ¿Por qué? Porque siempre existe la posibilidad de que el receptor esté mirando un número de secuencia que PUEDE estar contenido en un paquete proveniente del remitente que sea NUEVO o ANTIGUO. ¿Siempre pasa? No. Pero cuando lo hace, esto es lo que sucede:
Caso 1:
Ventana del receptor después de recibir correctamente los paquetes 0,1,2. 0,1,2, [3,0,1], 2 ¿Pero qué sucede si se pierden los ACK enviados? Bueno, el remitente reenviará 0,1,2. ¿Pero son 0,1 VIEJOS o NUEVOS? El receptor no puede decirlo.
Caso 2:
La misma ventana en el extremo receptor. Se reciben los tres paquetes.
0,1,2, [3,0,1], 2
Ahora, el receptor recibe TODOS los acks pero UNO correctamente. Permite elegir el segundo (1). Ahora, se reenviará 1. ¡Pero el receptor está mirando a 1! Entonces, ¿es este el nuevo que espera (no), o el viejo?
Por lo tanto, para asegurarnos de que la ventana nunca espere números de secuencia que puedan ser utilizados por posibles paquetes pendientes (ya sea que provengan de una transmisión normal o una retransmisión de un recibo faltante) tenemos que disminuir el tamaño de la ventana o aumentar los números de secuencia.
Mira lo que sucede cuando aumentamos el espacio del número de secuencia a, digamos 6.
0,1,2,3,4,5.
No importa cómo posicionemos la ventana, nunca corre el riesgo de recibir un paquete con un número de secuencia antiguo.
0,1,2, [3,4,5] 0,1 ...
Cuando la ventana se cierra, estamos seguros de que hemos recibido los anteriores en orden.