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

Re: about reachability detection draft



On 17-aug-2005, at 16:24, marcelo bagnulo braun wrote:

Suppose that A is communicating with B
Suppose that we are using FBD so that a given frequency of packets (data or just signaling) is guaranteed by the shim in each direction

Suppose now that A stops receiving packets. This implies a failure in the B->A path.

Yes. (Assuming that A is still sending, if not the session could simply be idle.)


Now are you assuming that when A stops receiving packets A should try with alternative paths?
I am not sure this is good approach, since the path A->B may be working properly.. moreover, maybe this path A->B is the only one working.

There are three possible actions:

1. Do a "lightweight" reachability test using the currently used locator pairs for both directions.
2. Start a full reachability evaluation procedure that will look at all locator pairs until it finds one that works.
3. Switch to a new address pair.


I think 3. is the wrong thing to do. Most importantly, because if one pair fails it's very likely that at least some other pairs also fail, so jumping to a new address pair blindly makes little sense. Also, in order to be able to do this, we must have previously authenticated the alternative address for the correspondent (or the correspondent for our alternative address) to avoid redirection attacks. So this basically means authenticating all possible addresses for both sides when the shim state is created. That's a waste of resources.

1. may make sense, but if we know there should be packets flowing in both directions but they're missing in one direction, it's very unlikely that the current address pair is still working. We should probably still test it, but I think we should also start looking at the first secondary address pair because it's likely that the currently used pair is dead. So that lands us at 2.

As i see the FBD mechanism would be the following:

A and B are communicating
they are using FBD
A stops receiving packets

So, A informs B that the B->A path has failed (this implies some form of signaling from A to B, which is likely to be required to be somehow reliable, which is why i see a potential difficulty here)

The way I see it, A just starts a path exploration procedure. This means it will try address pairs until it gets an answer from B, so unless the path from A to B is completely broken at some point B will see a path exploration packet from A, which indicates to B that there is probably something wrong, so B would start doing its own path exploration.


A continues using the path from A->B while B starts exploring alternative paths

Right. You don't throw away your old shoes until you have new ones. Maybe the failure is temporary, so keep sending packets makes sense. And it's also the simplest thing to do. :-)


So you think that we need one packet type for periodic keepalives for failure detection and another type of packet for exploring alternative paths?

Yes. Assuming we go with the forced bidirectional thing, in the event that there is traffic from A to B, but no traffic from B to A, B needs to generate a packet anyway in order to let A know that everything is still working. Since A presumably monitors all packet types, the nature of this packet is of no importance. It could even be an IP header without any payload.


But for the full reachability evaluation we need lots of extra stuff.

So it makes sense to have this in different packet types, especially since the simple filler packets will probably be the most common.

I am not sure about this since when two different unidirectional paths are being used for a communication then the keepalive packet will need to carry information about the locator pair used for incoming packets.

Not sure what you mean.

I mean, consider that a and Bare communicating, but they are using two different unidirectional paths i.e. A->B is using locators A1 and B2, while B->A is using locators A2 and B2

In this case when A sends a reachabilitity test request to B it will use A1 and B1. However, when B replies, it will use B2 and A2,

Yes. Why would that be a problem?

so i guess it would a good idea to include in this reply packet information about the address used for the request packet i.e. A1 and B1

No, don't get the problem...

And we need a reasonable level of authentication too, because we haven't previously established that these addresses indeed belong to the correspondent.

I am not sure what is the level of security we need here yet, but in any case imho it will be very related to the security used during the shim context establishment.

I mean, imho the critical part of the security if the addition of new locators to the locator set. Once the locators have been validated, using them shouldn't require to tight security requirements imho

Agree, but on the other hand we don't want to give attackers the capability to make hosts think there are reachability problems, especially attackers that aren't able to sniff any of the setup traffic. So something simple like the TCP sequence number or the IPsec replay counter would be useful here.


On the other hand, when A1 <-> B1 is working happily, there is no need to use such a complex protocol: we are only testing one pair in each direction, and the correspondent has been authenticated earlier. If we wanted we could even use pings to determine whether this still works. (Well, sort of...)

But as i see it, we are only going to try locators that are included in the locator set available for that shim context, which means that they have already been validated....

Since we need to test them for reachability right before we use them anyway, I tink it makes more sense to defer this validation until that time.


Deprecation is irrelevant, as we can continue to use deprecated addresses.

Well, deprecation means that somewhere in the near future, the address won't be available anymore, right?

Right, so we keep using it until it's not available anymore. :-)

So i guess it make sense to keep on using it as ULID, but i wonder if it wouldn't be a good strategy to try to rehome the ongoing communications to an alternative locator...?

Are there any bad side effects when using deprecated addresses?

A more interesting case is when an address is removed from the system. I don't remember which session it was, but in Paris someone was talking about how systems keep using addresses they no longer have because upper layers still use those addresses.

well, in the shim this address should be kept as a possible ULID but not as a valid locator i guess

Yes, it makes sense to keep addresses as ULIDs for a while after they've become unavailable. On the other hand, in theory the address could be assigned to someone else so we problably want to limit this.


On the other hand, if the address is an HBA address, presumably nobody else would be able to use it (certainly not as a ULID, only possibly as an RFC 3041 semi-collision), so there is no harm in keeping it around as a ULID.

IMO this is a feature: if I unplug my ethernet from my powerbook and turn on my wifi, I get the same address on a different interface and my sessions are still alive. Under windows, things like this kill your sessions immediately.

in this case i guess that this address should be:
- kept as a ULID during all the time
- should be removed from the locator set during the period which the address was not available (i.e. during the time it took to remove it from the ethernet and it is back in the wifi)

Maybe we should keep using the ULID as long as there is shim state that refers to it, but it's removed when the shim state that uses the ULID is removed.


The way I see it there is an ordered list of address pairs. The more probes fail to make it to the other side the lower the address pair ends up on the list, I imagine. :-)

but what happens when you only have 2 address paris for instance? you may end up trying with the same two address pairs forever... I mean, i guess we need a mechanism to give up trying, right?

Hm, maybe, maybe not... How does this work for current IP?

I guess that while the shim is still trying to move the session to a different address pair, we should block ICMP errors and such so the application won't give up, but when the shim can't find a working address pair, we should pass on the ICMP errors to the upper layer. At the same time, I'm not sure if we should ever really give up as long as upper layers keep sending traffic: connectivity can come back at any time.

We need to think about the situation where a fast primary link fails and we switch to a slow backup, though. Presumably, we'll want to switch back to the fast primary address pair when possible.

Right, the same arguments may apply for other reasons like cost of the link, security/privacy features of the path... But the question is how does the shim is aware of such information? i guess that these are policy issues and we could include some means to express this type of considerations in the shim

Right. For destination addresses and to some degree, source addresses, this can work through the RFC 3484 policy table, but it gets more difficult when we have to select an output interface or ISP/ site exit, possibly though the source address in the packet.