1

如何以有效的方式查找分布式哈希表中的节点总数?

4

1 回答 1

2

您通常通过从网络的小样本中进行估计来做到这一点,因为枚举大型网络的所有节点对于大多数用例来说过于昂贵。无论如何,由于 NAT 仍然会不准确。因此,您必须考虑对可达节点进行采样。

假设节点在整个键空间中随机分布,并且您在 DHT 中有某种距离度量(例如 Kademlia 案例中的 XOR 度量),您可以找到样本距离的中位数,然后计算键空间大小除以平均距离节点时间之间。如果您使用中位数,由于分布的偏态,您可能必须通过某些因素进行补偿。但是我的统计数据生疏了,也许其他人可以参与进来

结果将非常嘈杂,因此您需要保留足够的样本以进行平均。再加上偏态分布和一切都以指数规模发生的事实(向左旋转一位,人口估计突然加倍或减半)。

我还建议仅根据您控制的传出查询而不是传入流量进行估计,因为传入流量可能会受到某些实施细节的影响。

另一种粗略的粗略估计方法是简单地从您的路由表结构中推断出来,假设它随网络规模扩展。

根据你的统计能力,你可能想要做以下一些事情:描述网络的科学论文,从已经进行估计的现有实现中窃取代码,或者对广泛的人口规模进行模拟——只需将几百万个随机节点地址拟合到ram 并对它们进行一些计算应该不会太难。也许还可以与现有实现的开发人员交谈。

于 2014-03-08T01:00:20.353 回答