CS268 Reading
Review
Congestion Avoidance and Control
Van Jacobson and Michael J. Karels
Review by Feng Zhou
1/29/2003
The problem: Originally TCP only included flow-control. No congestion
avoidance or congestion control was done. This led to the 'congestion
collapses" that actually happened at the end of 80'. This papers talked about
the congestion control mechanisms introduced in BSD. Most points in the paper
are covered by text-books now. So here are my thinkings about it.
Key points:
- In slow-start, the advertised or estimated windows size (ssthresh) is
actually a pretty important parameter. Because just as the paper points out,
the actually bandwidth of Internet can vary in several magnitudes. If sshthresh
is too large, it will take sometime for the network to recover from the
congestion resulted by going too fast. If it is way too small, then it will
really take the AIMD process a long time to reach the desired bandwidth, which
is also a very bad thing.
- Regarding the congestion avoidance measures proposed in the paper, in which
routers drop packets when it experiences congestion. The problem is in these
situations, only TCP streams are backing off. Most UDP streams used by audio-
video apps do not back off if it is only 5% loss rate or so. But this loss rate
can already make TCP really slow on long-latency links. I don't know if we have
a solution for this for TCP.
- It seems to me from this paper that a lot of problems in computer networks
were actually well-studied in the context of control theory and queuing theory
before they were solved or even found in computer science. Could it be possible
that the problems we now have with networks can be solved with some techniques
in other fields? Like those fairness problems we now have on Internet (people
can effectively 'steal' bandwidth by modifying TCP or use their "homebrew"
transport protocols). The fundamental problem here is we are trusting the end-
hosts to behave responsively when we design the protocols. However, if the
premise is broken, the question is can be build a network that works fine when
everyone is trying to grab resource? Can we solve these problems using
something from Game Theory? I saw a 2002 Sigcomm paper on this. But I think
this still isn't well studied yet.