0%

TCP Congestion Control

Classic TCP

AIMD

AIMD - a distributed, asynchronous algorithm - has been shown to:

  • optimize congested flow rates network wide.
  • have desirable stability properties.

Approach: senders can increase sending rate until packet loss occurs, then decrease sending rate on loss event.

Additive Increase: Increase sending rate by 1 maximum segment size every RTT until loss detected.

Multiplicative Decrease: Cut sending rate in half at each loss event by triple duplicate ACK (TCP Reno). Or cut to 1 maximum segment size when loss is detected by timeout (TCP Tahoe)

TCP Congestion Control Details

sender sequence number space:

/images/SenderSequenceSpace.png

TCP rate ~= \(\frac{cwnd}{RTT}\) bytes/sec

  • TCP sender limits transmission : LastByteSent - LastByteAcked <= cwnd
  • cwnd is dynamically adjusted in response to observed network congestion

TCP slow start

initially cwnd = 1 MSS. double cwnd every RTT. done by incrementing cwnd for every ACK received.

When cwnd gets to 1/2 of its value before, we should switch to linear

CUBIC

CUBIC

TCP CUBIC is default in Linux, most popular TCP for popular Web servers.

Enhanced TCPs

Delay-based TCP congestion control

"Just full enough, but not fuller": keep bottleneck link busy transmitting, but avoid high delays/buffering

Explicit congestion notification (ECN)

TCP deployments often implement network-assisted congestion control.

  • two bits in IP header (ToS field) marked by network router to indicate congestion
    • policy to determine marking chosen by network operator
  • congestion indication carried to destination
  • destination sets ECE bit on ACK segment to notify sender of congestion
  • involves both IP (IP header ECN bit marking) and TCP (TCP header C,E bit marking)

TCP fairness

Goal: Multiple TCP sessions share the equal resource of network.

However, there is no Internet police policing use of congestion control.