4

我想确认我对 Kademlia DHT 中存储桶的理解。Kademlia 有m 个 k-buckets,其中m是以比特为单位的网络大小,k是每个桶存储的键值对的数量。例如,假设m=4我们可以有2^4节点,即从 0 到 15。

+========+
| NodeId |
+========+
|   0000 |
+--------+
|   0001 |
+--------+
|   0010 |
+--------+
|   0011 |
+--------+
|   0100 |
+--------+
|   0101 |
+--------+
|   0110 |
+--------+
|   0111 |
+--------+
|   1000 |
+--------+
|   1001 |
+--------+
|   1010 |
+--------+
|   1011 |
+--------+
|   1100 |
+--------+
|   1101 |
+--------+
|   1110 |
+--------+
|   1111 |
+--------+

每个节点都有0位匹配、1位匹配、2位匹配等的路由表,这就是m桶。此外,对于每个存储桶,它将存储k代表而不是单个 NodeId。因此,如果我们说 k=2,节点 0101 的路由表将类似于:

┌──────────────────────┐
│         0101         │
├──────────────────────┤
|                      |
| +==================+ |
| |       xxxx       | |
| +==================+ |
| |   1001, <value>  | |
| +------------------+ |
| |   1010, <value>  | |
| +------------------+ |
|                      |
| +==================+ |
| |       0xxx       | |
| +==================+ |
| |   0000, <value>  | |
| +------------------+ |
| |   0111, <value>  | |
| +------------------+ |
|                      |
| +==================+ |
| |       01xx       | |
| +==================+ |
| |   0110, <value>  | |
| +------------------+ |
| |   0111, <value>  | |
| +------------------+ |
|          .           |
|          .           |
|          .           |
└──────────────────────┘

我的假设正确吗?

4

2 回答 2

2

k是桶中的条目数。它们的节点 ID 预计将随机分布在存储桶覆盖的 ID 范围内,这意味着将每个存储桶的条目数加倍只会将其分辨率平均提高一位,即它不能很好地扩展。这就是为什么我们有一个结构化的路由表,其中包含多个具有不同范围的存储桶。它增加了围绕节点自己的节点 ID 的本地分辨率。

实现完整的 kademlia 算法需要动态路由表布局。因此m不是固定的。固定尺寸布局仅用于简化的预印本论文,作为理论证明的一部分。

于 2019-01-25T04:39:58.307 回答
1

Kademlia 中的每个节点都存储其他节点的列表。这个列表是基于比特差的,被松散地称为桶。现在,“k”是系统范围的复制参数。这意味着对于每个列表,该“桶”内部都有 k 个条目。这是我的理解。 是论文的链接。希望这可以帮助..:)

于 2019-01-26T21:51:26.227 回答