  | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
      | 
   
   
    | n | 
    processing
    ACKs from MH: 
     | 
     | 
   
   
     | 
   
   
     | 
    – | 
    new
    ACK: common case, initiates cleaning up of snoop cache, 
     | 
     | 
   
   
     | 
    update
    estimate of round-trip time for wireless link, forward ACK 
     | 
   
   
     | 
    to FH 
     | 
     | 
   
   
     | 
    – | 
    spurious
    ACK: less than last ACK seen, happens rarely. Just drop 
     | 
     | 
   
   
     | 
    ACK
    and continue 
     | 
     | 
   
   
     | 
    – | 
    duplicate
    ACK: indicates packet loss, one of several actions: 
     | 
     | 
   
   
     | 
    n | 
    packet
    either not in cache or marked as retransmitted: pass duplicate 
     | 
     | 
   
   
     | 
    ACK on
    to FH 
     | 
     | 
   
   
     | 
    n | 
    first
    duplicated ACK for cached packet: retransmit cached packet 
     | 
     | 
   
   
     | 
   
   
     | 
    immediately
    and at high priority, estimate number of expected 
     | 
     | 
   
   
     | 
    duplicate
    ACKs, based on # of packets sent after missing one 
     | 
     | 
   
   
     | 
    n | 
    expected
    successive duplicate ACKs: ignore, we already initiated 
     | 
     | 
   
   
     | 
    retransmission.
    Since retransmission happens at higher priority, we 
     | 
     | 
   
   
     | 
   
   
     | 
    might
    not see total number of expected duplicate ACKs 
     | 
     |