P2P通信算法

一、比特幣P2P網絡:

1.架構:比特幣採用了基於互聯網的點對點(P2P:peer-to-peer)分佈式網絡架構。

2.協議:基於 TCP 構建,主網默認通信端口爲 8333。

3.網絡拓撲:比特幣全節點組成的網絡是一種全分佈式的拓撲結構,節點與節點之間的傳輸過程更接近“泛洪算法”,即:交易從某個節點產生,接着廣播到臨近節點,臨近節點一傳十十傳百,直至傳播到全網。

4.節點發現:

從鄰近節點獲取節點列表並進行維護。

5.地址保存:

種子節點硬編碼,爲了避免每次接入網絡都進行大量的地址申請,比特幣客戶端使用的是levelDB格式儲存數據將獲取的節點信息保存在 peers.dat 本地文件中。比特幣客戶端啓動後會發起定時循環任務,檢查連接節點是否在線,並將失敗的節點保存在 banlist.dat 本地文件中。

6.局域網穿透:

UPnP 協議作爲局域網穿透工具,只要局域網中的路由設備支持 NAT 網關功能、支持 UPnP 協議,即可將你的區塊鏈節點自動映射到公網上。

二、以太坊P2P網絡:

1.架構:以太坊 P2P 網絡是一個完全加密的網絡。

2.協議:提供 UDP 和 TCP 兩種連接方式,主網默認 TCP 通信端口是 30303,推薦的 UDP 發現端口爲 30301。

3.網絡拓撲:分佈式網絡即P2P網絡,使用了經典的Kademlia網絡,簡稱kad,是一種分佈式散列表(DHT)技術,以異或運算爲距離度量基礎,已經在BitTorrent、BitComet、Emule等軟件中得到應用。

4.節點發現:使用了經典的 Kademlia 網絡,簡稱 kad。Kad 的路由表是通過稱爲 K 桶的數據構造而成,K 桶記錄了節點 NodeId,distance,endpoint,ip 等信息。以太坊 K 桶按照與 target 節點距離進行排序,共 256 個 K 桶,每個 K 桶包含 16 個節點。它使用了 DHT 來定位資源,全稱 Distributed Hash Table,中文名爲分佈式哈希表。KAD 網絡會維護一個路由表,用於快速定位目標節點。由於 KAD 網絡基於 UDP 通信協議,所以以太坊節點的節點發現是基於 UDP 的,如果找到節點以後,數據交互又會切換到 TCP 協議上。

5.地址保存:

種子節點硬編碼,以太坊同樣採用了地址數據庫來保存歷史節點。其使用leveldb作爲歷史文件格式,並生成多個*.ldb文件。對於首次連接以太坊網絡的節點,地址數據庫是空的,後續隨着地址廣播,逐漸填滿地址列表。而對於多次連接的節點,其啓動使用了loadSeedNodes( )方法將種子節點和歷史數據一起讀取,快速高效連接以太坊 P2P 網絡。

6.局域網穿透:

UPnP 協議作爲局域網穿透工具,只要局域網中的路由設備支持 NAT 網關功能、支持 UPnP 協議,即可將你的區塊鏈節點自動映射到公網上。

三、Fabric超級賬本P2P網絡

1.架構: Gossip

2.協議:grpc雙向流

3.網絡拓撲:成員節點劃分

4.節點發現:

discovery模塊啓動掃描並辨別管理頻道或網絡中存在的活着的(alive)結點和死掉的(掉線)結點。discovery模塊判斷一個結點是否活着的機制是:根據最後一次收到一個結點的alive消息的時間與當前時間的差值,當這個差值大於某個值,則判定該結點已經死掉。節點加入需要驗證組織頒發證書等後加入channel。

5.地址保存:

core.yaml 配置文件進行配置。Fabric 採用超級節點的形式,都需要接入超級節點。在加載地址的時候,節點只需要驗證super節點的存在並去那裏取地址即可。discovery把活着的和死掉的peer點信息分別存儲在成員aliveMembership,deadMembership中。

 

 

 

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