Node-Discovery
節點發現協議 - 節點表條目
我目前正在嘗試了解乙太坊中的節點發現協議。我找到了一些文件,其中之一是: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 = 0x80
和n2 = 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