作者RobertChase (Chase)
看板P2PSoftWare
标题winny的原理
时间Fri May 18 12:28:59 2007
转贴
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
1F:推 nawussica:千万不要富间化... 05/18 13:11
2F:推 Solver:现在已经是礼拜五了 GMT 0 = GMT+8 - 8hrs 05/18 15:25
3F:→ Solver:推错 抱歉 05/18 15:25
4F:推 singy:推一下 刚好最近在看丛集技术 05/18 16:23
5F:推 hotahaha:排版一下会更好 :) 05/18 20:28
6F:推 coolmac:大推 写得很棒说 不推对不起自己的良心 05/18 22:33
7F:推 EDGE:感恩分享!建议原po也来用用这些日系软体写个share/WinMX介绍 05/19 01:20
8F:推 mgcmsc:GJ!! 05/19 02:10
9F:推 RobertChase:这是从网页上转贴的 有兴趣的麻烦点上面连结... 05/19 10:20