在 Kademlia DHT 中,一个节点可以在其路由 table 中保留多少个 k-buckets?
How many k-buckets can a Node keep in its routing table in Kademlia DHT?
来自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,那么节点在其路由 table 中可以保留的最大条目是 160x20
。节点如何在其路由中跟踪如此大量的节点table。一个节点不应该只保留它自己的 k-bucket 中桶大小为 k=20
的那 20 个节点的条目吗?它如何保留 160 个这样的列表,即使该节点本身不在这些列表中,只是它出现在一个包含 20 个节点的列表中?
我交替使用列表和存储桶,它们是相同的。
路由 table 大小受 O(log₂(n/k))
渐近限制,其中 n
是网络中的 实际 节点数,而不是2^160
和 k
的理论限制是桶大小,因此较大的桶会稍微减少路由 table.
中的桶数
在实践中,对于 k=8 和 ~7M 可达节点的 bittorrent ipv4 dht,你得到的路由 table 深度约为 19-22 个桶。
而且即使在理论上,160*20 也不会像您想象的那么糟糕。这只是 3200 个 IP 地址 + 一个小的关联状态,用于保存在内存中并时不时地发送一个数据包。将 ping 设置为每秒一次意味着您仍然可以在一小时内刷新整个路由 table。
来自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,那么节点在其路由 table 中可以保留的最大条目是 160x20
。节点如何在其路由中跟踪如此大量的节点table。一个节点不应该只保留它自己的 k-bucket 中桶大小为 k=20
的那 20 个节点的条目吗?它如何保留 160 个这样的列表,即使该节点本身不在这些列表中,只是它出现在一个包含 20 个节点的列表中?
我交替使用列表和存储桶,它们是相同的。
路由 table 大小受 O(log₂(n/k))
渐近限制,其中 n
是网络中的 实际 节点数,而不是2^160
和 k
的理论限制是桶大小,因此较大的桶会稍微减少路由 table.
在实践中,对于 k=8 和 ~7M 可达节点的 bittorrent ipv4 dht,你得到的路由 table 深度约为 19-22 个桶。
而且即使在理论上,160*20 也不会像您想象的那么糟糕。这只是 3200 个 IP 地址 + 一个小的关联状态,用于保存在内存中并时不时地发送一个数据包。将 ping 设置为每秒一次意味着您仍然可以在一小时内刷新整个路由 table。