Creating a low-latency high-availability network for voice calls
whispersystems.org
whispersystems.org
Edit: Yep, they use UDP for the audio: https://github.com/WhisperSystems/RedPhone/wiki/Signaling-Pr...
I'd imagine they're doing the same.
Then two problems will manifest themselves.
1) The client will take long enough to work through the list of servers that the wrong server is chosen simply because the connection is initiated first.
2) This design has all servers seeing all calls. The load represented by all the TCP connections hitting all of the servers will consume more and more of a server.
Neither is a problem you can solve by adding more servers. In fact, they are made worse by adding servers!
However, if you're charging per call, that's what they call a "good problem to have".
Nifty solution to the problem though.
1) Architect your DNS response to include a small sample of the total result set for the region, where the sample includes at least one switch from each micro-region.
2) Break down and introduce load balancers, so that there's on load balancer per micro-region, which fronts all of the switches within that micro-region.
Fortunately an individual switch doesn't really do much (just shovel packets around), so the number of simultaneous calls a switch can handle is high enough that redundancy is more about availability than load.
I was trying to imply that this is not a for-profit project, but you're correct, that's not what a software license communicates.
(i realise this doesn't stop their "fastest first" idea being useful - i got kind of sidetracked by the explanation of how servers are used near the start of the post).
[ah, ok. thanks for the explanation.]
Symmetric NAT means that each tuple of (source_ip, source_port, destination_ip, _destination_port) gets its own unique (external_ip, external_port) tuple. This is bad because it means that STUN is ineffective: your STUN server will see a different external port than what your actual destination would see.
Mobile data networks are actually worse than symmetric NAT. Not only will your external port change based on your target, but your external IP likely will as well.
This makes NAT traversal, AFAIK, basically impossible.
Nice work ...