IPFS究竟顛覆了什麼?

買賣虛擬貨幣

https://mp.weixin.qq.com/s/jwfjxe31v-ke-kksghjxka


之前聊過熱門專案filecoin,詳見《投資filecoin前的一盆冷水》。filecoin專案是基於ipfs協議開發出來的應用,ipfs協議能否成功推廣將會很大程度地影響filecoin專案的價值。因此,這次我們來深入瞭解一下ipfs是什麼、做了些什麼,以及是否有推廣前景。

 位於應用層的ipfs 

ipfs全稱interplanetaryfile system,又叫星際檔案系統,是一種建立分散式儲存和共享檔案的網際網路應用層協議。                           

圖片1:網際網路的五層結構

當我們的pc(客戶端)發起一個請求時,會從第5層依次向下打包資訊,最後從第1層的網線輸出出去。反之當收到一個資訊時,也是從第1層開始向上層層解析,最終到第5層供使用者操作。簡而言之越下面的層越靠近硬體,越上面的層越靠近使用者的使用。網際網路的分層設計有一個好處:上層的變動對下層結構沒有任何影響,即無需下層結構發生改變。這降低了對硬體或系統的更新要求。

而ipfs屬於第5層應用層的協議,它的願景是補充甚至取代http協議,以打造一個更安全、更開放的網際網路環境。

 ipfs與http的比較 

下面我們透過分析“開啟網頁”這個動作,來了解一下這兩個協議有什麼不同。 

  • 開啟一個http網頁

簡單來說,http協議是用來傳輸html檔案的協議。由於網頁檔案幾乎都是用html語言編寫的,http協議被廣泛應用於全球資訊網的各類服務中。下圖展示了個人電腦(客戶端)開啟http網頁的所需經歷的四個步驟。
圖片2:開啟一個http協議網頁的步驟
1. 在個人電腦的瀏覽器(客戶端)輸入網頁域名website.com,由於客戶端不知道域名所對應的伺服器ip地址是多少,所以無法直接傳送請求到網頁所在的伺服器。因此需要先向dns伺服器發問,由dns伺服器把域名翻譯成ip地址返回給客戶端(如果直接知道對應的ip地址,則可以省略1、2步驟)。
2. dns伺服器中儲存著一個域名和ip地址的對應表格,查詢到website.com所對應的ip地址並返回給客戶端。
3. 知道ip地址後,客戶端就知道了儲存網頁的伺服器地址,所有關於website.com的內容都儲存在這個伺服器中。客戶端再次發出請求到網頁檔案所在伺服器要求返回與website.com有關的html檔案。
4. 所有html檔案被傳回客戶端,這樣我們就可以在瀏覽器中瀏覽website.com了。
結合上面的過程可知,http協議是一種中心化的協議,它一次只能從一臺伺服器中獲取檔案,這導致幾乎所有的網頁資訊都儲存在提供商提供的伺服器中。一旦控制了這些伺服器提供商就可以輕鬆的控制使用者資料,而這些檔案伺服器中被刪除,使用者就再也無法檢視了。

  • 開啟一個ipfs網頁

開啟ipfs網頁則會有些許不同,見下圖:
圖片3  ipfs網頁的開啟步驟
1. 當使用者試圖開啟website.com這一網頁時,客戶端會向全網廣播尋找website.com的網頁檔案(透過輸入該檔案的cid*來尋找)。
*cid全稱是content identifier,又稱內容識別符號,是一組雜湊值。它採用雜湊函式的演算法,依據檔案的內容,對檔案的做出唯一標識。只要檔案做了一點點修改(哪怕只有一個位元組),cid也會變得完全不同。它不包含檔案儲存位置的資訊。
2. ipfs在dht*中找到儲存有該cid對應檔案的所有裝置的ip地址,並返回1個或多個ip地址。
*dht全稱distributed hash table,又叫分散式雜湊表。在這裡是特指檔案內容的cid和檔案所在裝置的ip地址的對應表。dht是分散式的,網路中沒有哪個節點存有整張表格;每個節點會儲存一部分表格。
3. 客戶端向ip地址的裝置發出請求,傳送回website.com的檔案。
4. 檔案被傳回客戶端,這樣網頁website.com就在瀏覽器中被開啟。

