问题标签 [kademlia]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
133 浏览

p2p - 应用程序可以在同一个 DHT 中共存吗?

如果您创建一个使用分布式哈希表 (DHT) 的新应用程序,则需要引导 p2p 网络。我的想法是您可以加入现有的 DHT(例如 Bittorrent DHT)。

这可行吗?当然,我们假设相同的技术。将 Chord 与 Kademlia 结合显然是不可行的。

如果是,这会被认为是寄生的还是共生的?寄生的意思是它以某种方式与原始用途发生冲突。共生,如果它对两个应用程序都有好处,因为它们相互支持。

0 投票
1 回答
269 浏览

python - 为什么 raw_input 提示不正确?

我正在尝试使用此处提供的 kademlia 库: https ://github.com/bmuller/kademlia 我的代码如下:

它正确地接受输入并对该输入进行操作。但是,不是正确显示输入提示。例如 KEY: 或 MESSAGE: 我只是得到一个空行。

我在这里做错了什么?

0 投票
1 回答
397 浏览

graph - DHT(kademlia)是否能够可靠地存储价值链?

我正在考虑实现一个 DHT,其中数据项通过将后继地址添加到存储的值来链接,如果每个节点可以具有以下三种有序状态之一:空 -> 数据 -> 数据和后继地址将所有对等方获得一致且正确的顺序?或者这里有可能永久分叉吗?

0 投票
1 回答
530 浏览

python - 为什么我不能使用 Kademlia 示例代码设置值?

我想在我的项目中使用 DHT,但我无法让Kademlia 示例正常工作。

这是来自的输出日志twistd -noy examples/server.tac

这是上面链接中的客户端脚本的输出:

这是怎么回事?我知道一个对等点需要一个网络来连接,但这不是独立服务器应该做的吗?

提前致谢!

0 投票
0 回答
824 浏览

python - python p2p kademlia 网络简单示例

我已经阅读了Kademlia 论文,关于 stackowrflow 和其他资源的一些问题,但我仍然不了解 p2p ......

用了entangled kademlia,学习例子,资料,但是还是不懂p2p...

谁能告诉我,如何在我的电脑上使用 entangled 或 kademlia 使用 python 创建简单的网络,例如node在连接时发送另一个“你好”消息。

0 投票
1 回答
831 浏览

algorithm - 如何理解 Kademlia 节点操作的时间复杂度

我现在通过阅读经典论文Kademlia: A Peer-to-peer Information System Based on the XOR Metric 来学习 Kademlia 网络。我想了解其操作的复杂性,但仍然无法弄清楚。

3 Sketch of proof部分,论文给出了两个定义:

  1. 节点深度(h):160 - i,其中 i 是非空桶的最小索引
  2. 节点 y 在节点 x 中的桶高度:x 将插入 y 的桶的索引减去 x 的最低有效空桶的索引。

以及三个结论:

  1. 对于具有 n 个节点的系统,任何给定节点的高度以压倒性的概率将在log n的常数内。
  2. 与第 k 个最近节点中的 ID 最近的节点的桶高度可能在log k的常数内。
  3. 如果这个节点的 h个最重要的 k-buckets中没有一个是空的,则查找过程将在每一步中找到一个接近一半的节点(或者更确切地说,它的距离短一点),从而在h - log k步中找到该节点.

所以我的问题是:

  1. 什么是“最不重要的空桶”“最重要的 k 桶”
  2. 如何直观地解释深度铲斗高度?
  3. 如何理解第二个和第三个结论,比如说,为什么log kh-log k
0 投票
1 回答
705 浏览

bittorrent - Kademlia 节点树如何与 torrent 文件的 infohash 相关联?

我试图了解 Kademlia 在寻找资源方面的工作方式。现在有很好的描述来构建一个最接近自身节点的节点树,如何找到节点之间的距离,如何启动进程等。我不明白的是文件infohash如何适合这张图片. 所有描述都告诉我们如何进入游戏并构建您自己的分布式哈希表部分,但事实并非如此。我们这样做是为了实际找到一个资源,一个具有特定信息哈希的文件。它是如何存储在这个节点树中的还是有一个单独的?如何找到具有此信息哈希的节点,从而拥有该文件。

简要提到了节点 id 和 infohash 具有相同的 20 字节长度代码以及节点 id XOR infohash 是节点和资源之间的距离的事实,但我无法想象这是如何以及它如何帮助找到资源?毕竟,实际拥有资源的节点 ID 与资源的异或距离最大。

谢谢你,亚历克斯

