Emule与bt协议小议

简介:

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

       简单的说,emule与bt 协议两者各有千秋,下面就两种协议的异同及性能作一比较.

       1.传统连接方式

              bt使用统一的torrent文件先作一个原下载文件的信息记录,然后客户下载后通过torrent的信息与服务器连接并下载,

              emule仅有一个文件ID,客户自行与服务器连接再下载

       2.底层传输协议比较

              bt只使用TCP协议进行下载,协议简单有效,但是功能比较单一,有的功能不完整

              emule使用TCP和UDP两种协议进行通信,更加有效的利用了网络资源,功能完整强大,但这也同时使主机的负荷加大,程序编写难度提高

       3.文件组织方式和数据验证方式

              bt会在开始前对文件进行一次完全的HASH,就是将文件首尾相联然后按固定块取SHA值,这些值最终被放入torrent文件编码中,客户从网上一次下载完全,高效简单,一般情况下bt软件会在每小块下载完成后就对其进行HASH测试,检查其正确性

              emule 在连接字符串中只存放了整体文件的HASH值,通过将这个HASH到服务器上取出文件的相关信息,在实际的操作中,会将文件分解成9.28M大小的块并进行HASH用于对块的完整性测试.新版的emul会用一种叫AICH的技术,就是说将文件分成120K大小的块然后HASH再将HASH值进行二进迭代式(具体的看emule协议)的HASH最终组成一个HASH二叉树这种方式的好处是可以在连接时只加入根结节的HASH值而不用加入叶子节点,减小了连接时的字符串大小,如果在最终文件下载完毕后,测试出的根节点HASH与得到的根节点的HASH值不同,则可以通过协议与网络上的其它主机的树进行比较快速得出错误的块.

       4.流量控制方式

              bt采用有名的针锋相对的方式处理上传下载平衡的控制,这种方式会记录短期内与客户连接的所有节点的上传下载流量,通过在固定时间内对下载流量的比较,得出允许上传的客户;为防止新客户长时间得不到其它客户的认同,bt会在一断时间停止他的上传作为对他的警告;对于已经下载完毕的客户,bt会简单的使上传流量最的客户得到更多的时间完成上传;为了防止在文件的最后阶段下载速度下降,bt会在最后时向所有连接的客户发送请求迅速完成下载;在整个下载过程中,bt会对文件块在整个网络中的存在复本的多少进行跟踪,那些存在的比较少的复本总是会得到优先的下载权,以使整个网络的文件冗余度提高.简单的说bt使用的是针对文件的流量控制方式.

              Emule采用的是客户积分的方式,就是对所有用户的上传和下载量进行一个运算,从而得出一个客户的积分值,那些积分比较高的用户总是可以得到优先的下载权,甚至可以不进行排队直接下载,这样就在一个比较长的时间内对用户对其它用户的整体贡献有了一个评估.简单的说emule采用的是针对用户的流量控制方式.

       5.kad与dht

              kad和dht两者都是基于kademlia技术的分布式HASH表查找技术,可惜的是由于协议上的区别,两者不能互通.简单介绍下kad,它首先给每个客户分配一个唯一的ID值,然后对不同的ID值进行异或来得到两个客户之间的"距离",kad会维护一个桶,"距离"越近的用户桶里的数量会越多,kad定其的对桶里的用户进行清理,以保持其有效性.对于文件和用户emule会有两个这个东西,所以我们可以通过kad来查找文件和文件相关的用户信息;同样为了考虑冗余的问题,kad会将其自身的信息复制一份给"距离"它最近的一定数量的用户,这样就算在它下线后,这些信息也不会丢失.bt的 dht不太了解,呵呵,不过估计差不多.

       6.功能比较

              emule具有查找功能,而这在bt 只能通过网站来实现

              新版的emule在对防火墙的支持上采用的代理的方式,就是如果一个用户处在内网,那么它会找到一个在公网的用户作为它的朋友.bt在这方面没有明显的变化,但是不同的bt客户端实现方式有些不同的支持.

       7.总体性能比较

              个人感觉bt的方式更注重于简单高效的快速传输,而emule更注重于整个网络状态的变化及用户体验.单从下载效率上说bt占优,而从网络状态及完整强大的协议支持上说,emule作了更多的事情.从性能上考虑,在相同网络状态下,bt下载单文件的能力比较强, emule比较适合于长时间的多文件下载,这源于两者对网络均衡及p2p模式的不同理解.

       总结:无论是BT还是EMULE都是优秀的P2P下载方式,对于他们的学习,最终还是要深入到其源码内部进行研究,而对于网络均衡分布式群集模式的学习,它们起到了抛砖引玉的作用,还是那句老话,学无止境,让我们多多交流,共同进步.

