最近在看eMule的协议,觉得不错,翻译了一些!下面帖出来开始部分(止于1.2.1),很乱在不断整理中

最近在看eMule的协议,觉得不错,翻译了一些!下面帖出来开始部分(止于1.2.1),很乱在不断整理中

1 介绍

1.1 目的和范围

  eMule是一个基于eDonkey协议的流行文件共享应用程序。这份文档描述eMule的网络行为方式,以及为了更好理解这份协议的一些基本术语。同时,文档也对eMule网络协议做了全面的说明,其中还包含一个详述消息格式的附言部分。这份文档信息基于一个开源客户端软件eMule【2】。接下来的一些介绍是为读者能更好的去阅读和理解这份文档的一些一般性的背景知识。关于eMule的更进一步的信息可以在【3】中找到。

1.2 概述

  eMule网络由几百个eMule服务器和数百万个eMule客户端组成【1】。客户为了得到网络服务需要连接一个服务器;只要客户端在系统中,服务器连接就一直保持打开状态。服务器提供中心索引服务功能(象在Napster中一样),不和别的服务器通信。

  每个eMule客户端在本地系统中预先配置好一个服务器列表和一个共享文件列表。一个客户端使用单一TCP连接连接到eMule服务器来登入eMule网络,去获得文件和可连接的客户端信息。eMule同时也使用数百个到别的客户端的TCP连接去下载和上传文件。每个eMule客户端他的每个共享文件维护一个上载队列。下载客户加入队列,进入队列底部,逐步上移直到队列的顶部开始下载文件。一个客户可能从几个不同的客户端下载同一个文件,从每一个客户端上面得到不同的片断(fragments)。客户也可能上载文件数据块(chunks),即使这个文件还没有下载完成。最后,eMule还扩展了eDonkey协议,允许客户之间交换服务器、别的客户和文件信息。这里值得注意的是,客户跟服务器的通信是基于TCP的。

  服务器启用一个内部数据库来保存客户和文件信息。eMule服务器不保存任何文件,它扮演中心索引的角色,保存文件位置信息。服务器的一个额外桥接功能,同时也引来无数抗议的一个功能就是穿越防火墙,使得躲在防火墙后不能够接受引入连接的客户得到解放。桥接功能极大的增加了服务器的负担。eMule启用UDP加强客户性能来应对服务器和别的客户端的连接。客户接收和发送UDP消息不是强制性的,如果防火墙阻止客户发送和接收UDP消息,这不会妨碍正常运转。

1.2.1 客户到服务器的连接

  在启动的时候,客户使用TCP连接到单个eMule服务器。服务器提供客户一个客户ID(1.3节),这个ID只是在客户服务器连接生命期有效(这里有一点需要注意:如果客户拥有一个High  ID,那么只要他的IP地址不发生改变,客户就会从所以的服务器上得到同一个ID)。紧接着连接的建立,客户端会发送他的共享文件列表给服务器。服务器把这个列表信息保存他他的内部数据库中,通常数据库中存有数十万个可获得的文件和活动客户信息。同时,eMule客户端也发送他的下载列表,包含他希望去下载的文件。第2节会提供客户和服务器TCP信息交换的详细描述。

  连接建立后,eMule服务器发送给客户一个别的客户的列表,列表中的客户可以为当前客户提供文件下载源(这些客户理所当然就被称为“sources”)。紧跟其后,客户开始和别的客户建立连接,1.2.2节对此有详细描述。

  值得注意的是:客户服务器的TCP连接在整个客户会话阶段都保持开的状态。初始握手之后,客户服务器事件主要由用户活动触发:有时候,客户发出文件查找请求,请求被查找结果作为答复;文件查找之后通常紧跟着一个特定文件源的查找,这个查询以源列表(IP和port)作为答复,发出请求的客户可以从源端下载特定文件。

  客户使用UDP和别的服务器(未建立TCP连接的服务器)通信。这种通信增强文件和源查找,保证客户端服务器列表中所有的服务器是当前有效的。关于客户服务器UDP连接的细节可以在第三章中找到。

 

你可能感兴趣的:(最近在看eMule的协议,觉得不错,翻译了一些!下面帖出来开始部分(止于1.2.1),很乱在不断整理中)