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

Re: Comments on draft-ietf-multi6-v4-multihoming-02



On 14-nov-04, at 4:29, Joe Touch wrote:

But how do you know a session is completely idle vs there is still a delayed ack coming? (Without looking too deep into TCP, that is.)

Delayed ACKs come within 200ms of the other end going idle, AFAIR.

Ok. But then we have to account for normal packet loss and normal RTT variations.


(Note that is makes little difference whether you use persistent connections: we work at the IP layer.)

Persistent connections are the kind of TCP connections that might go idle for extended periods;

Actually I believe they are closed after a relatively short time when they aren't used. And very few sessions use persistent connections last time I checked.


most other TCP connections tend to either be sending data or be closed quickly.

A better example of sessions that remain open long even if they're idle are SSH sessions.


The trick is detecting legitimate idleness because in that state no action is necessary. For TCP this shouldn't be too hard, for other protocols we have to find good timeout values. I think these need to be higher than just a few RTTs.

Such as? I was thinking 300ms-500ms as a ballpark.

I was thinking along the lines of 10 - 15 seconds for non-TCP stuff. I heaven't really looked in detail, but I'm pretty sure transports for AV streaming don't generate ACKs every 500 ms.


Alternatively, this could be made to auto-tune.

Note though that if you select value X for this and ACKs are sent every 1.1*X interval, you'll be sending test packets every X. With a larger X this is less likely to happen, but also results in less unnecessary traffic if it does.

Hm, my assumption was that after a successful test, there wouldn't be any more tests until something changes.

That presumes async notification from the lower layer. I wasn't, since I don't believe that's feasible.

I.e., I would expect:
	- seeing packets exchanged is an in-band test that can be
	  observed and serves as a keep-alive itself
	- send keepalives for the first 500ms after idle
	- stop sending keepalives after that

I think we're in agreement exept for the interval and the fact that you use plural while I'd think a single successful exchange would be enough. :-)


Since we don't do anything when the session is active in both directions or completely idle, reachability tests only happen after a suspicious active->idle transition. After the test, the multihoming layer would be satisfied that this transition wasn't because of a failure, and wouldn't have to do anything until there is a new active->idle transition.

I'd like it to do something - to keep verifying that reachability is still possible for exactly the period that an idle TCP 'expects' there not to be a substantial change in the channel.

Wouldn't an outage happening right after a session goes idle and a keepalive has been exchanged be such a corner case that we can safely ignore it as a special case?