RFC 970 UNKNOWN CONGESTION CONTROL · PACKET SWITCHING

On Packet Switches With Infinite Storage

Why unlimited buffers don't solve packet congestion, and how fair queuing helps.

On rfc-editor.org ↗
PUBLISHED
December 1985
AUTHORS
J. Nagle
STREAM
Legacy
DEFAULT TTL
15 seconds
MAXIMUM BUFFER FOR 4 X 56KB LINKS
420K bytes
PROPOSED THRESHOLD FOR SOURCE QUENCH
2 packets per host per switch
DOI
10.17487/RFC0970

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                         John Nagle
Request for Comments: 970                                 FACC Palo Alto
                                                           December 1985

                On Packet Switches With Infinite Storage


Status of this Memo

   The purpose of this RFC is to focus discussion on particular problems
   in the ARPA-Internet and possible methods of solution.  No proposed
   solutions in this document are intended as standards for the
   ARPA-Internet at this time.  Rather, it is hoped that a general
   consensus will emerge as to the appropriate solution to such
   problems, leading eventually to the adoption of standards.
   Distribution of this memo is unlimited.

Abstract

   Most prior work on congestion in datagram systems focuses on buffer
   management.  We find it illuminating to consider the case of a packet
   switch with infinite storage.  Such a packet switch can never run out
   of buffers. It can, however, still become congested.  The meaning of
   congestion in an infinite-storage system is explored.  We demonstrate
   the unexpected result that a datagram network with infinite storage,
   first-in-first-out queuing, at least two packet switches, and a
   finite packet lifetime will, under overload, drop all packets.  By
   attacking the problem of congestion for the infinite-storage case, we
   discover new solutions applicable to switches with finite storage.

Introduction

   Packet switching was first introduced in an era when computer data
   storage was several orders of magnitude more expensive than it is
   today.  Strenuous efforts were made in the early days to build packet
   switches with the absolute minimum of storage required for operation.
   The problem of congestion control was generally considered to be one
   of avoiding buffer exhaustion in the packet switches.  We take a
   different view here.  We choose to begin our analysis by assuming the
   availablity of infinite memory. This forces us to look at congestion
   from a fresh perspective.  We no longer worry about when to block or
   which packets to discard; instead, we must think about how we want
   the system to perform.

   Pure datagram systems are especially prone to congestion problems.
   The blocking mechanisms provided by virtual circuit systems are
   absent.  No fully effective solutions to congestion in pure datagram
   systems are known.  Most existing datagram systems behave badly under
   overload.  We will show that substantial progress can be made on the

On Packet Switches With Infinite Storage


   congestion control problem even for pure datagram systems when the
   problem is defined as determining the order of packet transmission,
   rather than the allocation of buffer space.

A Packet Switch with Infinite Storage

   Let us begin by describing a simple packet switch with infinite
   storage.  A switch has incoming and outgoing links.  Each link has a
   fixed data transfer rate.  Not all links need have the same data
   rate. Packets arrive on incoming links and are immediately assigned
   an outgoing link by some routing mechanism not examined here.  Each
   outgoing link has a queue.  Packets are removed from that queue and
   sent on its outgoing link at the data rate for that link.  Initially,
   we will assume that queues are managed in a first in, first out
   manner.

   We assume that packets have a finite lifetime.  In the DoD IP
   protocol, packets have a time-to-live field, which is the number of
   seconds remaining until the packet must be discarded as
   uninteresting. As the packet travels through the network, this field
   is decremented; if it becomes zero, the packet must be discarded.
   The initial value for this field is fixed; in the DoD IP protocol,
   this value is by default 15.

   The time-to-live mechanism prevents queues from growing without
   bound; when the queues become sufficiently long, packets will time
   out before being sent.  This places an upper bound on the total size
   of all queues; this bound is determined by the total data rate for
   all incoming links and the upper limit on the time-to-live.

   However, this does not eliminate congestion.  Let us see why.

   Consider a simple node, with one incoming link and one outgoing link.
   Assume that the packet arrival rate at a node exceeds the departure
   rate.  The queue length for the outgoing link will then grow until
   the transit time through the queue exceeds the time-to-live of the
   incoming packets.  At this point, as the process serving the outgoing
   link removes packets from the queue, it will sometimes find a packet
   whose time-to-live field has been decremented to zero.  In such a
   case, it will discard that packet and will try again with the next
   packet on the queue.  Packets with nonzero time-to-live fields will
   be transmitted on the outgoing link.

   The packets that do get transmitted have nonzero time-to- live
   values. But once the steady state under overload has been reached,
   these values will be small, since the packet will have been on the
   queue for slightly less than the maximum time-to-live.  In fact, if

