别再装纯说不懂BT种子了
目录
- 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种子了相关推荐
- BT 种子,磁力链接是个啥?
[科普向] BT 种子.磁力链接到底是什么? BitTorrent 我们平时所说的 BT 种子,实际上指的是由 BitTorrent 协议所生成的一个包含资源信息的文件.与传统的网络传输协议不同,Bi ...
- # 解析bt文件_磁力链接和BT种子使用方法
目前用的最多的是磁力链接和BT种子,不过好多人并不太会使用,因此写个教程给大家说明一下. 何为磁力链接:简单地说,磁力链接是一种特殊链接,但是它与传统基于文件的位置或名称的普通链接(如http://x ...
- 种子是down.php,[原创作品][PHP]BT种子打包推送小神器~~
2013-01-07 14:01 这个小工具,目前还没有名字,暂命名为"GetBTFiles@Email",我使用了Snoopy,phpmailer类,当然还有自定义函数. 这个神 ...
- BT种子的技术原理是什么?就是.torrent文件该如何理解?
看到很多咨询BT种子原理的问题,在这里整理些资料,希望对需要的朋友有帮助. 可以分两个层面来分析一下: 1.torrent文件的原理:如果这个问题是指torrent文件本身,那么,当你对一个文件(或者 ...
- BT种子破案,FBI可以,你也行
近日,小编看到这样一篇新闻,它的主要内容是说美国的FBI使用BitTorrent查找并抓获儿童色情罪犯,那么首先可能不解的就是"BitTorrent"是什么?"BitTo ...
- B编码与BT种子文件分析,以及模仿json-cpp写一个B编码解析器
B编码与BT种子文件分析,以及模仿json-cpp写一个B编码解析器 1.什么是B编码 2.B编码格式 3.种子文件结构 3.1.主文件结构 3.2.info结构 4.简单的例子了解一下种子文件和B编 ...
- BT种子文件文件结构分析(转)
估计80%以上接触互联网的人都知道bt是什么东西,任何一个用bt下载的人都知道这样一个概念,种子.bt种子就是记录了p2p对等网络中tracker, nodes, files等信息,也就是说,这个种子 ...
- 加上2T硬盘再装系统遇到问题
我已经学会了在普通硬盘上安装CentOS5.6和CentOS6.0系统,但是现在要求加上一个2T的硬盘,据说再安装系统的时候会出现一些问题.到底会是什么问题呢? 又询问了一下老师,终于明白了问题本身, ...
- 装了VS2005再装IIS的小问题
装了VS2005再装IIS的小问题 装了VS2005再装IIS,结果出了些小问题 访问IIS元数据库失败 思考可能是次序出了问题,解决 1.打开CMD,进入 C:\WINDOWS\Microsoft. ...
- 先装XP再装WIN2000双系统无法启动的解决办法
从事这么多年IT工作,忽然发现win2000系统与我们渐行渐远,以至于某些技巧成为了遗逝的记忆.最近一名同事因为工作的关系需要安装一个win2000操作系统,C盘是xp,D盘安装win2000,当时我 ...
最新文章
- 上线前一个小时,dubbo这个问题可把我折腾惨了
- C++语言基本类型—整型
- 为什么数学家、统计学家和机器学习专家会用不同方式解决问题?
- websocket小荔枝
- Python 序列化 pickle/cPickle模块
- datatables插件AJAX请求数据报错Uncaught TypeError: Cannot read property ‘length‘ of undefined
- o2 atom(HP rw68xx)系列手机将可以使用Android。
- Java获得时间 String与Timestamp互转
- 【HDU - 1542】Atlantis (线段树,扫描线)
- C10K 非阻塞 Web 服务器
- VMware网卡配置
- Java同步(Synchronization)
- matlab 实验七 低层绘图操作,matlab实验内容解答.doc
- PLC属于电子计算机吗,plc是什么
- Lightly IDE 使用评测
- python编写年金终值函数_财码Python管理会计小实验—投融资管理之货币时间价值...
- 面包屑效果(element + vue)
- AWS 云上安全最佳实践
- expdp和impdp备份数据库(数据泵备份)
- echart柱形图-一条柱子显示多个数据