0 投票
1 回答
1112 浏览

routing - 在 torrent kademlia 路由表上实现查找节点

我已经查看了有关此主题的许多文档,但有些内容并不完全清楚。例如比特种子文件(http://www.bittorrent.org/beps/bep_0005.html)状态

路由表被细分为“桶”,每个桶都覆盖了一部分空间。一张空表有一个桶,ID空间范围为min=0,max=2^160。当一个 ID 为“N”的节点被插入到表中时,它被放置在 min <= N < max 的桶中。一张空表只有一个桶,因此任何节点都必须适合它。每个桶在“满”之前只能容纳 K 个节点,目前是 8 个。当一个桶装满了已知的好节点时,除非我们自己的节点ID在桶的范围内,否则不能再添加节点。在这种情况下,桶被两个新桶替换,每个桶的范围是旧桶的一半,并且来自旧桶的节点分布在两个新桶中。对于只有一个桶的新表,

它与其他关于 kademlia 路由表的文档有些不同,其中桶是根据节点 id 的位前缀排列的,但还有另一个令人困惑的事情。当我们回复“查找节点”请求时,我们必须使用 XOR 操作找到与请求节点最近的 8 个节点。我看到一些实现只是通过执行 XOR 操作的路由表中的每个项目,从而找到 8 个最接近的项目。在我看来,CPU也浪费了。

一切都已经在桶里了。即使我们使用 bit torrent 文档系统建议的方法,我们也可以更快地找到可能包含请求的节点 ID 的存储桶,只需枚举存储桶并检查其上的最小和最大数量。然后可能该存储桶应该包含关闭节点,但它们是值最接近的节点而不是 XOR 最接近的节点(据我了解),这有点不同但有点相似。

我使用从 0 到 99 的数字进行了一个简单的测试,我想在其中找到 8 个 XOR 最接近的数字,它们在所寻找的数字附近但不在它附近。现在,考虑到我们的存储桶,我猜可能存储桶中的所有节点 id 都是最接近的一个小异常。因此,例如,如果我们拿这个桶,从左边取一个,从右边取一个,并搜索 XOR 最接近的节点 ID,我们将找到我们正在寻找的内容,并且没有必要遍历路由中的所有节点桌子。

我是对的还是我错过了什么?

0 投票
1 回答
281 浏览

bittorrent - 最新的 bittorrent DHT 实施建议是什么?

我正在努力实现另一个 bittorrent 客户端,此时正在与 DHT 作斗争。它是根据本规范http://www.bittorrent.org/beps/bep_0005.html实施的,但开始调试它我注意到网络上其他节点的响应有所不同。

例如, find_node 应该返回目标节点信息或 8 个最近的节点。大多数节点回复 34 个最近的节点,通常这 34 个节点中只有 1-3 个节点成功回复了随后的 ping 请求。

是否有其他文件具有更好的实施建议?可能已经证明使用 15 分钟间隔将节点状态更改为有问题的效率不高,我必须使用 10 或其他数字?我在哪里可以找到最好的最新建议?

还有一件奇怪的事。像 router.bittorrent.com 这样的引导节点会使用更接近的节点进行回复,并且通常“节点”BDictionary 属性缓冲区长度不能被 6 整除(紧凑节点信息:IP 为 4,端口为 2)。现在,我只是在最接近 6 长度的整除处切断了缓冲区,但这一切都很奇怪。有谁知道为什么会发生这种情况?

0 投票
0 回答
175 浏览

python - Kademlia/Twisted 中的非阻塞用户输入

我使用Kademlia库来创建 P2P 网络。一旦节点加入网络,我希望用户能够在命令行中请求获取密钥或将元组放入网络。

我的问题是 I/O 阻塞了连接,这意味着在用户输入时节点将与网络断开连接。

我的代码如下:

我已经阅读了几个关于这个问题的 SO 问题,并且我已经阅读了 twisted 示例中的 stdin.py 和 stdio.py 示例似乎我需要在 twisted 协议上使用 StandardIO。但是 Kademlia 使用了一个高级类(Server)来简化协议的使用,不知道是否可以在不修改库的情况下获得非阻塞 I/O。

编辑:我尝试使用reactor.callInThread这种方式:

它似乎有效,但有时节点无法从其他节点获得响应,并将它们从他的存储桶中删除,使他无法将元组放入网络,所以我想我仍然做错了什么。(我设法重现了这个错误,它似乎发生在用户输入超过 5 秒时,kademlia 无法接收来自其他节点的响应并将它们超时)