On Packet Switches With Infinite Storage


   the departure rate is greater than one per time-to-live unit, the
   time-to-live of any forwarded packet will be exactly one.  This
   follows from the observation that if more than one packet is sent per
   time-to-live unit, consecutive packets on the queue will have
   time-to-live values that differ by no more than 1.  Thus, as the
   component of the packet switch that removes packets from the queue
   and either sends them or discards them as expired operates, it will
   either find packets with negative or zero time to live values (which
   it will discard) or packets with values of 1, which it will send.

   So, clearly enough, at the next node of the packet switching system,
   the arriving packets will all have time-to-live values of 1.  Since
   we always decrement the time-to-live value by at least 1 in each
   node, to guarantee that the time-to-live value decreases as the
   packet travels through the network, we will in this case decrement it
   to zero for each incoming packet and will then discard that packet.

   We have thus shown that a datagram network with infinite storage,
   first-in-first-out queuing, and a finite packet lifetime will, under
   overload, drop all packets.  This is a rather unexpected result.  But
   it is quite real.  It is not an artifact of the infinite-buffer
   assumption.  The problem still occurs in networks with finite
   storage, but the effects are less clearly seen.  Datagram networks
   are known to behave badly under overload, but analysis of this
   behavior has been lacking.  In the infinite-buffer case, the analysis
   is quite simple, as we have shown, and we obtain considerable insight
   into the problem.

   One would expect this phenomenon to have been discovered previously.
   But previous work on congestion control in packet switching systems
   almost invariably focuses on buffer management.  Analysis of the
   infinite buffer case is apparently unique with this writer.

   This result is directly applicable to networks with finite resources.
   The storage required to implement a switch that can never run out of
   buffers turns out to be quite reasonable.  Let us consider a pure
   datagram switch for an ARPANET-like network.  For the case of a
   packet switch with four 56Kb links, and an upper bound on the
   time-to-live of 15 seconds, the maximum buffer space that could ever
   be required is 420K bytes <1>.  A switch provided with this rather
   modest amount of memory need never drop a packet due to buffer
   exhaustion.

   This problem is not just theoretical.  We have demonstrated it
   experimentally on our own network, using a supermini with several
   megabytes of memory as a switch.  We now have experimental evidence
   that the phenomenon described above occurs in practice.  Our first

On Packet Switches With Infinite Storage


   experiment, using an Ethernet on one side of the switch and a 9600
   baud line on the other, resulted in 916 IP datagrams queued in the
   switch at peak.  However, we were applying the load over a TCP
   transport connection, and the transport connection timed out due to
   excessive round trip time before the queue reached the time to live
   limit, so we did not actually reach the stable state with the queue
   at the maximum length as predicted by our analysis above.  It is
   interesting that we can force this condition from the position of a
   user application atop the transport layer (TCP), and this deserves
   further analysis.

Interaction with Transport Protocols

   We have thus far assumed packet sources that emit packets at a fixed
   rate.  This is a valid model for certain sources such as packet voice
   systems.  Systems that use transport protocols of the ISO TP4 or DoD
   TCP class, however, ought to be better behaved.  The key point is
   that transport protocols used in datagram systems should behave in
   such a way as to not overload the network, even where the network has
   no means of keeping them from doing so.  This is quite possible.  In
   a previous paper by this writer [1], the behavior of the TCP
   transport protocol over a congested network is explored.  We have
   shown that a badly behaved transport protocol implementation can
   cause serious harm to a datagram network, and discussed how such an
   implementation ought to behave.  In that paper we offered some
   specific guidance on how to implement a well-behaved TCP, and
   demonstrated that proper behavior could in some cases reduce network
   load by an order of magnitude.  In summary, the conclusions of that
   paper are that a transport protocol, to be well behaved, should not
   have a retransmit time shorter than the current round trip time
   between the hosts involved, and that when informed by the network of
   congestion, the transport protocol should take steps to reduce the
   number of packets outstanding on the connection.

   We reference our earlier work here to show that the network load
   imposed by a transport protocol is not necessarily fixed by the
   protocol specification.  Some existing implementations of transport
   protocols are well-behaved.  Others are not. We have observed a wide
   variability among existing TCP implementations.  We have reason to
   suspect that ISO TP4 implementations will be more uniform, given the
   greater rigidity of the specification, but we see enough open space
   in the TP4 standard to allow for considerable variability.  We
   suspect that there will be marginal TP4 implementations, from a
   network viewpoint, just as there are marginal TCP implementations
   today. These implementations will typically work quite well until
   asked to operate over a heavily loaded network with significant
   delays.  Then we find out which ones are well-behaved.

