我希望确认一下我对Kademlia DHT中buckets的理解。
Kademlia有m个k-buckets,其中m是网络大小(以位为单位),k是每个bucket存储的键值对数。
例如,假设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> | |
| +------------------+ |
| . |
| . |
| . |
└──────────────────────┘
我的假设正确吗?