要优化BT服务器,除了分析BT体系结构分析BT服务器源码,还需要简单了解一下BT客户端的动作。

BT架构很有意思,客户端比服务器复杂得多。现在有很多BT客户端,大多是在BitTorrent的基础上改造的,加上自己的优化,而且不开放源码。例如,国内最常见的BitComet就是如此。BitTorrent不甘于为别人做嫁衣,最近宣布停止开放源码。BitTorrent公开源码的最后一个版本是5.0.9,可以在这里下载。

BitTorrent客户端是用python写的!对不熟悉python语言的人来说(我就是),看得晕头晕脑。最后,我参考了小马哥的分析,做了个简单归纳。好在目标只是大致了解,不用仔细研究。

BitTorrent客户端主要完成以下工作:

  1. 与 tracker通讯;
  2. 与其他peer建立对等连接;
  3. 启用片断选择算法,通过对等连接从其他peer下载所需要的片断;
  4. 将下载的片断写入磁盘;
  5. 为其他peer上传指定提供片断;
  6. 启用阻塞算法,阻塞某些peer的上传请求;

其中,1在前面已经分析过了。4不是我们关心的重点。

BT客户端从tracker得到peer列表后,就要主动与这些peer建立连接,同时也接受其他peer的连接请求。这就是2的具体内容。BT客户端间建立的是对等连接,由哪一方主动发起并不重要。一旦建立,就可以双向传输文件。支持DHT网络的,还可以传输peer列表。

建立连接的2个BT客户端中,至少有一方是公网IP或两方在同一个局域网内。如果一方是公网IP,另一方在局域网内,则只能是局域网内的向公网的发出连接请求。一个BT体系下,必须存在一定量的公网用户,否则就是产生相互无法连接的问题。国内的现实情况是,多数公司、网吧和教育网都是局域网用户,所以局域网用户比例偏高。拨号上网、ISDN、ADSL用户使用的是动态公网IP,所以近年来的ADSL普及对此有缓解作用。要注意的是,公网和局域网用户只是在建立连接的时候作用不同,在连接建立后传送文件时是没有区别的。

片断选择算法相当复杂,目的是挑选“最全局价值最大”的片段进行下来。阻塞算法也是很复杂的,用于调整上下载比例,鼓励用户多提供上载作贡献,惩罚投机者。但对于BT体系整体优化作用不大,可以暂时忽略。

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

永久链接:https://jijian91.com/blog20071024/bt-client-source-code.html