winny的原理

看板P2PSoftWare作者 (Chase)時間18年前 (2007/05/18 12:29), 編輯推噓8(801)
留言9則, 8人參與, 最新討論串1/2 (看更多)
轉貼http://mmdays.wordpress.com/2007/05/16/japan_p2p_1/ 從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中所說, 派出小螞蟻們去向各個鄰居敲門了. 過程如下: 圖中的黑點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傳完檔才能下載? 呵呵, 可別忘了這套系統的目標在於匿名分享啊! 讓我們來看看這種做法有什麼好處: a可以不承認自己是下載者. a可以謊稱是另外一個上游x想要這個檔案, a只是好心幫忙問而已 d可以不承認自己是檔案源頭. d可以謊稱是另一個下游y擁有這個檔案, d只是好心幫忙問而已 如果該檔案是該區網路(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安裝教學, 值得有興趣的人研究) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.229.203.88

05/18 13:11, , 1F
千萬不要富間化...
05/18 13:11, 1F

05/18 15:25, , 2F
現在已經是禮拜五了 GMT 0 = GMT+8 - 8hrs
05/18 15:25, 2F

05/18 15:25, , 3F
推錯 抱歉
05/18 15:25, 3F

05/18 16:23, , 4F
推一下 剛好最近在看叢集技術
05/18 16:23, 4F

05/18 20:28, , 5F
排版一下會更好 :)
05/18 20:28, 5F

05/18 22:33, , 6F
大推 寫得很棒說 不推對不起自己的良心
05/18 22:33, 6F

05/19 01:20, , 7F
感恩分享!建議原po也來用用這些日系軟體寫個share/WinMX介紹
05/19 01:20, 7F

05/19 02:10, , 8F
GJ!!
05/19 02:10, 8F

05/19 10:20, , 9F
這是從網頁上轉貼的 有興趣的麻煩點上面連結...
05/19 10:20, 9F
文章代碼(AID): #16JIkCNl (P2PSoftWare)
討論串 (同標題文章)
文章代碼(AID): #16JIkCNl (P2PSoftWare)