Estoy bastante seguro de que
Wikilibros: Programación en serie ,
Wikipedia: solicitud de repetición automática , y
Wikipedia: protocolo de ventana deslizante
cubre esto.
Está ejecutando un terminal de apertura muy pequeña (VSAT) a 4096 kbps.
La latencia de un paquete para viajar desde la Tierra a un satélite geoestacionario y de regreso a la Tierra es de aproximadamente 250 ms.
Supongo que está intentando comunicarse con alguien más en la tierra, y el satélite es una estación de retransmisión más o menos pasiva.
Tal VSAT tiene una latencia mínima de aproximadamente 500 ms entre el momento en que enviamos un paquete que de alguna manera se corrompe y el momento en que el remitente se da cuenta de que estaba dañado.
Digamos que el tamaño promedio de un paquete es P (tal vez P sea alrededor de 4096 bits por paquete).
- Deténgase y espere ARQ para cada paquete: obtiene 1 paquete, y unos 500 ms más tarde, (generalmente) recibe un ACK y envía el siguiente paquete. Sin errores, eso da aproximadamente 1 / (500 ms) = 2 paquetes por segundo. (Quizás esto iría a 8 kbits / segundo, sin contar las retransmisiones, pero podría ir mucho más rápido haciendo que P sea un poco más grande). El error ocasional hace que la velocidad de datos efectiva sea un poco más lenta.
Voy a asumir las comunicaciones de dúplex completo para los próximos dos.
Voy a suponer que tanto el remitente como el receptor pueden manejar la velocidad de datos completa de 4096 kbps de manera indefinida, sin necesidad de espacios entre los paquetes.
Y voy a suponer que el "tamaño de la ventana" es lo suficientemente grande como para contener todos los paquetes en vuelo.
(Estas suposiciones pueden ser demasiado optimistas, pero al menos ahora estamos considerando errores).
Tanto con AR-Go-N-ARQ como con Selective Repeat ARQ, a 4096 kbps, el transmisor envió aproximadamente 500 ms * 4096 kbps = 2048 megabits entre el momento en que envía un paquete que se daña y el tiempo que el remitente se da cuenta ese paquete fue dañado y necesita ser reenviado
Con una tasa de error de 5 x 10E-6 (y suponiendo errores independientes) tenemos en promedio 200 kbits de datos buenos entre errores. A 4096 kbps, tenemos un promedio de 49 ms entre un error y el siguiente.
(Todo esto es más o menos independiente del tamaño del paquete P, suponiendo que P sea mucho menor que 200 kbits).
-
Go-Back-N ARQ: cada vez que comenzamos a retransmitir un paquete enviado previamente (pero dañado), obtenemos (en promedio) 25 ms (?) de datos correctos antes del siguiente error y, 500 ms después, el transmisor determina exactamente qué paquete fue el siguiente error y nuevamente comienza a retransmitir desde ese paquete. Por lo tanto, tenemos un promedio de 525 ms por ciclo, con un promedio de 100 kbits de buenos datos por ciclo, lo que proporciona una tasa de datos efectiva de 190 kbps, más o menos independiente del tamaño del paquete.
-
ARQ repetido selectivo: Esto proporciona una tasa de datos efectiva de aproximadamente (tasa de datos nominal) (datos en paquete / tamaño total del paquete, incluido el número de secuencia) (1 - (tasa de errores de bits) (tamaño de paquete)). (Tal vez 4012 kbps, pero haciendo que P sea algo más pequeño, podrías ir un poco más rápido).
(Puede considerar graficar el rendimiento efectivo frente al tamaño del paquete. Habrá un pico "mejor tamaño de paquete" para la repetición selectiva, y otro pico "mejor tamaño de paquete" con un tamaño de paquete mucho mayor pero una tasa de datos mucho menor para detener y-espere.)
Selective-Repeat ARQ proporciona una tasa de datos mucho más efectiva ( goodput ), cuando la cantidad de datos en vuelo es muy grande, que AR-Go-Back-N o ARQ de parada y espera.
Sin embargo, no solemos utilizar ARQ de repetición selectiva, porque es más complicado y no ofrece un mejor rendimiento en el caso más común en el que la cantidad de datos en vuelo es inferior a 1 paquete, es decir, somos normalmente se transmite a distancias mucho más cortas, a velocidades de bits más lentas (nominales), o ambas.