Approaches to congestion control.


  • End to End control

  • Stallings appears to call this Implicit Congestion Signaling
  • For systems like TCP where there is no underlying congestion control.
  • Congestion must be detected in terms of observed network behavior

  • packet loss
  • Delay

  • TCP Decreases the window size when it detects delay

  • Network Assisted congestion control

  • Some form of explicit feedback is available from the underlying network.
  • ICMP source quench for example.
  • Also back pressure

  • As upstream nodes become overfilled, they tell down stream nodes to slow down.
  • Apparently, most networks don't support this.
  • And this is not a transport level issue.



TCP Congestion Control


  • The sender responds to perceived congestion.

  • When perceived congestion is low, the sending rate increases.
  • When perceived congestion is high, the sending rate decreases.

  • To do this each side of a connection keeps track of a ​congestion control window​ or CongWin.
  • The formula LastByteSent-LastByteAcked ≤ min{CongWin, RcvWin}
  • TCP defines a ​loss event​ as

  • a timeout
  • The receipt of three duplicate ACKs

  • When a loss even occurs, TCP declares the network to be congested.
  • When no loss is occurring, TCP uses a ​round trip time (RTT) estimate​ to adjust CongWin.

  • The RTT is the time between when a segment is handed to TCP and when the ACK is received.
  • A sample RTT is measured periodically for one packet at a time.
  • But only for segments transmitted once.
  • The average RTT is computed by means of a weighted average.
  • EstimatedRTT = (1-α)EstimatedRTT + &alpah;SampleRTT
  • It is suggested α=0.125
  • This average puts more weight on recent samples than older ones.
  • This allows response to changing network conditions.
  • In statistics this is called an Exponential weighted Moving Average.
  • This is because the weight of old values decay exponentially fast.
  • A deviation in RTT can be found in the same manner.
  • DevRTT = (1-Β)DevRTT + Β |Sample RTT- Estimated RTT|
  • Kurose mentions that TimeoutInterval = EstimatedRTT + 4 DevRTT
  • Stallings has a nice picture of this on page 685

  • TCP uses the RTT to adjust the window.

  • If ACK rate is slow, (RTT high) the window is made slightly bigger.
  • If ACK rate is fast (RTT low) the window is made much bigger.
  • Thus TCP is called ​self clocking

  • The ​TCP Congestion Control Algorithm​ consists of three parts.

  • Additive increase, multiplicative decrease
  • slow start
  • reaction to timeout events.

  • Additive Increase, Multiplicative Decrease

  • When a decrease needs to occur, the packet that tells us to decrease has probably been delayed.
  • In the case of a loss event, the window is cut in half.
  • When a new ACK (not a dup) arrives the window size is increased
  • Kurose suggests that the window size be increased by MSS(MSS/CongWin) each time this occurs.
  • This is known as ​congestion avoidance
  • And tends to produce a saw-toothed pattern in TCP connection.

  • Slow Start

  • At the beginning of a connection, TCP sets CongWin to be 1
  • Since this will require a long time to ramp up, it will double the size
  • Consider the sequence:

  • Packet 1 is sent, CongWin = 1 (Iteration 1)
  • Packet 1 is ACKed, CongWin = 2
  • Packets 2 and 3 are sent, CongWin = 2 (Iteration 2)
  • Packet 2 is ACKed, CongWin = 3
  • Packet 3 is ACKed, CongWin = 4

  • Reaction to Timeout Events

  • After a triple duplicate ACK the window size is cut in half
  • After a timeout,

  • the window size is set to 1
  • It is allowed to grow as in slow start until the window size reaches 1/2 of the level where the timeout occurs.
  • Then it grows normally.