eMule协议规范 第一章 简介

译自 Yoram Kulbak and Danny Bickson 《The eMule Protocol Specification》

翻译:lzcx

QQ:402722857

EMail: lzcx_cn@yahoo.com.cn

供学习用,转载请注明出处

 

1         简介
 
1.1  目的和范围
 
eMule是流行的文件共享程序,基于eDonkey协议。这份报告描述了eMule的网络行为和解释了理解该协议所需的基本术语。本报告也给出了eMule网络协议的完整规范,包括一个附录,它提供了消息格式。这份文档的信息是基于开源的eMule客户端。接下来的简介目的是提供基本的背景知识,让读者阅读和理解这份文档。关于eMule的更多消息在这里找到。
 
1.2  概述
 
eMule网络是由上百个eMule服务器和几百万个eMule客户端组成。客户端必须连接到一个服务器来取得网络服务,只要该客户端在系统中,服务器连接保持打开状态。这些服务器主要执行集聚索引服务(好像在Napster),相互间不联系。
 
每个eMule客户端都预配置了一个服务器列表和当地文件系统的共享文件列表。客户端用单独的TCP连接到一个eMule服务器登录到网络中,获得想得到的文件信息和客户端。eMule客户端也用几百个TCP连接到其他客户端进行上传和下载文件。每个eMule客户端对它的每个共享文件都维护着一个上传队列。要下载的客户端先加入到队列的底部,然后逐渐前进直到到达队列的顶部并开始下载它的文件。一个客户端可以从几个不同的eMule客户端中下载同一个文件的不同的文件块。客户端也可以上传它还没有完成的文件的文件块。最后,eMule扩展了eDonkey的能力,允许客户端之间交换关于服务器、其他客户端和文件的信息。注意,客户端和服务器的交流都是基于TCP的。
服务器使用了一个内部数据库,用来存储关于客户端和文件的信息。一个eMule服务器不存储任何文件,它为关于文件位置的存储信息作集聚索引。服务器的另一个功能,开始变得被抗议,是连接由于通过防火墙连接而无法接收到连接的两个客户端。这个连接功能增加了服务器的负载。相对于服务器和其他客户端,eMule使用UDP来增强客户端的能力。客户端发送和接收UDP信息的能力在日常使用中不是强制使用的,当有防火墙阻止它收发UDP信息时也能无瑕疵的运行。
 
1.2.1       客户端到服务器的连接
 
在开始启动时,客户端用TCP连接到一个eMule服务器。服务器提供一个客户ID给客户端,在整个客户端-服务器连接的生命周期里,它是有效的(注意,如果客户端有一个高ID,它会从所有的服务器中接收到相同的ID,直到它的IP地址改变)。在连接建立之后,客户端发送它的共享文件列表到服务器中。服务器把这个列表存储到它的内部数据库中,这个数据库通常包含了成百上千有效的文件和活动的客户端。eMule客户端也发送它的下载列表,包含着它想下载的文件。第二章提供了eMule客户端和服务器TCP信息交换的详细描述。
建立连接之后,eMule服务器给客户端发送用有它想下载的文件的其他客户端列表(这些客户端称作“源”)。从这点起,eMule客户端开始与其他客户端建立连接,如1.2.2所述。
注意,在整个客户端会话期间,客户/服务TCP连接一直保持连接状态。初次握手后主要是 用户活动激发事务:有时,客户端发送文件搜索需求,由搜索结果回应,一个搜索事务一般在对源中指定文件查询之后,用源(IP和端口)列表来回答这个查询,查询者可以从这列表中下载文件。
客户端和它没有连接的服务器的交流是用UDP。UDP信息的目的是增强文件搜索,增强源搜索,最后保持连接状态(确保客户端服务器列表中的eMule服务器有效)。在第三章中可找到更多的关于客户-服务UDP信息交换的细节。
 
1.2.2       客户端到客户端的连接
 
一个eMule客户端连接到另一个eMuel客户端(源)是为了下载文件。一个文件分成很多部分,进一步的碎片。客户端可以从几个(不同的)客户端中下载同一个文件来分别获得不同的文件碎片。
当两个客户端连接时,它们交换容量信息,然后协商一个下载(或者上传,根据看法)的开始。每个客户端有一个下载列表,记住一列等待下载文件的客户端。当eMule客户端下载队列空的时候,一个下载请求很可能会导致一个下载开始(除非,比如这个请求者被禁止)。当下载队列不是空的时候,就会将这个请求的客户端加入到队列中。在给定的时间内,不能为几个以上客户端各自提供最小带宽2.4k/s。一个下载的客户端可能被一个比它较高队列等级的等待的客户端抢占,在下载会话的最初15分钟内,正在下载的eMule客户端的队列等级会增加直到能防止被击溃。
当下载的客户端到达下载队列的头部时,上传的客户端初始化一个连接来给它发送需要的文件块。eMule客户端可以在几个其他客户端的等待队列中,都注册下载相同文件的块。当一个等待的客户端实际上完成了(从它们中的一个)下载文件块,它不会通知其他客户端在其队列中删除它,当它到达它们的队列头时只是简单的拒绝它们的上传意图。
EMuley用一个信用系统来鼓励上传,为了防止假冒用RSA公匙密码系统来保护信用系统。
客户端连接可能用一套eDonkey协议没有定义的信息,这信息称作扩展协议。扩展协议用来实施信用系统,一般信息的交换(像服务器和源列表的更新),通过收发压缩的文件块来改善性能。
当EMule客户端在等待开始下载文件时,有限地用UDP周期性检查在它对等的客户端上的上传队列客户端状态。
 
1.3   客户ID
 
客户ID是服务器在它们连接握手时提供的一个4字节标识符。客户ID只在客户-服务器TCP连接的生命期中有效,尽管万一客户端有一个高ID,所有的服务器都会分配它同样的ID直到IP地址改变。客户端ID分为低ID和高ID。当一个客户端不能接收一个输入连接时,eMule服务器将特有地分配给客户端一个低ID。拥有一个低ID会限制客户端对eMule网络的使用,和可能导致服务器拒绝一个客户端连接。高ID的计算是以客户端IP地址为基础的,如下所述。本节从eMule协议观点描述了客户ID的分配和重要性。允许其它客户端自由地连接到其本机上的eMule的TCP端口(默认端口号是4662)的客户端会分配给一个高ID。有高ID的客户端没限制使用eMule网络。当服务器无法打开一个TCP连接到客户端的eMule端口时,会分配一个低ID给该客户端。这主要发生在机器上装有防火墙的客户端,阻止了输入连接。当出现下面情况时,客户端也会接收到一个低ID:
l          当客户端通过NAT或代理服务器连接
l          当服务器繁忙(导致服务器重连接计时器超时)
高ID用下面的方法计算:假设主机IP是X.Y.Z.W,ID就是X+2^8*Y+2^16*Z+2^24*W。低ID总是小于16777216(0x1000000),关于它是怎样计算的,我找不到任何线索,在不同的服务器中得到不同的低ID。
低ID客户端没有其他客户端可以连接到的公网IP,这样所有的交流必须通过eMule服务器完成。这增加了服务器计算能力的负担,并且导致服务器勉强接收低ID客户端。这也意味着低ID客户端不能连接到不在同一个服务器上的其他低ID客户端,因为eMule不支持在服务器间管道连接。
为了支持低ID客户端,引入了回调机制。使用这机制,高ID客户端请求(通过eMule服务器)低ID客户端连接它来交换文件。
 
1.4   用户ID
 
eMule支持信用系统来鼓励用户共享文件。用户上传越多的文件给其他客户端,它接收的信用越多,它在它们的等待队列中前进得越快。
用户ID是128位(16字节)、连接随机数字创建的GUID,第6和第15字节不是随机产生的,它们的值分别是14和111。在整个客户端和指定的服务器会话中,客户ID是有效的,然而用户ID(也叫用户哈希)是唯一的并且跨越会话时用来识别客户端(用户ID识别工作站)。用户ID在信用系统中扮演重要角色,这为“黑客”假冒其他用户来获得他们信用赋予的优先权提供了动机。Emule提供加密方案设计来阻止欺骗和冒名顶替。这个实施是简单的应答交换,依靠RSA公有/私有钥匙加密。
 
1.5   文件ID
 
文件ID用来惟一的标识网络中的文件和文件损坏侦测和修复。注意,eMule不依靠文件名来惟一标识和编目文件,通过哈希文件内容计算出的GUID标识文件。有两种类型文件ID-一种主要用来产生惟一的文件ID,另一种是用来损坏侦测和修复。
 
1.5.1       文件哈希
 
文件是用由客户端和基于文件内容计算出来的128位GUID哈希来标识的。GUID是应用MD4算法到文件数据中计算而来。当计算文件ID时,文件被分成每段9.28MB长的部分。每部分单独计算出一个GUID,然后所有的哈希组合成一个惟一的文件ID。当下载的客户端完成一个文件部分下载时,它计算这部分哈希,然后和发送过来的这部分哈希对比,如果这部分发现损坏了,客户端尝试通过逐渐替换这部分中的位(每个180kb)来修复损坏部分,直到哈希计算OK。
 
1.5.2       根哈希
 
用SHA1算法来为每部分计算根哈希,基于每块180kb大小。它提供了更高等级的可靠性和可修复性,更多信息可在eMule官方网站得到。
 
1.6     eMule 协议扩展
 
尽管eMule完全兼容eDonkey,它还是实行了几种扩展,允许eMule两个客户端为用户提供另外的功能。扩展只要集中在客户端与客户端的交流,特别是在安全和UDP使用领域上。在本文档中,所有信息流图标明的信息,是eMule扩展部分的,用灰色表示。
 
1.7   软件和硬件限制
 
在活动用户数量的服务器配置中有两种限制-软件和硬件。硬件限制远大于软件限制。当活动用户的数量达到软件限制时,服务器停止接收新的低ID客户连接。当用户数量达到硬件限制时,服务器满了,不再接收任何客户端连接。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=599748

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值