站在Web3.0 理解IPFS是什麼

儘管網絡上,已經有不少文章討論IPFS,不過真正講明白IPFS想做什麼的很少,文本嘗試站在未來Web3.0的高度來看看IPFS究竟用來解決什麼問題。

DApp 的缺陷

對區塊鏈有所瞭解的同學,知道區塊鏈維護的是一箇中立的(去中心)、共同信任、難以篡改的數據庫、智能合約創造的是一個完全透明(不被幹擾)的運行規則,因此可以解決信任問題。

一切看起來很美好,我們可以開發去中心化應用DApp 解決信任問題,由此也確實產生了很多的×××類DApp遊戲。

不熟悉DApp的同學可以看我另一篇文章程序員如何切入區塊鏈去中心化應用開發.

細心的同學,也許會發現一個問題,雖然DApp的後臺邏輯(智能合約)是在無中心的節點上運行的透明的規則,但是我們看到內容卻來自於一臺無信任的中心化服務器。

這是由當前互聯網規則-超文本媒體傳輸協議(HTTP)決定的,簡單來講,在這個協議下,當我們在瀏覽器輸入一個網址時,總是會先找到這個網址(域名)對應的服務器IP地址,然後請求服務器,並把服務器的響應顯示在瀏覽器。

這種方式下文件能否訪問,完全取決於服務器,服務器也許會關閉、內容獲取被篡改或刪除,對用戶都無法保證。我自己看到好內容把網頁收藏的習慣,經常會出現過一段時間再去訪問的時候,頁面已經不存在了。

IPFS想要做什麼

IPFS - InterPlanetary File System 星際文件系統,多數人談到IPFS都只講到它的去中心化存儲,其實IPFS想要做的遠不只存儲,其目標是取代HTTP,成爲Web3.0時代的基礎協議。我們從其官網對IPFS的定義就可以看到其雄心。

儘管Web3.0目前沒有明確定義,從2014年以太坊聯合創始人Gavin Wood提出分佈式網絡的Web3.0概念開始,業界普遍認爲Web3.0 特徵應該是 分佈式、可信任。

在官網的有這樣兩個描述:

  1. IPFS is the Distributed Web
    A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.

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

翻譯過來就是: 1. IPFS是分佈式Web,是點對點的超媒體協議,以構建更快、更安全、更開放的網絡。 2. IPFS旨在取代HTTP,爲我們構建一個更好的web。

當然,要完全取代HTTP還有一段路要走,最大的坎是怎樣讓‍‍主流的瀏覽器支持IPFS協議,‍‍現在是通過HTTP網關的方式訪問IPFS網上面存在的文件。
未來IPFS能取代Http的話?就是通過網絡瀏覽器裏直接輸入 ipfs://文件hash 訪問內容,‍‍目前這種方式訪問IPFS 必須依靠瀏覽器插件ipfs 伴侶, 並且這個插件的使用不廣泛。

注意,這裏提到的瀏覽器,只是沿用這個名詞,Web3.0的瀏覽器也許不叫瀏覽器, 它更可能是數字錢包和瀏覽器的組合體,現在瀏覽器上發起交易也同樣需要依靠錢包插件進行簽名。所以這樣一個形態的產品也是大家的機會,這是一個全新的超大入口級產品。

即未來期望的訪問方式是這樣的:
ipfs://Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu

而現在通過網關訪問是這樣的:
http://127.0.0.1:8080/ipfs/Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu
https://ipfs.io/ipfs/Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu

IPFS是怎麼做的

IPFS是一種內容可尋址、版本化、點對點超媒體的分佈式存儲、傳輸協議。

我們知道在現在的網絡服務裏,內容是基於位置(IP)尋址的,就是在查找內容的時候,需要先找到內容所在的服務器(根據IP),然後再在服務器上找對應的內容。
而在IPFS的網絡裏,是根據內容尋址,每一個‍‍上傳到IPFS上面去的文件、文件夾,都是以Qm爲開頭字母的哈希值,無需知道文件存儲在哪裏,通過哈希值就能夠找到這個文件,這種方式叫內容尋址。

