问题标签 [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.
p2p - 向 Kademlia 添加新节点,构建 Kademlia 路由表
我无法完全理解 Kademlia DHT 的加入过程。我在网上看过一些教程和演示文稿,但它们似乎都以相同的方式说东西,并且所有psedo代码等在大多数情况下都是相同的(实际复制/粘贴)。
有人可以对此进行高级别的介绍吗?
routing - 点对点系统可以感知位置吗?
我一直在阅读有关 Chord 和 Kademlia 等点对点系统的信息,并发现虽然可以优化覆盖中的路由,但在底层中却不一样。一个请求实际上可以有更少的跃点,但在这样做的过程中会被物理地路由到世界各地。只是想知道这是否是所有点对点系统的缺点(完全处于劣势还是我错过了什么?)或点对点系统确实考虑了一些因素来基于以下因素进行有效路由同行的实际位置意识?
kademlia - C++ 中的 Kademlia 实现
我正在寻找 C++ 中的完整 kademlia DHT 实现?我试过 bitdht,它没有很好的文档记录,甚至没有完全实现。maidsafe-dht 也太复杂了。除了上面提到的那些,任何人都可以参考任何其他实现吗?
bittorrent - DHT中announce_peer的token
在http://www.bittorrent.org/beps/bep_0005.html中,announce_peer 查询需要一个令牌,该令牌需要“响应先前的 get_peers 查询而收到的“令牌””。
这是否意味着如果节点 A 从未向节点 B 发送 get_peer 查询,那么节点 A 将永远不会收到来自节点 B 的 peer_announce 查询?
bittorrent - 是否可以有单独的 DHT 标签?
我越来越熟悉,DHT
我基本上了解它是如何工作的。但是,我不太明白如果您想DHT
在每个中使用具有不同条目类型的单独 s 会发生什么。这可能吗?
如果我使用一个流行的DHT
库,这是否意味着我put
和get
条目使用与DHT
该库的每个用户相同的内容?还是DHT
所有人都通用?你如何定义一个owner
of a DHT
,或者你如何定义一个单独的、包含的DHT
?
xor - What is the unidirectional property and why it helps with hotspots?
In the kademlia paper it's written that the XOR metric is unidirectional. What does it mean precisely? More importantly in what way it alleviates the problem of a frequently queried node? Could you explain me that from the point of view of a node? I mean, if I a hotspot am requested frequently by different nodes, do they exchange cached nodes to get to the target? Can't they just exchange the target ip? Furthermore, it doesn't seem to me that lookups converge along the same path as written, I think its more logical that each node follows a different path wile going farther and farther from itself.
algorithm - Kademlia iterativeFindNode 操作存储是否在 k-buckets 中找到了联系人?
遵循XLattice上的 Kademlia 规范,我想知道iterativeFindNode操作的确切工作原理以及它对引导和刷新存储桶有何用处。文件说:
在此过程结束时,节点将累积一组 k 个活动联系人,或者(如果 RPC 为 FIND_VALUE)可能已找到数据值。一组三元组或值返回给调用者。(§4.5,节点查找)
找到的节点将返回给调用者,但规范没有指定一旦返回这些值如何处理。特别是在刷新和引导的上下文中:
如果在 tRefresh(基本 Kademlia 中为一小时)的任何给定存储桶范围内没有执行节点查找,则节点会在该范围内选择一个随机数并执行刷新,使用该数字作为键的 iterativeFindNode。(§4.6,刷新)
节点按如下方式加入网络:[...] 它为 n [节点 id] 执行 iterativeFindNode(第 4.7 节,加入)
运行iterativeFindNode操作本身是否足以刷新联系人的 k 桶,或者规范是否忽略了结果应插入联系人桶中?
注意:iterativeFindNode操作使用底层 RPC,通过它们可以更新指定的 k-buckets:
每当一个节点接收到另一个节点的通信时,它都会更新相应的存储桶。(§3.4.4,更新)
但是,只有 FIND_NODE RPC 的接收者会被插入到 k-buckets 中,并且来自该节点的响应(包含 k-contacts 列表)将被忽略。
distance - Kademlia XOR 度量属性的用途
在 Petar Maymounkov 和 David Mazières 的Kademlia 论文中,据说 XOR 距离是一个有效的非欧几里得度量,对于为什么有效度量的每个属性都是必要或有趣的解释有限,即:
- d(x,x) = 0
- d(x,y) > 0,如果 x != y
- forall x,y : d(x,y) = d(y,x) -- 对称
- d(x,z) <= d(x,y) + d(y,z) -- 三角不等式
为什么度量具有这些属性很重要?为什么在 Kademlia 分布式哈希表实现中的路由查询上下文中这些属性中的每一个都是必需的?
此外,论文提到单向性(对于给定的 x 和距离 l,只存在一个 d(x,y) = l 的 y)保证所有查询都将沿着相同的路径收敛。为什么呢?
java - 高效的 Kademlia 水桶
我在这里编写了一个修改后的 Kademlia P2P 系统,但我在这里描述的问题与原始系统的实现非常相似。
那么,实现 k-Bucket 的最有效方式是什么?对我来说重要的是访问时间、并行性(读写)和内存消耗。
想用 ConcurrentLinkedQueue 和 ConcurrentHashMap 来做这件事,但那是相当多余和讨厌的,不是吗?
目前我只是在同步一个 LinkedList。
这是我的代码:
请不要怀疑,我已经实施了另一个邻居驱逐流程。
protocols - BT 客户端未按指定将令牌返回给 get_peer
我正在尝试实现一个能够与主线 kademlia 协议通信的程序,我遵循此处的规范http://www.bittorrent.org/beps/bep_0005.html
当我对互联网的随机节点执行 get_peer 查询时,它假设返回一个写入令牌,但无论我尝试有多少节点,写入令牌都丢失了
我发送的样本数据:
d1:ad2:id20:-WP0001-4145477439689:info_hash20:-WP0000-5555555555556:noseedi1ee1:q8:get_peer1:v4:WPvA1:t2:aa1:y1:qe
我尝试过的节点:许多随机节点通过使用 find_node 查询获得,引导节点是 router.bittorrent.com
我确实得到了一个节点列表作为回报,一切正常,除了令牌丢失
为了获得令牌,我必须遵守什么规则吗?