我在寫一個P2P應用程序。同行們定期ping主服務器來更新他們當前的IP /端口,所以當對方想要到達另一個服務器時,它可以向服務器詢問這些信息。現在,同行使用UPnP將NAT(用於經典家庭設置)配置爲可從外部訪問。NAT翻譯不能從網絡內部工作(髮夾狀態)
所以一切正常,當同行的客戶端試圖到達另一個(或相同)等的服務器,除了兩者是相同的NAT後面。 由於在這種情況下,客戶端試圖從NAT後面到達自己的「外部」(公共)IP地址,NAT不會執行端口轉發,也無法路由IP數據包。
現在我正在考慮兩種解決方案:
- 查詢可以與UPnP的NAT,看看哪個本地IP端口轉發
- 店主服務器上的同行的內部IP
你能想到其他解決方案?主流P2P應用實施哪些策略來解決這個問題?
謝謝,我不知道那裏有個名字。 a),b)和f)在我的情況下不起作用(我不控制路由器,並且有太多數據要傳輸),所以我可能必須堅持其中3個,或者可能所有這些......在d)中,你的意思是「端口」而不是「IP地址」? – 2011-05-20 10:53:18
關於d),它是端口和多播地址(兩者)。 – JVerstry 2011-05-20 15:44:40
如果這是你的網絡,你可能想避免髮夾,並使用拆分DNS。但問題是軟件作者可以做些什麼來緩解這個問題。 – 2017-04-27 07:53:23