區塊鏈
挖礦,比特幣,EOS,以太坊

IPFS網絡是如何運行的(p2p網絡)

138

IPFS網絡是如何運行的(p2p網絡)
IPFS是一個p2p網絡,先來看看BitTorrent的p2p網絡是如何工作的?
想要bt下載一個文件,首先你需要一個種子文件torrent,種子文件包含至少一個 Tracker(一臺服務器地址)信息和文件的分割記錄信息。
BT軟件解析種子文件torrent,從里面找出來tracker,告訴tracker我要下載這個文件。tracker同時返回給你現在其它正在下載的節點信息,這個時候你的節點就正式加入了p2p下載網絡,根據tracker返回的信息直接跟其它節點建立聯系,開始數據傳輸。
這種情況下Tracker成為了溝通p2p網絡的關鍵一環,如果tracker服務器全部關閉的話,p2p網絡就被關閉了。
那么是不是說如果沒有了Tracker,p2p就不能實現了?
顯然不是的,后來有了DHT(分布式哈希表),DHT技術的出現使得沒有tracker也能進行p2p網絡下載,用過電驢的讀者應該都不陌生,電驢里面有一個選項,可以允許選擇KAD(DHT的一種)網絡進行搜索。這樣一來p2p網絡的適應性更強了,可以大大減輕tracker的負擔。
以上就是傳統的P2P軟件大概工作方式。
IPFS網絡是如何運行的(p2p網絡)

電驢的KAD網絡

IPFS的p2p網絡使用的是DHT技術
什么是DHT ( Distributed Hash Tables ) ?
DHT是一個分布式系統, 它提供了一個類似哈希表一樣的查詢服務: 鍵值對存儲在DHT中, 任何參與的節點都可以有效的檢索給定鍵對應的值. 鍵值對的映射由網絡中所有的節點維護, 每個節點負責一小部分路由和數據存儲. 這樣即使有節點加入或者離開, 對整個網絡的影響都很小, 于是DHT可以擴展到非常龐大的節點(上千萬)。
DHT廣泛應用于各種點對點系統, 用來存儲節點的元數據。比如:BTC系統使用 MainlineDHT來維護節點。
DHT具有以下性質:離散型(Autonomy and decentralization):?構成系統的節點之間都是對等的, 沒有中央控制機制進行協調;伸縮性(Scalability):?不論系統有多少節點, 都要求高效工作;容錯性(Fault tolerance):?不斷有節點加入和離開, 不會影響整個系統的工作;來自于:?https://en.wikipedia.org/wiki/Distributed_hash_table

簡單介紹跟IPFS有關的三種DHT技術
Kademlia DHT1.高效查詢:查詢的平均復雜度是 log2(n),例如:10,000,000個節點只需要20次查詢2.低開銷:優化了發往其它節點的控制消息的數量3.可以抵御各種攻擊4.廣泛應用于各種點對點系統,包括:Guntella和BitTorrent,可以構建超過2千萬個節點的網絡
Coral DSHT
Coral繼承了Kademlia并且做了一些改造 ( 它認為直接在DHT上存儲數據是浪費存儲和帶寬) 。
S/Kademlia DHTS/Kademlia DHT同樣是繼承了Kademlia,并且做了一些改進,系統可以防止惡意攻擊,例如女巫攻擊。

IPFS的路由系統
ipfs系統的節點查找有兩個需求:

  1. 第一找到其他節點地址
  2. 第二找到存儲有特定數據的節點

IPFS綜合了S/Kademlia 、Coral和Mainline技術(能折騰吧,不過這種對技術的追求精神值得我們給ipfs團隊鮮花和鼓掌IPFS網絡是如何運行的(p2p網絡))。
Kademlia協議的工作方式比較復雜, 有興趣了解的可以單獨去查詢一下, 本文不在進行更深入的討論. KAD可以很高效進行路由查詢服務。
IPFS DHT的數據存儲是根據數據的大小進行的:小于1KB的數據直接存儲到DHT上面大于1KB的數據在DHT中存儲的是節點ID

節點加入
IPFS是基于DHT技術的,所以在IPFS網絡里面是沒有tracker存在的。那么一個新的節點創建后是如何加入網絡的呢?
新創建的節點必須知道至少一個已經在網絡上的節點地址,連上那個節點,就可以加入網絡了,所以ipfs系統提供了bootstrap命令來完成這個工作(通常情況不需要自己來做這樣的造作,除非有一些特殊需求,例如:指定自己比較近的啟動節點,搭建IPFS私有網絡等)。
ipfs?bootstrap list 列出來啟動節點ipfs?bootstrap add [] 添加啟動節點ipfs bootstrap rm?[] 刪除啟動節點
IPFS網絡是如何運行的(p2p網絡)

上圖是小編節點的bootstrap節點
通過命令行help可以查看命令的使用詳情

localhost:~ tt$ ipfs bootstrap –helpUSAGE?ipfs bootstrap – Show or edit the list of bootstrap peers.SYNOPSIS? ipfs bootstrapDESCRIPTION? Running \’ipfs bootstrap\’ with no arguments will run \’ipfs bootstrap list\’? SECURITY WARNING:? The bootstrap command manipulates the “bootstrap list”, which contains? the addresses of bootstrap nodes. These are the *trusted peers* from? which to learn about other peers in the network. Only edit this list? if you understand the risks of adding or removing nodes from this list.SUBCOMMANDS? ipfs bootstrap add []… – Add peers to the bootstrap list.? ipfs bootstrap list??????????? – Show peers in the bootstrap list.? ipfs bootstrap rm []…? – Remove peers from the bootstrap list.? Use \’ipfs bootstrap –help\’ for more information about each command.

小編在寫這篇問寫這篇文章的時候,還發現了一個小bug,當使用

ipfs bootstrap rm

刪掉所有的啟動節點之后,忘了添加自己的啟動節點,發現節點無法連接到ipfs網絡了,成了孤立節點,而且沒有任何提醒。于是小編去報了一個bug,經過跟開發們的討論給標記成了feature,未來如果出現這種情況,節點啟動的時候會給出提醒,不至于讓我們莫名其妙找不到問題。IPFS網絡是如何運行的(p2p網絡)
文中涉及到的名詞比較多,很多技術細節并沒有說的很詳細,如果感興趣的讀者可以自行Google,也歡迎跟小編交流,最近越來越多的技術愛好者跟小編交流可以基于ipfs做些什么事情,非常開心看到越來越多的國內的開發者關注這個項目了。


本公眾號致力于IPFS的知識的普及,如果你對IFPS、Filecoin,挖礦感興趣,敬請關注!IPFS網絡是如何運行的(p2p網絡)

原文出自于微信公眾號:?ipfs_guide? 作者: 飛向未來

贊(0)

評論 搶沙發

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
p3试机号99