En un protocolo GBN (Go-Back-N, Retroceder N), el emisor puede transmitir varios paquetes (si
están disponibles) sin tener que esperar a que sean reconocidos, pero está restringido a no tener más de un número máximo permitido, N, de paquetes no reconocidos en el canal.
Ventana deslizante
Base y Signumsec
- Base: número de secuencia del paquete no reconocido más antiguo.
- signumsec: número de secuencia más pequeño no utilizado (es decir, el número de secuencia del siguiente paquete que se va a enviar)
Entonces se pueden identificar cuatro intervalos en rango de los números de secuencia:
- $[0 , base-1]$: paquetes que ya han sido transmitidos y reconocidos.
- $[base , signumsec-1]$: paquetes que ya han sido enviados pero todavía no se han reconocido.
- $[signumsec,base+N-1]$ : se pueden emplear para los paquetes que pueden ser enviados de forma inmediata, en caso de que lleguen datos procedentes de la capa superior.
- $[base + N, infinito]$: no pueden ser utilizados hasta que un paquete no reconocido que se encuentre actualmente en el canal sea reconocido (específicamente, el paquete cuyo número de secuencia sea igual a base).
Ventana
El rango de los números de secuencia permitidos para los paquetes transmitidos pero todavía no reconocidos puede visualizarse como una ventana de tamaño N sobre el rango de los números de secuencia.
Cuando el protocolo opera, esta ventana se desplaza hacia adelante sobre el espacio de los números de secuencia.
Por esta razón, N suele denominarse tamaño de ventana y el propio protocolo GBN se dice que es un protocolo de ventana deslizante.

Emisor GBN
Tiene que responder a tres tipos de sucesos:
- Invocación desde la capa superior:
- Se llama a rdt_enviar() desde la capa superior.
- Verifica si la ventana está llena; es decir, si hay N paquetes no reconocidos en circulación.
- Si la ventana no está llena, se crea y se envía un paquete y se actualizan las variables de la forma apropiada.
- Si la ventana está llena, el emisor almacena en el buffer estos datos (pero no los enviaría de forma inmediata) o dispondría de un mecanismo de sincronización (por ejemplo, un semáforo o un indicador) que permitiría a la capa superior llamar a rdt_enviar() sólo cuando la ventana no estuviera llena.
- Recepción de un mensaje de reconocimiento ACK:
- Reconocimiento acumulativo: indica que todos los paquetes con un número de secuencia menor o igual que n han sido correctamente recibidos por el receptor.
- Un suceso de fin de temporización:
- Se empleará un temporizador para recuperarse de la pérdida de paquetes de datos o de reconocimiento de paquetes.
- Si se produce un fin de temporización, el emisor reenvía todos los paquetes que haya transmitido anteriormente y que todavía no hayan sido reconocidos.
- Utiliza un único temporizador: Si se recibe un paquete ACK pero existen más paquetes transmitidos adicionales no reconocidos, entonces se reinicia el temporizador. Si no hay paquetes no reconocidos en circulación, el temporizador se detiene.