我想确认我对Kademlia DHT中桶的理解。
Kademlia有 m个k-buckets ,其中 m 是网络的大小(以位为单位), k 是键值< / em>每个存储区对存储。
例如,假设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> | |
| +------------------+ |
| . |
| . |
| . |
└──────────────────────┘
我的假设正确吗?
答案 0 :(得分:1)
k 是存储桶中的条目数。他们的节点ID预计将随机分布在存储桶覆盖的ID范围内,这意味着将每个存储桶的条目数加倍只会平均提高其分辨率一位,即扩展性不佳。 这就是为什么我们有一个结构化的路由表,其中包含多个桶,每个桶的作用域不同。可以提高节点自身节点ID周围的局部分辨率。
实施完整的kademlia算法requires a dynamic routing table layout。因此 m 是不固定的。固定尺寸的布局仅在简化的pre-print version of the paper中用作理论证明的一部分。
答案 1 :(得分:0)
Kademlia中的每个节点都存储其他节点的列表。该列表基于位差异,并被简称为存储桶。现在,“ k”是系统范围的复制参数。这意味着对于每个列表,该“存储桶”中都有k个条目。这是我的理解。 This是论文的链接。希望这会有所帮助..:)