站在Web3.0 理解IPFS是什麼

Tiny熊發表於2018-12-18

最新內容會更新在主站深入淺出區塊鏈社群
原文連結:站在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多位區塊鏈技術愛好者。
深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術部落格。

相關文章