[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Layer 3.5 considered useful



[About the "layer 3.5": yes, this is arbitrary and not exactly well-defined. But to the extend that just 9 characters bring to mind the concept of something sitting between IP and the protocols that provide transport functionality, it is a very useful term.]

If we consider transport protocols such as TCP (UDP being a special case as it provides almost none of the functionality traditionally associated with transport protocols) it is fairly obvious that each transport session lives in a universe of its own, with little or no regard for the possible existence of other sessions. In many cases, this isn't a good thing. For example, even to this day most HTTP interaction happens over a large number of concurrent TCP sessions, rather than over a single session. Another problem comes up when a single host "reflects" some data over a somewhat large number of TCP sessions, which can lead to catastrophic momentary congestion caused synchronization of the TCP session slow start state.

Then there is multiaddress multihoming. The simplest way to do this would be to associate the multihoming state with a pair of source and destination addresses. This isn't satisfactory because it can lead to fairly serious security problems. Similar risks make it necessary to have a good deal of negotiation between the two hosts involved, something that would be problematic if it had to be done for each individual TCP session used to retrieve a web page and the pictures embeded init.

These considerations alone make a layer that sits between IP on one side and TCP and similar protocols on the other side: such a new layer would make it possible to aggregate individual sessions to a comfortable level somewhere between the TCP view where every session is unique and independent, and IP where only the destination address counts.

Another good reason to introduce a new layer is that it allows continued use of both unmodified TCP and other transport protocols and even UDP, and unmodified IP.

However, we probably do want to change TCP (or switch to something different, such as SCTP) at some point in the future. So we should avoid painting ourselves into a corner by focussing on supporting unmodified upper layer protocols exclusively. In this regard it makes sense to analyze proposals that boil down to introducing a "layer 3.5" and see what functionality can be accomplished on one end (ie, one end has the new layer and unmodified TCP, the other also the new layer but a new TCP that is aware of the layer 3.5 functions and wants to have a say in how these functions are perfomed) and which require cooperation between both ends. Functions that can be performed on one end should NOT be a layer.

So our new layer 3.5 would consists of mechanisms that work end-to-end and it would have a private interface that provides hooks to future versions of transport protocols.

That would be useful.