EOS系列 - 源碼分析 - P2P網絡模塊

EOS P2P 網絡模塊

P2P - Gossip

Gossip算法又被稱爲反熵(Anti-Entropy),熵是物理學上的一個概念,代表雜亂無章,而反熵就是在雜亂無章中尋求一致,這充分說明了Gossip的特點:在一個有界網絡中,每個節點都隨機地與其他節點通信,經過一番雜亂無章的通信,最終所有節點的狀態都會達成一致。每個節點可能知道所有其他節點,也可能僅知道幾個鄰居節點,只要這些節點可以通過網絡連通,最終它們的狀態就都是一致的,當然這也是疫情傳播的特點。

如何發現節點

  1. 節點會記住它最近成功連接的網絡節點,當重新啓動後它可以迅速與先前的對等節點網絡重新建立連接。
  2. 節點會在失去已有連接時嘗試發現新節點。
  3. 當建立一個或多個連接後,節點將一條包含自身 IP 地址消息發送給其相鄰節點。相鄰節點再將此消息依次轉發給它們各自的相鄰節點,從而保證節點信息被多個節點所接收、保證連接更穩定。
  4. 新接入的節點可以向它的相鄰節點發送獲取地址 getaddr 消息,要求它們返回其已知對等節點的 IP 地址列表。節點可以找到需連接到的對等節點。
  5. 在節點啓動時,可以給節點指定一個正活躍節點 IP, 如果沒有,客戶端也維持一個列表,列出了那些長期穩定運行的節點。這樣的節點也被稱爲種子節點(其實和 BT 下載的種子文件道理是一樣的),就可以通過種子節點來快速發現網絡中的其他節點。

Gossip鄰居交換協議:

  • 節點會週期性剔除長時間未更新的鄰居
  • 隨着系統規模變得越來越大,節點收到的同步信息也越來越多,以至於系統的吞吐率會隨着節點數目的增加而降低

EOS 的P2P沒有采用Gossip算法

通過配置文件或者命令行增加 P2P 結點列表

節點通信

節點通常採用 TCP 協議、使用指定端口與相鄰節點建立連接,建立連接時也會有認證 “握手” 的通信過程(handshake_message)。握手包內容包括:網絡版本、chain_id、node_id、p2p_address、節點名稱等配置信息,以及鏈的狀態(當前節點的不可逆區塊數、不可逆區塊id、最新區塊id、最新區塊數)。

當節點收到相鄰節點的handshake_message,接着就開始對比區塊信息。如果其自身的本地區塊鏈比其他節點的區塊鏈更長,並告訴其他節點需要補充區塊(notice_message),其他節點發送 sync_request_message 消息來請求區塊,其他節點收到區塊數據後並驗證後更新到本地區塊鏈中。如果自身的本地區塊鏈比其他節點的短,則向其他節點發送 sync_request_message 去請求區塊。


從另一個節點同步區塊

在這裏插入圖片描述

同步時的狀態比較

區塊同步的更詳細的說明:

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