簡體   English   中英

DHT如何運作?

[英]How does DHT work?

我從wiki中抓住了關於DHT的基本想法:

存儲數據:

在DHT網絡中,每個節點負責特定范圍的key-space 要在DHT中存儲文件,首先, hash the file's name to get the file's key ; 第二, send a message put(key, file-content) to any node of the DHT ,該消息將被中繼到負責key節點,該節點將存儲該對(key, file-content)

獲取數據:

從DHT獲取文件時,首先,哈希文件的名稱以獲取key ; 第二次向任何節點發送消息get(key) ,中繼消息直到...

問題:

  1. 為了存儲文件,我們可以散列文件的名稱以獲取其key ,但維基說:

在現實世界中,密鑰k可以是文件內容的散列而不是文件名稱的散列,以提供內容可尋址存儲,因此重命名文件不會阻止用戶找到它。

哈希文件的內容? 我怎么知道文件的內容 如果我已經知道文件的內容,那么為什么我會在DHT中搜索它?

  1. 根據維基,每個參與節點將節省一些空間來存儲文件。 那么這是否意味着,如果我參與DHT,我必須spare 10G disk space來存儲那些key falls into the specific key-space我負責key falls into the specific key-space文件?

  2. 如果確實我應該節省一些磁盤空間來存儲這些文件,那么我應該如何在磁盤上存儲這些(key, file-content)呢? 我的意思是,如果文件被安排到我的磁盤上的B-tree或什么?

  3. 當查詢發生時,我的計算機如何響應? 我假設,首先,檢查queried key ,如果在我的key-space ,然后在我的磁盤上找到corresponding file 對?

DHT只是一種算法。 在它的基礎上,它提供分布式鍵值PUT和GET操作。 類似於許多編程語言中的普通Map或關聯數組。

由於諸如不可靠節點之類的現實限制,實際DHT實現的故障率等不提供任意長度的PUT(<uint8[]>, <uint8[]>)操作。

例:

例如,bittorrent的kademlia實現提供了以下接口:

  • PUT(uint8[20], uint16)
  • GET(uint8[20]) -> List<Pair<IP, uint16>>其中列表僅表示實際數據的隨機采樣子集

正如您所看到的,與更通用的關聯數組相比,它實際上是一個專門的非對稱接口。 IP地址始終從PUT發送方的源地址派生,即無法明確設置。 並且GET返回一個列表而不是單個值,因此它實現了MultiMapMap<List> ,如果你想這樣看。

在bittorrent的情況下,散列被用作內容描述符,其中具有內容的對等體在DHT上宣告它們自己。 如果有人想要文件,他們會在DHT上查找IP /端口對,然后通過單獨的協議聯系對等端,然后下載數據。

但DHT的其他用途也是可能的,即它們可以存儲簽名的結構化數據,類似推文的文本片段或其他任何內容。 它總是取決於您的應用程序的需求。

它只是一個基本的構建塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM