[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
shim-aware transports
As a result of the discussion in the shim6 session in Paris it
occurred to me that we've been focussing too much on making the shim
work with unmodified IP and unmodified upper layers.
This is of course extremely important, no question about that.
But if we're successful, it won't be long before existing transports
are modified or even new ones are created that know about the shim
and may be able to make the shim work better. Other transports may
already be doing work that the shim must also be able to do, like SCTP.
I think this implies that our efforts basically consists of two
parts, or should consist of two parts:
1. The basic shim functionality that for some reason or another
should NOT be implemented in transports. For instance: reachability
detection, state management and security. Having each transport do
these on its own is a waste of resources and my lead to suboptimal
results if one or more transports doesn't get it right.
2. Multi-address handling and transport-specific (potential) failure
detection. For instance, TCP has a good idea about when its sessions
aren't progressing (hence the talk about hints), SCTP can also handle
multiple addresses.
(note the difference between failure and reachability detection.)
The idea would be that the basic shim sublayer provides a set of
required building blocks. I'll call the other sublayer the "adaption
layer" because it adapts existing transport behavior to the
requirements of the shim. Transports or even applications that know
how to work with the shim themselves may bypass the entire adaption
layer, or specific parts.
This would allow for the following succession in TCP/shim developments:
- Initially, TCP would be unmodified, so the shim would use the
adaption layer to do address magic whenever the basic shim sublayer
determines reachability has changed.
- Next step: TCP is modified slightly to provide reachability hints
to the shim layer. The basic shim sublayer can optimize some of its
failure/reachability detection mechanism based on this.
- Finally: TCP becomes aware of multiple addresses, and starts
keeping per-address pair RTT statistics. TCP moves to another address
pair either when the shim tells it to (because the shim detected a
problem) or when it determines another pair is "better" based on its
own statistics.