當前位置:
首頁 > 新聞 > 比肩IPFS和Filecoin,為什麼說libp2p將成為區塊鏈和物聯網的基礎設施?

比肩IPFS和Filecoin,為什麼說libp2p將成為區塊鏈和物聯網的基礎設施?

10月20日,在由晨霧科技主辦的中國IPFS開發者沙龍上,晨霧科技的聯合創始人徐瀟,他帶來了名為《libp2p詳解》的主題演講。

libp2p為什麼重要呢?今年7月份,協議實驗室將libp2p提升為一級項目,與IPFS和Filecoin比肩,libp2p還是IPFS與Filecoin的基礎設施,也就是說它們的底層技術完全是基於libp2p實現的。而且,libp2p更是未來p2p應用、區塊鏈和物聯網的基礎設施。它高度抽象了主流的傳輸協議,使得上層應用搭建時完全不必關注底層的具體實現最終實現跨環境、跨協議的設備互聯。

徐瀟的演講聚焦於libp2p的實現原理與核心流程。他對libp2p中的核心組件在系統中的功能與實現細節一一做了介紹,並詳細解讀了libp2p初始化結點、撥號、監聽、rpc和數據交換等核心流程。

以下內容為巴比特整理。

我主要為大家講的是go的實現,它其實還有rust和JS實現。之所以只講go,是因為go是它的第一個產品庫,也是實現最全面的一個庫。

一、libp2p概要

1、libp2p是什麼?

libp2p就是幫助你鏈接節點的一個庫。它的特性是什麼?就是任意兩個節點,不管在哪裡,不管處於什麼環境,不管運行什麼操作系統,不管是不是在NAT之後,只要他們有物理上鏈接的可能性,那麼libp2p就會幫你完成這個鏈接。

現在對於協議實驗室來說,libp2p處於非常重要的一個模塊,它是IPFS和filecoin的網路層。大家如果對它有很深的認識,就會發現IPFS里的很多功能就是對libp2p的一個簡單抽象與包裝。換句話說,如果你有一些新的想法,完全可以基於libp2p這個庫實現一個新的IPFS。

libp2p是一個rpc框架。rpc過程指的是節點1想告訴節點2一些數據,我先序列化成位元組流,能夠在網路中傳輸,然後進入真正的傳輸層,節點2再反序列化拿到這個數據。其實libp2p還不是最底層的模塊,它下面還有一個Multiformats的庫,Multiformats提供各種功能的抽象層,並把這些功能抽象成一個統一的介面。

libp2p還是一個工具庫。為什麼這麼說呢?因為我們平常在做軟體開發的時候,不光要關注底層,比如tcp鏈接,還需要關注鏈接狀態等信息。協議實驗室通過他過去的一些經驗,總結出了所有開發者基本都需要的一些功能,把它們放到了libp2p庫裡面,相當於完善了傳輸層。我簡單列了一些,這些工具的功能主要包括鏈接復用、ID交換、中繼、NAT穿越、dht發現、RTT統計等。

2、為什麼要做libp2p?

之所以要做libp2p,是因為在做IPFS的時候,遇到了大量的異構設備,運行著不同的操作系統,網路環境非常複雜,比如在中國有各個NAT,還有某些場景下,可能用不了tcp鏈接,還有就是文件系統多樣性,以及很可能需要協議變遷,比如比特幣已經經歷過很多次的協議變遷,每次都需要51%的節點支持。那麼其實可以通過一種比較巧妙的方式來完成。

未來等IPv6出來以後,很可能是物聯網、P2P應用、區塊鏈的大爆發時期,尤其是物聯網。所以協議實驗室決定把他們遇到的問題全部抽象出來,做個libp2p的庫,讓其他開發者能夠直接使用這個庫,屏蔽掉所有問題,只關注業務邏輯即可。

3、libp2p目標及現狀

libp2p的目標很遠大,但是協議實驗室現在只做到了一部分,不過已經可以基本滿足使用了。我列出了libp2p的目標和現狀,大家可以大致看一下。


二、libp2p原理

1、核心組件關係圖

如下圖所示,這是libp2p核心組件的關係圖。

