节点在Kademlia DHT的路由表中可以保留多少个k-bucket?

时间:2017-03-14 19:22:44

标签: dht kademlia

来自Wikipedia
Kademlia routing tables consist of a list for each bit of the node ID. If a node ID consists of 128 bits, a node will keep 128 such lists.

假设密钥空间来自0-2^160,则意味着密钥空间中可以存在最大节点2^160,并且每个节点ID都是160位。如果k = 20,那么节点可以在其路由表中保留的最大条目是160x20。节点如何在其路由表中跟踪如此大量的节点。节点是否应该只保留其自己的k-bucket中存在桶大小为k=20的那20个节点的条目?它是如何保留160个这样的列表,即使该节点本身不在这些列表上,除了它存在于一个包含20个节点的列表中?

我可以互换使用列表和存储桶,它们都是相同的。

1 个答案:

答案 0 :(得分:1)

路由表大小由O(log₂(n/k))渐近限制,其中n是网络中实际的节点数,而不是2^160的理论限制, k是桶大小,因此较大的桶会略微减少路由表中的桶数。

在实践中,对于k = 8和~7M可达节点的bittorrent ipv4 dht,您可以获得大约19-22个桶的路由表深度。

即使理论上,160 * 20也不会像你想象的那样糟糕。这只是3200个IP地址+一个小的关联状态,可以保留在内存中,并且偶尔会发送一个数据包。将ping操作调整为每秒一次意味着您仍然可以在一小时内刷新整个路由表。