Share工作原理分析(浅析篇)

By | 2013 年 02 月 14 日

由于寒假4篇文章的第三篇迟迟不能完成…..再加上第四篇的准备也没做完…..因此暂时搁置起来…….
8过blog不能因此就荒废掉,不管怎么得做点啥来。。。。

由于这两天闲着没事把早就下载的share给弄上了,想试试11区居民下载资源的利器,而前两天ms挂的时间不长没有任何Node及关键字数据,偶误认为的ADSL+端口影射不支持share哩,结果今天稀里糊涂的打开Share没管玩游戏去了,回来一看竟然有数据了。。。。。。。神了 thank goodness

趁着这个难得机会,得好好研究一下share,不管怎么说和winny兼容,支持加密的p2p软件不怎么好搞到(可惜这类软件是不开源的,嘛,为了广大宅民的利益也可以理解)。话说我都有种想立刻翻译winny之父写的书的冲动了。。。。。。

(以下内容不仅仅以share为例,也可能是以winny等为例)
好了,言归正传。说share、winny这类p2p软件诞生于非常重视版权的国度里——11区。本来不允许有传送版权文件的p2p软件存在,比如bt、emule。生活在水深火热的11区居民绝大部分使用的网络ip是固定的,锁定到每一个人是很容易的。尤其在传送散播下载版权文件的时候。运气好点的ISP打电话通知你删掉,运去差的直接就被查水表了。。。。。。可是自从winny等的出现(之前可能会有类似软件,但当前以winny、share、perfect dark最为出名),11区人看到了曙光,再也不用为自己的电视台不属于某个动画要播放的电视台列表当中这种事感到懊恼了(偶是动画党)。
share等这样的p2p软件贯通整个使用过程的问题就是匿名(或加密)的问题。
首先,通过网上N多的使用教程可以看出来,share中节点部分最重要的就是加密地址。这样既能表示出来每个客户端的IP+Port,而且能避免他人破解出来这些地址。一个客户端要连接到整个网络,首先要知道网络中的node地址,比如几个可以获取已知node的网站上的node加密地址,把它加到客户端中,然后生成自己的node加密地址,然后连接,就可以连接到整个网络中。
当一个客户端连接到网络的时候,它是怎么参与构建整个网络呢?每个客户端都有自己所关注的cluster word(share为5个,winny为3个),同时并与邻居节点进行交换(猜测是这些关键字的列表进行交换或组成“兴趣小组”)如图:
无标题
能够看到很多类型的记录(这里没有列举出来休眠的项目,其内容类似,仅仅是操作类型不同),
不同类型的操作(自觉屏蔽。。。)不同类型的操作(自觉屏蔽。。。)
而这些记录所代表的操作都是以“群集”(cluster word)为中心(包括休眠项目)。使用这些关键字可以构建出来本地的节点列表和文件列表(猜测,从资源搜索的时间上可以看出并非是实时搜索,但是支持根据node的更新实时加入新搜索到的项目),用于文件查找和分享。
那么具体的查找和分享的原理是什么呢?根据参考1中对freenet的分析,每个节点进行查找的时候仅仅记录前一个节点(查询请求来源)和后一个节点(查询请求中继下游)。而传送数据的时候也是通过这个过程。这很像是类似irc、email的中继过程。通过样的流程,每个节点并不知道资源的来龙去脉,因此每个节点都能脱掉资源上传下载的干系,故可以“保护”节点的安全。虽然这样看起来不如直接到拥有资源的节点获取数据方便、高效,但是可以保证节点的安全性,可以说是用倒退的方式来维持安全。8过,通过使用cluster word,应该可以把相关资源的节点连接起来,使他们的查找层次降低,在一定程度内减少因为中继而产生的开销。同时这也印证了为什么share要限制50KB/s以上带宽的网络才能接入。
当一段时间之后,关键词缓存得差不多了,就可以开始找想要的资源了。
无标题2
这里我设定的cluster word中有“C83”。如图可以看到,当搜索C83的时候,出来600多个结果,并且用时仅16ms,可以印证文件的查找是在本地缓存中查找的。同时可以看到许多带有关键字的文件被搜索出来。其中最有用的是文件hash,share使用160bit的hash作文件标识(也可以在share搜索网站http://www.sharedb.info/上查看),而winny使用128bit的hash(在winny搜索网站http://www.nyhash.info/上查看)。双击想要下载的文件就可以下载了。下面是开始下载的解图:
无标题3
在这里能看到正在下载的文件详情。队列显示排队数,排队ms也有下载。状态显示各个块的下载情况。总的来说和emule等的原理差不多,都是分块下载。但是不同的是share这类软件会在缓存目录中写入一些文件数据,以便他人需要的时候进行读取上传,而不是读取已经下载的文件。
接下来是正在下载的任务的详细情况:
无标题5
无标题6
可以看到下载文件的供源情况,即从多少人那里获取数据就显示多少条数据。而且还会显示正在下载哪些数据,以及他们上传的当前速度和最大速度。这里并没有显示谁在上传。因为之前说过了,为了保证每个节点的安全,不能显示节点信息。即使显示了,通过上面的查找分享原理可以看出来,获取的仅仅是最后一个传送给自己数据的节点,而不是拥有数据的节点,显示了也没用。同时根据参考2中的比较,share在传输的过程中同样采取了加密RSA+RC6,保证传送数据的安全。

至此,从外观上分析share应该已经完了。。。。。
总结一下:
安全方面:
1、节点信息的加密:涉及ip+port
2、接力式文件查找、文件传输
3、缓存数据:不一定保存完整文件
4、传输加密:RSA+RC6
网络方面:
1、完全分布式
2、基于关键字的集群,构建网络
3、独立的缓存文件,保证文件长久
4、接力传输

附加一个上传文件分享的截图:
无标题4
偶将一个文件放到上传目录,然后重新检查让share检测到文件,这张图中就显示了检测到的文件。然后不一会文件就从列表中消失了。据偶猜测,它是把文件分发给邻居节点,让他们保存去了,所以才消失。这ms可以保证文件在整个网路中的持久性。

在使用share这样的11区p2p软件的过程中,最重要的ms就是网络带宽硬盘空间,前者保证文件分享速度,后者保证文件分享生命力,加上软件本身的加密措施,可以完全独当一面。在众p2p软件当中他们是非常值得研究的,可惜木有源代码呀。。。。。好了就写到这里。

参考:
1、日系P2P原理探究(一) — Winny元祖: Freenet http://mmdays.com/2007/05/16/japan_p2p_1/ 系列文章
2、Share (ソフトウェア) http://ja.wikipedia.org/wiki/Share_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29

附加资料:
1、透視BT(一)­­── BT的基本運作原理 http://mmdays.com/2007/04/06/bt1/ 系列文章

PS:在废话两句
鉴于winny、share已经不安全了(-_-!)有时间下载下来perfect dark来研究研究 再写一篇。。。。。
贴几个资料
Perfect Dark http://ja.wikipedia.org/wiki/Perfect_Dark
Perfect Dark (P2P) http://en.wikipedia.org/wiki/Perfect_Dark_%28P2P%29
Mix network http://en.wikipedia.org/wiki/Mix_network
Share (P2P) http://en.wikipedia.org/wiki/Share_%28P2P%29

发表评论