-文字稿-

如果你想要下载一集不存在的回形针视频,你会怎么做?

最简单的方法当然是找一个有资源的哥们——每羊,让他把这期视频发给你。早期互联网,大家就是这么共享文件的,但是这样也有很多问题。

比如下载的人一多,每个人分配到的带宽就变小了,下载速度会变慢。更危险的是,这期视频是敏感资源,你的哥们本来就不应该分享给你,如果每羊被抓了,大家也都别下载了。

针对这些问题,美国工程师 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 位数,我们可以计算节点和节点之间,节点和资源之间的距离。

假设每羊发布了一个文件,就能计算他所知道的节点 ID 与这个文件 ID 的距离,让算出来最距离最短的节点再计算它知道的节点和文件 ID 的距离,重复这个过程,就能找到与文件 ID 的距离最短的一批节点 ID,把每羊提供的下载信息存在这里。

这样,下载者也只要找到和文件 ID 距离接近的节点 ID,就能建立连接,开始下载。

但这个距离到底是怎么算出来的呢?

这就是有趣的地方了,用异或算法来计算节点之间的逻辑距离,相同就是 0,不同就是 1。

为了方便你理解,我们简化一下模型,把 160 位缩减到 4 位。假设你的节点 ID 是 0100,目标节点 ID 是 1111,那么你们之间的二进制距离就是 1011,换算成十进制就是 11。

有了距离,我们就可以在一个这样的二叉树里快速查找目标了。

所有可能的节点 ID 都在这棵二叉树上。 4 位数需要分叉 4 次,生成 2 的 4 次方即 16 条路径,每条路径的终点,就是一个节点 ID。

接下来,你作为 0100,就可以拆分这颗二叉树了,从第一次分叉开始,把不包含你的那棵子树拆分,然后在剩下的子树的第二次分叉处再次拆分,直到只剩下你自己。

这样,就拆分出了 4 个子树。

我们在每个子树里选 2 个点,就得到了 4 个 K 桶,呃,不是这个,是这个,K-bucket。

暂停下来想想你就会发现,用异或算法计算 0 号 K 桶和你的距离是 0001,换算成十进制就是1,1 号 K 桶里 2 个点和你的距离是 2-3,以此类推,2 号 K 桶的距离区间是 4-7,3 号 K桶的距离区间是 8-15。

我们刚刚算过,你的节点 ID 0110 和目标 ID 1111 之间的二进制距离是 1011,换算成十进制是 11,也就是说,离 1111 最近的,肯定是 3 号 K 桶里的 2 个节点。

接下来,我们就可以联系这两个节点,让他们帮我们找 1111。

以 1110 为例。1110 也能拆分出 4 棵子树,得到 4 个 K 桶,计算 1110 和 1111 之间的距离,结果是 0001,换算成十进制是 1,也就是在 0 号 K 桶,1111 就在这里。

这种网络结构被称为 DHT,分布式哈希表(Distributed Hash Table),一个高宽容度的去中心化网络。只需要一串文件 ID和存储在本地的 K 桶数据,你就可以高效的找到要下载的文件。

而资源的发布者和传播者也只需要分享 40 个数字就好,足够简单,方便和隐私。

在真实的 DHT 网络,每个 K 桶至少记录了 8 个节点,任何一个节点下线,都不会影响整个网络的运行。

作为文件和节点 ID ,2 的 160 次方也足够大,大到全地球 70 亿人每秒下载 10000 个种子,也足够下载百万亿年直到宇宙终结。

这些天才们的设计,让我们拥有了一个无法被审查和追踪的去中心化网络。这催生了庞大的盗版产业,但也让很多内容有机会避开审查。

因为网站可以被隔离、被拔线、被禁止访问,但种子不会。只要种子不死,那些不存在的音乐图书和视频就还活在互联网上,没有任何人可以毁掉。

