自由網(Freenet)代表著真正突破網絡封鎖的技術創新

人氣 19
標籤:

(//www.tvsmo.com)
【大紀元5月6日訊】 近一段時間有些計算机技術如Napster, Gnutella, and Freenet引起的非議最多,但是從技術的觀點來看的話,也可說是最讓人感興趣。我并不是要有意歪曲才這么講。通過檢查這些系統的架构和協議,我發現它們的确很吸引人。Freenet源自于一個實實在在學術性研究項目,這3個站點值得任何一個對互聯网的未來關心的人認真的關注。

在本文中,我想撇開目前一些有關Gnutella and Freenet的報導中的廣告說辭和歇斯底里,以便互連聯网社區的人們能夠基于它們的真正优點上做出評价。本文大體上是一篇技術文章;我在另一篇文章“The Value of Gnutella and Freenet”中進行了政策性的論述。由于媒體對Napster作了更多的報導,本文中不對其討論。關于Napster你可以參考Erik Nilsson寫“Napster: Popular Program Raises Devilish Issues”,在技術上另兩個系統比Napster更有趣,更深遠。

從本質上講,Gnutella and Freenet代表著分布式信息系統發展上新的一步。二者都是搜索信息的系統,都返回你需要的信息但有不告訴你信息的出處。它們代表著分布式的信息存儲,信息獲取和网絡體系領域中的創新。但二者在目標和實現上有極大的不同,下面對他們分別進行考察。

基礎

任一個Gnutella軟件既是一個server又是一個client,因為它支持雙向信息傳遞。Gnutella開發人員把這种軟件叫做“servent”,但因這個詞看起來古怪,我堅持叫它”client”。你可以通過安裝現有的几种client中的任何一种而建成一個全功能的Gnutella网站;很多不同的操作系統都被支持。下一步,你必須找到一些愿意跟你通訊的站點:有些可能是你的朋友的,另一些可能是被廣告了的Gnutella站點。擁有大型計算机和高速帶寬的人們可以鼓勵許多人跟他們連接。

是罪惡還是僅僅有爭議

諸如Gnutella and Freeware一樣的開放源軟件正在向病毒一樣的快速傳播。但它們真的是如此有害嗎?Andy Oram在本周的一期Platform Independent on Web Review上指出了有爭議技術的优點和缺點。

你只能直接与你同意接触的少數几個站點通信。別的站點關心的資料將以存儲轉發的方式從一個站點傳到另一個站點地傳遞下去。這對頭發已斑白的UUCP和Fidonet老用戶來說听起來是否似曾相識?這种架构本質上,与在因特网變得流行以前的數十年里在全世界傳遞网上新聞和電子郵件的系統是一樣的,這些系統無拘無束地連接在一起。

但是有一些重要的不同。因為Gnutella是運行在整個因特网上的,你可以直接与某個地理位置上离得很遠的人相連,就象連到你的鄰居上一樣。這使得系統牢固并几乎不出故障,這一點我們馬上就要談到。

再一點,通過Gnutella獲取信息的規程是一种調用-響應(call-and-response)方式,它比單純地推送新聞或電子郵件要复雜。Figure 1表示了這种規程的操作。假定站點A向站點B要求匹配”MP3″的數据。在傳送回一些可能相關的東東以后,站點B把這個請求又傳給它的同事站點C,但与郵件和新聞不同的是,站點B保留了站點A的這個請求記錄。如果站點C有同這個請求匹配的數据,它就把這些數据送給站點B,而站點B知道這是為A找的數据所以把數据傳給A。

我很想快速地描述出這個簡單系統的重要特性,但為了滿足好奇者我先回答一些問題。

1,如何識別請求

每個請求都有一個唯一的號碼,這個號碼是由源站點上獨一無二的一個東西比如以太网MAC地址所產生的隨机數或准隨几數。如果一個請求經由站點C傳到站點D然后又傳到站點B,站點B從標識上認出這是已經見過的請求,從而不聲不響地把它仍掉。另一方面,不同的站點可以請求同樣的資料,并且都能獲得滿足因為他們都有自己唯一的標識。每個站點都可以讓請求過期,只需把請求放入一個預定義了大小的隊列中,當新的請求要加進隊列時最底下的老的請求則被仍掉。

2,返回的數据采用什麼形式

可以是一個音樂文件或其他請求的材料,但Gnutella不僅僅限于傳文件。返回結果可能是一個URL或其他任何一個值。因此,人們很可能用Gnutella來作复雜的搜索,而最終得到一個URL,就象使用一個傳統搜索引擎一樣。(關于這點在后面將作更多討論。)

3,使用何种協議

運行在HTTP協議上(這是Gnutella的簡洁性體現之一)。使用HTTP的有利之處在于即使兩個站點中的一個處在企業的防火牆的后面時它們也能通信,前提是這個防火牆允許數据流向外面的端口為80的標准Web服務器。如果在防火牆后面的client被要求伺服一個文件時會有一點困難,但它可以通過發一條叫GIV的輸出命令到通信對方的80端口而瞞過防火牆。當防火牆屏蔽了所有的Web交通或通信雙方都處在典型的防火牆后面時,才會出現“此頁無法顯示”。

4,系統怎樣停止搜索?

就象IP包文,每個Gnutella請求都有一個存活期(time-to-live),每經過一個站點通常這個值都要減1,直至變為0。如果一個站點發現某個請求的存活期值异常的大,那它可以大幅度降低這個存活期。我們馬上可以看到,雖然存活期限制了每個站點所能触及的范圍,但這同時也帶來了好處。

5,象”MP3″一樣的搜索字符串是被怎么解釋的?

這是個值64000美元的問題,它讓我們發現Gnutella最偉大的貢獻。
神圣的創舉:搜索動態生成的數据 Gnutella是一個相當簡單的協議。它只定義了一個字符串如何從一個站點傳到另一個站點,而沒有定義如何解釋這個字符串。某個站點可能只是用fgrep答7b序對一堆文件檢索這個字符串,而另外某個站點可能把這個串插入一個SQL查詢中,別的站點可能認為這是一個日語單詞串,從而返回一個意義大約近似的英語串,以便原始請求的發出站點能使用這個英語串進行進一步搜索。這种靈活性允許每個站點以自己擅長的最复雜的方式來為分布式搜索作貢獻。建議讓Gnutella成為21世紀的搜索引擎運作的平台,這是否過份了?

現狀

Gnutella項目最初是由美國在線的一個叫做Nullsoft的部門開始的。美國在線因為害怕在使用這個系統后可能會導致版權侵害問題,便取消了對該項目的支持。但一個名叫Brian Mayland的程序員對這個協議進行了反向工程,開始了一個新的項目來開發client(客戶端軟件)。沒有一個當前版本的開發者看過從Nullsoft來的代碼。Gnutella是一個基于GNU許可的開放源項目。 Limitations and risks of Gnutella

Gnutella的限制和風險

早期對Gnutella的實驗表明它是高效的和有用的,但在系統的伸縮性存在問題。假如你送出一個存活期為10的請求,并且每個站點都与另6個站點聯系,那么交換的總消息數可高達106或1百万。

呈指數型傳播的請求引入了最可能使系統崩潰的原因:由洪水般的請求引發的拒絕服務型攻擊。開發者們目前沒有解決這個問題的辦法,但是建議client跟蹤請求的出現頻率以便識別出是否有突發性表現從而斷絕同攻擊性節點繼續通信。

此外,存活期給每個用戶限制了眼界。我可能重复地搜索著我附近的几百個節點,但我從不會找到一個在离我的眼界只有一步之遙的站點上的文件。實際上,信息可能還會移動。總之,中世紀的歐洲人盡管除了最模糊的神話之外對中國一無所知,但他們卻喜歡來自中國的香料。他們所必須知道的只是在小亞細亞的几個交易地,而這几個交易地則与在中亞的与中國交易的城市交易。

一個為Gnutella開發Linux系統上的client的程序員Spencer Kimball說,這种子网化方式可以保護Gnutella免遭攻擊。實際上Gnutella已經歷過服務崩潰,主要起因是client程序中的錯誤。可以肯定將來會出現惡意和复雜的攻擊。雖然有几組站點曾有過暫時的緩慢或者其他的組的情形變得更嚴峻,但系統從未真正地停止過。

當然除了拒絕服務以外,人們可能還會以其他理由來不正當使用Gnutella。最近有報導說某站點使用Gnutella做了一個釘子:這個站點上登出了一些看似提供儿童色情的文件名,然后把每次到這個站點下載文件的用戶的IP地址和域名都記錄了下來。之所以能利用這种信息是因為Gnutella使用的是HTTP;Gnutella提供的用戶信息与任何Web瀏覽器提供的沒有什么區別。

最后一個值得一提的有關Gnutella的限制是難于對返回數据的來源進行認證。你的确不知道數据來自哪里–而現在的e-mail和news也是這樣。Client沒有必要選擇匿名;他們完全可以按照自己的愿望來標識自己。如果Gnutella選擇返回一個URL,那和以任何其他方式獲得的URL一樣的值得信賴。如果數字署名基礎設施變得普及了,Client也同樣可以使用。我在文章“The Value of Gnutella and Freenet”中論及了可靠性和相關的政策性問題。

Freenet (自由網)

基礎

Gnutella和Freenet的目標很不同。對很多人來說Freenet更多的具有明顯的政治性的,顛覆性目的。(譯者﹕What﹖ 咱可沒想顛覆誰﹐只是看到被愚弄禁錮的中國人太苦。) a– 允許人們匿名地散發材料。 b– 允許人們匿名地獲取材料。 c– 使得刪除材料几乎不可能 d– 運作上沒有集中的控制 后半部份特色Gnutella和Freenet都具有,這使得它們不同于Napster。一個法院的命令可以關閉Napster(和它的所有鏡象站點),但要關閉Gnutella和Freenet就象要起訴所有聲稱在交換著Metallica歌曲的317000因特网用戶一樣的困難。

Freenet的另一個技術目標特別有趣:它把數据隨几的分布在各站點上,數据的出現和消?O不可預測的。除了滿足上面所提到的社會目標以外,Freenet還可能為因特网上的擁擠提供了一個迷人的解決方案,因為人气高的信息自動地傳播到了許多的站點上。

Freenet跟80年代和90年代早期具有相似名字的社區网絡沒有任何關系。它起源于1997年由愛丁堡大學信息學部的Ian Clarke發起的一個研究項目。他在本項目中寫的一篇論文可以在网上得到。

在很多方面Freenet的體系結构和協議与Gnutella很相似。每個合作者都下載一個client并向几個其他的client發送請求。請求都有唯一的標識,被從一個站點傳到另一個站點,都被臨時存放在一個堆棧里直到數据被返回,當存活期結束后就被拋棄。

查找數据的游戲

兩個系統之間最大的不同在于當Freenet的client滿足一個請求時,它把整個數据都傳送給請求的發出者。這在Gnutella中是可選的,但不是必須的。更重要的是,當數据沿著Freenet的client鏈被傳送到最初的請求者的過程中,鏈上的每個client都可以保留一個拷貝(除非數据非常巨大,而client認為不值得為之花費那么多磁盤空間來保存它)。只要有人不停地要求這個數据,Client就會一直保留它,但當似乎沒有人在需要它的時候就可以仍掉。

跟因特网比起來顯得低效的這种實踐,到底取得了什么樣的成就呢?Ian Clarke告訴我它并不一定如我所想象的那么低效–對于大數据量來來說,它的效率可与WEB匹敵–并且事實上它完成了相當不錯的几件事情:

a,允許短暫地達到匿名性和持續性的目標。

b,讓小站點發布很大的人气高的文檔而不必為网絡帶寬犯愁。你不必僅僅因為公開了一個令人興奮的錄象想讓好多人來下載,就跑出去找一個16cpu的UltraSPARC,或從別人那而租空間。

c,它鼓勵受歡迎的材料而讓不人气的材料靜靜地消失。在這一點上,Freenet是与Eternity服務(几年前被提出來的一种模型,但從為被實現過)根本不同的。它的目標不是散布人們想要的垃圾,而是防止許多人都認為有价值的材料被撤掉。

d,它傾向于把數据弄到那些想要他們的人鄰近的地方。(和Gnutella一樣,”鄰近”一詞在Freenet中沒有地理上的意義,只意味著因特网站點之間的跳躍數。)這是因為從節點A發到節點B的第一個請求可能要被傳遞到很多別的節點,而第二個以及以后的請求就可以直接由節點B來滿足。此外,節點A和節點B很可能离那些同樣喜歡這种內容的人所運行的節點只有1到2個跳躍數。所有的人都會很惊喜地發現在第一個請求得到滿足后,后面的內容很快就能得到。

最后的一條從架构上來講特別有趣,因為每個站點的材料的人气度會導致Freenet系統真正改變它的拓扑結构。當一個站點發現它經常從它的一個合作者那儿獲得大量材料以后,對未來的請求它會傾向于選擇這個合作者。帶寬因此增加而受益的是最終用戶。鑒于我作的歐洲/中國絲綢之路的比方,Clarke說:“Freenet就如同把中國帶到离歐洲更近的地方,因為越來越多的歐洲人要求与之進行貿易。”

Freenet的其他特徵

Freenet比Gnutella更受网絡交通的制約,也許這是因為對每一個成功的請求它都希望傳送一個完整的文件的緣故。當一個Freenet的client接到一個它滿足不了的請求時,它把該請求只傳遞給一個對等站點;它并不象Gnutella那樣把請求廣播給所有的對等站點。如果因為請求沿著傳遞鏈下去再也找不到站點而得到一個失敗通知,或者因為存活期到期而使client沒有收到響應,client就會另一個對等站點。簡而言之,搜索是按深度优先方式進行,而不是按并行方式。然而,Clarke說搜索的速度可謂相當的快;象傳統的搜索引擎一樣每個搜索都花上几秒鐘。Freenet中采用的簡單快取系統不比ISP為了存取网頁而采用的精致的快取系統遜色。

Freenet正在用Java開發,并且需在Java Runtime Environment上運行。它使用自己的端口和協議,而不象Gnutella那樣在HTTP上運作。

Freenet的限制和風險

Freenet似乎比Gnutella更具有伸縮性。也許有人會認為可以通過發送洪水般的無關的資料而使整個系統遭到破坏(例如,可以寫一個版本,讓它每小時把你的硬盤中的內容都拋出去一次),但實際上這种攻擊几乎沒有什么影響。只要沒有人要求這种資料,它不會去任何地方。

此外,一旦某人提交了一個資料,沒有人可以用一個偽造品來替代它。每個條目都被一個唯一的標識符所標識。如果一個怀有惡意的檢查員試圖用同樣的標識符來提交他自己的資料,系統將會檢查到現有的版本,并說:“我們已經有這個材料!”唯一的效果是使得這個材料保留的時間更長,因為這個自充為檢查員的人為它提出了一個請求。

搜索問題

唯一的標識符是Freenet目前的弱點。盡管有人可以在提交一個材料時賦予它任何字符串作為標識符,為了安全的考慮Freenet會將這個字符串散列化處理。兩個只相差一個字符的串(比如”HumanRights”与”Human-Rights”)將會被散列成極為不同的值,不管用哪种散列算法。這意味著當某個檢察机關試圖從一個隨意的檢索中找出對自己不利的材料時將會遇到很大的困難。

然而散列化也使得Freenet對于作隨机檢索顯得無能。如果你准确知道你要在Freenet上所查找的東西– 比如有人告訴你“在Freenet上搜索HumanRights” –你一定能獲得成功。可是你不能作自由文本檢索。

Freenet的一個迷人的用法是為站點提供超鏈接。讓我們拿喜歡觀察野鳥的人們來作一個例子。就象一個熱切的飛禽飼養家可以提供一個鏈接到許多WEB网站的网頁一樣,她也可以提供產生Freenet請求的鏈接,這些請求使用可以在Freenet上獲取有關鳥類數据的已知的字符串。對那些沒有安裝client而又想試一試Freenet的人來說,已經有一個名為fproxy的到WEB的网關可以使用了。

另一個研究領域是開發一個client,它接受一個串并且為了得到一個更精确一點的串而對之做輕微的改動,再把它傳遞下去。按照Clarke的說法,目前Freenet project中最重要的一個任務就是解決搜索問題。 Letting go 不要管它。

我再一次建議讀者參考文章The Value of Gnutella and Freenet中有關這些系統的政策和社會影響的討論。在結束本文之際,我建議Gnutella和Freenet這兩個系統繼續朝著把實質的從物理的釋放的方向發展,因為這標志著网絡發展的一個主旋律。DNS把名字同物理系統解脫開了;URNs將允許用戶不用域名就能存取文檔;虛擬主机和复制服務器技術改變了名字到系統的一對一的關系。我們不要理睬位置的概念了,也許是該有另一個大步地概念性突破的時候了。歡迎。。。信息正變的自由可得。

Gnutella和Freenet以不同的方式,使文檔的位置無關緊要;搜索的串變成了位置。為了實現這一點,二者在我們所熟悉的IP層次的路由功能上增加了一個新的路由層。新的層次看起來可能會在效率与伸縮性上引入許多問題,但實際上都是可被忽略的或可以最小容忍的。我認為讀者應該好好地看一看這些系統;即使Gnutella 和 Freenet最終可能不一定是新的因特网時代的足夠好的解決方案,當下一個跳躍到來時它們將會教給我們一些經驗教訓。

Andy Oram is an editor at O’Reilly & Associates specializing in books on Linux and programming. Most recently, he edited Peer-to-Peer: Harnessing the Power of Disruptive Technologies.
(原文﹕ //www.oreillynet.com/pub/a/network/2000/05/12/magazine/gnutella.html)(//www.dajiyuan.com)


    相關文章
    

  • 自由网使網絡真正自由–FreeNet是如何工作的 (5/5/2001)    
  • 行使您的天賦人權突破网上信息封鎖 (4/24/2001)
  • 相關新聞
    行使您的天賦人權突破网上信息封鎖
    自由网使網絡真正自由--FreeNet是如何工作的
    加州灣區生活成本飆升 80%民眾怪科技
    美研製更堅韌的仿生水泥 有望替代傳統水泥
    如果您有新聞線索或資料給大紀元,請進入。
    評論