目录

  • BitTorrent协议
    • BitTorrent的核心思想
  • BT种子
  • 磁力链接(Magnet URI scheme)
    • 磁力链接的本质
  • DHT网络结构
    • DHT网络结构的构建过程
      • 拆分子树的过程
      • 桶的构建
  • 总结

BitTorrent协议

如果你想要下载一个不存在的敏感资源,你会怎么做?
最简单地方法当然是找一个有资源的哥们,让他把这些资源分享给你。早期的互联网就是这么共享文件的。

但是这样存在很多问题?
1、 比如下载的人一多,每个人的带宽就变小了,下载速度会变慢。
2、 更危险的是这些资源是敏感资源,你的哥们本来就不应该分享给你,如果你的哥们被抓了,那么大家也别下载。

由此就诞生了一个BitTorrent协议。
资源不再由一个人或者一个中心服务器提供,而是由所有人提供给所有人。下载的人越多,速度越快。这种模式叫Peer To Peer(用户群对用户群)。也就是P2P下载。

BitTorrent的核心思想

把文件分成很多个小块,让下载者互相连接。

比如:以120M视频为例,假设被分成895个128KB的文件块后,下载了第306块的用户A就可以和下载了第11块的用户B,交换彼此下载好的部分。参与的人越多,互相交换的就越密集,下载就越快。

为了做到这点,BitTorrent协议需要资源共享者生成一个包含下载信息的种子文件,后缀是.torrent,这就是我们常说的BT种子。

BT种子

种子文件包含文件的名字、大小、分块后分块文件的大小、哈希值以及Tracker服务器的地址。

Tracker很重,通过Traker我们才可以找到其他下载者的联系方式。
当你用下载软件打开种子,就会开始联系种子文件里内置的Traker服务器,告诉Traker我要下载这个文件。服务器会记录下你的IP,并把其他正在下载或者下载完成的人的IP返回给你,这样你们就可以愉快地组队下载。当然如果没有找到正在下载的人,资源发布者也不在线,你就只能以0kb/s的速度等着。

不难发现Tracke服务器是P2P网络的弱点,如果Tracker关闭或者封禁,你就无法找到同伴,也难以完成下载。

磁力链接(Magnet URI scheme)

为了摆脱Tracker服务器的依赖,今天最流行的下载方式是磁力链接(Magnet URI scheme)。通常是这样一串神秘代码:

magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28

链接结构:
magnet:协议名
xt:exact topic 的缩写,表示资源定位点。BTIH(BitTorrent Info Hash)表示哈希方法名,这里还可以使用 SHA1 和 MD5。这个值是文件的标识符,是不可缺少的。

最重要的是这40位16进制字符码,它是磁力链接的唯一标识符。
任何文件丢进哈希算法都能得到这样一串字符,40位,16进制,只标识这个文件。简单理解就是文件ID,它能帮我们找到我们下载的东西。

磁力链接的本质

是把所有人变成小型Tracker,每个人都拿着一份动态更新的地址和文件信息, 我要找我连接的10个人,他们再找与他们连接的10个人,一传十,十传百…我找到小明,小明找到小红,小红找到了资源发布者,我与资源发布者就连上线了。

DHT网络结构

但是这种所有人找所有的方案是不太行的,不仅占用了大量的资源,效率也非常低,还有可能重复传播,造成广播灾难。这时就需要补充一个关键信息,距离。这里的距离不是空间上的距离,而是逻辑上的距离。这种距离跟DHT网络结构有关。

DHT网络结构的构建过程

如上述所说,每个磁力链接都有一个唯一的文件ID(40位16进制的字符),可以产生24*40 即2160种组合,用只有0和1的二进制表示,就是160个0和1。而每个节点也有一串160位的0和1作为节点ID。(这里的节点理解为你的电脑)根据这160位数,我们可以计算节点与节点之间,节点与资源之间的距离。

假设小明发布了一个文件,就能计算他所知道的节点ID与这个文件ID的距离,让算出来距离最短的节点再计算它知道的节点ID和文件ID的距离,重复这个过程(递归调用),就能找到与文件ID距离最短的一批节点ID。把小明提供的下载信息存在这里。这样下载者也只需要找到和文件ID距离最近的节点ID,就能建立连接,开始下载。

距离怎么计算呢?在kademlia网络中,用异或算法来计算节点之间的逻辑距离,值越小表示越近。

相同就是0,不同就是1。比如0和0相同,得0。0和1不同,得1。1和1相同,得0。
为了方便理解,把160位缩减为4位。假设你的ID为0100,目标节点为1111,那么你们之间得二进制距离就是1011。换算成十进制就是
1 * 23 + 0 * 20 + 1 * 21 + 1 * 20=11

有了距离我们就可以在二叉树里快速查找目标了。

4位数即分叉4次,即24,16条路径。每条路径得终点就是一个节点ID。
接下来你作为0100,你就可以拆分这颗二叉树了。

拆分子树的过程

1、 从第一个分叉开始,把不包含你的那部分子树拆分

2、 然后在剩下的子树中再次拆分

3、重复步骤2,直到只剩下你自己

桶的构建

从上述结果中看出,你就可以拆分出4棵子树
在拆分好的子树中,每个子树中选2个点,就得到了4个K桶。


刚才算过,你距离目标文件的距离是1011,即是11,也就是说离1111(目标文件)最近的肯定是3号K桶里的2个节点。接下我们可以去联系这两个节点,让他们来找1111(目标文件)。

以1110为例,它也可以拆分出4棵子树

得到4个K桶

计算1110和1111之间的距离0001,即距离为1。即在0号K桶。1111(目标文件)就在这里。

