4.3.5 下载过程
当A到达B下载队列的顶端,B就向A发起连接,A可以选择连接到B下载文件,也可以选择通过发送取消消息,取消连接(在A已经连接到其他客户端下载文件的时候)。
4.4 数据传输
4.4.1 数据包
传输和接受数据是emule网络的主要活动,emule传输的文件片大小可以在5000——15000byets之间(由是否压缩决定)。为了避免碎片,文件被分为许多小片,每个小片被封装在一个单独的TCP数据包中。Emule3.0中,最大的文件分片是13000bytes(仅仅对TCP的payload而言)。也就是说控制信息被封装在单独的TCP分片中,而数据信息被分解,用若干个TCP 数据包进行传输,第一个数据包包含文件部分的消息头,而后面的数据包只包含文件的数据部分。
4.4.2 数据传输序列
文件传输队列在请求应答之后开始,由下载者A发送上传请求,随后上传方给出应答,然后由A发出请求文件部分的请求,每个文件请求将其请求3个文件部分,但是应答方对于每个文件部分否给出应答。
当传输双方都支持扩展协议的时候,数据将会被压缩。扩展协议还支持可扩展的文件信息。
4.4.3 选择文件块下载
Emule在进行下载文件块时将选择下载的顺序以达到最优覆盖网吞吐量的目的,每个文件被分成大小位9.28MB 的部分,而每个部分又被分成180KB的小块。下载的顺序取决于客户端请求文件的文件部分请求,在某一特定时刻下载者在同一上传者只能获取一个文件部分,还有其他策略如下:
(1) 选则下载频率较高的文件块进行下载,因为新假如的客户端迫切要求得到完整的部分以便作为源,供其他客户端下载。
(2) 优先下载预览需要的文件部分(首分片+末分片)。
(3) 在下载进行中会向其他的源请求另一个文件部分。
(4) 在下载完成后,选择最短的文件部分作为下次请求的文件部分,因为文件越短,完成的越快。
频率评判标准包含三个区域:非常稀少,稀少,一般。在每个区域,频率都又特定的权重,用来计算每个部分的rating。Rating低的文件部分被优先下载。
在选择算法中,首先选择请求较少或者基本上没有请求的部分进行下载,然后选择部分完成的部分进行下载。最后是普通的部分。
4.5 查看共享文件和共享文件夹
Emule 提供了两种消息供客户端查看共享文件夹和共享文件,在初始握手之后双方就发送查看文件共享消息,并由应答方发送查看共享文件应答消息进行应答,如果应答方想要隐藏共享文件,那么应答的共享文件数就是0,而不是发送拒绝信息。
第二种信息包含请求共享文件夹的信息,回应方回应共享文件夹列表。每个共享文件夹都会返回一个对应的信息。与请求共享文件不同,如果客户端隐藏共享文件夹,将返回拒绝信息。
4.6 交换文件部分哈希集
为了对文件部分进行哈希效验,客户机之间需要请求文件的哈希信息,回应方回应含有文件各个部分哈希值的哈希值列表。
4.7 获得文件的预览
emule支持客户端对文件的预览,预览取决于文件的应用类型,在emule3.0中,仅仅支持对图片文件的预览。在请求文件预览的时候需要用到两种消息类型,文件预览请求和文件预览应答。
5.0 客户机之间的UDP通信
Emule客户机之间周期性的发送UDP 数据包进行。在emule3.0中,UDP数据包仅仅用来查询客户端在其他节点下载队列中的位置,采用简单的询问——应答方式,主要有三种类型的消息:
(1) 队列查询:客户机在下载队列中的位置
(2) 队列已满:
(3) 查询文件不可达:上传者没有下载方请求的文件。
这些数据包大概每20分钟发送一次。