[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Thoughts about layering multi-addressing
[Disclaimer: I am badly behind my reading of shim6 list. Please keep
me in CC: in this particular discussion.]
This is related to the AP I got together with some other people, as
recorded in the minutes:
Pekka Nikander, John Loughney and Christian Huitema to prepare some
initial ideas (slide pack / draft) on a bi-directional SHIM / ULP
API that would include the ability for the ULP to obtain/share
locator pair path info and then express a locator pair preference
to the SHIM (i.e. keep the notion of binding sessions at the
transport level but allow ULP signaling to include Loc Pair
preferences to be expressed) in addition to sending the SHIM the
trigger / heartbeat information associated with the current
locator pair.
According to my own notes, also Iljitch was volunteering to work on
this.
So, before I/we start writing a draft in this space, I'd like to poll
the WG opinion on the viability of the basic approach, as outlined
below. Note that this is an area where I really think that running
code or simulations would help. We also need to get some transport
area people involved.
Getting to the subject, the current "theory" of shim6 implementation
seems to be that the shim6 layer rewrites the locators to identifiers
for incoming packets and vice versa for outgoing packets. While that
may be fine in the short run for TCP and UDP, we seem to want a
different approach for SCTP, probably also for TCP in the longer run,
and maybe even for UDP.
The current "theory" can be visualised as follows:
^ v
| | ULIDs (and only ULIDs)
+----------+
| shim6 |
+----------+
| |
^ v Locators (and only locators)
There are couple of other approaches, both of which seem to be
architecturally compatible, AFAICT, but also create the kind of
enriched interface (not really an API) between the shim6 layer and ULs.
Approach one: Annotate ULIDs with locators
^ v
| | ULIDs (annotated with locators)
+----------+
| shim6 |
+----------+
| |
^ v Locators (and only locators)
In outgoing packets, the optional locator annotation could indicate
the locators that the transport prefers to use, if they are available
according to the shim6 knowledge. In incoming packets, the locator
annotation indicates the locators as found in the incoming packets.
ULIDs that don't understand the annotations continue to function
according to the current "theory".
Approach two: Send locators up but annotate them with ULIDs
^ v
| | Locators (annotated with ULIDs)
+----------+
| shim6 |
+----------+
| |
^ v Locators (and only locators)
While the information content here is the same as in the previous
case, the difference lies in what transports see by default. This
might work better with unmodified or minimally modified multi-homing
aware transports, such as SCTP and DCCP.
The architecturally guiding principle in this is to keep IP only
aware of the plain set of locators associated with each ULID, the
required encapsulation/marking information (such as the flow label),
and nothing else. Annotating the ULIDs with locators (or vice
versa) allows more capable transport protocols to keep track of them
and associate path-related parameters such as RTT, bandwidth
estimate, etc, separately with each locator pair. This allows the
transport-related functionality to remain located at the transport
layer. At the same time, any changes in the locator set need to be
secured only at the shim layer, i.e. only once per each ULID pair
rather than separately for each transport connection.
In addition to this basic mechanism, some transport may need to
figure out the complete set of locators available. However, are
there any other functions that would be needed? For example, if the
transport can give outgoing locators as hints to the shim-layer, it
does not need to tell the shim-layer to deprecate any locators even
though it suspects that some of they may not work any more. Indeed,
telling shim to prefer some over others may be dangerous since
different locator pairs may work for different transports, due to the
Internet not being fully transparent any more.
Hence, my question is if the transport are likely to need anything
else than the following:
- both ULIDs and locators in incoming packets
- ability to define locators for outgoing packets
- what happens if the locators are not available any
more? Host-internal ICMP-like response?
- ability to get the full set of locators related
to a given ULID
Anything else?
One other practical problem here is to figure out how to make this
all work with high speed servers, which are likely to have IP and TCP
implemented with firmware at the NIC. (Kudos to Christian for
pointing this out.)
--Pekka Nikander