Hi Richard, sorry for the slow response.  It works like this:

I use two UDP ports: one for testing, one for live traffic.

With the test port I send a single UDP packet to a central server, 
containing a timeout value.  I think the message was something like:

        PING
        Delay: 1000

The server just holds onto this message as long as requested, and then 
sends it back to the apparent host from which the packet was sent.  If 
the delay is less than the NAT timeout, then it'll get through and the 
client will know "ok, 1000ms is fine", at which time it doubles the 
timeout and tries again.  If the client doesn't get the response on 
time, it concludes that the delay is longer than the NAT timeout, and 
then halves the delay and tries again.  This continues indefinitely, 
which is important because NAT timeouts have a nasty habit of changing 
spontaneously (such as with NAT load).

The whole purpose of this test port is to estimate the NAT timeout by 
gradually ramping up a "safe" estimate until it is no longer safe.

With that in hand, you can use this safe estimate for setting your 
keepalive period with peers: just make sure you send and receive a 
response (either natural through real traffic, or artificial through a 
PING) within that safe window and you're good to go.  To be extra safe, 
I actually have both sides perform this calculation, which is perhaps a 
bit wasteful, but works well enough.

Does that make sense?  What are you using this for?

Good luck!

-david
Follow me at http://twitter.com/quinthar

Richard Price wrote:
> Hello David
> 
> I'm interested in the adaptive algorithm you used to determine 
> keep-alive frequency in iGlide. Unfortunately, I couldn't find any 
> documentation directly about it.
> 
> Here's a little snip-it you posted on the P2P hackers mailing-list a 
> while back which caught my eye. If you've any further information I'd be 
> really interested to read it.
> 
> Kind regards,
> 
> Richard Price.
>> But another entirely separate (and more valuable?) use of keepalives 
>> is to
>> keep NAT mappings alive in a hole-punching scenario.  With iGlance 
>> (which is
>> being presented at CodeCon on Saturday) I use an adaptive approach 
>> where I
>> look for the slowest keepalive frequency that works.  Adaptiveness is
>> critical, as I've seen some NATs that start with 5-second windows, but 
>> grow
>> up to 256-second windows over time.
> 

_______________________________________________
p2p-hackers mailing list
p2p-hackers@lists.zooko.com
http://lists.zooko.com/mailman/listinfo/p2p-hackers

Reply via email to