如果两个 WebRTC 代理之间的连接成功,NAT 有两个属性影响。这些属性是filtering
和mapping
。
当您将数据包发送到 NAT 之外的地址时,您会创建一个mapping
. 映射是你的IP:Port
,人们通常称之为你的Public IP
。这是Public IP
其他人可以发送的。STUN 服务器只是一个响应您的映射的回显服务器。
第一种映射类型是Address Independent
NAT。这是你想要的。mapping
在此配置中,您每次联系 NAT 外的 IP时都会重复使用。您可以将您的信息分mapping
发给远程同行,他们可以发送给您。
第二种映射类型是Address Dependent
. 在此配置中,您mapping
为每个远程地址创建一个新地址。这意味着您从 STUN 服务器返回的 IP/端口不能被其他对等方使用。在这种情况下,您可能必须使用 TURN 服务器。
filtering
控制谁被允许发送。一些 NAT 允许任何人发送流量。类似的mapping
行为称为Address Independent
. 其他 NAT 仅允许某人发送您尝试联系的流量,称为Address Dependent
NAT。
查看WebRTC 的 Curious's Connecting Chapter我试图更深入地解释这一点。Pion 还有一个工具stun-nat-behavior可以像这样打印出 NAT 的详细信息。
connecting to STUN server: stun.voip.blackberry.com:3478
=> NAT mapping behavior: endpoint independent
=> NAT filtering behavior: address and port dependent