先簡單介紹一下,第一層是介面層,最上面就是它幫我們實現的一些介面功能。然後就是host,這兩個host是有互相繼承關係的,routed的是basic的一個擴展實現。在libp2p中,一個host是一個節點,所以在IPFS中,都是以host為單位進行數據分發與傳輸的。接下來我慢慢來講細節。

2、核心組件詳解

transport

首先我要講transport,它在應用層和傳輸層中間,看這個就知道其實很簡單,之所以要把它封裝起來,基於兩個理由,一是現在世界上流行的傳輸協議可能只有這些,但協議是不斷演進的。 二是我們平常去找ip地址,有個弊端就是沒法指定協議。所以這個東西的核心就是把各個傳輸層全部抽象為一個統一的介面,只要匹配好介面就可以了。這也是為什麼我們說開發p2p網路不用再關注底層傳輸協議的原因。

upgrader

接下來講一下upgrader,我們知道傳統的https協議中,底層是tcp,上面加了一個加密套接字層,其實這個加密套接字層就是upgrader,但是libp2p中,它的功能更多了一些,大概有四層,我會逐層講解。

首先以tcp鏈接舉例,我的一個原始鏈接,先經過filter,filter是一個地址過濾器,protector就是私網,IPFS也是通過它來實現的。Secure就是加密層,muxer是復用機制。

filter upgrader,這一層非常簡單,它就是判斷一個地址在不在我的黑白名單裡面。

protector upgrader,這一層叫保護網路,其實也叫私有網路,因為它的運行原理就是你如果建了一個分散式應用,如果在私網下建,首先你要生成一個密鑰,然後把這個密鑰分發到所有的節點中,在每一個節點在初始化的時候,會用這個密鑰對鏈接進行設定,設定了以後,在通信的時候,就會先互換一個隨機數,再用這個隨機數以及這個密鑰來加密整個的傳輸信道。為什麼叫私有網路呢,因為你沒有這個密鑰,根本就無法跟別人通信。

Secure upgrader,就是類似TLS的加密鏈接層。這一層目前使用的加密方式有兩種,一個是對稱加密,一個是非對稱加密,非對稱加密用來握手,對稱加密用來加密信道。比如兩個節點間的三次握手,第一次握手互換信息,比如你的公鑰是多少,nonce是什麼,還有我支持的非對稱加密的列表和對稱加密列表,以及我們支持的哈希方式列表。協商之後開始第二次握手,交換信息,包括臨時密鑰和簽名信息,根據對方的公鑰進行加密,對方用自己的私鑰去解密就好。然後兩個人之間已經協商出了可用的通信密鑰。第三次握手其實是驗證信息,驗證對方有沒有按照正確的方式生成。

Mux upgrader,它也叫鏈路復用器。顧名思義就是復用了同一個鏈路,在一個鏈路上面可以打開多個鏈接。

relay

再來講一下中繼transport,它對中國的部分場景還是非常有用的,主要是因為涉及到NAT的問題。中繼的實現方案是這樣一個框架圖,底層是tcp鏈接,再監聽,然後新的tcp鏈接進來並進行升級,得到了中繼的一個流,如果中繼是代理到這裡就結束了。如果是末端節點,那麼它把這個stream又抽象成了一個鏈接的概念,進而在監聽器上面起了一個新的鏈接,叫中繼鏈接,對中繼鏈接進行升級,得到一個stream,就到業務邏輯了。中繼很有意思的一點,不管中繼listener監聽到了多少物理鏈接,底層對應的都是一個物理鏈接,所以中繼場景下的鏈接都是輕量級的。

peerinfo

再來講一下peerinfo,它代表了一個節點的相關信息,它包含的內容就兩點,一個是ID,ID是誰?就是我的名字,ID怎麼來的?通過公鑰,經過一次哈希得到的,也是一個節點的唯一標誌。另外就是地址信息,我這個ID的具體地址是什麼,包含3份信息,監聽地址、觀測地址、NAT映射地址。

peerstore

peer store的結構如上圖,它類似於我們傳統生活中的電話本、通信地址薄,會記錄所有你知道的人的相關信息,比如說key book會記錄一些公私鑰的信息,metrics會記錄鏈接的耗時時間,通過加權平均值的方式對這個節點進行評估。addr book就是地址的一個信息,默認的實現裡面是一個帶超時的地址信息,當然這個超時時間可以設為零。最後一個data store就是給地址打標籤的意思。

swarm