On Packet Switches With Infinite Storage


   Even if all hosts are moderately well-behaved, there is potential for
   trouble.  Each host can normally obtain more network bandwidth by
   transmitting more packets per unit time, since the first in, first
   out strategy gives the most resources to the sender of the most
   packets. But collectively, as the hosts overload the network, total
   throughput drops.  As shown above, throughput may drop to zero.
   Thus, the optimal strategy for each host is strongly suboptimal for
   the network as a whole.

Game Theoretic Aspects of Network Congestion

   This game-theory view of datagram networks leads us to a digression
   on the stability of multi-player games.  Systems in which the optimal
   strategy for each player is suboptimal for all players are known to
   tend towards the suboptimal state.  The well-known prisoner's dilemma
   problem in game theory is an example of a system with this property.
   But a closer analogue is the tragedy of the commons problem in
   economics.  Where each individual can improve their own position by
   using more of a free resource, but the total amount of the resource
   degrades as the number of users increases, self-interest leads to
   overload of the resource and collapse.  Historically this analysis
   was applied to the use of common grazing lands; it also applies to
   such diverse resources as air quality and time-sharing systems.  In
   general, experience indicates that many-player systems with this type
   of instability tend to get into serious trouble.

   Solutions to the tragedy of the commons problem fall into three
   classes: cooperative, authoritarian, and market solutions.
   Cooperative solutions, where everyone agrees to be well-behaved, are
   adequate for small numbers of players, but tend to break down as the
   number of players increases.  Authoritarian solutions are effective
   when behavior can be easily monitored, but tend to fail if the
   definition of good behavior is subtle.  A market solution is possible
   only if the rules of the game can be changed so that the optimal
   strategy for players results in a situation that is optimal for all.
   Where this is possible, market solutions can be quite effective.

   The above analysis is generally valid for human players.  In the
   network case, we have the interesting situation that the player is a
   computer executing a preprogrammed strategy.  But this alone does not
   insure good behavior; the strategy in the computer may be programmed
   to optimize performance for that computer, regardless of network
   considerations.  A similar situation exists with automatic redialing
   devices in telephony, where the user's equipment attempts to improve
   performance over an overloaded network by rapidly redialing failed
   calls.  Since call-setup facilities are scarce resources in telephone
   systems, this can seriously impact the network; there are countries

On Packet Switches With Infinite Storage


   that have been forced to prohibit such devices.  (Brazil, for one).
   This solution by administrative fiat is sometimes effective and
   sometimes not, depending on the relative power of the administrative
   authority and the users.

   As transport protocols become more commercialized and competing
   systems are available, we should expect to see attempts to tune the
   protocols in ways that may be optimal from the point of view of a
   single host but suboptimal from the point of view of the entire
   network.  We already see signs of this in the transport protocol
   implementation of one popular workstation manufacturer.

   So, to return to our analysis of a pure datagram internetwork, an
   authoritarian solution would order all hosts to be "well-behaved" by
   fiat; this might be difficult since the definition of a well-behaved
   host in terms of its externally observed behavior is subtle.  A
   cooperative solution faces the same problem, along with the difficult
   additional problem of applying the requisite social pressures in a
   distributed system.  A market solution requires that we make it pay
   to be well-behaved.  To do this, we will have to change the rules of
   the game.

Fairness in Packet Switching Systems

   We would like to protect the network from hosts that are not
   well-behaved.  More specifically, we would like, in the presence of
   both well-behaved and badly-behaved hosts, to insure that
   well-behaved hosts receive better service than badly-behaved hosts.
   We have devised a means of achieving this.

   Let us consider a network that consists of high-bandwidth
   pure-datagram local area networks without flow control (Ethernet and
   most IEEE 802.x datagram systems are of this class, whether based on
   carrier sensing or token passing), hosts connected to these local
   area networks, and an interconnected wide area network composed of
   packet switches and long-haul links.  The wide area network may have
   internal flow control, but has no way of imposing mandatory flow
   control on the source hosts.  The DoD Internet, Xerox Network Systems
   internetworks, and the networks derived from them fit this model.

   If any host on a local area network generates packets routed to the
   wide area network at a rate greater than the wide area network can
   absorb them, congestion will result in the packet switch connecting
   the local and wide area networks.  If the packet switches queue on a
   strictly first in, first out basis, the badly behaved host will
   interfere with the transmission of data by other, better-behaved
   hosts.

