Skip to content
Related Articles

Related Articles

Rate Halving Technique For Loss Recovery in TCP

View Discussion
Improve Article
Save Article
  • Difficulty Level : Expert
  • Last Updated : 04 Mar, 2022
View Discussion
Improve Article
Save Article

Rate Halving is the packet loss recovery algorithm that overcomes the issue of the Fast Recovery algorithm. Rate Halving means that it will half the rate of packet transmission such that the receiver’s application is not stalling. It avoids the half window of silence which would otherwise frustrate the receiver if he doesn’t get the packets during that period. So, instead of waiting for the half duration and then sending one packet per DUP-ACK for the rest half duration, rate halving sends one packet per two DUP-ACK arrivals. The overall number of packets transmitted is the same as Fast Recovery but the waiting time has been managed wisely. It allows the network to come out of the congestion state gradually instead of itself becoming silent for the half duration and let inflight drop to cwnd value. This is a very good optimization of fast recovery limitations.

Unlike the Fast Recovery technique, Rate Halving doesn’t reduce the cwnd by 50% when the sender enters the recovery phase. It gradually decreases it by 50%.

Rate Halving Technique without SACK

The initial state of the fast recovery phase:

ssthresh = 5
cwnd = 10
inflight = 1
Rate Halving technique without SACK

Rate Halving technique without SACK

  1. When DUP-ACK arrives, pipe=10-1=9; sender doesn’t respond and maintains silence.
  2. When DUP-ACK arrives, pipe=9-1=8; Now, the sender sends one new packet into the network, pipe=8+1=9.
  3. When DUP-ACK arrives, pipe=9-1=8; sender doesn’t respond and maintains silence.
  4. When DUP-ACK arrives, pipe=8-1=7; Now, the sender sends one new packet into the network, pipe=7+1=8.
  5. When DUP-ACK arrives, pipe=8-1=7; sender doesn’t respond and maintains silence.
  6. When DUP-ACK arrives, pipe=7-1=6; Now, the sender sends one new packet into the network, pipe=6+1=7.
  7. When DUP-ACK arrives, pipe=7-1=6; sender doesn’t respond and maintains silence.
  8. When DUP-ACK arrives, pipe=6-1=5; Now, the sender sends one new packet into the network, pipe=5+1=6.
  9. When DUP-ACK arrives, pipe=6-1=5; sender doesn’t respond and maintains silence.
  10. When DUP-ACK arrives, pipe=5-1=4; Now, the sender sends one new packet into the network, pipe=4+1=5.

So, the sender is gradually sending the new packets and not stalling the receiver’s application.

This technique suffers from one shortcoming that it can’t be used will all types of TCPs. It can only be used where cwnd is reduced to 50% when packet loss occurs. TCP like CUBIC where cwnd is reduced by 30% can’t use the Rate Halving algorithm. Another optimized algorithm was invented for that by google called Proportional Rate Reduction (PRR).

Rate Halving technique with SACK

When packet loss occurs,  

pipe = 10, cwnd = 10, ssthresh = 5.

Then pipe and cwnd decreased to 5 after sender got 9 ACKs and transmitted 4 new segments (see above diagram).

Rate Halving technique with SACK

Rate Halving technique with SACK

SACK is sent by the receiver when it gets a packet out of order. This creates holes in the receiver buffer and it let the sender know about it and the sender sends the lost packets to neutralize the loss.

Current Scenario:

1 DUP-ACK comes with SACK information. SACK tells that 2 packets are lost.

pipe=5-1-2=2, -1 for DUP-ACK and -2 for lost packets.
pipe = 2 segments
cwnd = 5 segments
Sender sends one new packet, pipe=2+1=3
1 DUP-ACK comes, pipe=3-1=2
Sender sends new packet, pipe=2+1=3

This process continues. The problem with this approach is that even when pipe < cwnd, one new segment is sent for every DupACK received.  This problem leads to a conservative approach of transmission if pipe << cwnd.  

Limitations of Rate Halving:

It is not suitable for TCP CUBIC and other TCPs which does not reduce the cwnd by 50% when packet loss occurs. In that case, the sender can’t send one new packet after every 2 DUP-ACK arrives. All TCPs don’t reduce the cwnd by half on packet loss. This can be solved with PRR (Proportional Rate Reduction).

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!