內容版本方面,IPFS 使用分布式版本控制系統 Git,支持多人協同工作,記錄每次更新并標記不同的版本號,一旦發生問題,可以將文件回溯到之前的任何一個版本。本地版本控制系統和集中化的版本控制系統都是由單一服務器保存所有文件的修訂版本,一旦服務器發生故障,則面臨丟失所有數據的風險。Git 是分布式版本控制系統(DVCS)的一種,客戶端除了保存最新版本的文件,還把代碼倉庫和歷史記錄都完整地鏡像下來。這樣,任何一處協同工作的服務器發生故障,都可以用任何一個本地倉庫進行恢復。Git還可以比較文件變化細節,查出誰進行了什么修改,從而可以在發生問題時快速準確的找出原因。更進一步,許多 DVCS 系統都可以指定和若干不同的遠端代碼倉庫進行交互,用戶可以在同一個項目中和不同工作小組的人相互協作,根據需要設定不同的協作流程,而這在以前的系統中是無法實現的。
IPFS 團隊對 Git 數據結構進行改造,在 Merkle Tree 的基礎上得到了 Merkel DAG,擁有內容尋址、防篡改、去重三大功能。IPFS 將文件劃分成單個大小不超過 256kB 的數據塊,每個數據塊擁有唯一的哈希值,并構造一個 Merkel DAG 將所有文件碎片組織起來。Merkel DAG 是實現版本化文件系統的一種核心數據結構,比 Merkle Tree 的限制更少,但是保留了其兩點精髓:1)父節點哈希由子節點哈希決定,即父節點哈希由子節點哈希拼接的字符串再次哈希而成;2)父節點中包含指向子節點的信息。任何一個下層節點的改動都將導致上層節點哈希值的變動,最終根節點的哈希值也將變動,因此 MerkleDAG 的三大功能得以實現:1)內容尋址:使用多重哈希來唯一識別一個數據塊的內容;2)防篡改:數據接受方只需一段 Merkle 路徑上的哈希值,就可以檢查數據是否被篡改;3)去重:內容相同的數據塊的哈希是相同的,可據此刪除重復數據,節省存儲空間。
IPFS 的路由功能采用分布式哈希列表 DHT,幫助客戶節點快速找到所需數據所在的節點,具有離散性、伸縮性和良好的容錯性。DHT 是一種分布式哈希表,通過存儲的鍵值對提供查詢服務:鍵值對存儲在 DHT 中,節點可以檢索給定鍵對應的值,鍵值對的映射由網絡中所有的節點維護。在不需要服務器的情況下,每個節點負責一小部分路由和數據存儲,從而實現整個 DHT 網絡的尋址和存儲。即使有節點加入或離開,對整個網絡的影響也很小,因此 DHT 可以擴展到非常龐大的節點(上千萬)。DHT 具有以下性質:1)離散型:構成系統的節點之間都是對等的,沒有中央控制機制進行協調;2)伸縮性:不論系統有多少節點,都要求高效工作;3)容錯性:不斷有節點加入和離開,不影響整個系統的工作。