IPFS 網絡介紹與初步上手體驗

簡介

星際文件系統(InterPlanetary File System,縮寫IPFS)是一個旨在創建持久分布式存儲和共享文件的網絡傳輸協議。它是一種 內容可尋址對等超媒體分發 協議。在IPFS網絡中的節點將構成一個分布式文件系統。它是一個開放源代碼項目,自2014年開始由Protocol Labs在開源社區的幫助下發展。其最初由Juan Benet設計。

項目概況

目前已在 Github 開源,https://github.com/ipfs。Go 語言及 JS 語言版本已經實現,Go作為主力語言,是標準參考。目前社區活躍:過去一個月,項目每周平均大概會解決40個左右的PR。

以 Go 語言版本為例,項目已經實現了以下組件:


Go項目概況.jpg

項目意義

  • HTTP 是低效且昂貴的


    效率提升
    • HTTP 協議每次從一個服務器下載單個文件,而分布式協議,比如 P2P 協議,同時從多個源頭獲取文件的分片,效率大幅提升。以視頻傳輸為例,有論文指出,P2P 可以節省 60% 帶寬。
    • IPFS 具備分布式及無重復文件的特性,解決以上問題。
  • 互聯網創造的價值每天都在湮滅


    價值保留
    • 據統計,一個網頁的生命周期平均只有100天,到處充斥著404
    • IPFS 保存文檔的每個歷史版本并且可以輕松建立彈性的鏡像數據
  • 中心化抹殺了公眾機會


    王者不再榮耀
    • 互聯網是人類史上關于公平和創新的重大工具,但是中心化對這是很大威脅
    • IPFS 致力于構造一個開放、扁平的網絡空間
  • 網絡應用過度依賴主干網


    去中心化
    • 一旦主干網因為自然災害或人為因素宕機,應用都會掛掉
    • IPFS 多樣化的彈性網絡可以不依賴于主干網運轉

項目目標

干掉 HTTP。

IPFS aims to replace HTTP and
build a better web for all of us.

原理與使用

工作原理

  1. 當你向 IPFS 上傳一個文檔的時候,文檔被切分成塊(bolcks),每個塊都有自己單獨的唯一地簽名標識,這個標識稱為加密HASH(cryptographic hash)。
  2. IPFS將在全網檢索是否有重復內容,有的話刪除重復部分
  3. 每個網絡節點可以只存儲自己感興趣的文檔內容,并且維護一個索引,標識是誰存儲了什么文檔。
  4. 在查找文檔時,實質上是查找一個加密HASH背后對應的內容
  5. IPFS 提供一個分布式命名系統 IPNS,使得可以為文件命名,而不是只能用 HASH
    image.png

IPFS 與 區塊鏈

IPFS 可以解決海量文件存儲的問題,這正好解決了區塊鏈的一個痛點。用戶可以把 IPFS 上不變的、永久的訪問鏈接打包到區塊鏈的交易中去。

使用 IPFS

目前,IPFS 已經在 MAC OS / LINUX / WINDOWS 三大平臺有了實現版本。當前實現主要是 CMD 命令操作為主。下面以 Windows 平臺為例簡單介紹其使用方法。

下載地址

初始化

執行 ipfs init 命令。初始化會在本地生成基礎配置,包括 節點標識私鑰信息,以及一些網絡基礎配置,可以通過 ipfs id 查看。

init.jpg

另外,這個命令也會在用戶文件夾創建一些基礎文件。

文件夾.jpg

啟動服務

執行 ipfs daemon 命令。讓本地節點接入 IPFS 網絡。從命令執行輸出可以看出,默認是在本機的 4001 端口進行基于TCP的監聽。

daemon.jpg

節點發現

執行 ipfs swarm peers 命令。會列出當前網絡上發現的鄰節點。顯示結構為

<訪問方式>/ipfs/<節點公鑰HASH>

peers.jpg

Hello World

IPFS 網絡在創建時,默認放了一張貓咪圖片 cat.jpg。因此我們可以嘗試去下載它,這有點類似于代碼世界的 Hello world!。

cat.jpg

文件上傳與下載

執行 ipfs add <filename> 命令,可以上傳文件。
執行 ipfs get <hash> 命令,可以下載文件。
從示例可以看到,文件在 IPFS 上,以 HASH 直接標識,其值為 QmaAN3Uhj7f6fXzFpWMSid9sjW66Pq51cgCwrxDjSnYfxK

add.jpg

Web端

web.jpg

關鍵技術

文件分塊

以剛才上傳的文件 QmaAN3Uhj7f6fXzFpWMSid9sjW66Pq51cgCwrxDjSnYfxK 為例,執行 ipfs ls <HASH> 命令,可以看到文件分塊情況。這個原大小約 1M 的文件被分成了4個文件塊,并且每個塊又有自己的HASH。這是因為 IPFS 的存儲粒度為 256KB。這塊父塊與子塊間的關系,在 IPFS 里面采用 DAG 算法組織起來。

block.jpg

此時,我們執行文件塊大小查看命令可以看到,子文件塊由于存儲了實際數據,因此為數據大小。父文件塊由于已經被切割,實際內部只包含一些索引信息,大小只有 0.2KB

subnode.jpg
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容