日系P2P原理探究(一) — Winny元祖: Freenet

Posted by Mr. Friday

從BT, IP-TV系列之後, 好一陣子沒有回到P2P主題上了. 一方面是因為懶(這類的題目要做功課啊…), 另一方面則是對這次的主題感到相當惶恐. 惶恐? 因為這次我要講的P2P軟體主題, 是在台灣不甚流行(其實也只有日本流行)的Winny. 由於我自己親身接觸Winny的經驗少之又少, 對日文又不了解, 只能從一些相關的中文新聞與討論看到旁枝末節, 因此接下來的文章如果有明顯謬誤的話, 還請各位不吝指正.

日本所流行的P2P軟體與世界其他各地非常不一樣. 根據去年12月的報導, 排名第一的Winny大約每日有40萬人次, 再來據說是WinMX, 第三是Share, 約有10~15萬人次. 聽慣BT和eMule的朋友一定覺得很奇怪, 日本人幹什麼偏偏要特立獨行, 別人在用eMulel你們偏偏愛用自己寫的Winny呢? 其實說起來也沒這麼奇怪, 早期的P2P軟體(像是Napster啦, Audiogalaxy等等)是只支援英文的, 想找其他語言的可麻煩了. 還記得以前我在Napster上打”faye”(王菲英文名), 跑出來一堆”chi_ai_mo_sen_ran”(只愛陌生人)…. 在這種情況下, 想用自己語言的日本人只好自己寫囉, 這套軟體後來大家用慣了, 也就不想改用eMule了. 這就是本系列的主角: Winny. (台灣人也自己寫過中文的P2P啊! 別忘了ezPeer與Kuro這兩套軟體)

Winny的作者叫做金子勇(Isamu Kaneko), 如果對這方面新聞有印象的人, 應該知道他也是日本論壇2ch的鄉民之一. 他在2ch上的代號叫47氏, 也被稱作Mr. 47或直接叫47. 關於金子勇本人的創作源起與後續發展, 在下一篇會探討. 金子勇約在2002年中時在2ch上發表這套軟體, 到了2003年12月時winny已經成為日本最大的p2p軟體, 約有25萬人使用.

金子勇曾經出過一本書叫做Winnyの技術,

當中詳細解說了Winny的原理, 不過尷尬的是, 通篇是以日文寫成, 在網路上也找不到中文或英文的翻譯. 幸好, 雖然看不懂日文, 但是該書卻寫滿了另外一篇著名的P2P網路: Freenet的名字. 從Freenet的架構以及各種winny相關的介紹文章看來, 極大部分的Winny承襲了Freenet理念與演算法. 也好, 今天這篇就讓我們從Freenet著手, 看看winny的創作理念是什麼吧!

Freenet的標誌

Freenet是以Ian Clarke為首的一群美國人所研發的. 他們的創作理念在論文當中寫得非常清楚. 他們想創造的p2p網路是:

  • Anonymity for both producers and consumers of information
  • Deniability for storers of information
  • Resistance to attempts by third parties to deny access to information
  • Effcient dynamic storage and routing of information
  • Decentralization of all network functions

翻譯成中文就是

  • 匿名地發布與分享資訊
  • 無法知道誰是資料源頭
  • 無法讓人查出你儲存了什麼資訊
  • 快速的檔案更新與網路資訊更新
  • 所有功能都以分散(純P2P)的方式進行

Ian Clarke認為, 真正的言論自由來自於完全的匿名, 所以才會開發出這一套“不知道檔案源頭是誰, 也不知道分享給誰”的軟體. 當然, 這也引起了衛道人士的抗議, 認為會被有心人士用來分享違法資訊, 像是猥褻兒童圖片或是違法影音檔等等. 其實這類議題幾乎是P2P分享軟體的宿命了, 一直游走在法律邊緣. 不過這不是今天的重點, 我們先來探究Freenet是怎麼作的吧!

freenet是一套純p2p軟體, 換言之, 在系統中沒有任何伺服器的存在, 因此一個使用者若要進行搜尋, 只好像我先前在透視BT4中所說, 派出小螞蟻們去向各個鄰居敲門了. 過程如下:


windowslivewriterp2pwinnyfreenet-11862image02.png

