Jump to content

TCP congestion control

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 217.247.67.233 (talk) at 03:21, 9 December 2006 (Other TCP congestion avoidance algorithms). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The TCP uses a network congestion avoidance algorithm that includes various aspects of an additive-increase-multiplicative-decrease (AIMD) scheme, with other schemes such as slow-start in order to achieve congestion avoidance.

TCP Tahoe and Reno

Two such variations are those offered by TCP Tahoe and Reno. TCP specifies a maximum segment size (MSS). The sender maintains a congestion window, limiting the total number of unacknowledged packets that may be in transit end-to-end.

Slow Start. To avoid wasting time starting from a congestion window of 2 MSS, a slow-start algorithm is used at connection initiation and after a timeout. The name "slow-start" is a misnomer, since the algorithm increases the congestion window exponentially, i.e., for every packet ACKed, the congestion window increases by 1 MSS so that for every round trip time, the congestion window has doubled. When slow-start experiences a packet loss, indicated by the presence of 3 duplicate acks, the algorithm enters a new state, called congestion avoidance.

Congestion Avoidance. Whenever an ACK is received, the congestion window is additively increased. The behaviour of Tahoe and Reno differ on an occurrence of a packet loss, signaled by 3 duplicate acks :

  • Reno: halve the congestion window, enter a phase called Fast Recovery.
  • Tahoe: reduce congestion window to 1 MSS, reset to slow-start state.

Fast Recovery. (Reno Only) In this state, TCP retransmits the missing packet that was signaled by 3 duplicate ACKs, and waits for an acknowledgment of the entire transmit window before returning to congestion avoidance. If there is no acknowledgment, TCP Reno experiences a timeout and enters the slow-start state.

Both algorithms reduce congestion window to 1 MSS on a timeout event.

TCP Vegas

Up until the mid 1990's, all TCP's set timeouts and measured round-trip delays were based upon only the last transmitted packet in the transmit buffer. With TCP Vegas, timeouts were set and round-trip delays were measured for every packet in the transmit buffer. In addition, TCP Vegas uses additive increases and additive decreases in the congestion window.

TCP New Reno

TCP New Reno improves retransmission during the fast recovery phase of TCP Reno. During fast recovery, for every duplicate ACK that is returned to TCP New Reno, a duplicate unacknowledged packet from the front of the transmit buffer is sent. In other words, several packets from the front of the transmit buffer may be retransmitted. For every ACK that makes progress in the sequence space, new unsent packets from the back of the transmit buffer are sent, to keep the halved congestion window full.

Because the timeout timer is reset whenever there is progress in the transmit buffer, this allows New Reno to fill large holes, or multiple holes, in the sequence space - much like TCP SACK. Because New Reno can send out new packets at the end of the transmit buffer during fast recovery, high throughput is maintained during the hole-filling process, even when there are multiple holes, of multiple packets each.

In fact, New Reno performs as well as SACK at low packet error rates, and substantially outperforms Reno at high error rates.

TCP Hybla

TCP Hybla aims to eliminate penalization of TCP connections that incorporate a high-latency terrestrial or satellite radio link, due to their longer round trip times. It stems from an analytical evaluation of the congestion window dynamics, which suggests the necessary modifications to remove the performance dependence on RTT. Read more at [1]

Other TCP congestion avoidance algorithms

To flesh out: TCP NewReno would be the most commonly implemented algorithm, SACK support is very common and is an extension to Reno/NewReno. Most others are competing proposals which still need evaluation. Version of Linux since 2.6.8 implement a version of BIC-TCP, and use it by default. When the per-flow product of bandwidth and latency increases, regardless of the queuing scheme, TCP becomes inefficient and prone to instability. This becomes increasingly important as the Internet evolves to incorporate very high-bandwidth optical links .A new approach to Internet congestion control that outperforms TCP in conventional environments, and remains efficient, fair, scalable, and stable as the bandwidth-delay product increases is proposed ‘eXplicit Control Protocol’ (XCP), it generalizes the Explicit Congestion Notification proposal (ECN). In addition to that, XCP introduces the new concept of decoupling utilization control from fairness control. This allows a more flexible and tractable protocol design and could be helpful for service differentiation. XCP is modeled based on control theory framework and demonstrates that it is stable and efficient regardless of the link capacity, the number of sources, and the round trip delay. Simulations show that XCP outperforms TCP in both conventional and high bandwidth-delay environments. XCP achieves fair bandwidth allocation, high utilization, small standing queue size, and near-zero packet drops, with both steady and highly varying traffic.