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

Re: failure detection



On Thu, 18 Aug 2005, marcelo bagnulo braun wrote:

Hi Paul,

My understanding is that you seem to be uncomfortable with the fact that n^2 probes may be needed when we try with different source and destination locators, right?

If needed == MUST or SHOULD, then not uncomfortable but vehemently opposed. It's not needed at all imho.


My reason for this particularly is because I fear this will risk precluding (*better*) mechanisms external to shim6 for detecting failures.

Suppose you have a multihomed site with ISPA and ISPB and that they have assigned PrefA and PrefB respectivelly

Suppose you have Host1 in the multihomed host and that it is communicating with Host2 outside the multihomed site. For that communication, Host1 is using address PrefA:host1 both as locator and as ULID. I assume that host2 has a single address host1

Is host2 shim-aware? It must be for scenario in next sentence to work. Particularly given RPF filtering at ISPs on "PA" customers.


Now, suppose that an outage in the link between the multihomed site and ISPA occurs.

Ok.

Host1 detects and needs to do something about it, how can he try with an alternative path?

Why must host1 detect this? Host2 could also ;).

If, as part of shim6 control, host1 had, /in advance/, informed host2 that prefB:host1 was /also/ a valid locator, then:

- if host2 was first to detect the problem, it could simply switch to
  using the prefB:host1 locator

- if host1 notices there is a problem with bidirectional
  communication, it can simply start using the PrefB based locator
  (which host2 already knows about and should accept)

This presumes host1 is actively managing its source address according to state specific to shim6. However, there is a *better* way:

- dont have shim6 pick the ISP dependent part of the locator
- let the OS's existing SAS mechanisms pick the source address
  according to routing policy, as per normal, for each and every
  packet
- let some external mechanism detect the local failure

Some (non-exhaustive) examples of such mechanisms:

- link status information

(eg PPP has its own heartbeat mechanism. PPP is often used for DSL connections, which will be a common case for the scenario described above for host1, today at least)

- Routing information

(eg, host1 /could/ get routing information from either or both of ISP1 and ISP2. Be it just a RIP default announced regularly on up to full *read-only* BGP feeds)

- Link probing / dead-gateway detection software

(At least one OS provides software to actively probe gateways and adjust routes as/when required)

- Well-known remote host probing software

And so on.

So, I'm not sure shim6 is at all the best place to take on detection of /local/ failures.

Ie, in your scenario above, what I'm saying is:

- Shim6 on host1 doesnt and shouldn't be involved in detecting local
  failures

- Only host2 needs to know and detect whether it must use PrefA or
  PrefB based locator for host1.

Ie, this should all be about reachability of the *remote* locator. Which local locator to use should simply *not* be in scope for shim6 - then things get easier, and you can avail of one or more existing mechanisms for detecting local failures.

Well, it needs to retry using an alternative source address,

Indeed, but as per above, let /something else/ figure out which local path (and hence which source) is the best to use.


so that packets can be routed through ISPB (in the outgoing direction this is due to ingress filtering compatibility and in the incoming direction becuase of the usage of PA addressing)

The keyword here is "routed", of (to paraphrase) the local output to take. That implies routing, that implies (to my mind) "Not shim6's job".


What shim6 /does/ need to concern itself with is which /remote/ locator address it needs to use.

This implies that when a host within a multihomed site needs to try alternative paths, it needs to use different source addreses, and of course different destiantion addresses in a more general scenario.

This implies that in order to explore all the possible paths, we need to make n^2 probes.

Yes, if you refuse to consider the option of leaving SAS to something else (a wealth of mechanisms exist /already/), then you'll become convinced you need n^2 probes. :)


Now, it is important to realize that n^2 is just an upper bound, and that n^2 probes will only be performed when all paths have failed except one and this is the last one you have tried with

Even better is to realise that local address selection simply does not need to be something shim6 has to concern itself with. Then the number of probes, in the worst case, goes down to n, where n is the number of locators you have to hand for the remote shim6.