swarm可以說是libp2p的一個核心,因為它才是真正的網路層。所有跟網路相關的東西全部在swarm裡面,地址簿、鏈接、監聽器都在這管理,它得有一個回調機制。讓上層註冊,當有一個新的stream進來以後,要調用一個相當於中轉函數的概念。transport管理是說一個節點可以支持多種transport,dialer就是撥號器,不過它實際上有點複雜,同時我覺得也很厲害!感興趣的朋友可以關注一下。它裡面有三種撥號器,一個是同步撥號器,一個是後台限制撥號器,一個是有限制的撥號器,這三個撥號器會共同作用於整個撥號的過程。

然後講一下NAT,這塊可能大家都會比較關注,從目前實現方式來講,NAT叫穿越不如叫映射。當下它的一個實現方式,就是我啟動一個節點,先檢查一下我附近的NAT設備運行的是什麼協議,再獲取到NAT的一個設備地址,然後對這個監聽地址進行周期性的埠映射。但很可惜的是,目前只限於兩種協議(Upnp、NAT-pmp)且在僅有一層NAT的時候有可能成功。美國的情況和中國的差異非常大,在美國,普通人的手機都能拿到公網ip地址。

host

最後說一下host,是我們操作的核心,一個host底下有這麼幾個部分組成,首先network,ID service就是我們身身份互換的一個功能,然後nat-manager就是剛剛我說的映射,conn-manager是鏈接管理。

3、核心流程詳解

(此處流程比較複雜,如果沒有技術背景且沒有看過相關源碼,可能難以理解;如有需要,可與徐瀟團隊聯繫。此處暫不闡述)


三、libp2p應用場景

應用場景這部分我簡單講一下,畢竟libp2p還處於不斷的迭代中,現在還處於開發的階段,目前基本上處於demo這樣一個階段的應用。

首先是物聯網,我認為對於物聯網場景來說, P2P鏈接是很重要的一環, ,比如, 安防場景下, 安防攝像頭與手機之間,建立鏈接的話最好是直連,否則中央伺服器的帶寬撐不住,此時對於該場景來說, libp2p可以幫助其完成鏈路上的鏈接工作, 並額外完成了諸如NAT打洞(目前尚未實現, 但正在完善中), 流量及RTT統計, 長連接, 流式加密傳輸, 服務端主動與終端通信等工作.此外, libp2p也能適用於諸如車聯網, 無人車等終端不斷在各個網路間切換, 導致其ip信息不斷變化的場景, 基於節點ID的鏈接方式及DHT路由發現機制, 可以有效屏蔽掉底層物理鏈接與上層邏輯的耦合度. 對於信息化時代的逐步到來與演進, 由個體產生的UGC內容在全網的佔比將越來越多, 如何有效的將對的信息快速分發到對的人手裡(如抖音與快手的關注視頻, 直播平台的實時推流等), 同時降低中心化伺服器的帶寬壓力, 將是未來發展的一條重要路線.

第二個就是區塊鏈,已經有項目在利用libp2p作為它的底層,相當於分發層、調用層、傳輸層、網路層了。比如剛才多次提到filecoin,在「區塊數據同步」、「文件傳輸」、「節點查找」等不少核心環節都使用了libp2p。還有Polkadot波卡鏈, 作為可能成為區塊鏈3.0的開闢者, 並為了兼容現有的諸如eth以太坊等主鏈而採用的異構多鏈架構, 更要考慮終端設備的複雜場景, 因此其選擇使用libp2p作為其底層傳輸層, 利用libp2p在各個模塊的高度抽象帶來的靈活性及可擴展性, 來避免現在及未來因區塊鏈技術變遷導致的不兼容問題.

第三個是分散式聊天,就是我們通過ipfs網路互相之間發送聊天信息,也不用管對方鏈路到底是怎麼樣的,也不用管中央伺服器。

第四個就是傳輸文件,IPFS就是用這個做的,所以這個應用性非常之廣。

對LibP2P技術的小夥伴可以多了解一下,多進行踴躍的嘗試,謝謝。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 巴比特資訊 的精彩文章:

Coinbase聯合創始人:基於區塊鏈的數字資產將使虛擬經濟變得非常真實
Andreas Antonopoulos:任何對比特幣的阻擋,都將以失敗告終

TAG:巴比特資訊 |