bt种子的格式及文件结构 bt种子是什么意思


bt种子的格式及文件结构 bt种子是什么意思


[ 虎娃导读 ] -文字稿-如果你想要下载一集不存在的回形针视频 , 你会怎么做?最简单的方法当然是找一个有资源的哥们——每羊 , 让他把这期视频发给你 。早期互联网 , 大家就是这么共享文件的 , 但是这样也有很多问题 。
比如下载的人一多 , 每个人分配到的带宽就变小了 , 下载速度会变慢 。更危险的是 , 这期视频是敏感资源 , 你的哥们本来就不应该分享给你 , 如果每羊被抓了 , 大家也都别下载了 。
针对这些问题 , 美国工程师 Bram Cohen 在 2001 年发布了 BitTorrent 协议 , 资源不再由一个人或一个中心服务器提供 , 而是所有人提供给所有人 , 下载的人越多 , 速度越快 。这种模式也叫 peer-to-peer(用户群对用户群) , 也就是我们常说的 P2P 下载 。
BitTorrent 的核心思想是把文件分成很多个小块 , 让下载者互相连接 。
以这支 117.3 MB 的视频为例 , 被分成了 895 个 128kB 的文件块后 , 下载了第 306 块的用户 A 就可以和下载了第 11 块的用户 B 交换彼此下载好的部分 。参与的人越多 , 互相交换的就越密集 , 下载的越快 。
为了做到这一点 , BitTorrent 协议需要资源共享者生成一个包含下载信息的种子文件 , 后缀是 .torrent , 这就是我们常说的 BT 种子 。
种子文件包含文件的名字、大小 , 分块后每块文件的大小、哈希值 , 以及 Tracker 服务器的地址 。
Tracker 很重要 , 通过 Tracker 我们才能找到其他下载者的联系方式 。
当你用下载软件打开种子 , 就会开始联系种子文件里内置的 Tracker 服务器 , 告诉 Tracker 我要下载这个文件 , 服务器会记录下你的 IP , 并把其他正在下载或下载完成的人的 IP 返回给你 , 这样你们就可以愉快的组队下载了 。
当然 , 如果没有找到正在下载的人 , 资源发布者也不在线 , 你就只能以 0kb/s 的速度等着了 。
不难发现 , Tracker 服务器是 P2P 网络的弱点 , 如果 Tracker 被关闭或封禁 , 你就无法找到同伴 , 也难以完成下载 。
为了摆脱对 Tracker 服务器的依赖 , 今天最流行的下载方式是磁力链接(Magnet URI scheme) , 通常是一串这样的神秘代码:
magnet:?xt=urn:btih:1a427c8498f72b9a27fde87662dbeb6fc043fc47
前面都是标准格式 , 最重要的是这 40 个 16 进制的数字 。任何文件丢进哈希算法都能得到一串这样字符 , 40 位、16 进制、只属于这个文件 。你可以把它当成一个文件 ID , 它能帮我们找到我们要下载的东西 。
磁力链接的本质是把所有人都变成一个小型 Tracker , 每个人都拿着一份动态更新的地址和文件信息 。我找与我连接的 10 个人 , 他们再各自找 10 个人 , 一传十十传百、千、万 , 最后是我找到小明小明找老王老王找郭冬临郭冬临找到每羊 , 我和每羊就连上线了 。
但这种所有人找所有人的方案其实不太行 , 不仅占用了大量的资源 , 效率也非常低 , 还有可能重复传播 , 造成广播灾难 。
这时 , 就需要补充一个关键信息——距离 。
注意 , 这里的距离 , 不是空间上的距离 , 而是逻辑上的距离 。
重点来了!接下来 , 我会详细解释磁力链接使用的 DHT 网络的构建过程 , 有一点点难 , 但是真的非常有意思 。让我们开始吧 。
刚刚说了 , 每个磁力链接都有一串唯一的文件 ID , 可以产生 2 的 (4*40) 即 2 的 160 次方种组合 , 用只有 0 和 1 的二进制表示就是 160 个 0 和 1 。
而每个节点也有一串 160 位的 0 和 1 , 作为节点 ID 。根据这 160 位数 , 我们可以计算节点和节点之间 , 节点和资源之间的距离 。

推荐阅读