我阅读了这篇关于Kademlia的论文,链接在这里。
我不理解k(指k-bucket中的k值)是如何选择的。
我不明白这个句子的意思:“k的选择是这样的,任何给定的k个节点很难在一个小时内同时失效。”
我不明白节点故障是什么意思。
以下是我在Kademlia网络行为中发现的k-bucket值重要性的相关信息:
根据使用两级分层DHT覆盖改进社区管理绩效论文:
k值(指Kademlia特定参数的桶大小)对Kademlia DHT的操作有重大影响。一方面,该值不应设置得太低;否则,网络可能会变得分散,从而使某些节点之间的消息路由变得复杂甚至无法实现。另一方面,该值也不应设置得太高,否则将对网络造成大量不必要的维护流量负担。
应该是多少(在大小为100和500的网络上测试):
测量结果表明,k值为1和2不足以防止网络的分段。选择k值为3足以在两种网络尺寸下实现一致的网络结构。使用k值为4及更大值时,节点对网络的了解进一步发展,但代价是增加了维护流量。虽然平均跳数减少了,但更大的路由表会引起更多的KeepAlive消息。
“维护流量”是指发送的KeepAlive消息数量。 KeepAlive消息被发送到k-buckets中的所有设备,以确保连接处于活动状态。如果我们不发送它们,有一天可能会没有连接,无法参与网络。虽然在本文中,他们每分钟发送了几条这样的消息,但我不确定在现实生活中是否需要那么多。
k-buckets 的另一个用例出现在与本问题链接的论文中:Kademlia: A Peer-to-peer Information System Based on the XOR Metric。一开始我没有注意到它,因为我以为这是原始的 Kademlia 论文。但是,尽管作者相同,结果表明它们的内容不同,它们实际上在讨论 k-buckets 的重要性:k-buckets 的第二个好处是它们对某些 DoS 攻击提供了抵抗力。通过用新节点淹没系统,无法清除节点的路由状态。只有当旧节点离开系统时,Kademlia 节点才会将新节点插入 k-buckets 中。
因此,我想在选择 k
值时应考虑第二个因素:较高的 k 值意味着你的网络更容易被 Sybil/Eclipse 攻击劫持。
k
”。这是可以理解的:更大的k
意味着我存储有关联系人信息的节点更多。但是为什么我想要保持k
值较低呢?是什么阻止我将k
设置为无限大,这意味着:不拒绝任何人,只保存所有联系人信息。这不会更好吗?甚至更可靠?我在这里错过了什么吗? - Piotrekk
足够高以实现该目标,进一步增加将只会产生低效,如过多的路由表维护流量。请记住,Kademlia的目标是提供O(log(n))
的行为。 k = ∞意味着将整个网络保留在内存中,这将是O(n)
。 - the8472