Don't forget, n^2 is per side. Each side will have to have to do it.
So you're looking at, worst case, for host1 with n locators and host2 with y locators, by my potentially incorrect algebra:


shim6 doing SAS and probing each side:

	y^2 + n^2

In the worse case, both y and n tend to infinity, so generally n = y, so the worst case therefore is:

	2*n^2

as n and y -> infinity.

If you figure out that the local source to use is better left to other, existing, mechanisms, and only probe the remote side, worst case is:

	n + y

similar to above, this worst case will tend towards:

	2n

as n->infinity, y->infinity.

O(n^2) scaling is horrid, it causes big performance problems even with relatively low orders of N. Be it in run-time or space. (Eg, you may have to keep state for those probes. Imagine a shim6 'translator' shimming for a big network, or a tiny little embedded consumer device, eg a DSL/802.11 gateway device).

I strongly urge n^2 probing to /not/ be considered, to instead examine possibility to *not* do SAS in shim6. It just simplifies everything, allows *better* mechanisms (like routing, PPP link-status, etc.) to do their job, and scales linearly.

(which may occur very often according to Murphy's law :-)

I live in Ireland, so I run into Murphy a lot ;).

One of the main concerns of the people designing this mechanisms is how to achieve clever mechanisms to reduce as much as possible the number of probes. The idea is not to send the n^2 probes at once, but to perform some form of exploration phases in which different combinations are tried.

How about considering /not/ doing SAS in shim6 at all? For the reasons I describe above? :)


Even simpler.

sure, n^2 is just the worst case

My initial thoughts, as above, simply is that it is not required. We can get linear scaling if we just drop the desire for shim6 to do SAS. :)


no, i am saying that source address selection is influenced by RFC3484 policy table and that this table is the right place to express policy.

Agreed.

In addition, that SHIM can honor this table as much as possible, so that policy can be expressed when using the shim

Disagree. Shim6 shouldn't know /anything/ about this table. SAS shouldn't be its concern in the first place, imho.


no, shim can try to use first the addresses as expressed in the policy table

That's great, but you have 0 idea whether its the right address.

Determining the right address involves:

- route lookup on the destination to find the local output
- lookup source for this output

Shim6 /could/ do this, but on the other hand it could just leave the local address in packets sent down the stack as unspecified, and the OS will just do it for shim6.

What is the benefit for shim6 to do this, that it MUST? (It doesn't need to. Any such optimisations are purely implementation specific).

Ergo: No need for SAS in shim6.

No, shim will try to honor the policy table (or any other tool to express policy we need to define) Obviously, if the path preffered by the policy is not available, then shim will have to use others of course

See, there's an existing way to send a packet to a remote host and have the source be set appropriately for the preferred path - don't specify the source address...


No complications needed.

That's entirely scaleable and well within reason for deployment at 'enterprise' shim6 sites.


agree, but this is not enough to preserve established communications

Why exactly?

Are you considering the case that full BGP feed is injected to the hosts, so that the hosts can find out which path is available towards its final destination?

Well, in a BGP fed and shimmed network, I would imagine the shimming would be done just on one or two hosts (or routers) at the edge of the shimmed network. The BGP feed would be confined to those.


As far as I know, the ULID and shimming host need not be same machine, is my understanding correct?

when i said that is not specific i meant that other protocols may require similar procedures, but it is a key component of the shim protocol, so that is why it needs to be performed.

I dont think it needs to be, imho.

can you expand on that?

I'll try to write down my thought on a specific mechanism. It's been forming as part of these discussions.


As i pointed out in the example above, different source/destiantion address combinations are required to deal with failures in the edges (i.e. ISP - multihomed site links)

Yep. And how to do that tends to be described in routing tables :) (Of which, in many implementations, the source-address-selection policy is also described).


I'll try write down my thought on a specific mechanism in a seperate mail/doc. Bit busy this week though.

regards,
--
Paul Jakma	paul@clubi.ie	paul@jakma.org	Key ID: 64A2FF6A
Fortune:
We don't really understand it, so we'll give it to the programmers.