tandem
tandem copied to clipboard
NAT traversal using hole punching
- [x] Build experimental hole punching proof-of-concept server + client just to see if we can exchange packets via UDP
- [x] Switch the agent's transport over to UDP
- [x] Build the tandem server to facilitate setting up sessions and for rendezvous
- [x] Modify the agent to communicate with the tandem server
- [x] Stretch goal: Allow set up of a session with multiple participants
- [ ] Add interagent keep alive messages
- [ ] Add a rendezvous <-> agent heartbeat message
@geoffxy Do we have to use UDP? I read through the abstract + intro of the paper you linked in Slack. It seems that although the % of networks that allow hole punching through TCP is lower, it is still possible. TCP guarantees reliability so we won't have to worry too much about network issues afterwards.
We'd need to test out TCP hole punching to see how reliable it is. It seems like UDP hole punching is what works most frequently, which would be more useful to us in establishing the connections. Though if we can get TCP hole punching working reliably it would probably be less work on the agent's side in terms of not having to switch the transport and not having to think too much about message size.
From this, it looks like UDP's reliability isn't that bad though. http://openmymind.net/How-Unreliable-Is-UDP/ The CRDT should be resilient to reordering. The only problem will be inconsistencies due to lost messages.
@typeintandem/lightly I think we can close this and move the keep-alive messages to a non-launch blocking issue.
Moving everything in here over to Milestone 5 for housekeeping, closing down Milestone 3.