Hi Sim,

I've found an interesting Draft itef spec that discusses all the issues we've just been considering, they call it ICE.

Terms:

   * ICE Interactive Connectivity Establishment
   * TURN Traversal Using Relay Nat
   * STUN Session Traversal Utilities for NAT

Links:

  1. http://code.google.com/apis/talk/libjingle/index.html --  Google
     code has a c++ ICE implementation with a BSD license.
  2. http://www.isoc.org/tools/blogs/ietfjournal/?p=117  - good
     overview & history
  3. http://tools.ietf.org/html/draft-ietf-mmusic-ice-tcp-08
  4. http://tools.ietf.org/html/rfc4091
  5. http://tools.ietf.org/html/draft-ietf-behave-turn-16  --  This one
     is most relevant to us to begin with.
  6. http://natblaster.sourceforge.net/paper/natblaster.pdf  --
     techniques for traversing NAT with TCP peer to peer. includes a c
     implementation.

It looks like the relay is the most reliable but the least scalable option, the standard everyone seems to be working toward is try to obtain a peer to peer NAT traversal first, using the relay to assist opening the connection, then fall back on the relay if it fails. Items 5 and 6 appear most relevant as these allow TLS connections. However given our resources, we should get a working relay before we worry about the p2p TCP too much.

The perl code mentioned earlier uses what is termed STUN, utilising UDP, it is not effective on corporate NAT's where UDP is typically blocked

Here's an interesting video from a Yahoo Engineer:

http://www.youtube.com/watch?v=9MWYw0fltr0&eurl=http%3A%2F%2Fwww.voip-news.com%2Ffeature%2Ftop-voip-videos-051707%2F

Let me know what you think.

Cheers,

Peter.


Sim IJskes - QCG wrote:
Peter Firmstone wrote:
This is not needed, a connection to a JR is on a polling basis, initiated from the service (acting as a client from an RPC perspective). (think XMPP, XEP-0124 BOSH).
Ok, so if it doesn't poll (empty packet) within a certain time, it's lease expires?

Ah. Thats a good one. Probably. The expectance is, that the device immediately starts another poll after retrieving a result. But if there are processing constraints / connection interruptions and this cannot be met, it should not be fatal. After a timeout, the relay should stop. Or maybe after having a filled (not full) queue for a certain timeout. Depending on the trust (or deployment decision) between server and relay the relay could offer a receive queue with a depth of more then 0. And to the client of de service-over-relay the takedown-rebuild cycle should be transparant.

Gr. Sim


Reply via email to