BT协议也在进化
用了这么多年BT下载,我一直以为这个协议已经很成熟不会再有大改动了。直到2017年BitTorrent v2(BEP 52)正式发布,我才发现这个二十多年前的协议还在持续演进。不过说实话,到2026年了,v2的普及速度并不算快,v1仍然是绝对主流。今天来详细聊聊这两个版本到底有什么区别。
最核心的差异:哈希算法和哈希结构
v1:SHA-1 + 扁平哈希列表
BT v1使用SHA-1算法,每个数据块(piece)计算一个SHA-1哈希值,所有块的哈希值组成一个扁平的列表存放在种子文件的info字典里。Info Hash是对整个info字典做SHA-1。
这种方式简单直接,但有几个问题:SHA-1的安全性已经被证明不够强;整个种子的任何微小改动(比如改个文件名)都会导致Info Hash完全变化;无法单独校验某个文件。
v2:SHA-256 + Merkle哈希树
BT v2改用SHA-256算法,并且引入了Merkle哈希树(也叫哈希树)的结构。每个文件的分块哈希不再平铺排列,而是组成一棵二叉树,树的根哈希就是这个文件的唯一标识。整个种子的Info Hash则由所有文件的根哈希再组合计算得出。
Merkle树的好处是显而易见的:你可以只下载树的一小部分(O(log n)大小)就能验证任意数据块的完整性,不用像v1那样必须先拿到完整的哈希列表才能开始校验。
全面对比
| 对比维度 | BT v1 | BT v2 |
|---|---|---|
| 对应的BEP | BEP 3 | BEP 52 |
| 哈希算法 | SHA-1(160位) | SHA-256(256位) |
| 哈希结构 | 扁平列表 | Merkle哈希树 |
| Info Hash长度 | 40字符(Hex) | 64字符(Hex) |
| 最小分块大小 | 无限制(通常16KB起) | 16KiB(固定) |
| 分块对齐 | 跨文件边界 | 严格按文件对齐 |
| 单文件校验 | 不支持 | 支持(每个文件独立哈希) |
| 文件名编码 | info字典内嵌 | 独立file tree结构 |
v2带来的实际好处
1. 更强的安全性
SHA-256比SHA-1安全得多。虽然在BT场景中SHA-1碰撞的实际风险并不高(因为还有分块级校验),但升级到更强的算法总归是好事,尤其是考虑到BT协议可能还要用几十年。
2. 文件级去重
这是v2最实用的功能之一。因为v2中每个文件都有独立的根哈希,如果两个不同的种子包含相同的文件(哪怕其他文件不同),拥有这个文件的节点可以直接贡献数据,不需要重新下载。
举个例子:你之前下载了一部电影的合集,现在想单独下载其中某一部。v1中即使单独种子和合集种子里包含的文件完全一样,因为info字典结构不同,Info Hash也不同,客户端无法识别这是同一个文件。v2中文件的根哈希相同,客户端就能直接复用已有数据。
3. 更快的初始校验
v2用Merkle树结构,只需要树根节点的哈希就能验证任意叶节点数据块。这意味着你不需要下载完整的哈希列表就能开始验证和下载,初始等待时间更短。
4. 分块更灵活
v1中分块跨文件边界,如果某个分块刚好跨两个文件的边界,你必须等两个文件的相关部分都下载完才能校验这个分块。v2中分块严格按文件对齐,每个文件的最后一个分块后面就是下一个文件的开头,不存在跨文件的问题。
混合种子(Hybrid Torrents)
考虑到v1客户端不会一夜之间全部升级到v2,实际中广泛使用的是"混合种子"格式。一个混合种子同时包含v1和v2两套元数据,兼容两种客户端。
混合种子的Info Hash有两个:一个v1格式(40字符SHA-1)和一个v2格式(64字符SHA-256)。使用磁力古哥搜索时,你拿到的磁力链接可能是混合格式的,同时带有xt=urn:btih:(v1)和xt=urn:btmh:(v2)两种标识,这样不管你的客户端支持哪个版本都能用。
2026年的现状
说实话,v2的普及情况远没有我预想的那么好。目前的情况是:
- 主流客户端(qBittorrent、Transmission、Deluge等)都已经支持v2和混合格式
- 但绝大多数做种者仍然在制作v1种子,因为工具链成熟、兼容性最好
- 发布站点也主要还是推荐v1格式
- v2特有的文件级去重优势,在实际使用中还没有被充分利用
不过趋势是明确的——随着SHA-1被进一步淘汰,v2最终会成为主流。只是这个过渡期可能会比预期的更长。
对普通用户的影响
作为普通用户,你其实不需要太操心这个版本问题。只要你的BT客户端保持更新(推荐qBittorrent 4.4+),它会自动处理v1、v2和混合格式。你在磁力古哥搜到的磁力链接,客户端都能正确识别和下载。
总结
BT v2相对于v1的改进主要集中在三个方向:更强的哈希算法(SHA-256)、更好的数据结构(Merkle树)、更灵活的文件处理(文件级对齐和去重)。虽然v2目前还不是主流,但它代表了BT协议的正确演进方向。作为用户,保持客户端更新就行,不用刻意去区分版本。