什麼是節點
所謂的「節點」是指電腦上有安裝以太坊客戶端軟體且有連接上網路並與其它同樣擁有以太坊客戶端軟體的電腦相連,進而形成了以太坊網路的那些裝置。客戶端(Client)是以太坊的一種實現,它根據協議的規則來驗證數據並確保網路的安全。在以太坊上,節點又分為三種 :
-
全節點(Full Node)
1.1 可以儲存完整的區塊鏈數據(這會定期縮減,因此全節點不會將所有的數據存回創世區塊內)
1.2 參與區塊的驗證,驗證所有的區塊及狀態
1.3 可從全節點上派送所有狀態(針對很舊的資料還是需要對檔案節點發送請求來取得)
1.4 維護網路並依照收到的請求提供相對應的數據
-
輕節點(Light Node)
與全節點不同的地方在於它並不會下載完整的數據,而僅是下載區塊頭(Block header),這些區塊
頭裡面記載了內容的概要,如果需要更詳細的資訊則需透過輕節點向全節點發送請求來獲得。它
們可以針對所收到的區塊頭裡面的內容進行獨立的驗證,輕節點的特色在於它對設備的要求相對
來說比較低(因為不用儲存那麼多資料),可以透過手機或一般的電腦就能變成輕節點,不過它並沒
有參與以太坊的共識機制(輕節點不能成為礦工或驗證者),但是它跟全節點一樣擁有對以太坊網路
的完整存取權限。
-
檔案節點(Archive Node)
儲存那些保留在全節點上的資料並建立節點(將資料分成一段一段的存起來的概念),它會在我們想
要查詢某個區塊或者是想要簡單的測試一下自己的交易又不想追蹤時被需要。它所需的儲存容量
動輒要好幾TB,因此對於一般的使用者來說它並沒有什麼特殊吸引力。然而,對於區塊瀏覽器、
錢包或分析鏈的業者來說卻是很方便的存在。任何模式下同步區塊鏈都會收到精簡後的區塊資
料,如果需要最完整的資料可透過全節點下去建構。
以太坊的傳輸協議
在以太坊上目前是分為兩層,不同層的傳輸協議也不相同。這邊將簡單的介紹一下兩層所使用的傳輸協議。在執行層(Execution Layer)及共識層(Consensus Layer)分別是使用了DevP2P及libP2P的協議。
-
DevP2P
作用於執行層上,也有人將它稱為ETH1.0,為了建立及維護以太坊上點對點的連接所實施的一
項協議。在新節點加入後,那些節點將在DevP2P協議下運作,這些都在TCP之上,包括RLPx協
議、有線協議及多個子協議。RLPx協議是在管理節點間的發起、認證及維護會話,它採用RLP這個
方法進行編碼,它會將每個位元組加上序號,如果順序被打亂也可以透過序號復原順序,且所需
的傳輸流量相比TCP來說也小非常多,典型的TCP大概需要1,500位元組而RLP僅需30位元組。在
RLPx協議下雙方節點會以初始加密進行交握,A節點將會發送身份驗證的訊息給B節點進行驗證,
在驗證成功以後將換B節點發送身份驗證訊息給A節點。這算是一個密鑰傳輸的過程它確保了節點
間的溝通有一定的隱私性及安全性。在經過一次有效的祕密加握後將會觸發雙方節點會發送”
HELLO”訊息給對方節點,而有線節點將在發送HELLO訊息後啟動。
-
libP2P
作用於共識層上,也有人將它稱為ETH2.0,它與執行層的DevP2P相似,共識層上的客戶端使用基
於UDP的discv5來搜尋對等連接點。discv5的共識層實現與執行層不同之處僅在於它選擇使用
libP2P協議而捨棄了DevP2P協議,也就是說在執行層上用的RLPx將用libP2P來取代。在發現節點
後libP2P支援了所有的通信,客戶端可以在ENR中定義的IPv4或IPv6上進行播接。
參考
節點介紹
Nodes And Clients
傳輸協議