以太坊p2p網路(一):以太坊p2p網路部分結構
阿新 • • 發佈:2018-12-11
一、以太坊p2p模組組成
在以太坊p2p目錄下,主要包括以下幾個模組:
p2p模組 | 功能 |
---|---|
discover | 包含了Kademlia協議。是基於UDP的p2p節點發現協議。 |
discv5 | 新的節點發現協議。 還是試驗屬性 |
enr | 實現EIP-778中的以太坊節點記錄 |
nat | 提供網路埠對映協議 |
netutil | 網路包拓展 |
protocols | p2p子協議拓展 |
simulations | p2p網路的模擬。 |
discover模組原始碼:
- 發現的節點的持久化儲存 database.go
- Kademlia協議的核心邏輯 tabel.go
- UDP協議的處理邏輯udp.go
- 網路地址轉換 nat.go
p2p 其他部分原始碼
- 節點之間的加密鏈路處理協議 rlpx.go
- 挑選節點然後進行連線的處理邏輯 dail.go
- 節點和節點連線的處理以及協議的處理 peer.go
- p2p伺服器的邏輯 server.go
二、以太坊的網路分層
以太坊的網路如下所示:
(1)、傳輸層
傳輸層主要包括TCP和UDP協議,以太坊P2P啟動主要包括兩個部分啟動TCP和啟動UDP,預設埠30303。
- UDP:udp主要用於p2p節點發現,包括nat地址轉換,discover發現模組。
- TCP:tcp主要用於節點和節點連線的區塊鏈資料的處理, 包括接收其他節點的連線和主動連線其他節點的功能,主要邏輯在Peer,同時通過Nat向外暴露地址。
(2) 會話層
會話層主要包括 Peer 管理,NodeTable 管理和 RPC 協議。
p2p(peer to peer)負責以太坊底層節點間的通訊,主要包括底層節點發現(discover)和上層協議執行兩大部分。
- NodeTable 管理主要包括底層節點發現
- Peer管理只要負責上層協議執行
2.1 NodeTable管理原始碼結構
節點發現功能主要涉及 Server Table udp 這幾個資料結構,它們有獨自的事件響應迴圈,節點發現功能便是它們互相協作完成的。其中,每個以太坊客戶端啟動後都會在本地執行一個Server,並將網路拓撲中相鄰的節點視為Node,而Table是Node的容器,udp則是負責維持底層的連線。這些結構的關係如下圖:
2.2 Peer 管理原始碼結構
(3) 表示層
RLPx協議就定義了TCP連結的加密過程。 RLPx使用了(Perfect Forward Secrecy), 簡單來說。 連結的兩方生成生成隨機的私鑰,通過隨機的私鑰得到公鑰。 然後雙方交換各自的公鑰, 這樣雙方都可以通過自己隨機的私鑰和對方的公鑰來生成一個同樣的共享金鑰(shared-secret)。後續的通訊使用這個共享金鑰作為對稱加密演算法的金鑰。 這樣來說。如果有一天一方的私鑰被洩露,也只會影響洩露之後的訊息的安全性, 對於之前的通訊是安全的(因為通訊的金鑰是隨機生成的,用完後就消失了)。
(4)應用層
以太坊應用層實現了eth、whisper等子協議。後面會詳細分析。