tracker和DHT

在bt体系运转过程中,tracker处于中心,是”全局单点”,所有的peer都要在tracker上注册、得到其他peer,并周期性地访问tracker更新信息。所以,如果tracker出现故障,peer间无法沟通,bt崩溃。

为了解决这个隐患,也为了加速peer间相互发现,搞了个DHT网络,bitcomet和BitTorrent Beta 4.1.1都支持。也就是允许peer互相交换peer列表,这样,即使tracker垮了,bt客户端也能通过已有的peer连接不断得到其他peer。但目前,DHT只是个补充。

seed、lecher和超级种子(super seed)

制作torrent文件的客户端是第1个seed(原始种子)。其他peer开始都是lecher,下载完毕变成seed。全部peer中,seed的比例大则下载总速度快。

如果原始种子离开过早或其他peer在成为seed以后立刻离开,可能造成全部peer的数据都构不成完整文件,这个bt文件就是无法下载的废文件。所以,seed的培养是bt中的重要问题。

为解决种子问题,BTPLUS S-5.5搞了个超级种子(super seed)概念。即:

当一个客户端启用超级种子模式时,他将伪装成一个没有数据的普通客户端。当其他客户端连接时,超级种子模式将传输给他一个 从没被 传输出去的块,当所有文件块都被发出时,将意味着不需要你这个种子其他下载者就可以完成下载进程.这样将大大降低一个文件块被下载多次的几率并提高做种效 率。这个方法将提高做种效率通过两者间的高效率数据传输,从而降低多余的数据传送。并限制对贡献少的下载者 的数据传送。使用这个功能后只要上传105%的总大小就可以培养 出新种子.这比普通种子的效率高1.5 到 2倍。

但超级种子模式会极大地降低对外传输数据流量,一般只建议Torrent文件发布者(原始种子)使用。

解决peer成为seed以后立刻离开的问题,才能提高bt体系整体效果,但目前尚无好的办法。

bt服务器和客户端

bt服务器主要就是tracker。我们用的是开源的bnbt。这是后文分析和改进的重点。

bt客户端就复杂了。

一是实现很多,只要不违反bt协议,实现原理上可以完全不同。但实际上,大多数bt客户端都是在bittorrent的基础上改进的。所以后文主要分析bittoreent客户端源码。

二是bt客户端的代码比服务器复杂得多,这与一般的情况刚好相反。

三是用户可以使用任何客户端,不可能要求用户改用我们改进的客户端。所以优化改进只能以bt服务器为主。

转载请注明来自:jijian91与小z - 编程

永久链接:http://jijian91.com/blog20071012/bittorrent-architecture-detail.html