I read some documents about WebRTC nat traversal. I see that if one of the peers is behind a symmetric NAT, then a TURN server has to be used.

I am wondering why shouldn't protocol allow traversal when at least one of the clients has public IP or asymmetric NAT?

From what I'm reading, the problem is establishing the connection between one peer and the peer with symmetric NAT. Then can't client behind symmetric nat connect to the other client? If sharing same UDP stream for bi-directional media is not possible/allowed, then why not the peer behind symmetric NAT create 2 or more connections, as many as needed for all media streams?


The problem with WebRTC is not that packets reach or not to their destinations but that if no traversal methods are used, data in payloads of IP packets are not correct. SDP data, for example, have fields that include IP addresses and ports that are only valid in a local context, that's to say, in the LAN behind the NAT. NAT devices are able to change IP headers but, in general, they cannot change the payloads of application protocols

That's why WebRTC supports NAT traversal methods through standard protocols (STUN, TURN and ICE in top of them). You have mentioned symmetric NAT. When you use that type of NAT, STUN does not work, and you should have a TURN server.

  • 1
    This is interesting. Thank you. I read it as though there is no inherent problem in creating a system that doesn't require STUN in such configuration but just the protocol is not designed in such a way (well enough). – akostadinov Oct 30 '17 at 7:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.