为了使两个不同NAT后面的两个主机能够建立P2P连接,它们必须拥有彼此的公共端点(地址/端口)。为了让每个主机知道自己的公共端点,它可以与已知的公共服务器通信,该服务器将服务器看到的公共端点返回给主机。见STUN(RFC5389)。
为了使此机制起作用,NAT必须始终将同一个专用端点转换为同一个公共端点,而不管目标端点如何。
实现依赖于这种特定NAT行为的P2P应用程序(即它是否足够常见)是不是一个好主意? Skype和/或其他流行的P2P应用程序是否有其他后备机制?
编辑:它看起来像一个NAT,其中每个目的地选择一个不同的端口称为“对称NAT”。此外,一些对称NAT会增加端口号,从而可以猜测正确的端口。
现在我想问的问题是:大约有多少百分比的NAT是对称NAT,有多少百分比使用随机端口分配而不是增量?
答案 0 :(得分:1)
您可以使用IETF的标准STUN / TURN / ICE协议: http://rtcbits.blogspot.com/2012/10/what-is-ice-interactive-connectivity.html
根据谷歌Gtalk的统计数据,这些机制解决了P2P连接,而不会在92%的情况下转发流量。 https://developers.google.com/talk/libjingle/important_concepts
答案 1 :(得分:-1)
使用ICE。它是STUN服务器和TURN服务器的直接组合!这样,您将获得100%的可靠性,但您只能在服务器上传输15%的流量。