2011-02-23 70 views
0

嘿,我正在開發一個項目,以在java中創建一個p2p網絡。 我已經使用UDP爲本地局域網構建了無線局域網,並且我正在致力於通過互聯網發送UDP數據包的 。我遇到了這個叫做UDP打孔的概念,但似乎找不到任何相關的主題或庫。 任何人都可以請幫忙嗎?需要幫助進行udp打孔

+2

有[關於TCP/UDP打孔我讀過的最好的文章](http://www.brynosaurus.com/pub/net/p2pnat/)。 – 2011-02-23 09:44:16

回答

1

我認爲這就是通常所說的NAT punch-through。也許你會用這個頭銜搜索更多的運氣。

0

您不能在inetrnet上進行UDP廣播/多播。但是,您可以通過互聯網傳遞TCP。

我建議你嘗試的是讓網絡上的網關監聽你選擇的UDP數據包,將數據通過TCP傳遞給另一個網絡上的另一個網關,這可以將這些信息轉換回UDP。

0

您可能正在尋找uPnP的NAT穿越設施。許多消費者路由器支持以編程方式打開整個防火牆並轉發任何需要的應用程序的端口。或蠕蟲。無論哪種方式。 :)

1

這裏是UDP(或TCP)打孔一些強烈推薦技術材料:

http://www.usenix.org/events/usenix05/tech/general/full_papers/ford/ford_html/

或者,當然了,維基百科:

http://en.wikipedia.org/wiki/UDP_hole_punching

從本質上講,因爲大多數電腦在所謂的網絡地址轉換器(NAT)後面,您將需要使用計算機公共IP和公共端口作爲互聯網上的某個人看到它們。此外,您將需要專用IP和專用端口(或者應用程序本身可以看到它的套接字......這是爲了防止您與其他正在嘗試連接的應用程序/計算機/節點位於相同的NAT後面)。然後,兩個節點嘗試通過嘗試公共和私人地址建立連接。當這兩個應用程序建立聯繫時,他們已經成功地穿越了NAT - 他們已經成功地進行了穿孔。

這樣做的一個流行方式是讓兩個客戶端連接到一個服務器,以協助兩個客戶端的協調。它協調將公共和私有IP和端口發送給另一個客戶,然後他們用它來執行「打孔」。

此外,顯然使用UDP協議,因爲它比TCP(經驗上)更成功。注:我試圖找到有關的統計數據,但沒有成功。