儘管網絡上,已經有很多文章討論IPFS,不過真正講明白IPFS想作什麼的不多,文本嘗試站在將來Web3.0的高度來看看IPFS究竟用來解決什麼問題。git
對區塊鏈有所瞭解的同窗,知道區塊鏈維護的是一箇中立的(去中心)、共同信任、難以篡改的數據庫、智能合約創造的是一個徹底透明(不被幹擾)的運行規則,所以能夠解決信任問題。程序員
一切看起來很美好,咱們能夠開發去中心化應用DApp 解決信任問題,由此也確實產生了不少的博彩類DApp遊戲。github
不熟悉DApp的同窗能夠看我另外一篇文章程序員如何切入區塊鏈去中心化應用開發.web
細心的同窗,也許會發現一個問題,雖然DApp的後臺邏輯(智能合約)是在無中心的節點上運行的透明的規則,可是咱們看到內容卻來自於一臺無信任的中心化服務器。數據庫
這是由當前互聯網規則-超文本媒體傳輸協議(HTTP)決定的,簡單來說,在這個協議下,當咱們在瀏覽器輸入一個網址時,老是會先找到這個網址(域名)對應的服務器IP地址,而後請求服務器,並把服務器的響應顯示在瀏覽器。瀏覽器
這種方式下文件可否訪問,徹底取決於服務器,服務器也許會關閉、內容獲取被篡改或刪除,對用戶都沒法保證。我本身看到好內容把網頁收藏的習慣,常常會出現過一段時間再去訪問的時候,頁面已經不存在了。安全
IPFS - InterPlanetary File System 星際文件系統,多數人談到IPFS都只講到它的去中心化存儲,其實IPFS想要作的遠不僅存儲,其目標是取代HTTP,成爲Web3.0時代的基礎協議。咱們從其官網對IPFS的定義就能夠看到其雄心。服務器
儘管Web3.0目前沒有明肯定義,從2014年以太坊聯合創始人Gavin Wood提出分佈式網絡的Web3.0概念開始,業界廣泛認爲Web3.0 特徵應該是 分佈式、可信任。網絡
在官網的有這樣兩個描述:app
IPFS is the Distributed Web A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.
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 ipfs.io/ipfs/Qme2qN…
IPFS是一種內容可尋址、版本化、點對點超媒體的分佈式存儲、傳輸協議。
咱們知道在如今的網絡服務裏,內容是基於位置(IP)尋址的,就是在查找內容的時候,須要先找到內容所在的服務器(根據IP),而後再在服務器上找對應的內容。 而在IPFS的網絡裏,是根據內容尋址,每個上傳到IPFS上面去的文件、文件夾,都是以Qm爲開頭字母的哈希值,無需知道文件存儲在哪裏,經過哈希值就可以找到這個文件,這種方式叫內容尋址。
在IPFS系統中,內容會分塊存放(若是內容很小就會直接存在DHT中),並分散存儲在IPFS網絡中的節點上(不過目前的IPFS實現,一個節點會完整保存內容的全部區塊)。系統會給內容的每個塊計算哈希值,而後把全部塊的哈希值拼湊起來,再計算一次哈希值,從而獲得最終的哈希值。同時每一個節點會維護一張DHT(分佈式哈希表),包含數據塊與目標節點的映射關係。
在IPFS中是經過哈希去請求文件的,它就會使用這個分佈式哈希表找到文件所在的節點,取回文件根據哈希從新組合文件(一樣也會驗證文件)。
根據前面的原理,咱們能夠推倒出IPFS的幾個特色:
當咱們知道一個文件的哈希值以後,能夠確保文件不被修改, 便可以確保訪問的文件是沒有被篡改的。由於根據哈希的特色,哪怕源文件有一丁點的更改,對應的哈希值也會徹底不一樣。
(理論上) 若是IPFS得以普及,節點數達到必定規模,內容將永久保存,就算部分節點離線,也不會影響文件的讀取,不像如今的收藏會失效。
因爲IPFS是一個統一的網絡,只要文件在網絡中被存儲過,除了必要的冗餘備份,文件不會被重複存儲,對比現有互聯網,信息孤島,各中心間不共享數據,數據不的不重複存儲,IPFS必定意義上節約了空間,使得整個網絡帶寬消耗更低,網絡更加高效。
相對於中心化存儲的容易遭受DDOS攻擊,IPFS採用分佈式存儲網絡,文件被存儲在不一樣的網絡節點,自然避免了DDOS攻擊,同時一個文件能夠同時從多個節點同時下載,通訊的效率也會更高。
在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 ipfs.io/ipns/ipfs.i…
IPFS/IPNS 若是使用,將在後面的文章進一步介紹。
IPFS是一項很是激動人心的技術,儘管它仍在發展的早期(區塊鏈也是),還有不少問題須要咱們一塊兒解決,如NAT穿透問題,瀏覽器支持問題,內容存儲激勵問題,存儲數據安全與隱私保護問題。 可是經過 IPFS + 區塊鏈將真正建立Web3.0時代的應用,這是一個徹底可信的、自運轉(不停機)的應用,它能夠作什麼我不知道,我對將來充滿期待。
歡迎來知識星球提問,星球內已經彙集了300多位區塊鏈技術愛好者。 深刻淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。