Node-Discovery

節點發現協議 - 節點表條目

  • March 22, 2019

我目前正在嘗試了解乙太坊中的節點發現協議。我找到了一些文件,其中之一是:https ://github.com/ethereum/devp2p/blob/master/discv4.md

它說,節點之間的距離通過以下方式確定

distance(n₁, n₂) = keccak256(n₁) XOR keccak256(n₂)

n節點 ID在哪裡。

接下來,有關鄰居的資訊儲存在由“k-buckets”組成的路由表中。

我不明白的是以下句子:

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 = 0x80n2 = 0xF0。為了簡單起見,我們不散列,而只使用 id。所以我們得到以下距離:d = 0x70。MSB 現在不同了。我現在將資訊儲存在哪個儲存桶中?

您必須了解,它可以簡單地解釋為位的不同。假設 n1 = 0x80 位是 1000 0000。所以每個 ith 的距離是這個路由表:

0th 1000 0000
1th 1000 000x
2th 1000 00xx
3th 1000 0xxx
...

每行包含 k 個對等點,其中包含有關所述對等點的資訊,例如它們的對等點地址、網路地址……但在論文中它被稱為 k-buckets。

在您的範例中,n1 想要與 n2 通信,然後它將檢查其路由表並查看遠處是:

7th 1xxx xxxx

然後它將消息發送到k-bucket,在這種情況下只是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