本文转自 netcorner 博客园博客,原文链接http://www.cnblogs.com/netcorner/archive/2007/11/08/2912260.html  ,如需转载请自行联系原作者

相关文章
|
7月前
|
消息中间件 Java 数据库
RocketMQ实战—9.营销系统代码初版
本文主要介绍了实现营销系统四大促销场景的代码初版:全量用户推送促销活动、全量用户发放优惠券、特定用户推送领取优惠券消息、热门商品定时推送。
RocketMQ实战—9.营销系统代码初版
|
6月前
|
监控 数据可视化 API
HarmonyOS Next开发利器:DevEco Studio高效编码技巧 🚀
DevEco Studio是HarmonyOS Next开发的高效工具,助您提升编码效率与代码质量。核心功能包括:**代码阅读优化**(可视化标记、智能跳转、结构预览)、**规范维护**(自动化格式调整、注释管理)、**效率增强**(精准搜索、即时文档查阅)、**对象开发支持**(类结构分析、方法覆写)及**质量保障**(实时语法检测、自定义Linter规则)。掌握这些技巧,可显著提高HarmonyOS应用开发效率与代码可维护性!🚀
253 14
Java系列之 For input string: ““
这篇文章讨论了Java中因尝试将空字符串转换为其它数据类型(如int)时出现的`For input string: ""`错误,并提供了通过非空检查来避免此错误的解决方法。
quartus 小技巧—— 分线。例如总线data[31..0],引出的分线为data[7..0]
在数字电路设计中,总线用于并行传输数据,而分线是从总线中提取特定数据位。Quartus II,Altera(现Intel)的EDA工具,支持灵活的总线分线操作。本文介绍了两种在Quartus II中实现分线的方法:一是直接索引,如`data[7:0]`;二是使用Verilog的`extract`操作,尽管在Verilog中直接索引更常见。这些技巧有助于提升设计效率。
|
缓存 安全 程序员
易语言在跨平台开发中有哪些常见的技术挑战和解决方案?
易语言在跨平台开发中有哪些常见的技术挑战和解决方案?
216 2
|
算法 编译器 C语言
【C/C++ 编译器的差异化】C++标准库在GCC和VS之间的表现差异
【C/C++ 编译器的差异化】C++标准库在GCC和VS之间的表现差异
1426 1
|
虚拟化 云计算
云计算知识第七讲:内存虚拟化
内存虚拟化的产生源于VMM与客户系统在对物理内存的认识上存在冲突,造成物理内存真正拥有者-VMM必须对系统访问的内存进行一定程度上的虚拟化。
云计算知识第七讲:内存虚拟化
|
监控 前端开发 JavaScript
在线教育系统|线上教学系统|基于Springboot+Vue+Nodejs实现在线教学平台系统
在线教育系统|线上教学系统|基于Springboot+Vue+Nodejs实现在线教学平台系统
298 0
|
数据库 开发者
软件工程高效学 | 实践工具:Microsoft Office Visio
软件工程是计算机领域的一门专业基础课,它对于培养开发者的软件素质、提高开发者的软件开发能力与软件项目管理能力具有重要意义。本篇介绍实践工具——Microsoft Office Visio。
1058 0
软件工程高效学 | 实践工具:Microsoft Office Visio
|
存储 Unix Linux
Linux系统编程(传统信号和实时信号)
Linux系统编程(传统信号和实时信号)
176 0