2011-09-28 66 views
4

有人能澄清我主線DHT規範中的說法嗎?主線DHT引導程序

一旦將第一個節點插入到其路由表中,並且在此後啓動時,節點應嘗試查找DHT中最近的節點。它通過發送find_node消息到更近和更近的節點來做到這一點,直到找不到更近的節點爲止。

「直到找不到更近的」是什麼意思?

當我的程序開始發送find_node消息時,它有空集節點。對find_node消息的每個響應都會返回大約8個dht節點。我的程序將它們收集在列表中。

當我的程序必須停止發送查找節點消息?

我認爲它必須停止發送時,將收到一套DHT節點,其中在已收集的節點列表中的所有元素?

我對不對?

預先感謝您。

回答

6

Mainline DHT是kademlia的實現,詳情請參閱the paper

從您收到的8個節點中,按照節點ID與您自己的ID接近的順序對它們進行排序,然後將find_node發送給3個最接近您的節點(距離您最近的3個節點)。然後,您將收到8 x 3多個節點,將它們插入到您的節點列表中,仍然按節點對您的接近程度排序。繼續發送find_node消息到3個頂級節點(忽略已經發送消息的節點),直到您找回的節點已經在您的列表中。即終止條件是你已經向最靠近你的所有8個節點(位於列表頂部)發送消息。

正如文章解釋的那樣,距離度量是XOR。要計算您的節點ID距另一個節點的距離,請異或節點ID。結果越低,節點彼此越接近。

在現實生活中,你可能會想這樣做有點更加複雜,通過保持3個未決請求在任何給定的時間,並通過超時臨時開闢出更多優秀的請求一半。