eMule协议与BT协议一样,同样都是文件传输协议。那么与BT协议有什么差别呢?现在我们就来详细介绍一下这个协议的基本功能。eMule网络是由上百个eMule服务器和几百万个eMule客户端组成。客户端必须连接到一个服 务器来取得网络服务,只要该客户端在系统中,服务器连接保持打开状态。这些服务器主要 执行集聚索引服务(好像在Napster),相互间不联系。
每个eMule客户端都预配置了一个服务器列表和当地文件系统的共享文件列表。客户端用单 独的TCP连接到一个eMule服务器登录到网络中,获得想得到的文件信息和客户端。eMule客户端也用几百个TCP连接到其他客户端进行上传和下载文件。
每个eMule协议客户端对它的每 个共享文件都维护着一个上传队列。要下载的客户端先加入到队列的底部,然后逐渐前进直 到到达队列的顶部并开始下载它的文件。一个客户端可以从几个不同的eMule客户端中下载 同一个文件的不同的文件块。
客户端也可以上传它还没有完成的文件的文件块。***,eMule协议扩展了eDonkey的能力,允许客户端之间交换关于服务器、其他客户端和文件的信息。注意 , 客户端和服务器的交流都是基于TCP的。
服务器使用了一个内部数据库,用来存储关于客户端和文件的信息。一个eMule服务器不存 储任何文件,它为关于文件位置的存储信息作集聚索引。服务器的另一个功能,开始变得被 抗议,是连接由于通过防火墙连接而无法接收到连接的两个客户端。这个连接功能增加了服 务器的负载。
相对于服务器和其他客户端,eMule协议使用UDP来增强客户端的能力。客户端发 送和接收UDP信息的能力在日常使用中不是强制使用的,当有防火墙阻止它收发UDP信息时也能无瑕疵的运行。
客户端到服务器的连接
在开始启动时,客户端用TCP连接到一个eMule服务器。服务器提供一个客户ID给客户端, 在整个客户端-服务器连接的生命周期里,它是有效的(注意,如果客户端有一个高ID,它 会从所有的服务器中接收到相同的ID,直到它的IP地址改变)。在连接建立之后,客户端发 送它的共享文件列表到服务器中。服务器把这个列表存储到它的内部数据库中,这个数据库
通常包含了成百上千有效的文件和活动的客户端。eMule客户端也发送它的下载列表,包含 着它想下载的文件。第二章提供了eMule客户端和服务器TCP信息交换的详细描述。
建立连接之后,eMule服务器给客户端发送用有它想下载的文件的其他客户端列表(这些客 户端称作“ 源” )。从这点起,eMule协议客户端开始与其他客户端建立连接,如 1.2.2所述。
注意,在整个客户端会话期间,客户/服务TCP连接一直保持连接状态。初次握手后主要是 用 户活动激发事务:有时,客户端发送文件搜索需求,由搜索结果回应,一个搜索事务一般在对源中指定文件查询之后,用源(IP和端口)列表来回答这个查询,查询者可以从这列表中 下载文件。
客户端和它没有连接的服务器的交流是用UDP。UDP信息的目的是增强文件搜索,增强源搜 索,***保持连接状态(确保客户端服务器列表中的eMule协议服务器有效)。