Go-Back-N ARQ


Go-Back-N ARQ is a specific instance of the automatic repeat request protocol, in which the sending process continues to send a number of frames specified by a window size even without receiving an acknowledgement packet from the receiver. It is a special case of the general sliding window protocol with the transmit window size of and receive window size of 1. It can transmit frames to the peer before requiring an ACK.
The receiver process keeps track of the sequence number of the next frame it expects to receive, and sends that number with every ACK it sends. The receiver will discard any frame that does not have the exact sequence number it expects and will resend an ACK for the last correct in-order frame. Once the sender has sent all of the frames in its window, it will detect that all of the frames since the first lost frame are outstanding, and will go back to the sequence number of the last ACK it received from the receiver process and fill its window starting with that frame and continue the process over again.
Go-Back-N ARQ is a more efficient use of a connection than Stop-and-wait ARQ, since unlike waiting for an acknowledgement for each packet, the connection is still being utilized as packets are being sent. In other words, during the time that would otherwise be spent waiting, more packets are being sent. However, this method also results in sending frames multiple times - if any frame was lost or damaged, or the ACK acknowledging them was lost or damaged, then that frame and all following frames in the send window will be re-sent. To avoid this, Selective Repeat ARQ can be used.

Pseudocode

These examples assume an infinite number of sequence and request numbers.
N := window size
Rn := request number
Sn := sequence number
Sb := sequence base
Sm := sequence max
function receiver is
Rn := 0
Do the following forever:
if the packet received = Rn and the packet is error free then
Accept the packet and send it to a higher layer
Rn := Rn + 1
else
Refuse packet
Send a Request for Rn
function sender is
Sb := 0
Sm := N + 1
Repeat the following steps forever:
if you receive a request number where Rn > Sb then
Sm := + Rn
Sb := Rn
if no packet is in transmission then
Transmit a packet where SbSnSm.
Packets are transmitted in order.

Choosing a window size (''N'')

There are a few things to keep in mind when choosing a value for :
  1. The sender must not transmit too fast. should be bounded by the receiver’s ability to process packets.
  2. must be smaller than the number of sequence numbers to verify transmission in cases of any packet being dropped.
  3. Given the bounds presented in and, choose to be the largest number possible.