Principles of Congestion Control
Causes/costs of congestion: scenario 1
Simplest scenario:
- one router, infinite buffers
- input, output link capacity: R
- Two flows
- no retransmissions needed
Causes/costs of congestion: scenario 2
Idealization: perfect knowledge
- Sender sends only when router buffer is available
Causes/costs of congestion: scenario 2
Idealization: some perfect knowledge
Causes/costs of congestion: scenario 2
Realistic scenario: un-needed duplicates
“costs” of congestion:
- more work (retransmission) for given receiver throughput
- unneeded retransmissions: link carries multiple copies of a packet
* decreasing maximum achievable throughput
Causes/costs of congestion: scenario 3
Q: what happens as (lambda)in and (lambda)in’ increase ?
A: as red (lambda)in’ increases, all arriving blue pkts at upper queue are dropped, blue throughput g 0
Causes/costs of congestion: scenario 3
another “cost” of congestion:
§ when packet dropped, any upstream transmission capacity and buffering used for that packet was wasted!
Causes/costs of congestion: insights
TCP Congestion control
(High-level idea)
How to perceive congestion? (End-end congestion control)
How to perceive congestion? (Network-assisted congestion control)
How does a sender limit its sending rate?
Types of loss detection
Why 3 duplicates? Why not 1 or 10?
“Since TCP does not know whether a duplicate ACK is caused by a lost segment or just a reordering of segments, it waits for a small number of duplicate ACKs to be received (in this case, 3).
It is assumed that if there is just a reordering of the segments, there will be only one or two duplicate ACKs before the reordered segment is processed, which will then generate a new ACK. If three or more duplicate ACKs are received in a row, it is a strong indication that a segment has been lost (and Fast Retransmit is being requested by receiver).”
How to adjust sending rate with perceived congestion?
TCP AIMD: more
Multiplicative decrease detail: sending rate is
- Cut in half on loss detected by triple duplicate ACK (TCP Reno)
- Cut to 1 MSS (maximum segment size) when loss detected by timeout (TCP Tahoe)
Why AIMD?
TCP slow start
TCP: from slow start to congestion avoidance
Q: when should the exponential increase switch to linear (i.e., AIMD)?
A: when cwnd gets to 1/2 of its value before timeout
Implementation:
- variable ssthresh
- on loss event, ssthresh is set to 1/2 of cwnd just before loss event
Detecting and Reacting to Loss
Loss indicated by timeout (TCP Reno and Tahoe)
Detecting and Reacting to Loss (Loss indicated by 3 duplicate ACKs)
TCP Congestion Control
Versions
TCP Tahoe
* This is the original version of TCP congestion control
* Slow Start
* Fast Retransmit (see Lecture 10)
TCP Reno
* Same as Tahoe, but with Fast Recovery TCP Vegas
* This is a completely new implementation based on delay variation (instead of packet loss)
TCP Tahoe vs TCP Reno
Summary: TCP congestion control (Reno)