2013-10-12 26 views
4

我不能完全圍繞Kademlia DHTs的加入過程。我在網上看到了一些教程和演示文稿,但他們似乎都以同樣的方式說事,所有psedo代碼等在大多數情況下都是一樣的(實際複製/粘貼)。向Kademlia添加新節點,構建Kademlia路由表

有人可以通過這個高層次走過去嗎?

回答

8

我假設您已閱讀Kademlia paper。下面是從我的文章的摘錄An Introduction to Kademlia DHT & How It Works

一些背景資料:

  1. 當你有一個Kademlia的網絡上運行,所以應該永遠是所有其他節點,以便他們參加知道一個節點網絡;讓我們把這稱爲Bootstrap節點BN。

  2. K是一個Kademlia常數,用於確定節點路由表中的桶的大小以及一塊數據應存儲在哪個節點的數量。

加入過程:

  • 一個新節點NN與的NodeId(用某種方法分配)和IP地址(的所述IP創建它託管的計算機)。

  • NN發送LookupRequest(A.NodeId)BN。查詢請求基本上會向接收節點詢問它知道給定的NodeId的K-Closest節點。在這種情況下,BN將返回知道的K-Closest節點到NN

  • BN現在會將NN添加到它的路由表中,因此NN現在在網絡中。

  • NNBN收到K-Closest節點的列表。 NNBN添加到路由表中。

  • NN現在ping這些從BN收到的K個節點,並根據距離將回復的那些添加到它的路由表中所需的桶中。通過ping這些節點,他們還學習NN的存在,並將NN添加到他們的路由表中。

  • NN現在已連接到網絡並被網絡上的節點所知。

  • NN現在遍歷每個它的K桶

    foreach(K-Buckets as KB)   
        1. NN generates a random NodeId `RNID` // A NodeId that will be in KB 
        2. NN sends LookupRequest(RNID) to the K-Closest nodes it knows to RNID. 
        3. The response will be K nodes closest to RNID. 
        4. NN now fills KB. 
    

    NN做這行每次的桶,以填補這些桶。 完成此操作後,NN可以更好地瞭解網絡上與其自身距離不同的節點。

    注意:這一步不是強制性的,但是我在My Implementation of Kademlia中這樣做,這樣每個節點加入時就會對網絡有更好的瞭解。

  • 我在An Introduction to Kademlia DHT & How It Works

    0

    我的猜測是它使用一些超級節點和地理空間信息來計算最小生成樹。它還可以從超級節點計算voronoi圖或雙delaunay三角剖分並用它來運行鄰近搜索。這裏是一個例子:http://www.mathworks.de/de/help/matlab/math/spatial-searching.html

    +0

    謝謝您的回答寫了滿滿的介紹Kademlia的。 – JSON

    +1

    我會標記你的答案,因爲你唯一的回答和賞金在小時內耗盡,但更多的信息將是真棒。我喜歡使用三角形鄰近搜索的想法,你能提供有關此信息的鏈接嗎? – JSON

    +0

    http://www.mathworks.de/de/help/matlab/math/spatial-searching.html – Bytemain