2

来自维基百科
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 中存在的 20 个节点的条目k=20吗?即使该节点本身不在这些列表中,除了它存在于具有 20 个节点的一个列表中之外,它如何保留 160 个这样的列表?

我交替使用列表和存储桶,它们都是相同的。

4

1 回答 1

1

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

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

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

于 2017-03-15T12:21:30.197 回答