[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Second shim
El 12/10/2005, a las 11:55, Iljitsch van Beijnum escribió:
I had a conversation with Tony Hain and Daniel Karrenberg yesterday,
where we discussed the issues with the shim and very short-lived
sessions such as single packet UDP request/reply interactions.
This ties in with the "failure of the initially chosen locators" issue
that we talked about. I think it was Daniel who brought up the need
for a "second shim" that sits between the application and the
transport protocol that could handle this need.
I think that makes a lot of sense. The current shim is all about
keeping ULP sessions flowing within the constraint of keeping the
ULIDs stable. But in a single packet interaction there is no need to
keep ULIDs "stable": you can just try different source/dest addresses
and retry the transaction until it works.
I think the current presumption is that the application itself would
do this. However, for what the shim as it is now _does_ do, the idea
is that the shim's activities are completely hidden from applications
and ULPs. So it makes sense to consider the possibilities of allowing
current applications using current APIs to survive initial failures.
I'm not talking about single packet UDP stuff anymore: for our
purposes, a TCP connection establishment is pretty much also an
exchange of a handful of packets. It's only after the session
establishes and the application starts sending/receiving data that TCP
and the like are constrained by the requirement that the addresses
remain stable. However, at this point the shim as currently intended
can take over so that's not a problem.
It would work as follows. The "second shim" intercepts session
establishement requests (bind(), connect() and the like) along with
the sending of UDP packets (sendto(), sendmsg()). The second shim then
first tries the requested action using the addresses supplied by the
application and/or RFC 3484 address selection mechanisms. When this
action times out, the second shim looks up additional addresses (see
below) and tries all source/dest combinations until something works.
At that point the whole thing is handed back to the calling
application and the second shim gets out of the way.
First of all, i think it is important to exactly identify the scenario
that we are considering. I can see two scenarios here:
- Scenario 1: the host that is initiating the communication supports
some multihoming specific mechanisms but the peer is just a legacy IPv6
host (no special multihoming support)
- Scenario 2: both hosts involved in the communication support
multihoming specific mechanisms (like the second shim that you are
talking about)
In scenario 1, the ULID and the locator used for the communication need
to be the same since the peer does not support the translation, so,
using a different ULID that the locator used would break things.
In this case, what we need would be the upgraded RFC3484 which would
allow to cycle through different source addresses.
However, i would like to note some part of RFC3484:
The application might also specify a source address
with bind(), but often the source address is left unspecified.
Therefore the network layer does often choose a source address from
several alternatives.
...
Separately, the IPv6 network layer will use the source address
selection algorithm when an application or upper-layer has not
specified a source address.
So this basically says that in very common scenarios, is actually the
IP layer that selects the source address. In this case, then it would
be possible to build additional mechanisms within the IP layer that
when a packet with unspecified source address is received, it tries
different source addresses and uses the one that seems to be working
(we still need to understand what does "seems to be working means
though..)
I mean, that updated RFC3484 could provide enhanced mechanisms to
perform source address selection when the application leaves the source
address unspecified, that would allow to try multiple source addresses
Perhaps this mechanisms would also work for legacy hosts (hosts that
don't support the updated RFC3484) sicne it will only require support
from the initiating host, that should try multiple source addresses
This behavior would be transparent for ulp as long as they don't
specify the source address. If the source address is specified, then
the app should cycle through different source and destination
addresses. This seems to be coherent with the fact that the app is
specifying the source address
In the second scenario, is what i understood that we called API on
steroids in the interim meeting, where the app asks to connect with a
given ulid and the shim will ask the resolver for the additional
addresses that the resolver obtained for that particular query, and
tries to connect using different locators, but keeping the same ULID.
This would cope with some failures but we need to keep in mind that
different addresses associated with a given FQDN may belong to
different hosts. this means that the shim needs to ask if the
alternative locator used belongs to the same host that the used ULID
Actually, this is not good as it may seem, because maybe, it is
possible that there are no working locators for that particular ULID,
but that other addresses that are asociated with the same FQDN but that
belong to a different host (hence cannot be used as locatros for the
selected ULID) are working
In this case, it would be the application that needs to retry with a
different ULID; but in this case, the shim could inform about which
ulid to try first since it already knows which ones are working.
So, as we talked in the interim meeting, i guess that what is needed is:
- Updated RFC3484 to deal with legacy hosts and to cope with apps that
left the source address unspecified
- API on steroids, to deal with apps that want to keep the ulid fixed
- signaling from the shim to the ulp so that when the ulid selected is
not working, information about which combinatiosn are working is passed
regards, marcelo
- References:
- Second shim
- From: Iljitsch van Beijnum <iljitsch@muada.com>