Summary

  • In RFC 970, Nagle showed that a datagram network with infinite storage, first-in-first-out service, finite packet lifetime and at least two switches could discard every packet under sustained overload.
  • His experiment queued 916 IP datagrams between Ethernet and a 9600-baud line, but TCP timed out before the predicted all-discard steady state appeared. His remedy was one queue per source host, served in turns.

Give a packet switch all the memory it wants. Feed its outbound link faster than it can transmit. The queue grows, packets wait, and their allotted lifetime drains away. Under the conditions in John Nagle's December 1985 RFC 970, the first switch eventually forwards packets with one unit of life left. A second switch decrements that last unit and throws them out. The warehouse is full of inventory. The delivery counter serves nobody.

That is the provocation in On Packet Switches With Infinite Storage. Nagle was testing an assumption, not announcing a production outage. Buffer exhaustion had been the standard villain in discussions of packet-switch congestion. He removed it from the model. The remaining constraint was a finite packet lifetime coupled to first-in-first-out transmission. The result required at least two switches and sustained overload. It was an analytical result for those conditions, not a claim that every busy network loses every packet.

The numbers make the point sharper. For an example switch with four 56-kilobit-per-second links and a 15-second upper bound on packet lifetime, Nagle calculated a maximum of 420 kilobytes of queued data. That much memory could eliminate drops caused by running out of buffers in his example. It could not guarantee that a queued packet remained useful when its turn finally arrived. In the RFC's 1985 model, time to live was expressed as seconds remaining. Reading today's hop-count practice back into that calculation would change the experiment.

Nagle also built a switch with several megabytes of memory. Traffic from an Ethernet into a 9600-baud line produced a peak queue of 916 IP datagrams. Then the TCP connection timed out because of the long round trip, before the queue reached the lifetime-limited steady state. The experiment proved a large queue and a transport failure in that setup. It did not directly observe the model's final condition in which every packet is dropped. The distinction matters: the warning is stronger when the measured result is allowed to be exactly what it was.

The deeper defect was the queue's admission policy for the wire. In a single FIFO line, a host that emits more packets can occupy more places and gain more service. Each sender has a reason to push harder for its own share, even as the combined load destroys the usefulness of the link. Nagle borrowed the language of the commons, but supplied a mechanical answer: replace the one outbound FIFO with a queue for each source host and serve nonempty queues round-robin, one surviving packet per turn. A loud sender then buys a longer private wait, not more turns. Its own packets can expire without consuming another host's allocation.

He proposed sending a Source Quench signal once a host's queue grew beyond roughly two packets, so a cooperative sender could back off. He also named the escape hatch: a malicious sender could pretend to be many source addresses and collect many shares. Per-switch fairness was not whole-network fairness. Nagle located the idea where it could do the most work, near an entrance or choke point between a fast local network and a constrained wide-area link.

The RFC Editor record identifies this as a 1985 memo; its opening explicitly says the solutions were offered for discussion, not as Internet standards. The enduring argument is about allocation. Buying storage can keep a switch from saying “no room.” It cannot decide whose packet should leave next, or whether that packet will still be alive when it reaches the next switch.

Sources