[e2e] First rule of networking: don't make end-to-end promises you can't keep.

David P. Reed dpreed at reed.com
Thu Apr 22 14:05:53 PDT 2004


At 02:32 PM 4/22/2004, Cannara wrote:
>Of course, the fundamental issue is why any Transport protocol should be at
>all concerned with Network-layer loading and congestion points.  That, after
>all, is opposite to the concept of Transports providing reliable end-end
>service, regardless of what the next layers down are troubled with.

This is technically incorrect: that the Transport protocol should (or even 
can) hide network loading and congestion.

Congestion is a problem that is caused and cured only by modulating the 
behavior of the endpoints.   So it does indeed make sense that ALL 
transport protocols need to be involved in congestion control.

Even constant-bit-rate 64-kb/sec voice in the old telco reflects congestion 
to the endpoints because they must deal with it.  (that's what dialtones 
and fastbusy do...)

Now the question has always existed: how should the underlying network 
communicate about congestion and loss to a wide variety of applications, 
given that networks are themselves quite heterogeneous and the packet 
transport ought not to have to track the relationships among end-to-end 
applications.

The answer was quite simple: signal congestion by dropping packets.   Given 
that bit errors can be corrected locally on a best efforts basis and link 
disconnect is handled by re-routing, this is a clean channel, and satisfies 
a principle like "fate sharing" - it contributes to the local solution 
(which is almost certainly that the outgoing link cannot carry the 
presented load) as well as carrying the signal.   It also solves a major 
bug in many end-to-end protocols, which is that the congestion signal needs 
to be dispersed among ALL the contributors to congestion.   The statistical 
nature of dropping achieves this.

Note that this has nothing to do with TCP.   It's part of the definition of 
the IP layer, and is a signal that can be and is useful to implement 
congestion control in other protocols besides TCP.

Sending the congestion signal directly back to the source might seem like a 
possible option for the IP layer to implement (source quench was the name), 
but in fact it is quite incompatible with many high-level protocols.   For 
example, it makes little sense in a multicast tree, unless you have some 
way to tell the source something about the routing algorithm.   And it's 
well known that generating a reverse-path packet can be both difficult and 
places requirements on routers (such as the symmetry of paths) that may be 
difficult to realize in all kinds of networks.

So in fact, the idea was both elegant and defensible.






More information about the end2end-interest mailing list