[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: delayed multihoming/mobility set-up
On 14-nov-03, at 0:10, Pekka Savola wrote:
Is it necessary to ensure connection survivability prior to the
connection
establishment?
Or, is it necessary to ensure connection survivability in parallel
with
the connection establishment?
Or even, is it OK to just ensure connection survivability only for
"long-lived" sessions (e.g., those which have lasted for longer than
5
minutes), using some definition.
Ideally, it should be possible to take an identifier, connect to it and
the connection establishes as long as there is a single working
source/destination locator pair. However, if we want to build this, we
need an identfier->locator (and probably also locator->identifier)
mapping infrastructure. At present, nobody seems too thrilled about
either using the DNS for this or building something from scratch. This
approach also has the downside that it's all or nothing: both sides
must implement it and the mapping infrastructure must be in place
before it can work.
The alternative is making improvements to what we have now. One thing
that needs to be solved regardless of what else happens is the whole
source address/exit ISP selection and ingress filtering problem.
Another problem that we can solve on just one end (which makes it
infinitely easier to do) is establishing a connection in the presence
of unreachable destination addresses. This is hardly rocket science, as
very old versions of telnet and FTP already cycle through all IP
addresses associated with a FQDN until they find a live one. Many IPv6
applications do this quite well today (ie, not requiring a very long
TCP connect timeout before trying another address). And on systems that
provide a connectbyname() function call this entire problem can be
solved in the OS rather than in individual applications.
The only thing that we can't possibly solve without involving both ends
is connection survivability. Now obviously we can go back to our ideal
solution as listed above, or we can add some stuff to existing
protocols that makes it possible to repair reachability problems in a
backward compatible manner. The huge advantage here is that there is no
need to determine the type of connection that can be set up beforehand:
just connect and see what happens.
The next step is setting up the multihoming mechanisms. Rather than
exchanging addresses in-band, I think we should limit ourselves to just
announcing an authentication token. This can easily be done with
minimal overhead in a destination option in one of the first packets.
Then the session (including non-TCP "sessions") can proceed as they
would normally in the absense of multihoming mechanisms.
Only when the connection gets stuck because of a a reachability problem
(and the session would normally time out), the multihoming stuff kicks
in. If the session was set up using the DNS, the initiator or client
knows the locator addresses for the other side so it is able to find a
working source/destination locator set. If additional locators aren't
available, then it is still possible to repair most failures by
sticking to the destination locator but jumping to a new source
locator. Obviously, there would have to be some serious negotiating as
the other side doesn't know the packets with the new source addresses
belong to the existing session. This is where the authentication token
comes in, in order to prove that the "new" correspondent is the same as
the previously known one.
To answer your initial question whether it is necessary to protect not
yet established sessions using multihoming mechanisms: in the above
universe this wouldn't be required as the application or OS on the
initiating side knows how to connect to a correspondent with
unreachable locators without employing end-to-end multihoming
mechanisms. But it's probably useful to provide this functionality
anyway if possible to accommodate applications that don't do this
themselves or use system calls that allow the OS to do it.
One additional caveat if we go this route: since the additional
locators aren't available until there is a reachability problem, smart
upper layer protocols don't get to do their thing. I think this can be
solved by adding additional mechanisms that ty in to the core session
survivability mechanisms by allowing the ULP to request adding new
locators to the mix. The multihoming layer then negotiates with the
other side and then reports back to the ULP whether it can use the
requested locators. After that, the ULP can bypass the rewriting that
would normally be done by the mh layer and use its own magic. Note that
the way this is done today in SCTP where the ULP negotiates the
additional addresses itself is probably insecure.