圖中的黑點a就是搜尋發起人, a先詢問鄰居b知不知道這個檔案在哪, b看看自己的身上:沒有這個檔案, 於是就問另一個鄰居c, c說他也沒有, 而且c很孤僻不認識其他鄰居, 沒辦法再幫忙問, 於是將問題丟回給b. b收到c的拒絕信後不死心, 繼續問他認識的其他鄰居, 直到找到為止.

整個流程用文字表達大概是:

a問b, b問c, c說不知道;

b問e, e問f, f竟回頭問b, b當然不知道;

e再問另一個鄰居d, 終於在d處找到檔案.

經過這一番折騰(圖論上把這種方式稱為DFS : Depth First Search), 終於找到一個有檔案的人了. 那麼d會直接將檔案回傳給a嗎? 錯了, 其實在整個過程中, 每個人只知道發訊息問他檔案的人是誰, 並不會紀錄誰是最源頭, 像e就只記得b向他問檔案, 而e最後是把這個問題丟給d去處理; b也只記得a曾經問過他, 而b最後是在e處找到解答的; 每個人只記得誰問他這個問題, 以及他把這個問題丟給誰. 在這種情況下, d僅能把檔案丟給e, 而e也只知道上游是b, b最後再把檔案丟還給他的上游, 也就是一開始的詢問者a.

稍微熟悉一點網路運作的人一定會覺得這樣超沒效率; 要檔案的人是a, 幹麻沿路不作紀錄, 直接讓d回傳檔案給a就好了啊! 何必這樣沿路傳, 結果a,b,e,d電腦裡面都有一份檔案備份呢, 而且a還要等b,e傳完檔才能下載? 呵呵, 可別忘了這套系統的目標在於匿名分享啊! 讓我們來看看這種做法有什麼好處:

  1. a可以不承認自己是下載者. a可以謊稱是另外一個上游x想要這個檔案, a只是好心幫忙問而已
  2. d可以不承認自己是檔案源頭. d可以謊稱是另一個下游y擁有這個檔案, d只是好心幫忙問而已
  3. 如果該檔案是該區網路(a,b,c,d,e,f)人人都想要的熱門檔, 這麼一來不但b,e不用搜尋就會擁有檔案, 而且下次c或f想搜尋這個檔案的時候, 隨便問一個人都抓得到.

網路上關於winny的討論文章, 總是會很驚奇說:”我又沒有下指令說要抓這個檔, 為何我電腦會自動出現這個檔, 而且還正在上傳給我不知道的人?” 這就是原理所在了.

Freenet上值得一提的還有”發佈檔案的過程”. 假如今天a手上有一個新檔案, freenet軟體偵測到後會自動發一個搜尋的訊息出去, 先看看網路上是不是已經有同名的檔案. 如果網路上已經存在同名檔案, 則a會收到別人寄來的檔案, 證明檔案撞名了; 如果找了好幾個人都找不到同名的檔案, 則a會很高興地將手上的檔案依著最後的路線發佈出去.從前例看來, 如果找到d時放棄的話, 則發佈路線會是a->b->e->d.

Freenet的檔案搜尋與新增功能, 從一方面看來有助於檔案的散佈, 但從另一方面看來, 也可說是浪費了大量的頻寬, 將檔案散佈給不知道需不需要的人; 而且搜尋極沒效率, 只能搜索附近幾個認識的鄰居; 因此我在年少的大學時代, 幼稚地認為這套系統只會停留在學術研究階段, 不會大紅; 哪知道Freenet經過金子勇的改寫之後, 以Winny的姿態紅遍東瀛, 從2004至今, 仍穩坐日本最熱門的P2P軟體. 如果各位版友對日本動漫畫有狂熱興趣, 相信對這套軟體應該不陌生才是.

下一篇來寫寫Winny的緣起, 以及它在日本掀起的滔天巨浪, 敬請期待.

延伸閱讀:

Freenet in Wikipedia

Winny in Wikipedia

Winny安裝手冊(該站有大量Winny安裝教學, 值得有興趣的人研究)

Winny安裝手冊

日系P2P原理探究(二) — Winny, 日本崛起

日系P2P原理探究(三) — 作者也下水, P2P分享軟體的原罪? 

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!