原帖:http://network.51cto.com/art/201007/209174.htm

eMule协议就是资源丰富的电驴下载了。这个软件的使用笔者也是非常喜欢的。由于一时兴起,我查找了有关于eMule协议的相关知识,整理了一下,在这里分享一下。

eMule协议的由来

eDonkey由Jed McCaleb在2000年创立。采用“多源文件传输协议”(MFTP,the Multisource File Transfer Protocol)。eDonkey索引服务器并不集中在一起的,而是各人私有的,遍布全世界,每一个人都可以运行电驴服务器,同时共享的文件索引为被称 为“ed2k-quicklink”的连接,文件前缀“ED2K://”。每个文件都用md5-hash的超级链接标示,这使得该文件独一无二,并且在整 个网络上都可以追踪得到。EDonkey可以通过检索分段从多个用户那里下载文件,最终将下载的文件片断拼成整个文件。2002年05月3日Merkur 不满意eDonkey 2000客户端并且坚信自己能做出更出色的P2P软件,于是便着手开发。凝聚一批原本在其他领域有出色发挥的程序员,eMule工程就此诞生,目标是将 eDonkey的优点及精华保留下来,并加入新的功能以及使图形界面变得更好。现在eMule的最新版本是0.48a(2007年5月20号发布)。

eMule协议是eDonkey的升级版,它的独到之处在于开源。其基本原理和运作方式,也是基于eDonkey,能够直接登录eDonkey的各 类服务器。eMule同时也提供了很多eDonkey所没有的功能,比如可以自动搜索网络中的服务器、保留搜索结果、与连接用户交换服务器地址和文件、优 先下载便于预览的文件头尾部分等等,这些都使得eMule使用起来更加便利,也让它得到了电骡的美誉。

支持BT协议的P2P应用程序很多,如BitBuddy、FlashBT、BitComet和BitSpirit等,通常BT由如下几部分组 成:.torrent文件、种子提供站点、目录服务器和内容发布者/下载者。.torrent文件是一个文本文件,包含了tracker信息和文件信息两 部分。tracker信息主要是BT下载中需要用到的tracker服务器的地址和针对tracker服务器的设置;文件信息是指将目标文件计算处理后再 根据BT协议的B编码规则网编码后得到的信息。BT的主要原理是把提供下载的文件虚拟分成小相等的块,块小必须为2Kbyte的整数次方(由于是虚拟分 块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入.torrent文件中,所以.torrent文件就是被下载文件的“索 引”。早期的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用于对块的完整性测试。新版 的eMule协议会用一种叫AICH的技术,就是说将文件分成80K小的块然后HASH再将HASH值进行二进迭代式(具体的看eMule协议)的 HASH最终组成一个HASH二叉树。好处:可以在链接中只加入根结节的HASH值而不用加入叶子节点,减小了链接字符串小,如果在最终文件下载完毕后, 测试出的根节点HASH与得到的根节点的HASH值不同,则可以通过协议与网络上的其它主机的树进行比较快速得出错误的块。

4.流量控制方式:

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

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

5.功能与性能:

eMule具有查找功能,而这在BT只能通过网站来实现。

杂谈eMule协议的由来相关推荐

  1. Ed2k协议背景介绍及eMule协议的整体架构

    笔者准备写几篇和ed2k ,eMule 源代码梳理以及 kad实现的博客.梳理源代码的目的在于让大家在看了一下原理后,想看下这些原理的具体实现(看eMule源代码)时轻松些,更有目标.所以在这里笔者也 ...

  2. eMule协议专题 | Tinyfool的开发日记(blog)

    导读: eMule协议专题 eMule协议简要分析[一] eMule协议简要分析[二] eMule协议简要分析[三] eMule协议简要分析[一] 最近我对P2p方面很有兴趣.实际上P2p并不仅仅能用 ...

  3. BT和eMule下载协议的比较和分析

    转载:http://www.yuanma.org/data/2008/0420/article_3009.htmBT和eMule下载协议的比较和分析     由于从事P2P下载引擎开发得原因,对BT和 ...

  4. Emule与bt协议小议

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 简单的说,emule与b ...

  5. Wireshark数据抓包分析——网络协议篇

    Wireshark数据抓包分析--网络协议篇 Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wiresh ...

  6. 静态路由协议的默认管理距离是_距离矢量路由选择协议

    上一节我们主要讲述了影响路由选择协议的四个因素(路径决策.度量.收敛.负载均衡),也提了一下大多数路由选择协议的分类有距离矢量和链路状态,本节我们主要讲述一下距离矢量路由选择协议: 首先说一下,该路由 ...

  7. Nexus协议,闲鱼一体化开发的幕后玩家

    Serverless是这几年兴起的一个概念,Serverless可以帮助开发者减轻甚至摆脱传统后端应用开发所需要的服务器设备的设置和运维工作,并以服务接口的方式为开发者提供所需要的功能.它希望开发者更 ...

  8. Internet控制报文协议ICMP

    我们知道,互联网的网络层提供的是"best effort"尽力而为的服务,IP协议本身并没有任何可以帮助发方测试连接性能或者了解线路故障的机制.但是对于故障和错误的处理,是必不可少 ...

  9. 【软件测试学习笔记】接口自动化测试基础-Day1 网络协议 2020-09-21

    提示:本文是根据哔哩哔哩源码视频接口测试学习笔记 目录 前言 一.OSI七层协议 1.物理层  ---  只负责传输二进制电信号(无协议) 2.数据链路层 --- 分组.广播(以太网协议) 2.1 M ...

最新文章

  1. 网速不给力,我们自己给——MinGW的手动安装与配置
  2. 多目标跟踪2021总结
  3. python之turtle库(画图)
  4. 初探Apache Kylin【麒麟】
  5. [渝粤教育] 四川农业大学 理论力学 参考 资料
  6. 系统什么时候会执行adapter的getview函数
  7. 视觉SLAM笔记(17) 李代数求导与扰动模型
  8. python 线程锁_Python多线程-线程锁
  9. pku2503 Babelfish(use bsearch)
  10. LevelDb 实现原理(转载)
  11. 怎样在VMWare虚拟机中的Windows系统使用U盘启动盘进入PE环境
  12. 数学分析教程(科大)——3.6笔记+习题
  13. thinkpad T480安装WIN7系统NVM固态硬盘+INTEL HD620显卡
  14. pygame模块实现乌龟吃鱼游戏案例
  15. Unity 法线翻转
  16. 用styler更改样式后,解决数据框中数据无法保留四位小数
  17. 苹果为M1 MacBook Air/Pro提供自助维修服务 维修成本更低
  18. PhpMyWind储存型XSS漏洞练习(CVE-2017-12984)
  19. iphone横竖屏切换,旋转屏幕
  20. series转换成dataframe

热门文章

  1. orCAD中的文本编辑框如何换行?
  2. 为什么我的服务器没有信号,服务器显示器无信号
  3. 这次经历给我埋下了学理财的种子
  4. 计算机的英语怎么拼读,拼音拼读怎么教
  5. php无法访问_php突然不能访问的原因
  6. python plc fx5u_三菱FX5U可编程控制器硬件及指令篇
  7. 国密SM2签名之公私钥及证书生成
  8. 【iOS开发】从小白到低水平开发者进厂实习自救指南
  9. Linux 安装netcdf
  10. Python正则re模块详解