|
Content
|
|
|
|
|
RFC 2309: Recommendations on Queue
Management and Congestion Avoidance in the Internet |
|
 |
|
|
RFC 2309: Recommendations on Queue Management and
Congestion Avoidance in the Internet was written by B. Braden, D. Clark,
J. Crowcroft, B. Davie, S. Deering, D. Estrin, S. Floyd, V. Jacobson, G.
Minshall, C. Partridge, L. Peterson, K. Ramakrishnan, S. Shenker, J.
Wroclawski and L. Zhang in April 1998.
Here is a brief summary of this document: |
|
|
Dear lector: my notes are in cursive; also, I underlined some
interesting issues. LB. 12.03.2003 |
|
INTRODUCTION |
|
It has become clear that the TCP congestion avoidance mechanisms [RFC2001],
while necessary and powerful, are not sufficient to provide good (network)
service in all circumstances. Basically, there is a limit to how much
control can be accomplished from the edges of the network. Some mechanisms
are needed in the routers to complement the endpoint congestion avoidance
mechanisms. |
|
Have a look to TCP Congestion Avoidance mechanism in 1.0.- RFC 2581 - TCP
Congestion Control. |
|
It is useful to distinguish between two classes of router algorithms related
to congestion control: "queue management" versus "scheduling" algorithms. To
a rough approximation, queue management algorithms manage the length of
packet queues by dropping packets when necessary or appropriate, while
scheduling algorithms determine which packet to
send next and are used primarily to manage the allocation of bandwidth among
flows. While these two router mechanisms are closely related, they address
rather different performance issues. |
|
|
|
|
Scheduling algorithms use filtering and packet prioritization to select
the next packet to be forwarded. |
This memo highlights two router performance issues.
- The first issue is the need for an advanced form of router
queue management that we call "active queue management.".
- The second issue is the potential for future congestion
collapse of the Internet due to flows that are unresponsive, or
not sufficiently responsive, to congestion indications.
Unfortunately, there is no consensus solution to controlling
congestion caused by such aggressive flows; significant research
and engineering will be required before any solution will be
available. It is imperative that this work be energetically pursued,
to ensure the future stability of the Internet.
|
|
|
The discussion in this memo applies to "best-effort" traffic. The Internet
integrated services architecture, which provides a mechanism for protecting
individual flows from congestion, introduces its own queue management and
scheduling algorithms [Shenker96, Wroclawski96]. Similarly, the discussion
of queue management and congestion control requirements for differential
services is a separate issue. |
|
THE NEED FOR ACTIVE QUEUE MANAGEMENT |
The traditional technique for managing router queue lengths is to set a
maximum length (in terms of packets) for each queue, accept packets for the
queue until the maximum length is reached, then reject (drop) subsequent
incoming packets until the queue decreases because a packet from the queue
has been transmitted. This technique is known
as "tail drop", since the packet that arrived most recently (i.e., the one
on the tail of the queue) is dropped when the queue is full. This method has
served the Internet well for years, but it has two important drawbacks.
- Lock-Out
In some situations tail drop allows a single
connection or a few flows to monopolize queue space, preventing
other connections from getting room in the queue. This "lock-out"
phenomenon is often the result of synchronization or other timing
effects.
|
|
- Full Queues
The tail drop discipline allows queues to maintain
a full (or, almost full) status for long periods of time, since
tail drop signals congestion (via a packet drop) only when the
queue has become full. It is important to reduce the steady-state
queue size, and this is perhaps queue management's most important
goal.
|
|
Even though TCP constrains a flow's window size,
packets often arrive at routers in bursts. If the queue is full or
almost full, an arriving burst will cause multiple packets to be
dropped. This can result in a global synchronization of flows
throttling back, followed by a sustained period of lowered link
utilization, reducing overall throughput.
|
|
| The point of buffering in the network is to absorb
data bursts and to transmit them during the (hopefully) ensuing
bursts of silence. This is essential to permit the transmission of
bursty data. It should be clear why we would like to have
normally-small queues in routers: we want to have queue capacity
to absorb the bursts. |
|
|
|
|
One alternative queue discipline that can be applied to solve the lock-out
problem is "random drop on full", Under this discipline, a router drops a
randomly selected packet from the queue when the queue is full and a new
packet arrives. |
| When flows are "responsive", i.e., throttle back in response to congestion
notification, dropped packets serve as a critical mechanism of congestion
notification to end nodes. Then, the solution to the full-queues problem is
for routers to drop packets before a queue becomes full, so that end nodes
can respond to congestion before buffers overflow. We call such a proactive
approach "active queue management". By dropping packets before buffers
overflow, active queue management allows routers to control when and how
many packets to drop. |
|
|
This solution does not work with non-responsive flows, like those based
on UDP protocol. |
|
An active queue management mechanism can provide the following advantages
for responsive flows: |
- Reduce number of packets dropped in routers
By keeping the average queue size small, active queue
management will provide greater capacity to absorb naturally-occurring
bursts without dropping packets.
|
|
Without active queue management, more packets will be
dropped when a queue does overflow. This is undesirable for the
following reasons:
- With a shared queue and the tail drop discipline, an
unnecessary global synchronization of flows cutting back can
result in lowered average link utilization, and hence lowered
network throughput.
- TCP recovers with more difficulty from a burst of packet
drops than from a single packet drop.
- Unnecessary packet drops represent a possible waste of
bandwidth on the way to the drop point.
|
|
|
|
- Provide lower-delay interactive service
By keeping the average queue size small, queue
management will reduce the delays seen by flows. This is particularly
important for interactive applications such as short Web transfers,
Telnet traffic, or interactive audio-video sessions, whose subjective
(and objective) performance is better when the end-to-end delay
is low.
|
|
- Avoid lock-out behavior
Active queue management can prevent lock-out behavior
by ensuring that there will almost always be a buffer available for an
incoming packet. For the same reason, active queue management can
prevent a router bias against low bandwidth but highly bursty flows.
|
|
| Active queue management is needed even for routers
that use per-flow scheduling algorithms such as FQ or class-based
scheduling algorithms such as CBQ. This is because per-flow scheduling
algorithms by themselves do nothing to control the overall queue size
or the size of individual queues. Active queue management should be
used to control the queue size for each individual flow or class, so
that they do not experience unnecessarily high delays. |
|
|
|
THE QUEUE MANAGEMENT ALGORITHM "RED" |
|
Random Early Detection, or RED, is an active queue management algorithm for
routers that will provide the Internet performance advantages cited in the
previous section. In contrast to traditional queue management algorithms,
which drop packets only when the buffer is full, the RED algorithm drops
arriving packets probabilistically. The probability of drop increases as
the estimated average queue size grows. Note that RED responds to a
time-averaged queue length, not an instantaneous one. Thus, if the queue has
been mostly empty in the "recent past", RED won't tend to drop packets
(unless the queue overflows, of course!). On the other hand, if the queue
has recently been relatively full, indicating persistent congestion, newly
arriving packets are more likely to be dropped. |
|
In this site, at RED queuing discipline, there is
a very detailed explanation about this queue. |
|
The RED algorithm itself consists of two main parts: estimation of the
average queue size and the decision of whether or not to drop an incoming
packet. |
- Estimation of Average Queue Size
RED estimates the average queue size, using a simple
exponentially weighted moving average.
|
|
- Packet Drop Decision
In the second portion of the algorithm, RED decides
whether or not to drop an incoming packet. It is RED's particular
algorithm for dropping that results in performance improvement for
responsive flows. Two RED parameters, minth (minimum threshold) and
maxth (maximum threshold), figure prominently in
this decision process. Minth specifies the average queue size *below
which* no packets will be dropped, while maxth specifies the average
queue size *above which* all packets will be dropped. As the average
queue size varies from minth to maxth, packets will be dropped with a
probability that varies linearly
from 0 to maxp. |
|
|
|
RED effectively controls the average queue size while still accommodating
bursts of packets without loss. RED's use of randomness breaks up
synchronized processes that lead to lock-out phenomena. |
All available empirical evidence shows that the deployment of active queue
management mechanisms in the Internet would have substantial performance
benefits. There are seemingly no disadvantages to using the RED algorithm,
and numerous advantages. Consequently, we believe that the RED active queue
management algorithm should be widely
deployed. |
|
We should note that there are some extreme scenarios for which RED will not
be a cure, although it won't hurt and may still help. An example of such a
scenario would be a very large number of flows, each so tiny that its fair
share would be less than a single packet per RTT. |
|
MANAGING AGGRESSIVE FLOWS |
|
|
|
One of the keys to the success of the Internet has been the congestion
avoidance mechanisms of TCP. Because TCP "backs off" during congestion, a
large number of TCP connections can share a single, congested link in such a
way that bandwidth is shared reasonably equitably among similarly situated
flows. The equitable sharing of bandwidth among flows depends on the fact
that all flows are running basically the same congestion avoidance
algorithms,
conformant with the current TCP specification. |
|
|
We introduce the term "TCP-compatible" for a flow that behaves under
congestion like a flow produced by a conformant TCP. A TCP-compatible flow
is responsive to congestion notification, and in steady-state it uses no
more bandwidth than a conformant TCP running under comparable conditions
(drop rate, RTT, MTU, etc.) |
|
It is convenient to divide flows into three classes: (1) TCP-compatible
flows, (2) unresponsive flows, i.e., flows that do not slow down when
congestion occurs, and (3) flows that are responsive but are not
TCP-compatible. |
|
The last two classes contain more aggressive flows that pose significant
threats to Internet performance, as we will now discuss: |
- Non-Responsive Flows
There is a growing set of UDP-based applications whose
congestion avoidance algorithms are inadequate or nonexistent (i.e,
the flow does not throttle back upon receipt of congestion
otification). Such UDP applications include streaming applications
like packet voice and video, and also multicast bulk data transport.
If no action is taken, such unresponsive flows could lead to a new
congestion collapse.
|
|
In general, all UDP-based streaming applications
should incorporate effective congestion avoidance mechanisms (in
fact, most of them don't have). However, it will also be
important for the network to be able to protect itself against
unresponsive flows, and mechanisms to accomplish this must be
developed and deployed. Deployment of such mechanisms would provide
incentive for every streaming application to become responsive by
incorporating its own congestion control.
|
|
- Non-TCP-Compatible Transport Protocols
The second threat is posed by transport protocol
implementations that are responsive to congestion notification but,
either deliberately or through faulty implementations, are not
TCP-compatible. Such applications can grab an unfair share of the
network bandwidth.
|
|
For example, the popularity of the Internet has caused
a proliferation in the number of TCP implementations. Some of these
may fail to implement the TCP congestion avoidance mechanisms
correctly because of poor implementation. Others may deliberately be
implemented with congestion avoidance algorithms that are more
aggressive in their use of bandwidth than other TCP implementations;
this would allow a vendor to claim to have a "faster TCP". The logical
consequence of such implementations would be a spiral of increasingly
aggressive TCP implementations, leading back to the point where there
is effectively no congestion avoidance and the Internet is chronically
congested.
|
|
| Note that there is a well-known way to achieve more
aggressive TCP performance without even changing TCP: open multiple
connections to the same place, as has been done in some Web browsers. |
|
|
|
To replace UDP, a new responsive real-time traffic transport protocol,
called DCCP, is being designed by IETF. Have a look in this site at
Some DCCP related notes. |
The projected increase in more aggressive flows of both these classes, as a
fraction of total Internet traffic, clearly poses a threat to the future
Internet. There is an urgent need for measurements of current conditions and
for further research into the various ways of managing such flows. There are
many difficult issues in identifying and isolating unresponsive or
non-TCP-compatible flows at an acceptable router overhead cost. Finally,
there is little measurement or simulation evidence available about the rate
at which these threats are likely to be realized, or about the expected
benefit of router algorithms for managing such flows. |
There is an issue about the appropriate granularity of a "flow". There are a
few "natural" answers: 1) a TCP or UDP connection (source address/port,
destination address/port); 2) a source/destination host pair; 3) a given
source host or a given destination host. We would guess that the
source/destination host pair gives the most appropriate granularity in many
circumstances. However, it is possible that different vendors/providers
could set different
granularities for defining a flow (as a way of "distinguishing" themselves
from one another), or that different granularities could be chosen for
different places in the network. It may be the case that the granularity is
less important than the fact that we are dealing with more unresponsive
flows at *some* granularity. The granularity of flows for congestion
management is, at least in part, a policy question that needs to be
addressed in the wider IETF
community. |
|
CONCLUSIONS AND RECOMMENDATIONS |
- RECOMMENDATION 1
Internet routers should implement some active queue
management mechanism to manage queue lengths, reduce end-to-end
latency, reduce packet dropping, and avoid lock-out phenomena within
the Internet.
|
|
The default mechanism for managing queue lengths to
meet these goals in FIFO queues is Random Early Detection. Unless a
developer has reasons to provide another equivalent mechanism, we
recommend that RED be used.
|
|
- RECOMMENDATION 2
| It is urgent to begin or continue research,
engineering, and measurement efforts contributing to the design of
mechanisms to deal with flows that are unresponsive to congestion
notification or are responsive but more aggressive than TCP. |
|
|
|
|
|
|
|
Content
|
|
|