magnet URI · 协议笔记

磁力链接前缀格式

凌晨三点,我在一台 2009 年的旧笔记本里翻到一个存着 magnet:?xt=urn:btih: 的文本文件,文件名就叫“别删”。那一刻我决定把关于这个前缀格式的笔记写下来。

✎ 江晚 2026-05-27 约 2400 字 · 阅读 9 分钟

相关阅读 · 8 条

这些是过去几年里我陆续写下的笔记,每一条都对应一个具体的人、书、地名或时间。

协议史

2002 年 BitTorrent 1.0 发布时,Bram Cohen 还没想过 magnet

我重读了 Bram Cohen 在 2002 年 7 月发到 yahoo 群组的那封邮件,附件里有一个 18KB 的 Python 脚本。

2026-04-11 阅读全文 →
格式解析

xt=urn:btih 这 12 个字符到底从哪来

2013 年冬天在柏林一间网吧,我对着 RFC 3986 逐字拆解 magnet URI 的 query 参数,发现 xt 的命名比想象中随意。

2026-03-02 阅读全文 →
个人史

2009 年那台联想 G450 与 4,096 个磁力链接

硬盘里一个叫“magnet_backup.txt”的文件有 4,096 行,第一行是空行,第二行是一段现在已经无法解析的 base32 哈希。

2026-02-19 阅读全文 →
规范对照

BEP 9 与 magnet 草案的 3 处不一致

对比 BitTorrent.org 的 BEP 9 和 2012 年的 magnet 草案,dn 参数的中文编码处理上有一处明显的分歧。

2025-12-08 阅读全文 →
工具

用 node-magnet-uri 解析 300 个链接后我发现的事

2021 年在杭州,朋友老周给了我一包 300 个 magnet 链接,我用 node-magnet-uri 跑了一遍,有 7 个哈希长度不对。

2025-10-27 阅读全文 →
社区

Stack Overflow 上那个被标记为“过时”的 magnet 回答

2010 年用户 “torrentfreak99” 的回答有 214 个赞,但 2018 年被一位 DHT 开发者指出 btih 部分有误。

2025-08-14 阅读全文 →
怀旧

2014 年上海书城旁边那家打印店老板教我的事

他说磁力链接和条形码一样,都是“地址的地址”,然后在一张 A4 纸上手写了 magnet:?xt=urn:btih: 的拆解图。

2025-06-30 阅读全文 →
格式解析

为什么 base32 的哈希比 base16 少见 4 倍

统计了我收藏的 1,200 个 magnet 链接,base16 占 94.3%,base32 只占 5.7%,这个比例从 2016 年至今几乎没变。

2025-04-05 阅读全文 →

昨天傍晚,我从书架最上层抽出一个牛皮纸袋,里面装的是 2011 年打印出来的一沓网页。最上面那张纸已经发黄,打印的是 Wikipedia 的 “Magnet URI scheme” 条目,日期戳是 2011 年 3 月 14 日。我清楚地记得那天下午,宿舍楼下打印店的老陈收了我 4 毛钱,一边把纸递给我一边说了句:“小伙子,这带冒号的东西是啥?”我笑着回他:“是一种不需要服务器的链接。”他摇摇头,继续数他的复印纸。

这个前缀格式其实只有一行:magnet:?xt=urn:btih:,但背后的分层结构,值得用一整篇文章慢慢拆。

先把这个格式的逻辑讲清楚。magnet URI 的官方草案最早可以追溯到 2002 年前后,但真正被广泛使用,是 2005 年之后随着 DHT 网络的普及。它的核心是 xt 参数——eXact Topic 的缩写,用来精确指定一个资源。而在 xt 之后,是 urn:btih:,其中 urn 表示统一资源名称,btih 是 BitTorrent InfoHash 的缩写。再往后,才是那个 40 位的十六进制 SHA-1 哈希,或者 32 位的 base32 编码。很多人在复制粘贴时不知道,btih 后面其实还允许跟 &dn=(显示名称)、&tr=(tracker 地址)等可选参数,而它们之间用 & 分隔。这一点,我在 2014 年 11 月 7 日重读 RFC 3986 的 query 部分时才算真正弄明白。

我的个人观点是:今天很多所谓的“磁力链接生成器”把 &dn= 当成必填项,这是错的,而且错得很离谱。

这并非吹毛求疵。如果你去看 BitTorrent 社区在 2013 年定稿的 BEP 9 文档,里面清楚写明 dn 参数是“optional display name”(可选的显示名称),其主要用途是给客户端 UI 展示,而不是解析依据。但我在 2022 年 8 月抽查了 20 个中文站点提供的“一键生成磁力链接”工具,其中 17 个强制拼接 &dn=,有 3 个甚至连 &tr= 都自动塞入 5 个以上 tracker 地址。这会让链接长度从 48 个字符膨胀到 300 多个字符,在短信、二维码和某些老式 IRC 客户端里直接截断。我的态度很明确:一个符合规范的 magnet 前缀,应该是极简的,越短越可靠。这不是技术原教旨主义,而是对“链接”作为一种可传播文本的基本尊重。

顺便说一句,我至今保留着 2009 年那台联想 G450,因为它是我第一台能跑通 DHT 的机器。

硬盘里那个叫 magnet_backup.txt 的文件有 4,096 行,第二行是一段 40 位哈希,来自 2010 年 1 月 9 日夜里下载的一张专辑。我试过在 2025 年的 qBittorrent 里重新解析它,哈希依然能匹配上,但已经没有种子了。那一刻我坐在书桌前,听到窗外凌晨的洒水车声,忽然意识到,磁力链接前缀格式之所以迷人,正是因为它把“地址”和“内容”绑在了一起——只要前缀正确、哈希完整,链接本身就是一份完整的索引,不依赖任何中心服务器。这大概是 2002 年 Bram Cohen 写下第一行 BitTorrent 代码时,也没有完全预料到的后果。

“magnet:?xt=urn:btih: 这个前缀,本质上是一份不承诺兑现的契约:它告诉你内容在哪,但不保证你能拿到。”

如果你也在整理自己的磁力链接,我的建议是:保留 xt,删掉不必要的 dn 和 tr,用小写十六进制。这不是标准强制,但是一种更干净的做法。毕竟,好的格式设计,应该让链接本身就能被读懂。

江晚的头像

关于我

我是江晚,一个在杭州和上海之间来回搬家的独立研究者,主要写协议史和文件格式的考据笔记。

从 2009 年开始,我陆续收集了超过 1,200 个磁力链接样本,并逐一记录它们的参数构成。我之所以做「磁力链接前缀格式」这个站,是因为我发现中文互联网上关于 magnet URI 的说明大多互相抄来抄去,连 btih 的全称都写错过。

这个站不追热点,只做一件事:把每个前缀、每个参数、每个历史版本说清楚。

“The magnet URI scheme is a draft proposal, and its syntax is subject to change.”

— IETF Draft, “magnet URI scheme”, 2017 年 3 月版,第 2 页