工作原理

在IPFS系統中,內容會分塊存放(如果內容很小就會直接存在DHT中),並分散存儲在IPFS網絡中的節點上(不過目前的IPFS實現,一個節點會完整保存內容的所有區塊)。系統會給內容的每一個塊計算哈希值,然後把所有塊的哈希值拼湊起來,再計算一次哈希值,從而得到最終的哈希值。同時每個節點會維護一張DHT(分佈式哈希表),包含數據塊與目標節點的映射關係。

在IPFS中是通過哈希去請求文件的,它就會使用這個分佈式哈希表找到文件所在的節點,取回文件根據哈希重新組合文件(同樣也會驗證文件)。

IPFS的特點

根據前面的原理,我們可以推倒出IPFS的幾個特點:

  1. 當我們知道一個文件的哈希值之後,可以確保文件不被修改, 即可以確保訪問的文件是沒有被篡改的。因爲根據哈希的特點,哪怕源文件有一丁點的更改,對應的哈希值也會完全不同。

  2. (理論上) 如果IPFS得以普及,節點數達到一定規模,內容將永久保存,就算部分節點離線,也不會影響文件的讀取,不像現在的收藏會失效。

  3. 由於IPFS是一個統一的網絡,只要文件在網絡中被存儲過,除了必要的冗餘備份,文件不會被重複存儲,對比現有互聯網,信息孤島,各中心間不共享數據,數據不的不重複存儲,IPFS一定意義上節約了空間,使得整個網絡帶寬消耗更低,網絡更加高效。

  4. 相對於中心化存儲的容易遭受DDOS***,IPFS採用分佈式存儲網絡,文件被存儲在不同的網絡節點,天然避免了DDOS***,同時一個文件可以同時從多個節點同時下載,通信的效率也會更高。

IPNS

在IPFS中,一個文件的哈希值完全取決於其內容,修改它的內容,其相應的Hash值也會發生改變。這樣有一個優點是保證文件的不可篡改,提高數據的安全性。
但同時我們在開發應用(如網站)時,經常需要更新內容發佈新版本,如果每次都讓用戶每次在瀏覽器中輸入不同的IPFS地址來訪問更新後內容的網頁,這個體驗肯定是無法接受的。

IPFS提供了一個解決方案IPNS(Inter-Planetary Naming System),他提供了一個被私鑰限定的IPNS哈希ID(通常是PeerID),其用來指向具體IPFS文件哈希,當有新的內容更新時,就可以更新IPNS哈希ID的指向。

爲了方便大家理解,做一個類比,和DNS類似, DNS記錄了域名指向的IP地址, 如果服務器更改,我們可以更改DNS域名指向,保證域名指向最新的服務器。
IPNS則是用一個哈希ID指向一個真實內容文件的Hash,文件更新這更改哈希ID的指向,當然更新指向需要有哈希ID對應的私鑰。

通過IPNS訪問文件的方式如下:

利用插件訪問:ipns://QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva
利用網關訪問: http://127.0.0.1:8080/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva

IPNS同樣兼容DNS,使用DNS TXT記錄域名對應的IPNS哈希ID,就可以域名來替換IPNS哈希ID來進行訪問。從而實現更容易讀寫和記憶。

例如使用以下方式簡化訪問:
ipns://ipfs.io
https://ipfs.io/ipns/ipfs.io/

IPFS/IPNS 如果使用,將在後面的文章進一步介紹。

小結

IPFS是一項非常激動人心的技術,儘管它仍在發展的早期(區塊鏈也是),還有很多問題需要我們一起解決,如NAT穿透問題,瀏覽器支持問題,內容存儲激勵問題,存儲數據安全與隱私保護問題。
但是通過 IPFS + 區塊鏈將真正創建Web3.0時代的應用,這是一個完全可信的、自運轉(不停機)的應用,它可以做什麼我不知道,我對未來充滿期待。

歡迎來知識星球提問,星球內已經聚集了300多位區塊鏈技術愛好者。
深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章