我想在一個軟件來實現打洞功能。 問題是,我正在用一個已經制作好的TCP服務器來與用戶進行通信。UDP打洞不打算通過對3G
這是我到目前爲止有:
- 「A」 發送消息到UDP服務器 「US」(在端口9333)
- 「US」 發回 「A」 的端口它已連接到(端口31000 - localport 31005)
- 「A」向TCP服務器「TS」發送消息,表示他想連接到B(並給端口31000)
- 「TS」發送消息給「B」 給他 「A」 的端口(31000)和IP
- 「B」 發送messag e到「US」(端口9333)
- 「US」向B發送一條消息告訴他他的端口45000(localport 45005)
- 「B」發送消息給「TS」,給出udp端口45000)
- 「TS」 將消息發送到 「A」 給B的UDP端口(45000)和IP
- 「A」 開始的端口45000發送的UDP消息發送到B的IP和偵聽將localPort 31005
- 「B 「開始發送udp消息到端口31000上的A的ip,並監聽本地端口45005
當然,端口31000,例如,31005,45000和45005就是這樣的,每個新的連接端口改變,只有9333是靜態的。
我知道有很多回往復的,比它確實應該。 事實是我一定要使用TCP服務器與兩個用戶進行溝通,UDP服務器只是這裏返回用戶端口自己,因此可以將其發送回TCP服務器。
但是用戶之間的消息不被任何接收... 任何人都會有一個想法,爲什麼?
編輯:
我過我的路由器http://nattest.net.in.tum.de/test.php和UDP打孔工作正常,所以問題沒有從我的路由器來,但是從我的協議...
當用戶在同一個NAT後面時,一切正常,當然它使用私有ip,但它意味着代碼也在工作,所以每個雖然導致協議問題...
編輯2:
其實,我做了一半的工作(而問題是從我的代碼來實際,而不是協議......我已連接用戶,一個在3G與iPhone,一個在我的Wifi後面。
有趣(以及沒那麼多)的是,只有一個插座都能夠接收和兩個用戶之間發送數據。 (由iPhone發起的套接字)根據協議,我應該有2個連接良好的套接字,我錯了嗎?
所以我設法在我的NAT中打出一個洞,但實際上不是在蜂窩NAT中。
當然,我測試了2個連接3G的iPhone。沒有人從另一方得到消息。
我錯過了關於蜂窩NAT的一些信息嗎?
P.S. :對不起,我更新了這麼多問題,但是因爲我沒有得到答案,所以我試圖自己找...
P.S. 2:因爲我設法猛擊我的NAT一個洞,我已經改變了標題添加「上3G」
編輯3:我通過我的iPhone的連接到互聯網我的電腦再次運行http://nattest.net.in.tum.de/test.php測試3G連接。
這裏的結果:
顯然所有UDP打洞測試是成功的9號測試。
進一步看來:
UDP結合試驗(?):端點獨立綁定,端口預測是很容易
所以它不應該是連接2周的同行通過3G連接任何麻煩(當然比不了多少在「家庭」NAT後面)...我是對的嗎?
編輯4:
只是可以肯定,我現在將消息發送給兩個不同的UDP服務器,以檢查端口和本地端口是在3G相同。
長話短說,端口(本地和公共)在兩臺服務器上連接時都是相同的。所以在編輯2上完成的測試是正確的,udp是端點獨立的,所以不應該有任何問題做我打洞我猜...(至少與我的ISP)
3G NAT是對稱和大規模。請嘗試使用這種衝孔方法:https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing – 2015-08-14 17:10:19
+ I for http://nattest.net.in.tum.de/test.php我很長一段時間以來一直在尋找這樣的服務。 –