從流程上看,http是已知存在一個地址,向網路尋求這一地址所儲存的檔案,正因如此http下提供檔案的地址應當是唯一的,而在這地址中儲存的檔案可以替換的。而ipfs是已知存在一個檔案,向網路尋求持有這一檔案的1個或多個地址,進而向這些地址索要檔案,因此ipfs下提供檔案的地址可以不唯一,但最終不同地址提供的必定是同一個檔案。

所以和http相比,ipfs最大的特點是可以有多個提供website.com網頁檔案的地址,這意味著無需一臺中心化的伺服器(用以提供固定的地址)來返回website.com網頁檔案。當一臺電腦在ipfs網路向全網廣播“我有這個檔案”時,其ip地址和檔案cid會被加入dht中。那麼當很多裝置都宣告擁有相同的檔案時,這個檔案便可以從不同的裝置下載。只需一臺裝置線上就能保證這個檔案能被瀏覽到。而更多的資料來源,也可以讓獲取方選擇網路速度更快的地址來獲取該檔案。因此與http只能從一臺伺服器下載相比,使用ipfs網路將使檔案獲取速度和可靠性都得到巨大的提升。

 ipfs的域名管理 

細心的朋友會發現,既然一點點內容上的改動就會導致cid的變化,那麼當一個檔案更新後,它的“地址”(即在開啟網頁時所需輸入的檔案cid)就會變化,如果我們想訪問這個檔案最新的版本,我們就需要在每次更新後用新的“地址”開啟。另外,cid是一長串雜湊值,非常不便於閱讀和記憶(如圖4)。為此,ipfs需要透過引入域名系統來使訪問更加便捷,這催生出了ipns域名和dsnlink域名系統。

圖片4 記不住的cid雜湊值會隨著檔案的更新而變化

  • ipns域名系統

為了適應ipfs“內容定址”這一特性,ipns(interplanetary name system)這種域名系統被提了出來。ipns的域名是一個公鑰的雜湊值,利用與這個公鑰相關的私鑰來關聯檔案的內容(cid)。這個雜湊值好比一個指標,會始終指向最新發布的內容,這樣就算檔案有更新我們也不用每次都輸入不同的地址了。ipns系統可以透過dht來實現,保證了網路的域名解析過程也是完全去中心化的。
圖片5 ipns的域名不會變化並自動指向最新版本的檔案

圖4的cid會變成圖5這樣,但是這個雜湊值還是很難閱讀和記憶,所以還可以用更高效,更容易閱讀的dnslink域名系統。 

  • dnslink域名系統

在http的地址定址的系統中,客戶端需要透過ip:port這種格式來訪問網頁所在的伺服器,地址一般長這樣:http://18.205.129.69:80 。在http網頁中,無論檔案怎麼更新都可以透過這個地址來訪問。但是和雜湊值一樣,這個地址很難閱讀和記憶,因此我們會採用website.com這種適合人類閱讀的域名,再透過dns解析將其還原成http可以理解的ip地址格式(即上文http開啟網頁中的第1、2步)。
目前ipfs也正引入類似的域名方式來簡化cid的記憶難度。透過引入dnslink域名系統,網頁域名可以與cid標識或者ipns公鑰雜湊對映。如此的好處是網頁可以透過人們熟悉的域名方式進行訪問,但相應的將會在訪問網頁的時候將會多一步域名解析的過程。

 ipfs究竟顛覆了什麼 

·技術並非顛覆

ipfs並未在技術上有顛覆性的創新,是一系列現有協議的有機合集。其中最重要的兩個協議分別是:bittorrent的點對點共享檔案系統和git版本控制系統。從ipfs網頁的開啟流程可以看出,點對點分享檔案內容的形式承襲自bittorrent,也就是熟知的bt下載,而ipfs利用dht後,每個客戶端(伺服器)只儲存dht表格的一部分,提高了去中心化水平。ipfs的另一個重要特性內容定址則承襲於git的版本控制系統,透過利用雜湊加密檔案的內容使其產生全域性唯一的識別符號,從而讓內容變得可以定址。ipfs透過充分利用已有的協議與技術努力打造出一個與http不同的網際網路應用協議。

