2013-04-11 21 views
4

我想在互聯網上創建一個P2P應用程序。什麼是最好的,或者如果都不存在一個足夠好的方式來自動發現分散網絡中的其他節點?P2P應用中的自動發現

+0

順便說一下,你會發現這個問題很可能會被視爲「太漫談」。瀏覽_Related_側邊欄(' - >')中的問題,並下載一些開源的東西,看看他們是如何做到的。 Java有JXTA,但是我聽說它已經被放棄了一段時間,並且非常複雜 - 如果你不介意鑽研複雜的東西,可能仍然值得一看。 – halfer 2013-04-11 19:20:42

+0

JXTA看起來很有趣 – 2013-04-11 19:22:52

+0

安全性如果節點告訴我有關惡意節點或不存在節點的信息,該怎麼辦? – 2013-04-11 19:24:08

回答

7

從研究上引導的問題GNUnet項目(匿名抗審查文件共享網絡)Grothoff and GauthierDickey沒有任何中央主機列表的p2p網絡。

他們發現,對於Gnutella(Limewire)網絡,平均需要2500次連接嘗試才能找到對等方。

在他們的論文中,他們提出了一種方法,將所需的連接嘗試減少到​​Gnutella的817和E2DK網絡的51。

實現是通過爲每個DNS組織創建一個p2p用戶的統計信息,這個小的(大約100kb)發現數據庫必須事先創建並隨p2p客戶端一起提供。

3

這是P2P的聖盃。真的沒有一個神奇的解決方案 - 沒有一個好的已知點作爲參考(沒錯,你可以在局域網上使用廣播,而不是在互聯網上),節點無法發現其他節點。 P2P文件共享傾向於通過讓已知網站分發「開始點」來發現,然後進一步發現(我期望)可以來自詢問節點他們知道的其他節點。

開始研究的好地方是Distributed Hash Tables

至於安全性,這個話題將在文學的某個地方,我應該想 - 我會再推薦維基百科。不存在的問題會被輕易處理:如果您無法聯繫IP /端口,請不要將其保留在您的列表中,並且如果節點定期提供不存在的指針,請考慮對它進行降級優先或將其從您的完全列出。

對於邪惡節點,它取決於你的用例,但假設你正在進行文件共享。如果您請求文件的一部分,請查看幾個節點文件部分的散列應該是什麼,然後通過散列請求。如果邪惡節點爲您提供了一個具有不同散列的塊,那麼您可以再次去優先或忽略該節點。

分佈式處理系統的工作方式稍有不同:它們傾向於要求幾個不相關的節點執行相同的工作,然後他們使用投票系統(可能再次使用散列)來確定是否存在惡意。如果節點一直提供不良結果,則聯繫管理員或將IP從已知節點列表中刪除。

+0

有沒有很多圖書館來實現這種發現? – 2013-04-11 19:37:04

+0

我不太清楚,說實話。我引用的WP文章中提到了很多庫,因此它們將是一個很好的開始。 – halfer 2013-04-11 19:43:06

+1

是的,我只注意到謝謝! – 2013-04-11 20:19:34

0

好吧,爲了兩個同行找到彼此,他們都必須知道一個共同的,可以說,調解員交換IP一次。您可以使用任何東西進行這種第一次握手,同時可以從該「通道」進行寫入和讀取。即:DNS(你熟知域),電子郵件,IRC,Twitter的,Facebook,Dropbox的,等等

+0

我正在考慮強制IPv4地址空間。這實際上是可行的。然後,一旦節點發現了另一個節點,他們就交換他們知道的其他人。發現的節點將存儲在持久性存儲中。我猜測IPv6會成爲一個問題。 – 2013-04-11 20:13:35

+1

我應該認爲,強制任何地址空間會以其成功率的比例開始損害它所在的網絡:一個非常受歡迎的P2P客戶端會造成大量的浪費流量。 – halfer 2013-04-11 22:44:26