Go backward to The Cyclic Redundancy Check
Go up to Top

Automatic Repeat Request (ARQ) Protocols

  1. The acronym ARQ makes absolutely no sense to me, but it is a convenient shorthand for discussing the protocols and algorithms by which the actors at the two ends of a network connection can communicate to arrange reliable, ordered delivery of messages.

  2. It is worth commenting that message loss/damage is not the only problems that need to be solved by these protocols. Once you decide that retransmissions will be used to deal with lost and damaged frames, then other issues arise:

    Duplication
    If I send a message and your attempt to tell me it reached you is lost, I will send the message again and you may think the second copy is a second, distinct message.

    Reordering
    If I send my messages in a hurry, I may not realize that the first message sent never made it until after you have accepted my second message.

  3. To motivate the approach I take to discussing these protocols, I should explain that I feel that two details often cloud the presentation of these protocols:

  4. In our examination of ARQ protocols we will:

  5. The efficiency and complexity of ARQ protocols increases with the degree to which the sender and receiver are willing to reserve space in memory for message buffers. Stop and Wait is the simplest, so we start with it.

  6. Our version of stop and wait will be slightly different from the text in that it will be designed to handle packet loss.

  7. The protocol described as stop and wait in the text does not handle packet losses for two reasons.

  8. The simplest way to imagine the algorithms used to ensure reliable transmission of messages in a network is to assume that one machine (the "sender") has an infinite supply of numbered messages to send and expects nothing in return except acknowledgements, while another machine ( the "receiver") has nothing to send but is willing to accept messages as quickly as it can.
    ``sender''
          SendNext = 0;
    
          Get packet to send from higher layer
    
          do { TransmissionTime = now;
    
               Send Frame number ``SendNext''
    
               do { nothing }
                  until ( ack is received or 
                             now > TransmissionTime + TimeOut )
    
               if (an ack was received)
                     if Ack.SendNext > SendNext
                         SendNext = Ack.SendNext
                         Get packet to send from higher layer
           } while ( 1 + 1 == 2 )
    
    ``receiver''
    	
         Receivenext = 0;
    
         do {  
               do { nothing }
               until ( packet is received )
    
               If ( packet was intact && packet.num = ReceiveNext )
                       deliver packet to higher layer
                       ReceiveNext ++ ;
    		
               Send an ack containing ReceiveNext as ``SendNext''
         } while ( 1 == 1 )
    
    
    

Computer Science 336
Department of Computer Science
Williams College

Prev Up