·  看不見的改變

ipfs作為一個內容定址的協議,改變了我們在網際網路中搜尋檔案的方式。但它本質並沒有改變我們訪問網頁的方法,我們還是需要找到儲存檔案的裝置的ip,透過訪問這個裝置來獲取檔案。ipfs作為第5層應用層的協議是不會改變第3層網路層的ip協議的,改變的是獲得ip地址的方法,從http的地址定址變成了內容定址。尋的還是“址”(ip地址),只是“尋”的方式不同了而已。需要強調一點,ipfs並不等同於區塊鏈。協議本身不是非要搭載在區塊鏈上才能執行,只是整個協議去中心化的特質非常適合應用區塊鏈來實現。


·未來還未到來

ipfs要多久才能大規模應用於網際網路呢?答案是:很久。網際網路本身的慣性太強,即使ipv6的需求這麼旺盛,多年來也沒有做到全網推廣,更何況ipfs還遠不夠安全,高效。分散式共享和儲存檔案要還面臨盜版和非法檔案的監管的問題。在非常漫長的時間內,網際網路的主角依然是http,ipfs就像bt下載一樣,會有一眾忠實的使用者但尚不會成為主流。

參考資料:

[1] ipfs——它能取代http協議?,https://www.jianshu.com/p/ddccae89a49a

[2] 淺入淺出bittorrent協議 | azard的部落格,http://www.360doc.com/content/17/0617/14/19227797_663927782.shtml

[3] ipfs docs--dnslink, https://docs.ipfs.io/concepts/dnslink/

[4] detailed tcp/ipcommunication example,https://microchipdeveloper.com/tcpip:detailed-tcpip-communication

[5] tcp/ip five-layer softwaremodel overview, https://microchipdeveloper.com/tcpip:tcp-ip-five-layer-model

[6] 戴嘉樂:詳解ipfs的本質、技術架構以及應用,https://blog.csdn.net/u012357002/article/details/80161042?utm_medium=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-6.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-6.nonecas

[7] ipfs gateway,https://developers.cloudflare.com/distributed-web/ipfs-gateway

[8] how does resolution androuting work with ipfs?, https://github.com/ipfs-inactive/faq/issues/48

[9] http is obsolete. it'stime for the distributed web, https://blog.neocities.org/blog/2015/09/08/its-time-for-the-distributed-web.html

[10] address ipfs on the web,https://docs.ipfs.io/how-to/address-ipfs-on-web/#dweb-addressing-in-brief

[11] understanding ipfs indepth(3/6): what is interplanetary naming system(ipns)?,https://medium.com/hackernoon/understanding-ipfs-in-depth-3-6-what-is-interplanetary-naming-system-ipns-9aca71e4c13b

[12] ipfs docs--interplanetaryname system (ipns), https://docs.ipfs.io/concepts/ipns/#example-ipns-setup

[13] ipfs之技術背景git版本控制系統, https://www.liankexing.com/q/7835

[14] ten terrible attempts tomake the inter planetary file system human-friendly,https://hackernoon.com/ten-terrible-attempts-to-make-the-inter-planetary-file-system-human-friendly-e4e95df0c6fa

[15] bittorrent--百度百科,https://baike.baidu.com/item/bittorrent/142795?fr=aladdin

[16] 阮一峰的網路日誌--網際網路協議入門(一),http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

[17] 阮一峰的網路日誌--網際網路協議入門(二),http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

[18] 構成ipfs的兩個重要協議,你是否瞭解呢?

https://mp.weixin.qq.com/s/0d9qdud5y0hox5j21edyow

[19] quick explanation of dnslink in ipfs,https://www.youtube.com/watch?v=yxkzfedvcbs


————  e n d ————





免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;