On Packet Switches With Infinite Storage


   We introduce the concept of fairness.  We would like to make our
   packet switches fair; in other words, each source host should be able
   to obtain an equal fraction of the resources of each packet switch.
   We can do this by replacing the single first in, first out queue
   associated with each outgoing link with multiple queues, one for each
   source host in the entire network. We service these queues in a
   round- robin fashion, taking one packet from each non-empty queue in
   turn and transmitting the packets with positive time to live values
   on the associated outgoing link, while dropping the expired packets.
   Empty queues are skipped over and lose their turn.

   This mechanism is fair; outgoing link bandwidth is parcelled out
   equally amongst source hosts.  Each source host with packets queued
   in the switch for the specified outgoing link gets exactly one packet
   sent on the outgoing link each time the round robin algorithm cycles.
   So we have implemented a form of load-balancing.

   We have also improved the system from a game theory point of view.
   The optimal strategy for a given host is no longer to send as many
   packets as possible.  The optimal strategy is now to send packets at
   a rate that keeps exactly one packet waiting to be sent in each
   packet switch, since in this way the host will be serviced each time
   the round-robin algorithm cycles, and the host's packets will
   experience the minimum transit delay.  This strategy is quite
   acceptable from the network's point of view, since the length of each
   queue will in general be between 1 and 2.

   The hosts need advisory information from the network to optimize
   their strategies.  The existing Source Quench mechanism in DoD IP,
   while minimal, is sufficient to provide this.  The packet switches
   should send a Source Quench message to a source host whenever the
   number of packets in the queue for that source host exceeds some
   small value, probably 2.  If the hosts act to keep their traffic just
   below the point at which Source Quench messages are received, the
   network should run with mean queue lengths below 2 for each host.

   Badly-behaved hosts can send all the datagrams they want, but will
   not thereby increase their share of the network resources.  All that
   will happen is that packets from such hosts will experience long
   transit times through the network.  A sufficiently badly-behaved host
   can send enough datagrams to push its own transit times up to the
   time to live limit, in which case none of its datagrams will get
   through.  This effect will happen sooner with fair queuing than with
   first in, first out queuing, because the badly- behaved host will
   only obtain a share of the bandwidth inversely proportional to the
   number of hosts using the packet switch at the moment.  This is much

On Packet Switches With Infinite Storage


   less than the share it would have under the old system, where more
   verbose hosts obtained more bandwidth.  This provides a strong
   incentive for badly-behaved hosts to improve their behavior.

   It is worth noting that malicious, as opposed to merely
   badly-behaved, hosts, can overload the network by using many
   different source addresses in their datagrams, thereby impersonating
   a large number of different hosts and obtaining a larger share of the
   network bandwidth. This is an attack on the network; it is not likely
   to happen by accident. It is thus a network security problem, and
   will not be discussed further here.

   Although we have made the packet switches fair, we have not thereby
   made the network as a whole fair.  This is a weakness of our
   approach. The strategy outlined here is most applicable to a packet
   switch at a choke point in a network, such as an entry node of a wide
   area network or an internetwork gateway.  As a strategy applicable to
   an intermediate node of a large packet switching network, where the
   packets from many hosts at different locations pass through the
   switch, it is less applicable.  The writer does not claim that the
   approach described here is a complete solution to the problem of
   congestion in datagram networks.  However, it presents a solution to
   a serious problem and a direction for future work on the general
   case.

Implementation

   The problem of maintaining a separate queue for each source host for
   each outgoing link in each packet switch seems at first to add
   considerably to the complexity of the queuing mechanism in the packet
   switches.  There is some complexity involved, but the manipulations
   are simpler than those required with, say, balanced binary trees.
   One simple implementation involves providing space for pointers as
   part of the header of each datagram buffer.  The queue for each
   source host need only be singly linked, and the queue heads (which
   are the first buffer of each queue) need to be doubly linked so that
   we can delete an entire queue when it is empty.  Thus, we need three
   pointers in each buffer.  More elaborate strategies can be devised to
   speed up the process when the queues are long.  But the additional
   complexity is probably not justified in practice.

   Given a finite buffer supply, we may someday be faced with buffer
   exhaustion.  In such a case, we should drop the packet at the end of
   the longest queue, since it is the one that would be transmitted
   last. This, of course, is unfavorable to the host with the most
   datagrams in the network, which is in keeping with our goal of
   fairness.

On Packet Switches With Infinite Storage


Conclusion

   By breaking away from packet switching's historical fixation on
   buffer management, we have achieved some new insights into congestion
   control in datagram systems and developed solutions for some known
   problems in real systems. We hope that others, given this new
   insight, will go on to make some real progress on the general
   datagram congestion problem.

