磁力链接前缀magnet:?xt=urn:btih:是什么意思

磁力2小时前发布 iowen
2 0 0

第一次看到 magnet:?xt=urn:btih: 这串字符的时候,我盯着看了半天,完全不知道它在说什么。后来折腾 BT 下载多了,才慢慢搞明白——这玩意儿本质上就是一个文件的“身份证号”,只不过用了一套比较绕的写法。下面我尽量用大白话把这串前缀拆开讲一遍,不保证面面俱到,但你看完至少能知道每个字母是干嘛的。

先看整体:magnet 是什么

magnet: 是 URI scheme,也就是协议名,类似 http: 或者 ftp:。只不过 HTTP 指向的是某个服务器上的文件位置,而 magnet 指向的是文件内容本身。维基百科上对 magnet URI 的定义是:一种通过密码学哈希值而非位置来识别文件的准标准,属于 URN(统一资源名称)的一种。百度百科也说得很直白:磁力链接不基于文档的 IP 地址或定位符,而是在分布式数据库中通过散列函数值来识别和搜索文档

翻译成人话就是:HTTP 链接告诉你“东西在哪”,磁力链接告诉你“东西是什么”。至于去哪找,后面再说。

逐个拆:xt、urn、btih 分别是什么意思

问号后面的部分是一组参数,格式跟 HTTP 查询字符串一样,参数之间用 & 隔开,顺序无所谓。xt 是第一个参数,也是唯一必须存在的参数。

xt 是 eXact Topic 的缩写,意思是“精确主题”,它包含一个统一资源名称(URN),用来定位文件。你可以把它理解成“我要找的东西,精确标识是这个”。

urn 就是 Uniform Resource Name,统一资源名称。它和 URL 的区别在于,URL 管位置,URN 管名字。在磁力链接里,urn: 后面跟的是一套命名空间,告诉客户端“接下来的哈希值是按什么规则算出来的”。

btih 是 BitTorrent Info Hash 的缩写,表示哈希方法名。这里是 BitTorrent 协议的信息哈希。同样的位置还可以放 ed2kaichsha1md5 等,取决于你用的是什么 P2P 协议。不过日常见到的磁力链接,九成九都是 btih

所以 xt=urn:btih: 连起来读就是:精确主题(xt)是一个统一资源名称(urn),该名称使用 BitTorrent 信息哈希(btih)来标识。冒号后面那串 40 位的十六进制字符,就是真正的信息哈希值,也就是那个“身份证号”。

那串哈希值到底是怎么来的

这是我觉得最值得搞清楚的一环。信息哈希(info hash)是对 torrent 文件中 info 字典部分做 SHA-1 计算后得到的 20 字节哈希值.torrent 文件用了一种叫 bencode 的编码格式,里面有两个顶层键:announce 存 tracker 地址,info 存文件名、文件大小、分块哈希等元数据。把 info 那一整块拿出来,原样做 SHA-1,得到的就是 info hash。

所以哈希值本身不包含任何“文件在哪”的信息,它只是一段指纹。同一个文件,只要 info 字典内容一模一样,算出来的哈希就一样;稍微改动一个字节,哈希完全不同。这也是为什么磁力链接天然带有去重和防篡改的属性。

客户端拿到哈希之后怎么找到文件

这是磁力链接比传统种子文件“高级”的地方,也是很多人第一次用时觉得困惑的地方。你只给了一串哈希,客户端怎么知道去哪下?

答案在 DHT 里。DHT 全称 Distributed Hash Table,分布式哈希表,本质上是一个巨大的分布式索引,把 torrent 的 info hash 映射到正在参与该 torrent 的 peer 列表(IP 地址和端口)。客户端加入 DHT 网络后会生成一个随机的 160 位 ID,然后通过硬编码的引导节点或者之前遇到过的其他客户端接入网络。要下载某个 torrent 时,它就去 DHT 网络中查找 ID 与目标 info hash 最接近的若干节点,问它们“谁有这个资源”,拿到 peer 的连接信息后开始交换数据。

所以磁力链接不需要 tracker 也能工作,前提是 DHT 网络里有足够多的节点。我实测过一个冷门纪录片,去掉 tracker 只保留纯哈希,挂了十几分钟才开始有速度,就是因为 DHT 里知道这个资源的节点太少,查找本身就要花时间。所以磁力链接的 tr 参数(tracker 地址)虽然是选填的,但填上确实能快一些,尤其是冷门资源。

除了 xt 还有哪些参数

日常粘贴的磁力链接往往不止 xt 一个参数,后面的 dntrxl 之类也经常出现

dn 是 Display Name,显示名称,就是给用户看的文件名,方便你在下载列表里辨认tr 是 Tracker 的缩写,tracker 服务器地址,可以出现多次,客户端会逐个尝试xl 是 Exact Length,文件精确大小,单位字节。ws 是 Web Seed,网络种子,支持通过 HTTP/FTP 直接从服务器拉数据,对没有 peer 的资源有一定帮助

这些参数都是选填的,缺了不影响基本下载,但填上体验会好一些。有意思的是,很多磁力链接在传播过程中,dntr 会被手动删掉,只留 xt 和哈希。腾讯云的一篇文章提到,去掉所有 tracker 信息只保留 magnet:?xt=urn:btih:哈希值,仍然可以正常下载,只是速度会慢。我自己也验证过,确实能下,但冷门资源等起来比较熬人。

跟传统种子文件比,好在哪里

最直接的一点:传播成本低。一串文本,复制粘贴就能发出去,不用上传附件,不用等网盘审核。种子文件虽然也不大,但终归是个文件,传播链路上多一步就多一份摩擦。

另一个优势是去中心化。种子文件依赖 tracker 来协调 peer,tracker 挂了种子就废了。磁力链接靠 DHT,没有单点故障。海盗湾 2012 年全面弃用种子文件转向磁力链接,很大程度上就是这个原因

但磁力链接也不是没缺点。冷门资源启动慢是常态,因为要先通过 DHT 找到 peer,再下载元数据,最后才能开始传文件。qBittorrent 里卡在“正在下载元数据”是很多人遇到的第一个坑。相比之下,直接下种子文件,元数据是现成的,省掉了查找环节。

几个使用上的提醒

第一,哈希值本身不保证资源可用。它只标识文件是什么,不保证现在还有人分享。校验失败、下载卡住,很多时候是因为源本身已经没人在做种了,跟哈希没关系

第二,不要在来路不明的磁力链接上直接下载可执行文件。磁力链接本身不携带病毒,但它指向的文件可能是任何东西。文件后缀是 .mp4.exe 或者 .zip 里套了个奇怪的安装程序,这种情况得留个心眼

第三,合规这条线还是得守住。哈希值只是数学,但通过它下载和传播的内容有版权边界。公开学习资料、开放授权的文档,用磁力链接传没问题;还在保护期内的商业内容,未经授权下载和分享,该有的风险一点不少。

说到底,magnet:?xt=urn:btih: 这串前缀翻译过来就是一句话:“我要找的东西,它的 BitTorrent 信息哈希是后面那串字符,剩下的事交给 DHT。”不神秘,就是一套去中心化的寻址机制。搞清楚之后,再看到这串东西就不会懵了。

© 版权声明

相关文章

没有相关内容!