以太坊節點之間通過簡單的線路協議進行通信,形成一個虛擬或覆蓋良好的網路 為實現這一目標,該協議稱為*ÐΞVp2p*,使用*RLP*等技術和標準。
為了提供機密性並防止網路中斷,ÐΞVp2p*節點使用*RLPx*消息,一種加密且經過身份驗證的_transport協議。 *RLPx*使用類似於*Kademlia*的路由演算法,*Kademlia*是用於分散的對等計算機網路的分佈式雜湊表( DHT )。 *RLPx,作為底層傳輸協議,允許_“節點發現和網路形成”。 *RLPx*的另一個顯著特徵是通過單個連接支持_多個協議。
當*ÐΞVp2p*節點通過Internet進行通信時(通常情況下),它們使用TCP,它提供面向連接的介質,但實際上*ÐΞVp2p*節點通過使用底層傳輸協議*RLPx*所提供的所謂設施(或消息),以數據包通信,允許它們通信發送和接收數據包。
數據包是 動態構建 dynamicically framed,前綴為_RLP_編碼標頭,經過加密和驗證。通過幀頭實現多路複用,幀頭指定分組的目的協議。
使用*RLP*,我們可以編碼不同類型的數據,其類型由RLP的第一個條目中使用的整數值確定。 這樣,ÐΞVp2p,基礎線路協議 basic wire protocol,支持_任意的子協議_。
`0x00-0x10`之間的_Message IDs_保留用於*ÐΞVp2p*消息。因此,假定_sub-protocols_的消息ID從“0x10”開始。
未在對等節點之間共享的子協議是_忽略的_。 如果共享相同(同名)子協議的多個版本,則數字最高的勝出。
作為一個非常基本的例子,當兩個對等節點發起他們的通信時,每個對等節點用另一個稱為*“Hello”的特殊*ÐΞVp2p*消息來迎接另一個,該消息由“0x00”消息ID標識。 通過這個特定的*ÐΞVp2p *“Hello”*消息,每個節點將向其對等的相關數據公開,從而允許通信以非常基本的級別開始。
在此步驟中,每個對等方將知道有關其對等方的以下信息。
-
P2P協議的實現*版本*。現在必須是'1`。
-
客戶端軟體標識,作為人類可讀的字符串(例如`Ethereum(++)/ 1.0.0`)。
-
對等節點的*capability name*為長度為3的ASCII字符串。當前支持的能力名稱為“eth”和“shh”。
-
對等節點的*capability version*為正整數。目前支持的版本是`eth`為`34`,
shh`為`1
。 -
客戶端正在偵聽的*端口*。如果為“0”則表示客戶端沒有收聽。
-
*節點的唯一標識*指定為512位雜湊。
要執行有序的斷開連接,要斷開連接的節點將發送名為*“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列表:
-
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; 音樂區塊鏈
*ÐΞVp2p*節點的標識是*secp256k1*公鑰。
客戶端可以自由標記新節點並使用節點ID作為_決定節點的信譽_的方法。
他們可以儲存給定ID的評級並相應地給予優先權。