節點間的通信 —— 一個簡單的視角

以太坊節點之間通過簡單的線路協議進行通信,形成一個虛擬或覆蓋良好的網路 為實現這一目標,該協議稱為ÐΞVp2p,使用RLP等技術和標準。

傳輸協議

為了提供機密性並防止網路中斷,ÐΞVp2p節點使用RLPx消息,一種加密且經過身份驗證的transport協議。 RLPx使用類似於Kademlia的路由演算法,Kademlia是用於分散的對等計算機網路的分佈式雜湊表(* DHT )。 *RLPx,作為底層傳輸協議,允許“節點發現和網路形成”RLPx的另一個顯著特徵是通過單個連接支持多個協議_。

ÐΞVp2p節點通過Internet進行通信時(通常情況下),它們使用TCP,它提供面向連接的介質,但實際上ÐΞVp2p節點通過使用底層傳輸協議RLPx所提供的所謂設施(或消息),以數據包通信,允許它們通信發送和接收數據包。

數據包是 動態構建 dynamicically framed,前綴為RLP編碼標頭,經過加密和驗證。通過幀頭實現多路複用,幀頭指定分組的目的協議。

加密握手

通過握手建立連接,並且一旦建立,就將數據包加密並封裝為幀。

此握手將分兩個階段進行,第一階段涉及密鑰交換,第二階段將執行身份驗證,作為DEVp2p的一部分,還將交換每個節點的功能。

安全 - 基本考慮因素

所有加密操作都基於secp256k1,並且每個節點都應該維護一個靜態私鑰,該私鑰在會話之間保存和恢復。

在實施加密之前,數據包具有時間戳屬性,以減少執行重放攻擊的時間視窗。 建議接收方只接受最近3秒內創建的數據包。

數據包被簽名。通過從簽名中恢復公鑰並檢查它是否與預期值匹配來執行驗證。

ÐΞVp2p 消息和子協議

使用RLP,我們可以編碼不同類型的數據,其類型由RLP的第一個條目中使用的整數值確定。 這樣,ÐΞVp2p基礎線路協議 basic wire protocol,支持任意的子協議

0x00-0x10之間的Message IDs保留用於ÐΞVp2p消息。因此,假定sub-protocols的消息ID從“0x10”開始。

未在對等節點之間共享的子協議是忽略的。 如果共享相同(同名)子協議的多個版本,則數字最高的勝出。

基本建立通信 - 基本ÐΞVp2p消息

作為一個非常基本的例子,當兩個對等節點發起他們的通信時,每個對等節點用另一個稱為“Hello”的特殊ÐΞVp2p消息來迎接另一個,該消息由“0x00”消息ID標識。 通過這個特定的ÐΞVp2p “Hello”消息,每個節點將向其對等的相關數據公開,從而允許通信以非常基本的級別開始。

在此步驟中,每個對等方將知道有關其對等方的以下資訊。

  • P2P協議的實現版本。現在必須是'1`。

  • 客戶端軟體標識,作為人類可讀的字串(例如Ethereum(++)/ 1.0.0)。

  • 對等節點的capability name為長度為3的ASCII字串。當前支持的能力名稱為“eth”和“shh”。

  • 對等節點的capability version為正整數。目前支持的版本是eth34shh1

  • 客戶端正在偵聽的連接埠。如果為“0”則表示客戶端沒有收聽。

  • 節點的唯一標識指定為512位雜湊。

斷開連接 - 基本ÐΞVp2p消息

要執行有序的斷開連接,要斷開連接的節點將發送名為“Disconnect”ÐΞVp2p消息,該消息由“0x01”消息ID標識。此外,節點使用參數“reason”指定斷開的原因。

  • “reason”參數可以取值從“0x00”到“0x10”,例如“0x00”表示原因“請求斷開連接”和“0x04”表示“太多對等節點”*。

狀態 - 以太坊子協議範例

該子協議由+0x00消息-id標識。

此消息應在初始握手之後和任何與以太坊相關的消息之前發送,並通知其當前狀態。

為此,節點向其對等方公開以下數據;

  • Protocol version

  • Network Id

  • Total Difficulty of the best chain

  • Hash of the best known block

  • Hash of the Genesis block

已知的當前網路ID

這裡是目前已知的網路ID列表:

  • 0: Olympic; 以太坊公共預發佈測試網

  • 1: Frontier; Homestead,Metropolis,以太坊公共主網

  • 1: Classic; (un)forked 公共以太坊Classic主網路,鏈ID 61

  • 1: Expanse; 另一個以太坊實現,鏈ID 2

  • 2: Morden; 公共以太坊測試網,現在是以太坊經典測試網

  • 3: Ropsten; 公共跨客戶端以太坊測試網

  • 4: Rinkeby: 公共Geth以太坊測試網

  • 42: Kovan; 公共Parity以太坊測試網

  • 77: Sokol; 公共POA測試網

  • 99: POA; 公共權威證明(PoA)以太網網路

  • 7762959: Musicoin; 音樂區塊鏈

GetBlocks - 另一個子協議範例

該子協議由+ 0x05 message-id標識。

通過此消息,節點通過其自己的雜湊向其對等方請求指定的塊。

請求節點的方式是通過包含它們所有雜湊值的列表,將消息採用以下形式;

[+0x05: P, hash_0: B_32, hash_1: B_32, ...]

請求節點必須沒有包含所有請求的塊的響應消息,在這種情況下,它必須再次請求那些尚未由其對等方發送的消息。

節點標識和聲譽

ÐΞVp2p節點的標識是secp256k1公鑰。

客戶端可以自由標記新節點並使用節點ID作為決定節點的信譽的方法。

他們可以儲存給定ID的評級並相應地給予優先權。

results matching ""

    No results matching ""