Monday, September 8, 2008

Congestion Avoidance and Control

In response to the 1986 overcongestion of the internet, the 4.4BSD stack was changed to control congestion. This paper explores the major changes and reports on the results through empirical experiments. In particular, the paper uses a concept from flow theory that says that a flow should be conservative, which is violated under three conditions; each condition is dealt with by a separate algorithm. First, the implement "slow start" that allows communications to reach equilibrium by starting out sending a single packet and then ramping that up as acks are received.

To avoid unnecessary injections, the authors point out the retransmit timer must be well-designed and take into account the variability of the network as well; a simple modification to the usual filter fixes this by estimating the variance at each point. Lastly, they introduce the congestion avoidance technique used in TCP stacks, which has its roots in the previous paper. Both use additive increase/multiplicative decrease, but the TCP algorithm is clever in that it requires no global state and just uses lost packets as the network congestion signal. No feedback from the gateway or router is required.

This paper is quite interesting in that it presents refinements to each algorithm (much of it is not new) and then presents how the new algorithms fare in actual network performance. It is a validation of the congestion avoidance regimes in the previous paper as well. In terms of its importance historically, the paper was of course instrumental in making the internet more robust in the face of capacity. Again, however, the paper assumes friendly/non-malicious clients; how this works in the face of malice is unclear. In particular, the gateway would probably need to be involved; not following the endpoint behaviors outlined could be a simple signal for gateways to shut down a malicious user.

No comments: