BitTorrent协议

BitTorrent协议

 作者:小王子    撰写日期:2011.09

             最近在看一个用peersim模拟的BitTorrent文件共享系统,由于之前不是很了解BitTorrent协议,所以翻译了这个协议,具体的算法实现以后有空再翻译一下。


 一、共享文件

       要用BitTorrent协议分享一个文件,你需要在网站上发布一个a.torrent文件,该文件包含如文件名,文件长度,hash信息,tracker地址等信息。

       覆盖网络(overlaynetwork)里拥有a.torrent文件的特殊节点允许所有的节点知道其他那些已经对该文件感兴趣的节点。一旦一个节点请求,tracker服务器就会返回提供一个50个随机的节点集合,该节点集合可能包含文件的一部分或者全部。假如本地节点在另一个节点的节点集合中(例如:被tracker服务器返回的想要下载该文件的邻居节点的集合)则该邻居节点集合会增加。假如一个节点的邻居节点的数目小于20则这个节点会再次联系tracker服务器并获得一个新的节点集合。一个节点最多只有80个邻居节点。

       一开始决定分享的节点拥有文件的全部,为了正确的分享该文件,网络中必须要有该文件的所有片段的至少一份拷贝,除此之外该文件的下载不会完成。拥有文件所有片段的节点称为sender,其他的称为leecher。分享同一个文件节点的集合称为swarm。

 

二、文件结构

       在一个节点中,一个文件被分割成大小为256K的若干片段,每个片段分成若干个大小为16K的子片段(或者块)。假如一个片段下载失败,这该片段需要全部重新下载。将文件分块可以提高预计下载时间的准确度,同时能够从一个低带宽的节点获得一个片段的快速下载。属于同一片段的不同块可以从不同的节点同时下载。在下载完成一个片段后该节点需要向邻居节点发送一个HAVA信息。

 

三、片段选择

(1)严格优先级(StrictPriority)

       这规则的意思是下载同一个片段的块直到片段的下载完成。需要有5个显著的块请求,一旦一个块下载完成,另一个请求将被发送。当所有的块请求被发送,则一个新块的INTERESTED信息将被发送。

(2)稀缺优先(RarestFirst)

       这个规则引导下一个片段的下载选择,该规则要求在节点集合中低频(数量少)的片段优先下载,这确保网络中只有一个sender,每个节点不能并行的下载同一个片段,但这降低了性能。每个节点维护他们在邻居节点列表中的片段拷贝数集合。这个集合称为稀缺片段集合,该集合在节点集合中的一个片段下载完成后或者一个邻居节点离开后更新一次。这个规则再下载刚开始时使用的一个例外是:当本地节点第一次加入网络时,本地节点没有任何片段提供给其他的节点,更重要的是它有可能没有任何的片段。假如选择最稀缺的片段,由于片段稀缺,这些片段可能只存在一个节点中同时又不能在不同的节点下载不同的在片段,则会使得下载十分的缓慢。为了避免这种情况,最初的四个片段采用随机选择的策略。

(3)残局模式(Endgamemode)

       当一个piece中的blocks都发出请求后,每收到一个block,都发送一条cancelmessage来撤销对其他拥有该piece的peer的block请求。这个mode一般用于快下载结束时,因此对整体性能没有太大影响。

 

四、阻塞算法(Choking algorithms)

       该算法主要管理网络中的下载速率。每个节点都通过“以牙还牙,针锋相对”(tit-for-tat)的哲学来试图获得最大的下载速率。这个策略来源于游戏概念,一个游戏者(在我们的case中就是节点)只会和它做同样事的节点合作。这种协作的原则是乐于交换信息的组件获益。阻塞的概念是一个节点暂时的拒绝为另一个节点上传片段。主要的意图是为上传和下载流量间提供一个通讯,以获得双向连接。

 

五、疏通算法(Unchoking algorithm)

       目标是找到四个上传的节点。通过邻居节点的最后20秒的平均下载速率进行降序排列,来选择前3个节点。每10秒选择哪个节点阻塞或者疏通。最后一个节点的选择是使用尝试性疏通(optimistic un-choke)即每个30秒钟在邻居列表了随机选择一个。假如本地节点是sender,这疏通节点是在每个平均上传降序列表中获得,这就确保了一个文件的快速共享。

你可能感兴趣的:(BitTorrent协议)