What is flow control? Explain Go-Back-N ARQ in detail.

This answer is restricted. Please login to view the answer of this question.

Login Now

Flow control is design issue at Data Link Layer. It is technique that generally observes proper flow of data from sender to receiver. It is very essential because it is possible for sender to transmit data or information at very fast rate and hence receiver can receive this information and process it. This can happen only if receiver has very high load of traffic as compared to sender, or if receiver has power of processing less as compared to sender.

Go-Back-N Automatic Repeat reQuest (Go-Back-N ARQ), is a data link layer protocol that uses a sliding window method for reliable and sequential delivery of data frames. It is a case of sliding window protocol having to send window size of N and receiving window size of 1.

Working Principle

Go – Back – N ARQ uses the concept of protocol pipelining, i.e. sending multiple frames before receiving the acknowledgment for the first frame. The frames are sequentially numbered and a finite number of frames. The maximum number of frames that can be sent depends upon the size of the sending window. If the acknowledgment of a frame is not received within an agreed upon time period, all frames starting from that frame are retransmitted.

The size of the sending window determines the sequence number of the outbound frames. If the sequence number of the frames is an n-bit field, then the range of sequence numbers that can be assigned is 0 to 2n−1. Consequently, the size of the sending window is 2n−1. Thus in order to accommodate a sending window size of 2n−1, an n-bit sequence number is chosen.

The sequence numbers are numbered as modulo-n. For example, if the sending window size is 4, then the sequence numbers will be 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, and so on. The number of bits in the sequence number is 2 to generate the binary sequence 00, 01, 10, 11.

The size of the receiving window is 1.

Sender Site Algorithm of Go-Back-N Protocol

   frame s; //s denotes frame to be sent
   frame t; //t is temporary frame
   S_window = power(2,m) – 1; //Assign maximum window size
   SeqFirst = 0; // Sequence number of first frame in window
   SeqN = 0; // Sequence number of Nth frame window
   while (true) //check repeatedly
      Wait_For_Event(); //wait for availability of packet
      if ( Event(Request_For_Transfer)) then
         //check if window is full
         if (SeqN–SeqFirst >= S_window) then
         end if;
         s = Make_Frame();
         s.seq = SeqN;
         SeqN = SeqN + 1;
      end if;
      if ( Event(Frame_Arrival) then
         r = Receive_Acknowledgement();
         if ( AckNo > SeqFirst && AckNo < SeqN ) then
            while ( SeqFirst <= AckNo )
               SeqFirst = SeqFirst + 1;
         end while
      end if
   end if
   // Resend all frames if acknowledgement havn’t been received
   if ( Event(Time_Out)) then
      TempSeq = SeqFirst;
      while ( TempSeq < SeqN )
         t = Retrieve_Copy_Frame(s.seq(SeqFirst));
         TempSeq = TempSeq + 1;
      end while
   end if
Receiver Site Algorithm of Go-Back-N Protocol
   frame f;
   RSeqNo = 0; // Initialise sequence number of expected frame
   while (true) //check repeatedly
      Wait_For_Event(); //wait for arrival of frame
      if ( Event(Frame_Arrival) then
         if ( Corrupted ( f.SeqNo )
         else if ( f.SeqNo = RSeqNo ) then
            RSeqNo = RSeqNo + 1;
         end if
      end if
   end while


If you found any type of error on the answer then please mention on the comment or report an answer or submit your new answer.
Leave your Answer:

Click here to submit your answer.

  Loading . . .