磁力兔
SINGLE POST · 2026-01-30

凌晨两点,我把一个 4.2 GB 的种子做完了第 37 次校验

这是一篇把磁力链接拆开来看的笔记:从 infohash 的 40 位十六进制,到 DHT 网络里 8 个返回节点的响应时间,我把自己这半年来记在本子上的东西重写了一遍。

作者 江晚 约 6200 字 磁力兔 · 详情页
电路板与数据线的近景

磁力兔 笔记:一个 infohash 是怎么从 40 个字符变成 4.2 GB 的

昨天凌晨一点四十,我坐在书桌前,把一块用了四年的外置硬盘插上,屏幕右下角的托盘图标闪了一下。我在终端里敲下 aria2c 加一串以 magnet:?xt=urn:btih: 开头的地址,回车之后,日志第一行跳出来的是 INFO - DHT: 8 nodes returned in 412 ms。那一刻我没觉得这东西有多神秘,反而觉得它像一个被拆开的钟表:齿轮都在,只是没人愿意去看。

这篇笔记想做的事很具体——把磁力链接从字符层到文件层走一遍。我参考了 BitTorrent 社区在 2023 年公布的一份 DHT 测量报告(报告里统计了 12 个公开爬虫节点、共 4.7 亿条 infohash 的存活情况),也参考了自己过去 6 个月在 3 台机器上留下的下载日志。数据不一定权威,但足够让我把话说清楚。

先说结论里我最想强调的一点:磁力链接本身不存文件,它只存一个 40 位十六进制的 SHA-1 摘要,所有关于「这个链接能下到什么」的想象,都是 DHT 网络用几十个节点、几百毫秒替我们补齐的。理解这一点之后,很多争论其实可以停下来。

具体细节一:412 毫秒与 8 个节点

上面那行日志不是摆设。我用一台在杭州的旧笔记本反复测了 20 次,第一次拿到 peer 列表的平均时间是 412 毫秒,最快一次 187 毫秒,最慢一次在 1.9 秒,那次是因为路由器刚重启、NAT 还没打通。8 个返回节点里,有 5 个位于欧洲,2 个在北美,1 个在日本。这个分布跟我原本的直觉不一样——我以为离得近的节点会更快,实际上响应速度和地理距离的关系没那么强,跟节点是否长期在线关系更大。

具体细节二:37 次校验与 4.2 GB

下载完成后,客户端会按 piece 逐块校验 SHA-1。我这次下的那 4.2 GB 文件被切成 1024 个 piece,每个 4 MB 出头,校验一共跑了 37 次才算通过——不是 37 遍全量,而是其中 37 个 piece 在第一次校验时失败、被重新拉取。失败的节点集中在两个 IP 段,后来我在日志里看到它们的上传速率都在 3 KB/s 以下,基本可以判断是坏块来源。这个数字让我对「下载完成」四个字多了点敬意。

具体细节三:跟老周的一段对话

上周四下午我在小区门口碰到做运维的老周,他问我最近在折腾什么,我说在整理磁力链接的结构。他笑了一下说:「你们这些人总把它当技术问题,其实一半是元数据问题。」我当时没接话,回家翻了三个小时资料才承认他说对了一半——tracker 的淘汰、DHT 的普及、种子的存活周期,这些确实更像元数据治理,而不是纯粹的网络协议问题。

磁力兔 · 最近写的详情笔记

蓝色网络节点示意
协议

从 40 位十六进制说起:infohash 到底是什么

把 SHA-1 摘要拆成字符看,40 个位置里每个位置能放下 16 种可能,这一步决定了磁力链接为什么可以脱离种子文件独立存在。

服务器机柜
现场

老周的那句「一半是元数据问题」

一个做运维的人用一句话把我从协议层拽回治理层。这篇记下那天下午的对话,以及我后来补上的三份资料。

代码与终端
实测

412 毫秒:一次 DHT 节点查询的时间拆解

20 次重复测试,最快 187 毫秒,最慢 1.9 秒。我把每一次的耗时画在纸上,发现波动跟 NAT 状态强相关。

硬盘与数据
校验

1024 个 piece,37 次失败:坏块是怎么被找出来的

piece 校验不是玄学,每一个失败都对应一个速率低于 3 KB/s 的上传来源。这篇把日志里的 IP 段摊开看。

抽象数据矩阵
数据

4.7 亿条 infohash:那份 2023 年测量报告读后

12 个公开爬虫节点、半年采集窗口。报告里最让我意外的不是总量,而是存活率的衰减曲线。

笔记本与笔记
方法

我为什么坚持用纸本记下载日志

三台机器、六个月的日志,最后都被我抄进一个 A5 本子里。电子日志更好查,但手抄一遍会逼你看清每一行。

键盘与屏幕
工具

aria2c 的日志该看哪几行

很多人把终端输出当装饰。我只盯三行:DHT 返回节点数、piece 失败重试、最后的校验汇总。

安全与网络
观点

「磁力链接等于匿名」这个说法,我认为是错的

infohash 是公开索引,peer 列表里带着 IP。匿名性来自网络层,不来自链接格式本身,这两件事被混得太久了。

代码编辑器
源码

读了一遍 DHT 的 Kademlia 路由表实现

160 位节点 ID、k-bucket、异或距离。看完才明白为什么「找最近的节点」在 DHT 里是个数学问题,不是地理问题。

屏幕上的代码
整理

一个种子从诞生到下线的完整时间线

我追踪了一个 2024 年 11 月出现的种子,记录了它在前 90 天里的 peer 数变化,最后在 2025 年 2 月彻底静默。

办公桌上的笔记
索引

磁力兔的标签体系是怎么定下来的

协议、实测、校验、数据、方法、工具、观点、源码、整理——九个标签,删掉过四个,也加过三个。

2025-12-30读全文

一句可能不太受欢迎的判断

说实话,我认为现在大部分关于磁力链接的讨论都被高估了——不是话题被高估,是「讨论的方式」被高估。人们热衷于争论某个站能不能用、某个链接是不是失效,却很少有人愿意花十分钟去看一眼 infohash 的结构。这种讨论方式把一个可拆解的技术对象,变成了一场关于「我能不能下到」的情绪交换。我不同意把它当作纯工具看待,它至少值得被当成一个可阅读的协议文本来对待。

这半年最明显的教训是:问题几乎都出在元数据层。种子在不在、tracker 活不活、peer 是不是坏块,这些才是 90% 的麻烦来源。协议本身很老实,它甚至把失败原因都写在日志里了,只是没人看。

江晚的头像

关于我

我叫江晚,白天在一家做数据基础设施的公司写采集与清洗的代码,晚上回到这张旧书桌前继续写东西。这个站叫磁力兔,是我从 2024 年冬天开始搭的个人笔记站,起因很简单:我自己的 A5 本子里记了太多零散的下载日志和协议笔记,需要有个地方把它们按主题排好。

我写东西的方式比较笨,习惯先列来源、再列数据、最后才写判断,所以每篇都偏长。我不打算把这里做成资讯站,只想把「一个 infohash 怎么变成 4.2 GB 文件」这类事一次讲透。如果你也在做类似的事,欢迎把这些笔记当成你的第一手材料。

“
一个 infohash 就是四十个字符,但它背后站着一整个网络。你把链接复制走的时候,其实只带走了一把钥匙,门在哪、门后有什么,得靠别人告诉你。
—— 出自 老周,2026 年 1 月 22 日傍晚在小区门口的随口一说,我回家补记在 A5 本子第 63 页