我有3个应用程序:MasterServer,Server和Client。Nat punch,MasterServer/Server/Client。客户端无法通过已知的公共IP和端口与服务器通信
的MasterServer上运行:70.105.155.5:15555
(端口转发的UPnP)
我创建了一个服务器,让MasterServer知道我的存在。 MasterServer保留我的公共IP和端口。 MS获取的端口由我的路由器随机分配(可以说:70.105.155.5:16666)。服务器每10秒保持发送一次MasterServer消息以保持相同的端口打开。
我打开客户端,在其上向服务器请求MasterServer以获取公共IP和端口。 MasterServer返回:70.105.155.5:16666。我知道100%确定服务器的公共端口16666仍然打开,因为我可以在我的日志中检查该端口。
但从Client => Server
发送的所有消息都不会收到。同时服务器仍然通过16666从MasterServer获得消息。
所以这真的令人费解。我忘记了什么吗?我对NAT的理解有缺陷吗?
感谢您的帮助!
关于对称NAT穿越的参考 - 这是关于预测笨拙的NAT上端口分配的内容:http://tools.ietf.org/id/draft-takeda-symmetric-nat-traversal-00.txt –
非常感谢乔治。我猜像COD这样的游戏并没有这些问题,因为服务器总是托管在专用的钻井平台上,而这些平台都有适当的网络设置来处理它。 你知道STUN解决方案是否可靠吗? –
这取决于COD是否发送点对点流量或始终通过服务器路由它。我相信,STUN只是一种服务,它允许通用公共托管服务器告诉连接对等体他们的公共IP /端口对当他们谈论STUN服务器时。所以它只适用于简单的NAT,它可以为相同的私有地址/端口对重复使用相同的公共端口,而不管目的地是什么。 –