用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 工具软件教程 > 上传下载教程 > eMule教程 > 文章正文
骡子跑起来的秘密 电骡协议规范之概述
iTbulo.COM 2006-7-31 佚名()


  当下载客户端到达下载队列的开始的时候,上传客户端初始化一个连接来将其需要的文件片发送给它。电骡客户端可能正在几个其他客户端的等待队列中并注册了下载同一个文件片。当从他们中的一个下载了一个完整的部分时,它不会通知剩下的客户端来让他们将自己删除,它只是将当它自己到达他们等待队列头的时候他们发送来的连接拒绝掉。

  电骡客户端使用信用系统,目的是鼓励上传、并阻止外挂(假装电骡),电骡使用 RAS 公钥加密来保护信用系统的安全。

  客户端连接可能使用一些电驴协议中没有定义的报文,这些报文叫做扩展协议。扩展协议用来实现信用系统、通常的信息交互(例如,更新服务器和源的列表)并且提高发送和接收压缩的文件分片的性能。

  电骡客户端连接使用 UDP 仅仅在有限情况下,周期性的检查上传队列中对端客户端的状态,这些客户端正在等待下载文件。

  3、客户端 ID

  客户端 ID 是在客户端和服务器之间建立连接握手的时候右服务器分配的 4 个字节标示。一个客户端 ID 在该服务器和客户端 TCP 连接的生命周期内有效,虽然万一客户端有一个高 ID 直到 IP 地址改变的时候被所有服务器分配同一个 ID 。客户端 ID 分成低 ID 和高 ID 。电骡服务器给那些不能接收输入连接的客户端通常分配一个低 ID ;由于低 ID 限制了客户端使用电骡网络,并且可能导致服务器拒绝客户端的连接。一个高 ID 是计算出来了的,基于客户端的 IP 地址按照下面的方式。本节从电骡协议的观点来描述客户端 ID 分配和意义。一个高 ID 分配给一个客户端,其允许客户端自由的连接电骡他们主机 TCP 端口(默认的是 4662 )。高 ID 的客户端使用电骡网络是没有限制的。当服务器不能打开到电骡客户端端口的 TCP 连接时,客户端将得到一个低 ID 。这通常是该客户端安装了一个防火墙其拒绝了输入连接。一个客户端在下面情况下可能也会被分配一个低的 ID :

  1) 当客户端通过 NAT 和代理服务器连接的时候

  2) 当服务器忙的时候(导致服务器的重连接定时器溢出)。

  高 ID 是按照下面的方式来计算的:假定主机 IP 是 X.Y.Z.W , ID 将是 X+2 8 *Y+2 16 *Z+2 24 *W( 大序表示方式 ) 。低 ID 始终小于 16777216(0X1000000) ,我没有找到他是如何计算的线索,注意当你有一个低 ID 的时候,不同 SERVER 是不同的。

  低 ID 的客户端没有公网 IP 地址,其他的客户端不能直接连接,因此所有的通讯必须通过电骡服务器;这增加了服务器计算负荷,导致服务器不愿意接受低 ID 的客户端。另外,这表明低 ID 的客户端不能连接到另外一个低 ID 的客户端(如果该客户端不是在同一个服务器上),因为电骡不支持跨服务器的通道。

  为了支持低 ID 客户端,引进一种回调机制,使用这种机制,高 ID 的客户端可以邀请(通过电骡服务器)低 ID 的客户端连接到它来交换文件。

  4、用户 ID

  电骡支持信用系统目的是鼓励用户共享文件。用户上传的文件越多,信誉值就或高,它在等待队列中前进的速度就越快。

  用户 ID 是一个 128 位( 16 字节) GUID ,由串联的随机数组成,第 6 和 15 字节不是随即产生的,他们的值是 14 和 111 。客户端 ID 仅仅在客户端和指定服务器会话的过程中是有效的,而用户 ID (也叫做用户 hash )是唯一的且用来表示会话中的客户端(用户 ID 表示工作站)。用户 ID 在信誉系统中扮演重要的角色,这给黑客们假装其他用户来得到他们权限提供了动机。电骡支持一种加密模式,其设计为防止欺骗和假装用户。这个实现是一个简单挑战响应,依赖于 RSA 公钥 / 私钥加密。

  5、文件 ID

  文件 ID 用来唯一的标示网络上的文件以及文件损坏检查和恢复。注意,电骡并不依赖于文件名称,目的是唯一标示和索引。一个文件通过全局唯一的 ID 来标示,通过哈希文件的内容来计算。有两种文件 ID :第一种主要用来产生唯一文件 ID ,第二中用于损坏检查和恢复 [3] 。

  1) 文件哈希

  文件通过 128 位 GUID 哈希来唯一标示,通过客户端和基于文件的内容来计算。 GUID 使用 MD4 算法 来基于文件的数据计算。当计算文件 ID 时,文件被分成 9.28MB 长的段。一个 GUID 是为每个单独的段来计算的,然后将所有的哈希合并到一起形成一个唯一的文件 ID 。当一个下载客户端完全下载一个文件的所有部分时,他计算部分的哈希并和对端发送的哈希部分比较,如果发现那部分损坏,客户端尝试从损坏的部分渐进替换位( 180kb 每次)然后直到哈希计算是正确的为止。

  2) 根哈希

  根哈希使用 SHA1 算法来为每个部分计算,基于 180kb 的块大小。这提供较高级别的可靠性和错误恢复。官方的电骡网站有更详细的信息。

  6、电骡协议扩展

  尽管电骡完全兼容电驴,它还另外实现几个扩展,这允许电骡客户端为他们的用户提供更好的功能。扩展关注于客户端和客户之间的通讯,特别是安全和 UDP 的实现。本文的所有消息流程图中扩展部分都是灰色的。

  7、软硬限制

  服务器配置包括良种限制基于活动的用户数 - 软和硬。硬限制大于等于软限制。当活动用户数量达到软限制时,服务器停止接受新的低 ID 客户端连接,当用户数达到硬限制时,服务器是满负荷的,不能接受任何客户端连接了。

上一页  [1] [2] 

文章搜索
相关资讯
相关文章 相关下载
三分钟玩转电骡
电骡入门手册:第九课——养成良好的骑骡习惯
电骡入门手册:第八课——代理和高ID、低ID
电骡入门手册:第七课——骡儿快快跑
电骡入门手册:第六课——电骡设置
焦点信息