日系P2P原理探究1-6全文

电脑 2010-10-20 991 次浏览

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

从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的缘起, 以及它在日本掀起的滔天巨浪, 敬请期待.

微信扫一扫,分享到朋友圈

日系P2P原理探究1-6全文

发表评论

电子邮件地址不会被公开。 必填项已用*标注