bt种子php啥格式的,bt种子是什么意思(bt种子的格式及文件结构)相关推荐

  1. 4、题目要求:读入N名学生的成绩,将获得某一给定分数的学生人数输出。 * * 输入格式:测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个

    题目: /* 4.题目要求:读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式:测试输入包含若干测试用例,每个测试用例的格式为   第1行:N   第2行:N名学生的成绩,相邻两数字用一 ...

  2. python 将YOLO(txt)格式的标注数据批量转换为PascalVOC(XML)格式的标注数据

    python 将YOLO(txt)格式的标注数据批量转换为PascalVOC(XML)格式的标注数据 准备工作 修改代码路径 运行代码 程序bug(没时间看所以还没解决): 准备工作 需在目标文件夹中 ...

  3. oj系统格式错误_论文查重会不会检查格式?【paperpp吧】

    高等学校一般都会要求大学生在毕业时需要写作毕业论文,并且会提前发出关于毕业论文的通知,在通知上一般会说明论文写作的相关要求,其中就会规定论文的相关格式.当然,学校也会在通知中说明论文查重的相关事宜,那 ...

  4. YUV格式学习:YUV420P、YV12、NV12、NV21格式转换成RGB24

    YUV420有打包格式(Packed),一如前文所述.同时还有平面格式(Planar),即Y.U.V是分开存储的,每个分量占一块地方,其中Y为width*height,而U.V合占Y的一半,该种格式每 ...

  5. java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据

    一.在PC Window(QT5版本) 1.1.构建URL 1.2.构建HTTP请求头 1.3.连接信号与操作,接收服务器回复的消息 槽函数这里我们要在头文件定义,然后把处理过程实现. void Ma ...

  6. avs3 ts格式封装 标准_超能课堂(204):多媒体容器格式变迁录

    从照相机.留声机诞生,解决了人们记录影像.声音的需求以来,人们就不断地追求着在有限的条件下尽可能地提高这些记录的品质,而从模拟时代过渡到数字时代以后,这方面的追求有一部分变成了在尽可能小的空间中提供尽 ...

  7. 磁盘格式怎么转换?Tuxera NTFS对磁盘进行不同格式转换教程

    使用电脑的时候你注意过系统中的磁盘是哪种格式吗?一般目前常用的磁盘格式分为FAT32和NTFS两种.磁盘格式怎么转换呢?这里小编就来和大家分享Tuxera NTFS对磁盘进行不同格式转换教程,一起来看 ...

  8. arcmap给tif添加地理坐标_如何将JPG格式的图片转化为带地理坐标的TIFF格式

    最近有个项目需要用到开源软件GeoServer,数据源是一张高分辨率的2.5维图片,格式是jpg的,由于GeoServer不支持jpg格式的发布,因此考虑到要进行格式转换,将其转换成tiff格式. 1 ...

  9. m4s格式转换mp3_如何将m4a无损转换mp3音频格式

    m4a是mpeg4编码标准音频文件的其中一种扩展名,一般的mpeg4音频的扩展名是mp4但在ipod苹果公为了以示区别开始推行m4a格式,仅限在苹果的iTunes和iPad中使用,所以如何将m4a无损 ...

  10. 导出期刊对应格式的参考_中文参考文献怎么一键导出正确格式?写作必看!

    之前遇到过一位作者,文章写的很标准,就是参考文献格式总是错的,问过他之后,他说都是自己一点点打上去的.下面给大家介绍一下中文参考文献的正确格式及如何一键导出,写作的必看. 中文参考文献的导出一般是知网 ...

最新文章

  1. 信号与系统2021年期末考试命题
  2. druid ssh加密 java mysql_springboot 整合druid数据库密码加密功能的实现代码
  3. 电脑频繁断网怎么回事_家里网络间歇性断网什么原因 家里网络间歇性断网怎么解决【介绍】...
  4. 一部后现代文学的“奇书”:《烟草经纪人》
  5. go语言基础之格式化输出
  6. nagios数据 mysql_读取NAGIOS数据库至MYSQL
  7. buildroot 使用本地交叉编译器记录
  8. ocelot和nginx比较_庐山真面目之四微服务架构Consul和Ocelot简单版本实现
  9. C++字符编码的查看和检测
  10. extension(扩展)使用详情
  11. 孙悟空的师父是谁? (ZT)
  12. ES6标准入门略读笔记
  13. 观影坪-纪录片之《穹顶之下》
  14. 公众号配图不会设计?你需要这三款在线作图神器
  15. html粘贴excel表格,如何将网页中的表格快速复制到EXCEL中|
  16. 如何恢复因为chrome同步而删除的书签
  17. 软考高级,考网规还是考项管?
  18. vb6.0 Access数据库
  19. 对象在内存中的存储基本类型和包装类java类型转换
  20. json数据转换成excel表格

热门文章

  1. nuxt 中 vuex 路由鉴权 keeplive
  2. 2022年焊工(初级)考试及焊工(初级)考试内容
  3. LTE下行资源分配方式
  4. 知虾:2022 Shopee开店图文指南,手把手教你入驻
  5. 【学习笔记】TRIZ 40个创新原理及解析
  6. 生态系统类型空间分布数据/土地利用数据/植被类型数据/NPP数据/土壤侵蚀数据/土壤质地分类/降雨量栅格数据
  7. 51单片机带闹钟c语言程序,51单片机定时闹钟程序(带按键)
  8. 高中计算机学科教学计划,高一信息技术教学计划及进度表.doc
  9. sql里的正则表达式
  10. oracle11g64位怎么用sql,Oracle11g64位下使用PLSQL