2011-03-31 101 views
4

我正在嘗試學習一些P2P /分佈式網絡的來龍去脈。我的問題如下。假設我有兩臺名爲comp1和comp2的機器。現在,comp1被安裝在路由器後面的家庭網絡中,comp2位於我的辦公室,也位於路由器後面。我是否可以像這樣在互聯網上來回發送UDP數據包,當然假設端口已正確轉發?爲了提供更多關於我正在調查的內容的信息,我試圖找出新節點如何在不使用中央服務器的情況下發現現有節點。通過互聯網發送UDP數據包

謝謝!

+0

是的,這是可能的。你在用什麼編程語言? – 2011-03-31 16:48:14

+0

目前,我正在使用python,但我願意在需要時進行更改。 – cskwrd 2011-03-31 17:34:12

回答

3

假設,正如你所說的端口正確轉發,你可以發送UDP數據包到路由器後面的2個客戶端。

在本地Intranet上檢測客戶端的好方法可能是使用多播,但是這並沒有廣泛支持ISP(至少在英國),因此不能被依賴。組播被許多設備發現的平臺如mDNS(使用inApple的Bonjour)

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

(它主要的工作原理是客戶訂閱組,然後將消息發送到該組)

我想在互聯網上發現新客戶的最好方法是讓一個新客戶聯繫的服務器讓它知道他們存在,然後中央服務器會告訴所有其他客戶關於你。這在例如現代戰爭2等P2P遊戲中使用,並且這是「跟蹤者」在BitTorrent協議中所做的。

這不是完全分散的,但它可能是最容易實現的,也是最可靠的。

1

要添加到Dotmister的迴應,如果端口不正確轉發(例如路由器沒有靜態配置爲轉發端口),您將不得不尋找類似UDP hole punching。無論哪種方式,爲了發現一個沒有某種中央服務器的新節點,你必須依賴某種多播。