References

   [1]  Nagle, J. "Congestion Control in IP/TCP Internetworks", ACM
        Computer Communications Review, October 1984.

Editor's Notes

   <1>  The buffer space required for just one 10Mb Ethernet with an
        upper bound on the time-to-live of 255 is 318 million bytes.

AI ELI5

On this page
PROBLEMPacket switching systems can become congested even with infinite buffer storage; the real problem is not running out of memory but excessive delay.
MECHANISMWith time-to-live (TTL) limits on packets, extremely long queues cause packets to expire and be discarded before transmission; fair queuing by source address distributes bandwidth equally and creates incentives for well-behaved hosts.
WHY IT MATTERSThis discussion RFC influenced thinking about congestion control, but does not specify a protocol; modern networks use variants of fair queuing and congestion control algorithms like those in TCP.

§1The Congestion Paradox

Historically, packet switching engineers focused on buffer management: building switches with enough memory so they would never drop packets due to buffer exhaustion. RFC 970 challenges this assumption by analyzing a theoretical packet switch with infinite storage. The surprising result: such a switch can still become congested and drop all packets.

The mechanism is simple. Internet packets carry a time-to-live (TTL) field that is decremented at each hop and must be positive to be forwarded. When arrival rate exceeds departure rate, queues grow long. Packets wait so long in the queue that their TTL expires before they can be sent. Once TTL reaches zero, the packet is discarded. Under extreme overload with FIFO (first-in-first-out) queuing, even arriving packets with the shortest possible TTL (value 1) are decremented to zero at the next hop and discarded. The result: the network stops delivering any packets.

Even with infinite storage, if mail piles up too much, letters expire and never get delivered. The problem is not running out of space but wasting time.

§2Fair Queuing Solution

The RFC proposes fair queuing as a solution. Instead of a single FIFO queue per outgoing link, maintain separate queues for each source host. Serve them in round-robin order, taking one packet from each source in turn. This guarantees that each source host gets an equal fraction of the outgoing link's bandwidth, regardless of how many packets it sends.

Fair queuing creates new incentives. Under FIFO, a host gains bandwidth by sending more packets (since it claims more queue slots). Under fair queuing, sending more packets only means packets wait longer in the host's own queue. A host optimizes by sending just enough packets to keep one queued at each switch, minimizing its own transit delay. Badly-behaved hosts that send many packets simply experience longer delays for their own traffic, without blocking well-behaved hosts.

The RFC also proposes using IP's Source Quench mechanism to provide feedback: a switch sends a Source Quench message to a host when that host's queue grows beyond a threshold (e.g., 2 packets), signaling the host to slow down.

Instead of one big line, give each person their own line and take one person from each line in order. Cheaters can jump in more, but they just get longer waits for themselves, not for honest people.

§3Game Theory and Network Incentives

The RFC frames congestion as a game-theory problem, applying the classic tragedy of the commons analogy. When each participant benefits from using more resources but the shared resource degrades as usage increases, self-interest leads everyone to overuse it and collectively cause collapse. Networks face this: each host benefits from sending more packets, but if all hosts do so, throughput plummets.

Solutions fall into three categories: cooperative (everyone agrees to be nice), authoritarian (rules enforced), and market-based (change the game so selfish behavior is optimal). The RFC argues that fair queuing is a market-based solution: it makes it pay to be well-behaved by ensuring that selfish behavior (sending more packets) harms only the selfish sender, not others.

Everyone at the commons wants more grazing land, so everyone brings more sheep, and the land dies. Fair queuing makes each person get an equal share no matter how many sheep they bring, so they can't gain by cheating.

§4Implementation Considerations

Fair queuing's main cost is maintaining separate queues for each source host. The RFC notes this is simpler than it might appear. A practical approach uses singly-linked per-host queues, with doubly-linked queue heads to allow efficient deletion of empty queues. Only three pointers per buffer are needed. When buffers are exhausted, drop the packet at the end of the longest queue (the one from the heaviest sender), which is both fair and discourages aggressive senders.

The RFC emphasizes that the overhead is modest and the complexity is not greater than other data structure approaches like balanced binary trees. This made fair queuing practical to implement in real packet switches, and variants of it have become common in modern routers and end-host systems.

To keep separate lines, you just need to link each packet to the next one in its line. When you run out of space, drop from the longest line, which is fair.

§5References

[1]Nagle, J., "Congestion Control in IP/TCP Internetworks", ACM Computer Communications Review, October 1984.