我目前正在尝试理解ethereum中的节点发现协议。我找到了一些文档,其中之一是:https://github.com/ethereum/devp2p/blob/master/discv4.md
它说,节点之间的距离是通过以下方式确定的
distance(n₁, n₂) = keccak256(n₁) XOR keccak256(n₂)其中n是节点ID。
接下来,有关邻居的信息存储在一个由‘k桶’组成的路由表中。
我不明白的是下面这句话:
For each 0 ≤ i < 256, every node keeps a k-bucket for nodes of distance between 2^i and 2^(i+1) from itself.假设我们有n1 = 0x80和n2 = 0xF0。为了保持简单,我们不散列,只使用id。所以我们得到了以下距离:d = 0x70。现在MSB不同了。我现在把信息储存在哪个桶里?
发布于 2019-03-22 17:29:29
你必须明白,距离越远,它就可以简单地被解读为不同的位。假设n1 = 0x80,以位为单位为1000,000。因此,每个is的遥远位置是这个路由表:
0th 1000 0000
1th 1000 000x
2th 1000 00xx
3th 1000 0xxx
...每一行都包含k个对等点,其中包含关于所述对等点的信息,例如它们的对等地址、网络地址、.但在论文中,它被称为k桶。
在您的示例中,n1希望与n2通信,然后它将检查它的路由表,并查看远处是:
7th 1xxx xxxx然后,它将把消息发送到k桶,在本例中,它只是n2,所以它将直接发送给n2。
想了解更多信息,我建议你看这个视频:https://www.youtube.com/watch?v=w9UObz8o8lY。或者你想深入挖掘这篇论文:https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf
https://ethereum.stackexchange.com/questions/68628
复制相似问题