什么是 BT(BitTorrent)
BT 是一种基于对等网络(Peer to Peer)的文件共享协议,具有较强的容错性,不依赖单个分享者(初始阶段后)
BT 与中心化网盘的对比
它与其他常见的网盘(中心化网盘)的区别以一个简单的例子叙述:
假设现有一资源:
如果分享者用百度网盘这一方式分享,文件“走向”
https://excalidraw.com/#json=YycaKAsWH3osLi6NUndwy,U2_hhwEzzXX6eoFrSDgZOA
如果分享者用 BT 这一方式分享,文件“走向”
https://excalidraw.com/#json=N1mA9KiWhS2J7FzputiwR,yyKpvbwU5F-SIoZ5akufpg
(DHT、Tracker 就略过不说啦) 当你下载完成后,保持 BT 软件的开启,就成为了新的“分享者”,为更多需要这个资源的人分享。希望每个人都可以多多做种/上传 QwQ
种子(.torrent)和磁力(magnet:?)的区别
种子与磁力一样,均有两个版本:v1 and v2
种子的 infohash 等效于磁力的 xt,它们的值就是信息哈希值
详见下文
一般种子比磁力链接会记录更多的信息,磁力就像告诉你包裹的样子,种子则包括包裹内装了什么东西
(因此使用磁力时,你需要等待“元数据搜索”,就是在已知包裹外表的情况下获取包裹的更多信息)
v1
标准参考: The BitTorrent Protocol Specification
种子包含的(v1)
- announce:Tracker URL
- info:包括以下内容的字典
- name:建议保存到的文件和目录名称
- piece length:每个文件块的字节数,除了最后一块外,其它块大小相同,通常是 256 KiB/或旧版默认 1 MiB
- pieces:长度为 20 的倍数的字节串,分割为若干 20 字节段,每段是对应分块的 SHA-1 哈希值。
- length:文件的大小(以字节为单位)(一共只有一个文件时)
- files:一个字典的列表(每个字典对应一个文件),同时包括以下内容:
- path:一个对应子目录名(路径)的字符串列表,最后一项是实际的文件名称
- length:文件的大小
infohash :对 info 字典使用 bencoded 编码,再使用哈希函数计算得出(算法为SHA1)
磁力包含的(v1)
- dn:文件名
- xl:文件字节数
- xt:包含文件散列函数值的URN(SHA-1)(40个字符)
- as:在线文件的网络链接/ HTTP 源 比如:https://example.com/1.mp4(没有这个文件啦)
- xs:包含多种类型的链接,包括:指向磁力链接的文件的HTTP(S)、FTP、SFTP等下载源
- kt:用于搜索的关键字/词
- mt:链接到一个包含磁力链接的元文件/列表
- tr:Tracker URL
xt 是磁力最重要的部分(其他部分也可以说是可选的),直接指向了你需要下载的文件/目录
(事实上只要有 xt 字段就可以开始下载,但需要搜索元数据,可能会卡在这一步 QAQ)
比如
magnet:?xt=urn:btih:c5788b59890497b0fcb91e0d197afd58959dcf6
这就是一个非常简单的磁力链接(v1)(SHA-1段是用 head -c 20M /dev/urandom | sha1sum
随机生成的,实际上无效喵~)
磁力在使用上比种子文件方便许多,但下载起来可也能非常痛苦
(有些地方也会只发布信息哈希值,就是这样的:c5788b59890497b0fcb91e0d197afd58959dcf6
)(比如某站文章里的神秘40位小写字符串)
v2
标准参考: The BitTorrent Protocol Specification v2
种子包含的(v2)
- announce:Tracker URL
- info:一个字典,包括以下内容
- name:建议保存到的文件/目录名称
- piece length:每个文件块的字节数,除了最后一块外,其它块大小相同,至少为 16 KiB
- piece layers:一个字符串字典。对于文件树中每个大于指定片段大小的文件,它包含一个字符串值。
- meta version:整数值,为 2 ,指示版本
- file tree 一个字典树,含有:
- length:文件的大小(以字节为单位)
- pieces root:对于非空文件,这是一个Merkle树的根哈希,分支因子为2,构建自 16KiB 的文件块
infohash :对 info 字典使用 bencoded 编码,再使用哈希函数计算得出(算法为SHA2-256)
磁力包含的(v2)
- dn:文件名
- xl:文件字节数
- xt:包含文件散列函数值的URN(SHA2-256)(64个字符)
- as:在线文件的网络链接/ HTTP 源 比如:https://example.com/1.mp4(没有这个文件啦)
- xs:包含多种类型的链接,包括:指向磁力链接的文件的HTTP(S)、FTP、SFTP等下载源
- kt:用于搜索的关键字/词
- mt:链接到一个包含磁力链接的元文件/列表
- tr:Tracker URL
v2 的 xt 字段为 xt=urn:btmh:[1220: (v2 prefix) BitTorrent Info Hash (Hex) ]
形式
belike:magnet:?xt=urn:btih:[40位字符]&xt=urn:btmh:1220[64位字符]
以下是中文维基的链接,对 BT 下载原理感兴趣的可以阅读QwQ
https://zh.wikipedia.org/wiki/BitTorrent_(%E5%8D%8F%E8%AE%AE)
下载(以qBittorrent Enhanced Edition为例)
终于写到这里啦!
反吸血
详细的 BT 客户端列表可见 Wikipedia:
https://zh.wikipedia.org/wiki/BitTorrent%E5%AE%A2%E6%88%B7%E7%AB%AF
笔者推荐使用qBittorrent Enhanced Edition
即 qBittorrent 的“反吸血”增强版
那什么是“吸血”呢?为什么要“反吸血”呢?
这就要提知名的国产下载工具:迅雷
从上文我们知道,BT 下载时下载者之间也会互相传输文件,即使原分享者不继续做种,后续下载者也能从已下载者那里获取,如此“生生不息”。
但现实并非如此
比起“下完就跑”,有的软件在下载时只下载、不上传给其他客户端(只上传给同软件的用户,比如迅雷),(即便“下完就跑”也会贡献少量上传)
此外,迅雷有自己的服务器,会把一些 BT 资源存入其服务器,使其变得中心化、专供迅雷软件(“迅雷云盘 over BitTorrent”)。
这种行为如同“吸血鬼”,严重破坏下载环境。
qBittorrent Enhanced Edition 默认屏蔽了已知的“吸血”客户端 peer-id(客户端自报的身份标识)。
但是这也不完美
史记记载
有许多人处于各种目的 通过各种手段(伪报下载进度等)来“吸血”,建议在做种/下载时使用以下工具监测异常行为,防止被“吸血”:
https://github.com/Simple-Tracker/qBittorrent-ClientBlocker的增强自动屏蔽
自动封禁不受欢迎、吸血和异常的 BT 客户端
Tracker
什么是 Tracker?
Tracker 是一种特殊服务器,就像在线电话簿。种子的分享者可以在上传时添加 Tracker,Tracker 服务器就知道哪些人有此文件 下载者连接 Tracker 后即可快速知道哪些分享者有其需要的文件。
配置 Tracker(以 qBittorrent Enhanced Edition 为例)
以下是一些收集公共 Tracker 服务器列表的项目:
每天更新!全网热门 BT Tracker 列表 https://github.com/XIU2/TrackersListCollection
更新的公共 BitTorrent Tracker 列表 https://github.com/ngosang/trackerslist
动漫磁力链接加速方案(animeTrackerList) https://github.com/DeSireFire/animeTrackerList
例如选取 https://github.com/XIU2/TrackersListCollection 中的 Best 列表: https://cf.trackerslist.com/best.txt 然后复制列表,粘贴到 qBittorrent Enhanced Edition 的“Trackers” 面板中即可。
制作种子分享
现在你已经是一个熟练的下载者,是时候学会如何分享独家资源了
- 打开 qBittorrent Enhanced Edition 主界面
- 依次点击“工具”→“制作 Torrent”
- 选择要分享的文件/文件夹路径
- (可选)添加 Tracker 列表
- 点击“制作”并选择 .torrent 文件的保存路径
- 完成后即可分享 .torrent 文件,或在种子列表中右键→复制“磁力链接”给其他人
补充 - 种子文件的编辑
.torrent 实际上是 bencoded 编码后的文本文件
我们可以使用一些工具来查看/编辑它
比如https://chocobo1.github.io/bencode_online/,在线的编解码器
跨平台可视化 .torrent 编辑器:https://github.com/torrent-file-editor/torrent-file-editor
祝大家天天开心呀~~~
本文以CC BY-NC许可