IPFS在windows平台下的安裝與簡單使用-更新中


理論基礎

IPFS(星際文件系統),是一個分布式文件系統協議。IPFS協議定義了文件在分布式系統中如何存儲、索引、傳輸。IPFS的目標是通過一個文件系統將網絡中的所有的設備連接在起來

簡介

  1. 基於內容尋址,而非基於域名尋址。文件具有唯一存在的唯一性,一個文件加入到IPFS的網絡,基於計算對內容賦予一個唯一加密的哈希值
  2. 提供文件的歷史版本控制器(如git),並且讓多個節點使用保存不同版本的文件;
  3. IPFS的網絡運行着一條區塊鏈,即用來存儲互聯網文件的哈希值表,每次有網絡訪問,即要在鏈上查詢該內容(文件)的地址;
  4. 通過使用代幣(FileCoin)的激勵作用,讓各節點有動力去存儲數據。FileCoin是一個由加密貨幣驅動的存儲網絡。礦工通過為網絡提供開放的硬盤空間獲得FileCoin,而用戶則用FileCoin來支付在去中心化網絡中存儲加密文件的費用。

工作機制

IPFS為每一個文件分配一個獨一無二的hash值,這個方式使得IPFS可以支持基於文件內容尋址。IPFS在整個網絡范圍內去掉重復的文件,並且為每一個文件建立版本管理。

當查詢文件的時候,IPFS網絡根據文件的hash值進行查找。為了讓用戶更好的記文件存放的hash,IPFS利用IPNS將hash值映射一個比較容易記憶的IPNS名字,每個節點除了存儲自己需要的數據,還需要存儲一張hash表,用來記錄文件存儲的位置,進行文件的查詢下載。

實驗操作

IPFS環境搭建

Ubuntu 18.04.5 LTS 在此平台開發用正常步驟 之后演示是在win10平台

sudo apt-get update 更新一下軟件列表

還需安裝golang sudo apt-get install golang-go -y,安裝過的可以忽略

下載IPFS

wget https://gitee.com/plusz/go-ipfs.git 這里用gitee同步的github鏡像

或者直接 git clone https://gitee.com/plusz/go-ipfs.git

WINDOWS平台下載地址:https://dist.ipfs.io/#go-ipfs (選windows binary,需要梯子)

配置環境變量

將解壓的路勁添加到PATH環境變量,不加也行

image-20210623202829231

在解壓路徑下ipfs version 查看版本

image-20210623202937727

初始化本地倉庫

和git類似,ipfs節點也需要先初始化一個本地倉庫

執行 ipfs init

image-20210623203056169

此處的peer identity 即是屬於自身的IPFS網絡哈希值,相當於ID,通過ID可以訪問到節點

安裝

輸入上面最后一行的內容

image-20210623203513191

出現這個即為安裝成功

ipfs安裝的默認配置

IPFS安裝后的配置放在系統用戶文件夾目錄下C:\Users\xxxx.ipfs , xxxx 為pc名,config為配置信息,可以按需修改,這里暫時不修改

運行

1. 輸入 ipfs daemon 啟動IPFS服務監聽

目的是用於監聽IPFS網絡通信數據,使用的監聽端口是5001。注意要並保持開啟狀態,才能守護監聽的進程。

image-20210623203908992

2. IPFS的基礎命令

通過ipfs help可以查看一些基礎命令

image-20210623204049806

基本命令:
init ——初始化IPFS本地配置
Add ——添加一個文件到IPFS
cat —— 展示IPFS對象數據
get —— 下載IPFS對象
ls —— 從一個對象中列出鏈接
refs —— 從一個對象中列出鏈接哈希
數據結構命令:
block —— 與數據存儲中的原始塊交互
object —— 與原始DAG節點交互
高級命令:
daemon —— 開啟一個開始運行的后台進程
mount —— 掛載一個IPFS只讀的掛載點
name —— 發布並解析IPFS名字
key —— 創建並列出IPFS名字密鑰對
pin —— 將對象鎖定到本地存儲
網絡命令:
id —— 展示IPFS節點信息
bootstrap —— 添加或刪除引導文件
swarm —— 管理p2p網絡連接
工具命令:
config —— 管理配置
version —— 展示IPFS版本信息
update —— 下載並應用go-ipfs更新
commands —— 列出所有可用命令

此時我們通過ipfs id 可以查看屬於自己的通信ID信息

image-20210623204201541

輸入ipfs config show 可以查看配置信息

image-20210623204238016

