eMule协议的ID分配

网络 网络管理
ID是非常重要的,尤其是在网络下载之中。那么我们下面就介绍一下eMule协议的ID流程。包括客户ID,用户ID和文件ID三个方面。

作为下载协议eMule协议的ID管理是整个程序运转的重点。那么在协议进行工作的时候。具体的ID是如何管理和有效分配的呢?下面我们从三个方面主要介绍一下,首先我们看一下客户ID的基本内容。

客户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客户端连接它来交换文件。

用户ID

eMule支持信用系统来鼓励用户共享文件。用户上传越多的文件给其他客户端,它接收的信 用越多,它在它们的等待队列中前进得越快。用户ID是128位(16字节)、连接随机数字创建的GUID,第6和第15字节不是随机产生的,它 们的值分别是14和111。在整个客户端和指定的服务器会话中,客户ID是有效的,然而用户 ID(也叫用户哈希)是唯一的并且跨越会话时用来识别客户端(用户ID识别工作站)。用户 ID在信用系统中扮演重要角色,这为“黑客”假冒其他用户来获得他们信用赋予的优先权提供 了动机。Emule提供加密方案设计来阻止欺骗和冒名顶替。这个实施是简单的应答交换,依 靠RSA公有/私有钥匙加密。

文件ID

文件ID用来惟一的标识网络中的文件和文件损坏侦测和修复。注意,eMule协议不依靠文件名来 惟一标识和编目文件,通过哈希文件内容计算出的GUID标识文件。有两种类型文件ID-一种 主要用来产生惟一的文件ID,另一种是用来损坏侦测和修复。

文件哈希

文件是用由客户端和基于文件内容计算出来的128位GUID哈希来标识的。GUID是应用MD4 算法到文件数据中计算而来。当计算文件ID时,文件被分成每段9.28MB长的部分。每部分 单独计算出一个GUID,然后所有的哈希组合成一个惟一的文件ID。当下载的客户端完成一 个文件部分下载时,它计算这部分哈希,然后和发送过来的这部分哈希对比,如果这部分发 现损坏了,客户端尝试通过逐渐替换这部分中的位(每个180kb)来修复损坏部分,直到哈 希计算OK。

根哈希

用SHA1算法来为每部分计算根哈希,基于每块180kb大小。它提供了更高等级的可靠性和可 修复性,更多信息可在eMule官方网站得到。

eMule协议扩展

尽管eMule完全兼容eDonkey,它还是实行了几种扩展,允许eMule两个客户端为用户提供另 外的功能。扩展只要集中在客户端与客户端的交流,特别是在安全和UDP使用领域上。在本 文档中,所有信息流图标明的信息,是eMule扩展部分的,用灰色表示。

软件和硬件限制

在活动用户数量的服务器配置中有两种限制-软件和硬件。硬件限制远大于软件限制。当活 动用户的数量达到软件限制时,服务器停止接收新的低ID客户连接。当用户数量达到硬件 限制时,服务器满了,不再接收任何客户端连接。

责任编辑:佟健 来源: 赛迪网
相关推荐

2010-06-23 15:19:35

eMule协议

2010-07-02 12:02:11

eMule协议

2010-06-23 15:43:08

2010-06-28 21:33:17

eMule协议

2010-07-13 15:36:33

2010-06-23 14:20:06

eMule协议

2010-06-23 14:55:04

eMule协议

2010-06-23 14:32:20

eMule协议

2010-08-23 17:35:46

DHCP协议

2010-08-23 17:29:27

DHCP协议

2009-12-03 17:10:43

2011-03-17 17:40:52

iptables配置

2009-01-05 09:27:19

2021-02-28 13:22:54

Java内存代码

2010-08-04 14:27:54

NFS服务端口

2023-03-26 00:43:42

JVM对象测试

2010-09-25 15:40:52

配置JVM内存

2021-08-31 23:09:27

Spark资源分配

2021-12-16 06:52:33

C语言内存分配

2010-08-31 22:29:54

DHCP分配
点赞
收藏

51CTO技术栈公众号