问题标签 [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.
bittorrent - 有人能解释一下这种奇怪的 DHT 反应是什么意思吗?
有时我会从其他节点收到这种奇怪的响应。事务 id 与我的请求事务 id 以及远程 IP 匹配,所以我倾向于相信节点对此进行了响应,但它看起来像是响应和请求的混合
最糟糕的是它的格式不正确。查看 7:nodes.v 这意味着我将 nodes.v 添加到字典中。它应该是 5:nodes。所以,我迷路了。它是什么?
bittorrent - Kademlia/DHT 如何获取节点 ID 并更新离开 swarm 的节点?
我读过论文 Kademlia: A Peer-to-peer Information System Based on the XOR Metric。但我还有 2 个问题。
Q1:节点如何获取节点id?
BEP5 说:每个节点都有一个全球唯一的标识符,称为“节点 ID”。节点 ID 是从与 BitTorrent infohashes 相同的 160 位空间中随机选择的。
那么如果你随机选择,你如何选择以及如何确保你选择的id是全局唯一的呢?我的意思是有人可能会选择与您相同的 id。
Q2:存储key-value的节点如何知道是否有peer离开了swarm?
我在第一行提到的论文说:为了补偿节点离开网络,Kademlia 每小时重新发布一次每个键值对。
但是如果我是节点,我想更新谁还在下载某个文件,我仍然不知道谁离开了集群。
firewall - 解释 NAT 遍历 C++?
我创建了一个完全去中心化的 P2P 应用程序,并使用 Kademlia 算法来实现它。这已经在本地网络上进行了测试,并且完全成功。
我听说过 UDP 打孔,但是打孔需要对等方了解客户端 IP,反之亦然,但是由于设计原因,这是不可能的。因为这将要求每个对等方继续向超级节点\服务器询问新的到达并保持分配它们,所以自然它不太可靠,尤其是在超级节点关闭的情况下。
由于算法的设计 1 个对等点不知道其他对等点的 IP 地址,所以我需要 1 个对等点完全打开一个端口,以便 PUBLIC 能够连接,在 Windows 中我该怎么做?有人可能还会给我合适的链接,可能会给我一个方向吗?
如果他们使用 c++\c 作为示例,那将是可取的(但不是绝对的)
java - 实施在 Kademlia 协议中存储 RPC
我想在 PeerSim 中使用 Kademlia 协议进行对等网络模拟。Peersim 有一个 kademlia 模块(在 Java 中),这很好,但它跳过了 STORE 过程的实现。我认为从头开始为它编写一个模块是很困难的。所以最好将此功能添加到当前模块中,但我不知道该怎么做。
如果有人告诉我如何将 STORE RPC 添加到 Kademlia,那就太好了。
提前致谢
p2p - 高度不平衡的 Kademlia 路由表
在 Kademlia 论文中,第 2.4 节的最后一段指出,为了正确处理高度不平衡的树......
Kademlia 节点将所有有效联系人保存在大小至少为 k 个节点的子树中,即使这需要拆分不包含节点自己 ID 的桶。
然而,论文的前一部分似乎指出,如果一个 k-bucket 已经有 k 个元素,那么对该 k-bucket 的任何进一步添加都需要删除最旧的节点(首先对其进行 ping 操作以查看其是否存在)或以其他方式缓存添加直到该 k-bucket 中的插槽可用。
这篇论文似乎与这两点自相矛盾。
在什么条件下应该拆分 k-bucket,为什么?在路由表中保留“所有有效联系人”似乎不切实际,因为路由表会很快变得非常大。该示例讨论了一棵树,它有许多以 001 开头的节点和一个以 000 开头的节点。以 000 开头的节点必须不断地将其 k-bucket 拆分为 001 以保存以 001 开头的每个有效节点?在一个 160 位的地址空间中,最终不会在 000 的路由表中存储 2^157 个节点吗?
引用块中的措辞也很混乱......
“在子树中”——在路由表的哪个子树中?
“大小至少为 k 个节点”——我们使用什么指标来确定子树的大小?在这种情况下,节点是指 kademlia 节点或 k-buckets 或其他东西?
bittorrent - 将 DHT 公告发送到哪里?
在编写另一个支持 DHT 的 torrent 客户端时,我遇到了一个关于宣布 DHT 的问题。很明显,我必须将 get_peers 发送到越来越接近搜索到的信息散列的节点,直到至少一个节点响应具有该信息散列的对等点列表。
据我了解,我可以找到多个节点响应重叠的节点列表,知道信息哈希。现在的问题是,我应该向所有返回节点列表的节点宣布我的存在还是只选择一个节点。对这个帐户有什么建议?
也许我弄错了,它的工作方式有些不同,我的假设是错误的,不可能有多个节点具有相同信息哈希的对等列表?
bittorrent - KRPC query message dict mysterious prefix
My torrent client DHT implementation frequently receives KRPC dict messages with 4 extra bytes before the message dictionary. Here is an example:
Following that, is a bencoded dict, d
, the contents, and then e
, per the specification.
It appears the dictionary following the 4 bytes seems to always contain a y
of q
, so they're presumably queries.
hashtable - 如何将 DHT 库 dht-example.c 用于分布式哈希表
我想在 C 程序中使用BitTorrent DHT 库作为分布式哈希表。因此,我在我的机器上下载并编译了它 - 完美无瑕。现在我有一个可执行的 dht-example 输出:
我可以用这个例子做什么?如何使用 DHT:连接分布式机器、填充它或从中读取哈希表?
非常感谢阿奇姆
networking - Kademlia 协议如何保证对等点形成连通图?
节点:DHT 网络上的客户端。
Peers:试图下载特定资源的客户端。
假设 DHT 网络是一个连通图,但没有节点可以访问所有其他节点(这种消耗与 DHT 网络覆盖的 Internet 是完全连通的普遍看法相反)。
覆盖在 DHT 网络上的对等网络是否仍然是一个连通图?为什么?
bittorrent - 如何从 DHT 中提取 torrent 文件?
我编写了一个简单的脚本,可以找出给定 info_hash 的示例对等 IP。我在 BEP-0005 中看不到此类信息:我如何实际从 DHT 中提取 torrent 文件?