假设每羊发布了一个文件 , 就能计算他所知道的节点 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种子的格式及文件结构 bt种子是什么意思】因为网站可以被隔离、被拔线、被禁止访问 , 但种子不会 。只要种子不死 , 那些不存在的音乐图书和视频就还活在互联网上 , 没有任何人可以毁掉 。
推荐阅读
- 什么是品牌,品牌的定位以及价值观
- 发酵粉的发酵原理及主要成分介绍 发酵粉是什么
- 抄送和密送的三个本质区别 抄送是什么意思
- 痛经不孕
- 家里有壁虎进来了怎么办?
- 怎样把微博中的视频转发给微信朋友?
- 如何推荐自己的微信名片
- 教你迅捷PDF转换器进行分割PDF文档页面的具体操作讲述
- 我来分享迅捷PDF转换器将Word文件转为Excel表格的详细步骤
- 我来教你迅捷PDF转换器把EPUB转为PDF格式的操作教程