转载:http://www.yuanma.org/data/2008/0420/article_3009.htmBT和eMule下载协议的比较和分析 由于从事P2P下载引擎开发得原因,对BT和eMule协议有了一些想法,总结如下,供参考。很多资料来源于互联网,再次向原作者表示感谢。 在当前的下载领域BT和eMule协议应用得是最广泛得,他们各自有自己强大得用户阵迎得支持。 eDonkey由Jed McCaleb在2000年创立。采用“多源文件传输协议”(MFTP,the MultisourceFileTransferProtocol)。eDonkey索引服务器并不集中在一起的,而是各人私有的,遍布全世界,每一个人都可以运行电驴服务器,同时共享的文件索引为被称为“ed2k-quicklink”的连接,文件前缀“ED2K://”。每个文件都用md5-hash的超级链接标示,这使得该文件独一无二,并且在整个网络上都可以追踪得到。EDonkey可以通过检索分段从多个用户那里下载文件,最终将下载的文件片断拼成整个文件。2002年05月13日Merkur不满意eDonkey2000客户端并且坚信自己能做出更出色的P2P软件,于是便着手开发。凝聚一批原本在其他领域有出色发挥的程序员,eMule工程就此诞生,目标是将eDonkey的优点及精华保留下来,并加入新的功能以及使图形界面变得更好。现在eMule的最新版本是0.48a(2007年5月20号发布)。 emule是eDonkey的升级版,它的独到之处在于开源。其基本原理和运作方式,也是基于eDonkey,能够直接登录eDonkey的各类服务器。eMule同时也提供了很多eDonkey所没有的功能,比如可以自动搜索网络中的服务器、保留搜索结果、与连接用户交换服务器地址和文件、优先下载便于预览的文件头尾部分等等,这些都使得eMule使用起来更加便利,也让它得到了电骡的美誉。 支持BT协议的P2P应用程序很多,如BitBuddy、FlashBT、BitComet和BitSpirit等,这里以应用程序BT为例来分析BT协议。 BT由如下几部分组成:.torrent文件、种子提供站点、目录服务器和内容发布者/下载者。.torrent文件是一个文本文件,包含了tracker信息和文件信息两部分。tracker信息主要是BT下载中需要用到的tracker服务器的地址和针对tracker服务器的设置;文件信息是指将目标文件计算处理后再根据BT协议的B编码规则网编码后得到的信息。BT的主要原理是把提供下载的文件虚拟分成大小相等的块,块大小必须为2Kbyte的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入.torrent文件中,所以.torrent文件就是被下载文件的“索引”。种子提供站点也就是.torrent文件的提供站点,为下载者提供.torrent文件下载服务。目录服务器记录被下载的文件的索引信息及下载该文件的用户的信息(主要是IP地址及端口号)。早期的BT协议只支持tracker服务器,这种目录服务器是集中式目录与分布式查询的混合型;在BT协议的升级版本中,增加了对DHT(分布式Hash表)网络的支持。 BT和eMule协议的宏观比较和分析 emule从技术层面上说是比BT好很多的,可是由于各种各样的原因,似乎在互联网上emule并不是很流行。1.传统连接方式: BT使用统一的torrent文件先作一个原下载文件的信息记录,然后客户下载后通过torrent的信息与服务器连接并下载,emule仅有一个文件ID,客户自行与服务器连接再下载;eMule的资源发布更便捷,同时资源更丰富,BT中不同种子之间的用户是分隔的,即使种子中包含的文件是相同的,BT用户之间也无法互通连接。2.底层传输协议比较: BT只使用TCP协议进行下载,协议简单有效,但是功能比较单一,有的功能不完整, emule使用TCP和UDP两种协议进行通信,更加有效的利用了网络资源,功能完整强大,但这也同时使主机的负荷加大;3.文件组织方式和数据验证方式: BT会在开始前对文件进行一次完全的HASH,就是将文件首尾相联然后按固定块取SHA值,这些值最终被放入torrent文件编码中,客户从网上一次下载完全,高效简单,一般情况下BT软件会在每小块下载完成后就对其进行HASH测试,检查其正确性 。 emule在链接字符串中只存放了整体文件的HASH值,通过将这个HASH到服务器上取出文件的相关信息,实际的操作中,会将文件分解成9.28M大小的块并进行HASH用于对块的完整性测试.新版的emul会用一种叫AICH的技术,就是说将文件分成180K大小的块然后HASH再将HASH值进行二进迭代式(具体的看emule协议)的HASH最终组成一个HASH二叉树。好处:可以在链接中只加入根结节的HASH值而不用加入叶子节点,减小了链接字符串大小,如果在最终文件下载完毕后,测试出的根节点HASH与得到的根节点的HASH值不同,则可以通过协议与网络上的其它主机的树进行比较快速得出错误的块. 4.流量控制方式: BT采用针锋相对的方式处理上传下载平衡的控制,这种方式会记录短期内与客户连接的所有节点的上传下载流量,通过在固定时间内对下载流量的比较,得出允许上传的客户;为防止新客户长时间得不到其它客户的认同,BT会在一断时间停止他的上传作为对他的警告;对于已经下载完毕的客户,BT会简单的使上传流量最大的客户得到更多的时间完成上传;为了防止在文件的最后阶段下载速度下降,BT会在最后时向所有连接的客户发送请求迅速完成下载;下载过程中,BT会对文件块在整个网络中的存在复本的多少进行跟踪,比较少的复本总是会得到优先的下载权,以使整个网络的文件冗余度提高. 简单的说BT使用的是针对文件的流量控制方式 Emule采用的是客户积分的方式,就是对所有用户的上传和下载量进行一个运算,从而得出一个客户的积分值,那些积分比较高的用户总是可以得到优先的下载权,甚至可以不进行排队直接下载,结果就是:在一个比较长的时间内对一个用户对其它用户的整体贡献有了一个评估.简单的说emule采用的是针对用户的流量控制方式5.功能与性能: emule具有查找功能,而这在BT 只能通过网站来实现.BT的方式更注重于简单高效的快速传输,而emule更注重于整个网络状态的变化及用户体验.单从下载效率上说BT占优,而从网络状态及完整强大的协议支持上说,emule作了更多的事情.从性能上考虑,在相同网络状态下,BT下载单文件的能力比较强,emule比较适合于长时间的多文件下载,对机器的使用和影响比较小,这源于两者对网络均衡及p2p模式的不同理解. BT片选择策略 1.片断选择选择一个好的顺序来下载片断,对提高性能非常重要。一个差的片断选择算法可能导致所有的片断都处于下载中,或者另一种情况,没有任何片断被上载给其它 peers。2.严格的优先级片断选择的第一个策略是:一旦请求了某个片断的子片断,那么该片断剩下的子片断优先被请求。这样,可以尽可能快的获得一个完整的片断3。最少的优先对一个下载者来说,在选择下一个被下载的片断时,通常选择的是它的peers们所拥有的最少的那个片断,也就是所谓的“最少优先”。这种技术,确保了每个下载者都拥有它的peers们最希望得到的那些片断,从而一旦有需要,上载就可以开始。这也确保了那些越普通的片断越放在最后下载,从而减少了这样一种可能性,即某个peer当前正提供上载,而随后却没有任何的被别人感兴趣的片断了。每个peer都优先选择整个系统中最少的那些片断去下载,而那些在系统中相对较多的片断,放在后面下载,这样,整个系统就趋向于一种更优的状态。如果不用这种算法,大家都去下载最多的那些片断,那么这些片断就会在系统中分布的越来越多,而那些在系统中相对较少的片断仍然很少,最后,某些 peer 就不再拥有其它 peer感兴趣的片断了,那么系统的参与者越来越少,整个系统的性能就下降。在BT系统中,充分考虑了经济学的概念,处处从整个系统的性能出发,参与者越多,系统越优化。4。随机的第一个片断 “最少优先”的一个例外是在下载刚开始的时候。此时,下载者没有任何片断可供上传,所以,需要尽快的获取一个完整的片断。而最少的片断,通常只有某一个peer拥有,所以,它可能比多个peers都拥有的那些片断下载的要慢。因此,第一个片断是随机选择的,直到第一个片断下载完成,才切换到“最少优先”的策略。5。最后阶段模式有时候,从一个速率很慢的peer那里请求一个片断。在下载的中间阶段,这不是什么问题,但是却可能潜在的延迟下载的完成。为了防止这种情况,在最后阶段,peer向它的所有的peers们都发送某片断的子片断的请求,一旦某些子片断到了,那么就会向其它peer发送cancel消息,取消对这些子片断的请求,以避免带宽的浪费。实际上,用这种方法并没有浪费多少带宽,而文件的结束部分也一直下载的非常快。6。阻塞(choking)算法 BT并不集中分配资源。每个peer自己有责任来尽可能的提高它的下载速率。Peers从它可以连接的peers处下载文件,并根据对方提供的下载速率给予同等的上传回报(你敬我一尺,我敬你一丈)。对于合作者,提供上传服务,对于不合作的,就阻塞对方。所以说,阻塞是一种临时的拒绝上传策略,虽然上传停止了,但是下载仍然继续。在阻塞停止的时候,连接并不需要重新建立。阻塞算法并不属于BT对等协议(指peers之间交互的协议)的技术部分,但是对提高性能是必要的。一个好的阻塞算法应该利用所有可用的资源,为所有下载者提供一致可靠的下载速率,并适当惩罚那些只下载而不上传的peers。BT帕累托有效是指资源配置已达到这样一种境地,即任何重新改变资源配置的方式,都不可能使一部分人在没有其他人受损的情况下受益。这一资源配置的状态,被称为“帕累托最优”(Pareto optimum)状态,或称为“帕累托有效”(Paretoefficient)在计算机领域,寻求帕累托有效是一种本地优化算法BitTorrent的阻塞算法,用一种针锋相对的方式来试图达到帕累托最优。但是算法存在以下问题:最后一个片断的问题被夸大了但是随机的第一个片断问题则被低估了.BitTorrentr的最少优先策略在允许一个拥有了大部文件片断的节点快速找到缺少的片断的效率并不好。eMule协议和片选择及搜索算法 为了最大化整个网络的吞吐量和共享,eMule仔细挑选选择块的下载顺序。基本的选择策略和分片信息是这样的:每个文件被分成9.28M的块,每部分分成180KB的片。块下载的顺序是由发送请求文件块消息(6.4.4节)的下载客户端决定。下载客户端可以在任何给定时刻从各个源中下载一个单独的文件块,所有从相同源中请求的片都在同一个块中。下面的原理(以这个顺序)应用于下载块等级:1.(可获得的)大片的频率,尽可能快的下载非常稀少的大片来形成一个新的源。2.用来预览的块(最初+最后的大片),预览或检查文件(比如,电影、mp3)3.请求状态(过程中下载),尝试向每个源询问其它的大片。在所有源之间扩散请求。4.完成(未到某种程度的完成),在开始下载另一个时应该完成获得部分的大片 频率标准定义了三个区域:非常稀少、稀少和一般。在每个区域里,标准有特定的权重,用来计算块等级。较低等级的块先下载。下面的列表根据上面的原理指定文件等级范围:l 0-9999 - 不请求和请求非常稀少的块l 10000-19999 - 不请求稀少和预览块l 20000-29999 - 不请求大部分完成的一般的块l 30000-39999 - 请求的稀少和预览的块l 40000-49999 - 请求的没有完成的一般的块这个算法通常选择第一个最稀少的块。然而,部分完成的块,接近完成的,也可能被选中。对于一般的块,在不同的源之间扩散下载。eMule和BT中DHT算法 DHT的全称是Distributed HashTable,即分布式哈希表技术,是一种分布式存储方法。这种网络不需要中心节点服务器,而是每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。和中心节点服务器不同,DHT网络中的各节点并不需要维护整个网络的信息,而是只在节点中存储其临近的后继节点信息,大幅减少了带宽的占用和资源的消耗。DHT网络还在与关键字最接近的节点上复制备份冗余信息,避免了单一节点失效问题。形象地,我们可以把整个DHT网络想象成一个大城市,那么每个客户端,就好比城市里各个角落的地图,上面绘制了附近区域的地形情况,把这些地图一汇总,城市的全貌就出来了。 而DHT所采用的算法中最出名的是Kademlia,eMule最早开始使用,Bitcomet、Azureus和BitTorrent只是步其后尘,同样使用Kademlia算法的DHT。不过它们各自的实现协议不尽相同,因此不能相互兼容(BitComet与BitTorrent兼容,Azureus更像eMule,但与其它都不兼容)。 在2005年5月著名的BiTtorrent在4.1.0版实现基于Kademlia协议的DHT技术后,很快国内的BitComet和BitSpirit也实现了和BitTorrent兼容的DHT技术,实现trackerless下载方式。emule实现的基于Kademlia类似的技术(BT中叫DHT,emule中叫Kad),和BT软件使用的Kd技术的区别在于key、value和node ID的计算方法不同. 对于BT协议,目前国内用户使用最多的BT客户端就是Bitcomet,默认情况下,无须做任何设置BitComet即可自动连接并使用DHT网络。启动软件,它会使用和TCP端口号相同的UDP端口进行DHT网络连接。任何P2P技术的改进都与版权的博奕脱不了干系,DHT网络能够引起如此注目亦是如此。确实,BT采用DHT网络后,反盗版将变得更加困难。因为在此之前,用户进行BT下载时,必需首先连接上Tracker服务器,根据所获得的正在进行下载和上传的用户列表,才能够进行正常的文件交换。这样的话,只需封禁掉提供Tracker服务的网站,便可以截断盗版传播的途径。DHT网络则不同,由于此时互联网中任何一个运行BT客户端的用户都可以作为DHT网络中的节点,因此即使封禁掉那些提供Tracker服务的网站,用户还是能够通过全球范围的逻辑DHT网络分享文件,反盗版就无从谈起。除非让世界上的人都不上网,或宣布使用BT软件为重罪。但是“技术从来都是一把双刃剑”。在批判BT助长盗版气焰的同时,我们也应该看到,BT也正在日渐成为合法作品传播的途径。由于无法承受大流量的访问,一些免费和共享软件(如Foobar2000等)开始采用 BT方式分发,大型的合法软件——Linux系统,更是将BT作为主要的分发渠道。 在eMule中也有使用,常把它叫做KAD,只不过具体实现的协议有所不同。Kad网络的主要的目标是做到不需要服务器和改善可量测性。相对于传统的ed2k服务器只能处理一定数量的使用者(我们在服务器列表也都看到了,每个服务器都有最大人数限制),而且如果服务器比较大连接人数过多,还会严重的的拖垮网络。传统的ed2k网络需要服务器支持作为中转和存储hash列表信息,kad可以不通过服务器同样完成ed2k网络的一切功能。Kad需要UDP端口的支持,之后Emule会自动按照客户端的要求,来判断它能否自由连线,然后同样也会分配一个id,这个过程和ed2k的高id和低id检查很像,不过这个id所代表的意义不同于ed2k网络,它代表一个是否“freely”的状态。 Kad能够自我组织,并且自我调节最佳的使用者数量以及他们的连接效果。因此,它更能使网络的损失达到最小。由于具备了以上所叙述的功能,Kad也被称之为Serverlessnetwork(无服务器网络)。虽然目前一直处于开发阶段(alpha stage) 。通过进行Kad关键字搜寻,任何人可以在文件分享网络中寻找资料。没有任何中央服务器储存文件索引,这项工作是平均由所有客户端担当:拥有要分享的文件的枝节点,会先处理文件的内容,并从内容计算出一组杂凑Hash值,这组值将会在分享网络中辨识这个文件。kad网络首先给每个客户分配一个唯一的ID值,然后对不同的ID值进行异或来得到两个客户之间的"距离",kad会维护一个桶,"距离"越近的用户桶里的数量会越多,kad定期对桶里的用户进行清理,以保持其有效性. 对于文件和用户emule会有两个这样的结构,可以通过kad来查找文件和文件相关的用户信息;同样为了考虑冗余的问题,kad会将其自身的信息复制一份给"距离"它最近的一定数量的用户,这样就算在它下线后,这些信息也不会丢失.Kad本身有一个nodes.dat文件,也叫做节点文件,这里面存放了我们在Kad网络中的邻居节点,我们都是通过这些节点来进入Kad网络的,相当于Bt下载中通过router来加入DHT网络。 注:在eMule具体的实现过程中,采用的ID是128bit。例如:找到用户小王则是通过将用户id异或的方式,两个id的二进位异或值决定他们之间的逻辑距离,如1100距离1101要比距离1001近。那么当一个用户加入kad后,首先通过一个已知的用户找到一批用户的id和ip地址和端口。当该用户要寻找一个特定用户A的时候,该用户先询问几个已知的逻辑距离较A较近的用户,如B用户,C用户,D用户,B,C,D会告诉该用户他们知道的更加近的用户的id和ip地址和端口,同理类推,这个用户最终就能找到A。所以寻找的次数会在logN数量级,这里N代表询问的人数。 最令人遗憾的是BT和eMule中的DHT算法无法互通和兼容!注:在Kad网络中,系统存储的数据以<key,value>对形式存放。在BT的DHT实现中,其key值为torrent文件的info_hash串,其value值则和torrent文件有密切关系。DHT技术的缺点和发展存在的问题 1。节点频繁加入和离开引起网络的抖动;网络波动的程度严重影响发现算法的效率。网络波动(Churn、fluctuation ofnetwork)包括结点的加入、退出、失败、迁移、并发加入过程、网络分割等。DHT的发现算法如Chord、CAN、Koorde等都是考虑网络波动的最差情况下的设计与实现。由于每个结点的度数尽量保持最小,这样需要响应的成员关系变化的维护可以比较小,从而可以快速恢复网络波动造成的影响。但是每个结点仅有少量路由状态的代价是发现算法的高延时,因为每一次查找需要联系多个结点。 2。DHT算法由于采用分布式散列函数,只适合于准确的查找,如果要支持目前Web搜索引擎具有的多关键字查找的功能,还要引入新的方法。原因在于DHT工作方式: 基于DHT的P2P系统采用相容散列函数根据精确关键词进行对象的定位与发现。散列函数总是试图保证生成的散列值均匀随机分布,结果两个内容相似度很高但不完全相同的对象被生成了完全不同的散列值,存放到了完全随机的两个节点上。因此,DHT可以提供精确匹配查询,但是支持语义是非常困难的。目前在DHT基础上开展带有语义的资源管理技术的研究还非常少。由于DHT的精确关键词映射的特性决定了无法和信息检索等领域的研究成果,阻碍了基于DHT的P2P系统的大规模应用。作为一种资源组织与发现技术必然要支持复杂的查询,如关键词、内容查询等。尽管信息检索和数据挖掘领域提供了大量成熟的语义查询技术,由于DHT精确关键词映射的特性阻碍了DHT在复杂查询方面的应用。 3。DHT的安全性:比如节点之间通迅和查找分工没有适当安全认证机制,存在很多安全隐患 当前下载软件的发展趋势就是集成各种协议,打通各种协议的下载(BT、ED2K(eMule)、HTTP、FTP、MMS、RTSP协议),脱兔,迅雷已经做了一部分这样的工作,但是实际效果并不好。
BT和eMule下载协议的比较和分析
最新推荐文章于 2018-12-28 18:43:50 发布