ipfs swarm peers 查看附近也在使用IPFS網絡節點的伙伴,如果沒有數據說明附近沒人使用。

image-20210623204334485

這里可以看到附近還是有很多IPFS節點的

3. 調用IPFS網絡中的文件

輸入 ipfs cat /ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg >cat.jpg

我們即從mW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ的節點里下載了名為cat.jpg的一張圖片到本地。

4. 上傳文件

文件夾內新建一個測試文件

image-20210623204712591

通過命令ipfs add ipfsTest.txt 上傳文件,並且返回一個唯一哈希值

image-20210623204936464

在命令行輸入ipfs cat + 哈希值既可以看到內容

image-20210623205107814

可視化頁面

在IPFS網絡狀態開啟時可以通過http://localhost:5001/webui查看到IPFS可視化操作界面

im306

查看節點消息

image-20210623205458119

與上面在命令行里查看是一樣的ID

將剛才上傳的文件hash復制到搜索框檢查后

image-20210623210321142

從上圖可知,這個CID值的HASH值不是我們想要的HASH值,這是由於原本的hash太長了,一堆數字讀起來不容易,所以需要再進行編碼,壓縮其長度,且容易被傳播,為此,IPFS采用了Base58這種編碼。

在右側可以看到CID信息

image-20210623210420445

IPFS現在的multihash值,都是以1220開頭的,按照Base58的算法,算出來的結果都是以Qm開頭的。
IPFS如何計算文件hash?
IPFS采用了SHA2-256算法,對任意長度的內容,生成的hash值長度固定,都是32個字節。在Linux下,直接用sha256sum可以計算SHA2-256格式的HASH值。雖然目前用的是SHA-256,但是可以支持多種HASH算法,可以升級算法,但是不會有大的架構改動。於是,IPFS采用了multihash這種簡單的HASH表示方法,支持多種HASH算法。如果未來修改算法,用的仍然是multihash,保證了表達方式的持續性。
multihash是一種自識別hash。multihash多重哈希遵循TLV模式(type-length-value)。其實就是一個字符串,由三部分組成:HASH算法編碼、HASH值得長度(字節數)、HASH值。
SHA2-256的編碼為Ox12,其HASH摘要長度為32字節(十六進制數為0x20)。把1220加到前面所得HASH至的開頭。例如本例文件的multihash編碼(十六進制)。

image-20210623210630611

簡而言之:

原始數據添加元數據封裝為IPFS文件—>計算SHA2-256—>封裝成multihash—>轉化為Base58

上傳圖片、視頻文件

上傳了一張1mb的圖片后

image-20210624151448073

可以看到有很多的link,我們繼續上傳一個更大的視頻文件

image-20210624151750265

檢查剛上傳的視頻文件可以看到擁有更多的LINKS

image-20210624152111702

這里的links就是IPFS存儲並共享文件的機制所生成的

再打開一個links[0]可以看到還有更多的子集

image-20210624154808590

​ IPFS上的文件都存儲在IPFS對象中,每個對象最多可以存儲256KB的數據,也可以包含連接其他IPFS對象的鏈接。

​ 那么超過256KB的文件怎么辦呢?比如一個圖片或者一個視頻,這些大型文件會被分割成數個IPFS對象。每一個對象都是256KB。之后系統會生成一個空白IPFS對象與包含這個文件的其他所有IPFS對象鏈接。

​ IPFS的數據結果非常簡單但卻非常強大。這一結構使我們可以把它作為文件系統來使用。這是一個包含了一些文件的簡單索引結構,可以將其轉成IPFS對象,每一個文件和索引都生成一個IPFS對象。一旦一個文件加入了網絡就不能被修改了,這是一個不能篡改的數據存儲庫,非常類似於區塊鏈。

這也有利於我們大文件存儲區塊鏈的應用實例

上傳大文件

​ 根據上述性質可以將IPFS和區塊鏈完美結合,用戶可以使用IPFS來處理大量數據,然后把對應的加密哈希存儲到區塊鏈中並打上時間戳。這樣就無需將數據本身放在鏈上,不但可以節省區塊鏈的網絡帶寬,還可以對其進行有效保護。關於文件的安全性,一方面可以加密后存入IPFS,另一方面也可利用IPFS實現文件分布式共享。

  IPFS彌補了現有區塊鏈系統在文件存儲方面的短板,將IPFS的永久文件存儲和區塊鏈的不可篡改、時間戳證明特性結合,非常適合在版權保護、身份及來源證明等方面加以應用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM