我有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,它可以爲相同的私有地址/端口對重複使用相同的公共端口,而不管目的地是什麼。 –