Approaches to congestion control in the network layer.
Informally, When too many sources sending too much data too fast for a network to handle.
Manifestations: lost of packets (buffer overflow at routers) and long delays (queuing in router buffers).
Two broad approaches to congestion control:
- End -end congestion control
- Network assisted congestion control
End-end congestion control:)
- no explicit feedback from the network
- congestion inferred from end-system observed packets loss, delay
- the approach was taken by TCP
Network-assisted congestion control:)
- The router provides feedback to end systems
- A single bit indicating congestion (SNA,DECbit,TCP/IP ECN, ATM)
- explicit rate sender should send at
Goals of congestion control:)
Throughput: Maximize good output and the total number of bits end-end.
Fairness: Give different sessions equal share and maximize the minimum rate session.
Single Link: Capacity(R), session (m) and Each session: R/m
End to end feedback:)
Abstraction: Alarm flag and observable at the end stations.
Simple feedback model:)
Every RTT receives feedback: High congestion, Decrease rate, and Low congestion Increase rate. Also, the Variable rate controls the sending rate.
TCP Congestion Control:)
- Closed-loop, end-to-end, window-based congestion control
- Designed by Van Jacobson in late 1980s, based on the AIMD alg . of Dah-Ming Chu and Raj Jain
- Works well so far: the bandwidth of the Internet has increased by more than 200,000 times
Slow Start: getting to equilibrium gradually but quickly and double cwnd every RTT until network congested and get a rough estimate of the optimal of cwnd.
TCP & AIMD: congestion:)
Dynamic window size [Van Jacobson]
Initialization: Slow start
Steady-state: AIMD
Congestion = timeout : TCP Tahoe
Congestion = timeout || 3 duplicate ACK: TCP Reno & TCP new Reno
Congestion = higher latency : TCP Vegas
Many versions:)
TCP/Tahoe: this is a less optimized version. It is used for Congestion avoidance.
//slow start is over
//Congwin > threshold
Until (timeout or 3dupACKs) { /* loss event */
every ACK: Congwin += 1/Congwin
}
threshold = Congwin/2
Congwin = 1
perform slow start.
TCP/Reno: many OSs today implement Reno type congestion control.Maintains equilibrium and reacts around an equilibrium.
Implements the AIMD algorithm:
- Increases the window by 1 per round-trip time.
- Cuts window size: to half when detecting congestion by 3DUP, to 1 if a timeout and if already timeout doubles timeout.
cwnd = 1;
ssthresh = infinite (e.g., 64K);
For each newly ACKed segment:
if (cwnd less than ssthresh)
/* slow start*/
cwnd = cwnd + 1;
else
/* congestion avoidance; cwnd increases (approx.)
by 1 per RTT */
cwnd += 1/cwnd;
Triple-duplicate ACKs:
/* multiplicative decrease */
cwnd = ssthresh = cwnd/2;
Timeout:
ssthresh = cwnd/2;
cwnd = 1;
(if already timed out, double timeout value; this is called exponential backoff)
TCP/Vegas: not currently used
TCP uses different policies to handle the congestion in the network. We describe these policies in this
section.