1. 流水线作业:
当客户端向peer发送数据请求时(即发送request消息),一次请求多个slice(即一个数据包发送多个request消息请求多个slice)。假如客户端一次
只发送一个slice请求,则peer给客户端发送完一个slice的数据后进入等待,等待客户端发送新的数据请求。如果一次发送多个slice请求,则peer
发送完一个slice后接着发送下一个slice,从而避免了等待,提高数据传输的效率。
2. 片段选择算法:
片段选择的第一个策略:最少优先。即某个piece在所有peer中的拥有率最低,则优先下载该piece。
第二个策略:最少优先。即某个piece在所有peer中的拥有率最低,则优先下载该piece。
第三个策略:随即选择第一个要下载的piece。开始下载时,不能采用最少优先策略。因为如果piece的拥有率很低,则下载到这个piece就相对较难
如果随即选择一个piece,那么更容易下载到该piece,一旦客户端下载到一个完整的piece,就可以提供给其他peer下载,而由于客户端向
其他peer上传数据,会倒在其他peer对客户端解除阻塞,从而有利于在起始阶段获得较高的下载速度。当在下载到一些piece后,客户端
应采用最少优先策略来下载数据,这虽然会导致客户端的下载速度在短期内有所下降,但随后下载速度会有较大提高。
第四个策略:最后阶段模式。有时,从一个传输速度很慢的peer处下载一个piece会花费很长时间,在下载的过程中不是什么大问题,但在下载接近
完成时,如果发生这种情况,会导致客户端迟迟不能下载完成。为了解决这个问题,在最后阶段,客户端向所有peer发送对这个piece
的某些slice请求,一旦收到某个peer发来的slice,则向其他peer发送cancel消息,只从当前这个peer处下载。
3. 阻塞算法:peer从它可以连接的peer下载文件,并根据对方提供的下载速度给予同等的上传回报,对于合作者,提供上传服务,对于不合作的,就
阻塞对方。阻塞是一种临时拒绝上传的策略,虽然上传停止了,但是下载仍然继续。在 解除阻塞时,连接并不需要重新建立。因为
阻塞过程中只是传输piece消息,其他消息,如have消息等仍可以传输