NAT遍历 - 使用STUN成功的可能性

orc*_*man 4 voip p2p nat stun turn

我正在开发一个P2P应用程序,我需要使用STUN和/或TURN进行NAT遍历.我已经研究了仅使用STUN时出现的问题(基本上它并不总是有效,因为它是基于UDP的,有些防火墙不会那样 - 根据我的问题,原因并不那么有趣),而且我一直在看关于使用STUN和TURN进行回退的建议(ICE方案).

但在我看到的每个地方,我只看到人们STUN"不太可能一直工作".我正在寻找的是一些具体的数字/统计数据.我可能会尝试自己生成它们,但我没有足够的客户端来获取重要的样本.

所以我想知道是否有人可以对使用STUN进行NAT遍历的成功率进行统计.如果我没有使用TURN作为后备,有多少对等点无法连接?

sel*_*bie 5

取决于您的客户是谁,他们在哪里以及他们使用的设备类型(PC与移动设备),结果可能会有所不同.

在实践中(根据我的经验),仅使用STUN的ICE连接在台式机和笔记本电脑上的成功率约为85%.但是,如果它对于特定的一对端点工作一次,那么对于这些​​相同的主机的后续连接将更有可能(假设网络拓扑没有改变).移动设备的情况有所不同.

以下是影响P2P成功"连接"(基于UDP或TCP)的一些因素.

  1. NAT类型.如果两个端点都是表现良好的"端口受限"NAT或更好的,那么使用STUN成功的可能性很高.对于具有良好ISP(例如美国的ISP)的家庭NAT,这是通常的情况.但是,由于具有多层NAT和网络配置,移动运营商和企业防火墙通常实现"对称NAT".这基本上意味着端口映射不一致 - 并且像ICE这样的P2P算法更难建立连接.

  2. 防火墙或企业配置.即使防火墙允许出站UDP数据包并接受数据包,它通常也是对称的NAT配置.

  3. 移动运营商.通常(但不总是)对称NAT类型.