gnutella

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

基本介紹

  • 中文名:努特拉
  • 外文名:Gnutella
簡介,歷史,工作原理,協定功能及擴展,Gnutella2,參見,

簡介

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

歷史

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。

工作原理

要了解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],經常飽和的連線會導致較慢的節點失去作用。因此,搜尋請求在網路中會被經常丟棄,與整個網路相比,大多數的查詢只會到達其中的很少一部分節點。

協定功能及擴展

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版的訊息握手機制已經十分困難,或者根本不可能,開發人員應該遵循正在編寫中的技術規範來進行開發工作。

Gnutella2

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

參見

  • Bitzi
  • Gnutella crawler
  • Gnutella Web Cache
  • GNUnet

相關詞條

熱門詞條

聯絡我們