複製鏈接
請複製以下鏈接發送給好友

gnutella

鎖定
Gnutella(發音為/nʊˈtɛlə/,單詞中的g不發音,或者發音為/gnʊˈtɛlə/)是一種文件共享網絡。2005年6月,gnutella約有181萬台用户(計算機),而2006年1月增加到超過300萬個節點。截至2007年底,它是互聯網上最流行的文件共享網絡,估計市場份額超過40%。
中文名
努特拉
外文名
Gnutella

gnutella歷史

Gnutella網絡的第一個客户端由Nullsoft公司的賈斯汀·法蘭科(Justin Frankel)與湯姆·帕勃(Tom Pepper)於2000年早期最先開發。同年3月14日,該程序被放在Nullsoft的服務器上並允許公眾下載。該程序的源代碼原計劃稍後在GNU通用公共許可證下被髮布。
與半集中式網絡如FastTrackKaZaA)以及Napster不同,Gnutella網絡是完全分佈式的。其最初的流行是源於2001年早期Napster由於法律糾紛而被關閉的威脅。不斷增長的用户也使得該協議的最初版本暴露了不少缺陷。2001年早期,各種不同版本的協議(最初以專有閉源客户軟件形式實現)使得Gnutella的擴展性得到了增強。與先前的協議將每一個用户節點都當作用户以及服務器不同,改進過的協議將某些用户當作"超節點"(ultrapeer),其為與之連接的所有用户路由搜索請求及迴應。
這些發展使得Gnutella網絡進一步吸引了更多用户。2001年晚期,一種Gnutella客户端軟件LimeWire成為免費開源軟件。2002年2月,Morpheus,一個商業文件共享開發羣,放棄了原先的基於FastTrack的端到端軟件,併發行了新的基於免費開源Gnutella客户端軟件Gnucleus的新客户端軟件。
"Gnutella"這個詞語後來指作被不同的客户端軟件使用的一種開放網絡協議,而不用來指作任何一個單獨的項目或者某一個軟件。由於許多不同的組織都在開發新的客户端軟件,而且該協議本身也將不斷演變,Gnutella這個詞語的意義在將來或許也會變化。
Gnutella這個名字是GNUNutella的混成詞:人們普遍認定法蘭科與帕勃在開發Gnutella項目的時候吃了許多的Nutella,並且希望在GNU通用公共許可證下完成項目。Gnutella並未與任何GNU項目相關聯;關於Gnutella在GNU中的相關項目,可以參見GNUnet。 [1] 

gnutella工作原理

要了解Gnutella網絡是怎樣工作的,先設想一個大的由用户(稱為“節點”)組成的環,每個節點都有Gnutella客户端軟件運行。當初始啓動時,客户端軟件必須進行自舉(Bootstrapping)並找到至少一個其它節點,有多種不同的方法可以達到這一功能,包括軟件內置的一組正在工作的已經存在的地址欄表,Web緩存的已知節點更新(稱為GWebCaches), UDP服務器緩存以及IRC。一旦連接上,客户端就會請求一張活動地址欄表。
當用户想要進行搜索時,客户向每一個活動聯接節點發送請求。在歷史上(協議0.4版本),一個客户的活動聯接節點數十分小(大約是5),所以每一個收到請求的聯接節點都會再向其自身的所有聯接節點轉發該條請求,如此繼續下去,直到該請求數據包在網絡中被轉發的“跳數”超過一個預先設定的數值(最大為7)。
到了0.6版之後,Gnutella網絡中的節點被劃分為葉節點(leaf nodes)與超節點(ultra nodes或ultrapeers)。每個葉節點僅與少數(一般為3)超節點連接,而每一個超節點與多於32個的其它超節點相連。在這種更高的出度(outdegree)下,先前提到的一條查詢在網絡中能達到的最大“跳數”被降低到4。
葉節點與超節點利用查詢路由協議(Query Routing Protocol)來交換查詢路由表(Query Routing Table (QRT))。葉節點將它的QRT發送到每一個與之連接的超節點,超節點隨後將每一個與之相連接的葉節點傳來的QRT以及其本身的QRT合併,並且將其與自身的鄰居節點交換。
在實際中,這種在Gnutella網絡中的搜索模式是十分不可靠的。由於每一個節點都是一台普通的計算機用户,他們經常連接或者斷開網絡,所以整個Gnutella網絡結構永遠都不是完全穩定的。Gnutella網絡搜索的帶寬消耗也是隨着連接用户的增加而指數遞增的[1],經常飽和的連接會導致較慢的節點失去作用。因此,搜索請求在網絡中會被經常丟棄,與整個網絡相比,大多數的查詢只會到達其中的很少一部分節點。 [1] 

gnutella協議功能及擴展

Gnutella曾經是一種純粹的基於洪泛式請求(query flooding)協議。早期的Gnutella 0.4版使用5種不同的數據包種類,即是:
  • ping:用於發現網絡中的節點
  • pong:用於回覆ping消息
  • query:用於尋找某一個文件search for a file
  • query hit:用於回覆query消息
  • push:用於處於防火牆後的服務器的下載請求
以上不同消息包的定義主要是為了處理Gnutella網絡中的搜索功能。文件傳輸功能是由HTTP協議實現的。
Gnutella協議的開發由GDF(Gnutella開發者論壇)所領導。許多擴展協議已經或正在由不同的軟件商以及GDF的自由開發人員開發。這些擴展包括智能查詢路由(intelligent query routing)、SHA-1校驗碼、query hit transmission viaUDP、基於UDP的查詢(querying via UDP)、基於TCP的動態查詢(dynamic queries via TCP)、基於UDP的文件傳輸(file transfers via UDP)、XML元數據、source exchange(也被稱為"the download mesh)以及parallel downloading in slices(swarming)。
在Gnutella開發網站上有試圖在Gnutella 0.6版中將這些協議擴展規範完成的相關努力。由於所有的協議擴展還只是作為提議而存在於規範中,因此儘管已經過時,Gnutella 0.4版的標準至今仍是最新的完整技術規範。實際上,GDF的開發人員指出在Gnutella網絡中使用0.4版的消息握手機制已經十分困難,或者根本不可能,開發人員應該遵循正在編寫中的技術規範來進行開發工作。 [1] 

gnutellaGnutella2

主條目:Gnutella2
Gnutella2並不是Gnutella的繼承者,而是Gnutella網絡協議的一個分支,其於Gnutella相比既有優點也有自己的缺點。A sore point with many Gnutella supporters is that the "Gnutella2" name conveys an upgrade or superiority. [1] 

gnutella參見

  • Bitzi
  • Gnutella crawler
  • Gnutella Web Cache
  • GNUnet
參考資料
  • 1.    Gnutella Client Feature Comparision - Client comparison of LimeWire,Phex,BearShare,gtk-gnutella,Gnucleus,Shareaza。