Jump to content

BIC TCP

From Wikipedia, the free encyclopedia
(Redirected from BIC-TCP)

BIC TCP (Binary Increase Congestion control) is one of the congestion control algorithms that can be used for Transmission Control Protocol (TCP). BIC is optimized for high-speed networks with high latency: so-called long fat networks. For these networks, BIC has significant advantage over previous congestion control schemes in correcting for severely underutilized bandwidth.[1]

BIC implements a unique congestion window (cwnd) algorithm. This algorithm tries to find the maximum cwnd by searching in three parts: binary search increase, additive increase, and slow start. When a network failure occurs, the BIC uses multiplicative decrease in correcting the cwnd.[2]

BIC TCP is implemented and used by default in Linux kernels 2.6.8 and above. The default implementation was again changed to CUBIC TCP in the 2.6.19 version.

Algorithm

[edit]

Define the following variables:

 Smax:    the maximum increment
 Smin:    the minimum increment
 wmax:    the maximum window size  
 β:       multiplicative window decrease factor
 cwnd:    congestion window size  
 bic_inc: window increment per RTT (round trip time)

At every RTT interval update cwnd with the following:

If no packets are dropped, the congestion window (cwnd) increases in three distinct ways: binary search increase, additive increase, and slow start. In each step, one is used as an increment.

One step of increasing cwnd:

 if (cwnd < wmax)          // binary search OR additive
   bic_inc = (wmax - cwnd) / 2;
 else                     // slow start OR additive
   bic_inc = cwnd - wmax;
 if (bic_inc > Smax)      // additive
   bic_inc = Smax;
 else if (bic_inc < Smin) // binary search OR slow start
   bic_inc = Smin;
 cwnd = cwnd + (bic_inc / cwnd);

If one or more packets are dropped, the cwnd is reduced using multiplicative decrease. This requires β, which is used in decreasing cwnd by (100×β)%. In the case of two flows, one with a large cwnd and the other a small cwnd, fast convergence is used to decrease the greater cwnd flow's wmax at a greater rate than the smaller cwnd's flow to allow faster convergence of the greater cwnd's flow when increasing its cwnd.

One step of decreasing cwnd:

 if (cwnd < wmax) // fast convergence
   wmax = cwnd * (2-β) / 2;
 else 
   wmax = cwnd;
 cwnd = cwnd * (1-β);

See also

[edit]

References

[edit]
  1. ^ "BIC FAQ". www4.ncsu.edu. Retrieved December 25, 2018.
  2. ^ "Binary increase congestion control (BIC) for fast long-distance networks - IEEE Conference Publication". doi:10.1109/INFCOM.2004.1354672. S2CID 11750446. {{cite journal}}: Cite journal requires |journal= (help)
[edit]