文件分片与节点选择
- 分片机制。
BitTorrent像其他文件共享软件一样对文件进行了分片(Piece),Piece是最小的文件共享单位,每个Leecher在下载完一个完整的分片后才会进行完整性校验, 完整性校验成功后通知其他节点自己拥有这部分数据。为了加快文件传输的并行性,每个分片还会分成更小的分块(Block), Block是最小的文件传输单位,数据请求者每次向数据提供者请求一个Block的数据。
- 片选择机制。
为了保证共享网络的健壮性,延长一个共享网络的生命周期, BitTorrent通过局部最少块优先(Rarest-First)策略在节点间交换数据。下载节点根据自己周围的邻居节点拥有的数据块信息,选择拥有节点最少的分块优先下载,从而维护局部的数据块相对平衡。
- 节点选择机制。
BT系统采用了基于"Tit-for-Tat"的激励机制来抵御“Free-riding”行为,其中Choking/Unchoking算法最为关键。每个BT节点通过Internet/Uninterest消息来维护与多个节点的并发连接,但是只能为少数节点提供上传。服务提供节点在收到上传请求后会通过Choking/Unchoking机制决定是否对文件请求节点提供上传服务,可以拒绝服务(Choking)或者允许服务(Unchoking),该机制决定了两个相连的节点是否共享彼此的资源。为了防止部分节点只下载不上传的自私行为,Choking/Unchoking算法优先选择曾经为自己提供过上传数据并拥有高下载速率的节点,前者可以鼓励节点上传以获取下载,后者有助于最大化系统资源利用率。此外, Choking/Unchoking算法每隔30s将不考虑过去的贡献随机选择一个节点进行上传,一方面有利于发现可能存在更高下载速率的节点,另一方面可以避免新节点因从未进行过上传而无法获得有效的下载连接。
分片选择算法
严格的优先级
第一个策略是,一旦请求了某个分片的子片段,然后该分片余下的子片段会优先被请求,这样,可以尽可能获得一个完整的分片
最少优先
对一个下载者来说,选择下一个被下载分片时,通常选择它的peer们所拥有的最少的那个分片,即最少优先,这种技术,确保了每个peer都拥有其他peer们最希望得到的那些片段,从而一旦有需要,上传就可以开始
随机的第一个片段
最少优先的一个例外是下载开始时,此时,下载者没有任何分片可供上传,所以需尽快获得一个完整的分片,所以,第一个分片是随机选择的,直到第一个分片下载完成,才切换回最少优先的策略
最后阶段模式
有时候,peer可能从一个速率很慢的peer那里请求一个分片,为了防止这种情况,在最后阶段,peer向所有的peer都发送某分片的子片段请求,一旦某些子片段到了,就向其他的peers发送取消消息,取消对这些子片段的请求,以避免带宽浪费
动画演示
引用:
https://blog.csdn.net/hgy413/article/details/49077675
https://www.jianshu.com/p/2f8f0d9c84a4
http://mg8.org/processing/bt.html