这种网络结构就叫DHT,分布式哈希表。一个高宽容度的去中心化网络。
只需要一串文件ID和存储到本地的K桶数据,你就可以高效地找到要下载的文件,而资源的发布者和传播者也只需要分箱40个字符串就好,足够简单、方便、隐私。

在真实的DHT网络,每个K桶至少记录了8个节点,任何一个节点的下线,都不会影响整个网络的运行。作为文件和节点ID,2160也足够大,达到全地球70亿人,每秒下载10000个种子,也足够下载百万亿年直到宇宙终结。

总结

这些天才的设计,让我们拥有了一个无法被审查和追踪的去中心化网络,这也催生了很多盗版产业,但也让很多内容有机会避开审查,因为网站可以被隔离,被拔线,被禁止访问,但种子不会。只要种子不死,那些不存在的敏感资源,就还活在互联网上,没有任何人可以毁掉。

别再装纯说不懂BT种子了相关推荐

  1. BT 种子,磁力链接是个啥?

    [科普向] BT 种子.磁力链接到底是什么? BitTorrent 我们平时所说的 BT 种子,实际上指的是由 BitTorrent 协议所生成的一个包含资源信息的文件.与传统的网络传输协议不同,Bi ...

  2. # 解析bt文件_磁力链接和BT种子使用方法

    目前用的最多的是磁力链接和BT种子,不过好多人并不太会使用,因此写个教程给大家说明一下. 何为磁力链接:简单地说,磁力链接是一种特殊链接,但是它与传统基于文件的位置或名称的普通链接(如http://x ...

  3. 种子是down.php,[原创作品][PHP]BT种子打包推送小神器~~

    2013-01-07 14:01 这个小工具,目前还没有名字,暂命名为"GetBTFiles@Email",我使用了Snoopy,phpmailer类,当然还有自定义函数. 这个神 ...

  4. BT种子的技术原理是什么?就是.torrent文件该如何理解?

    看到很多咨询BT种子原理的问题,在这里整理些资料,希望对需要的朋友有帮助. 可以分两个层面来分析一下: 1.torrent文件的原理:如果这个问题是指torrent文件本身,那么,当你对一个文件(或者 ...

  5. BT种子破案,FBI可以,你也行

    近日,小编看到这样一篇新闻,它的主要内容是说美国的FBI使用BitTorrent查找并抓获儿童色情罪犯,那么首先可能不解的就是"BitTorrent"是什么?"BitTo ...

  6. B编码与BT种子文件分析,以及模仿json-cpp写一个B编码解析器

    B编码与BT种子文件分析,以及模仿json-cpp写一个B编码解析器 1.什么是B编码 2.B编码格式 3.种子文件结构 3.1.主文件结构 3.2.info结构 4.简单的例子了解一下种子文件和B编 ...

  7. BT种子文件文件结构分析(转)

    估计80%以上接触互联网的人都知道bt是什么东西,任何一个用bt下载的人都知道这样一个概念,种子.bt种子就是记录了p2p对等网络中tracker, nodes, files等信息,也就是说,这个种子 ...

  8. 加上2T硬盘再装系统遇到问题

    我已经学会了在普通硬盘上安装CentOS5.6和CentOS6.0系统,但是现在要求加上一个2T的硬盘,据说再安装系统的时候会出现一些问题.到底会是什么问题呢? 又询问了一下老师,终于明白了问题本身, ...

  9. 装了VS2005再装IIS的小问题

    装了VS2005再装IIS的小问题 装了VS2005再装IIS,结果出了些小问题 访问IIS元数据库失败 思考可能是次序出了问题,解决 1.打开CMD,进入 C:\WINDOWS\Microsoft. ...

  10. 先装XP再装WIN2000双系统无法启动的解决办法

    从事这么多年IT工作,忽然发现win2000系统与我们渐行渐远,以至于某些技巧成为了遗逝的记忆.最近一名同事因为工作的关系需要安装一个win2000操作系统,C盘是xp,D盘安装win2000,当时我 ...

最新文章

  1. 上线前一个小时,dubbo这个问题可把我折腾惨了
  2. C++语言基本类型—整型
  3. 为什么数学家、统计学家和机器学习专家会用不同方式解决问题?
  4. websocket小荔枝
  5. Python 序列化 pickle/cPickle模块
  6. datatables插件AJAX请求数据报错Uncaught TypeError: Cannot read property ‘length‘ of undefined
  7. o2 atom(HP rw68xx)系列手机将可以使用Android。
  8. Java获得时间 String与Timestamp互转
  9. 【HDU - 1542】Atlantis (线段树,扫描线)
  10. C10K 非阻塞 Web 服务器
  11. VMware网卡配置
  12. Java同步(Synchronization)
  13. matlab 实验七 低层绘图操作,matlab实验内容解答.doc
  14. PLC属于电子计算机吗,plc是什么
  15. Lightly IDE 使用评测
  16. python编写年金终值函数_财码Python管理会计小实验—投融资管理之货币时间价值...
  17. 面包屑效果(element + vue)
  18. AWS 云上安全最佳实践
  19. expdp和impdp备份数据库(数据泵备份)
  20. echart柱形图-一条柱子显示多个数据

热门文章

  1. 一台设备驱动万物:苹果和三星即将推陈出新
  2. 《史蒂夫·乔布斯传》官方正式中文版电子书(高清晰完整版)
  3. 软件易用性文章分享 ● 第一篇
  4. JavaScript
  5. 细说php精要版 百度云,细说php精要版
  6. 蓝牙耳机测试软件apk_蓝牙5.0手机如何测试检测分辨?这款免费APP帮大忙
  7. 哈理工OJ 1983 Math(前缀和)
  8. 下载和安装R、RStudio !~~~
  9. drools规则引擎介绍
  10. js实现轮播图点击按钮切换下一张图片