因为要对一个以BT(bnbt)为核心的系统进行优化改进,上网搜了一下BT服务器和客户端的源码分析资料,所获很少(有价值只有信仰小马哥)。只好自己总结,希望能留下点有用的。

要分析和改进BT,先要了解BT的架构和先说说BT的架构。

BT角色

  • torrent发布服务器:用来发布.torrent文件
  • tracker服务器:每个bt客户端都要连上tracker获得其他peer,所以tracker是BT架构的中心、peer的信息交互中心
  • peer:BT客户端,下载兼上传者。针对某个bt文件(即1个.torrent文件所指向的文件或目录),还可以分为seed和lecher。注意,1个peer可能是某个bt文件的seed,同时是另1个bt文件的lecher。
    • seed:种子,即拥有该bt文件的全部内容的peer。
    • lecher:种子以外的peer.

BT的运行原理

按照时间顺序,依次发生的是

  1. 制作torrent文件
    指定要发布的文件或目录和tracker的URL,制作出.torrent文件。
    tracker的URL格式是http://<ip>:<port>/announce。.torrent文件中记载了tracker信息、发布者信息、上载的文件的长度和hash等,但不包含发布者服务器的信息。制作torrent文件后,就不要删除或移动发布的文件了,以免别人无法下载。
    使用bitcomet可以很方便地制作bt文件。
  2. 发布torrent文件
    将torrent文件发布给别人。现在有很多torrent发布服务器,比如btchina。其实,用什么方式发布torrent文件无关紧要,只是因为torrent发布服务器上聚集了大量bt信息,别人比较容易找,发布到论坛、网站、博客上或者发布到多个服务器上都没问题。
  3. 用户下载torrent文件。
  4. bt客户端根据torrent文件信息,访问tracker。注册自己,得到该bt文件的一组peer的ip和port列表。
  5. 根据列表,与各peer建立双向连接,开始下载/上传。
  6. 定期访问tracker,汇报本客户端的下载/上传情况,得到更多peer列表。知道下载完毕,成为seed。

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

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