以太坊 P2P網路

2022-06-28 15:06:11 字數 2418 閱讀 5365

1.chord 概念

chord是什麼

​- chord是乙個演算法,也是乙個協議。作為乙個演算法,chord可以從數學的角度嚴格證明其正確性和收斂性;作為乙個協議,chord詳細定義了每個環節的訊息型別。

chord還可以被作為乙個一致性雜湊、分布式雜湊(dht)的實現。

覆蓋網路(overlaynetwork)

​- 構建在其他網路之上、網路節點之間通過虛擬或邏輯連線在一起,比如雲計算、分布式系統都是覆蓋網路,因為其都構建於tcp/ip之上,且節點之間有聯絡。chord也是構建於覆蓋網路

分布式雜湊表(dht)

chord實現原理

2.chord裡面的基本要素

3. chord資源定位(key location)

迴圈查詢 :

缺點 : 效率不給力

可伸縮方法:

路由表是如何生成:

a . 已知chord環的大小為 2^6 = 64(識別符號), 已知nid (節點) n1,n8, n14, n21,n32,n38,n42,n48,n51

b. 圖展示的n8節點的是finger table的過程

1.  m =6 , 所以每個節點最多維護了6個的資源id (kid);

2. k=8為起始位置, kid(8+2^0) = kid9 —->nid14

3. kid(8+2^1) =kid11 —–> nid14

4. kid(8+2^2) =kid12 —–> nid14

5. kid(8+2^3) =kid16 —–> nid21

好處:資源查詢​- 某個節點上查詢資源時,首先判斷其後繼節點是不是就持有該資源,若沒有則直接從該節點的路由表從最遠處開始查詢,看哪一項離持有資源的節點最近(發現後跳轉),若沒有則說明本節點自身就有要尋找的資源。如此迭代下去。

經證明,最多經過o(log n)次查詢就能找到乙個資源。

4. chord的節點加入

原始 chord 環的部分已知節點n21, n32, 資源kid24,kid30的後繼節點為n32

新節點n26節點要加入系統(chord),首先它指向其後繼n32,然後通知n32,n32接到通知後將n26標記為它的前序節點(predecessor)。

然後修改n32節點的finger table ,由新節點n26接管資源k24, 即 資源k24的後繼節點變為n26

於是n21就將後繼節點修改為n26,並通知n26自己已經將其設定為後繼節點,n26接到通知後將n21設定為自己的前序節點

新節點的加入有兩方面的影響:

​ a.所有後繼指標和路由表項都正確時:對正確性沒有影響

​ b.後繼指標正確但表項不正確:查詢結果正確,但速度稍慢(在目標節點和目標節點的後繼處加入非常多個節點時)。如下圖:

​ c.後繼指標和路由表項都不正確:此時查詢失敗,chord上層的軟體會發現資料查詢失敗,在一段時間後會進行重試。

總結一下:節點加入對資料查詢沒有影響

5. 應

以太坊p2p模組 以太坊原始碼學習

p2p模組對外暴露了server關鍵結構,幫助上層管理複雜的p2p網路,使其集中於protocol的實現,只關注於資料的傳輸.server使用discover模組,在指定的udp埠管理網路中結點的發現以及維護,discover模組能夠直接和臨近結點交換各自已知結點資訊,從而不斷的更新結點網路.ser...

以太坊p2p模組的dial 以太坊原始碼學習

dial.go是負責和peer建立連線關係的地方,主要是實現 type dialer inte ce dialstate schedules dials and discovery lookups.it get s a chance to compute new tasks on every ite...

以太坊系列之六 p2p模組 以太坊原始碼學習

p2p模組對外暴露了server關鍵結構,幫助上層管理複雜的p2p網路,使其集中於protocol的實現,只關注於資料的傳輸.server使用discover模組,在指定的udp埠管理網路中結點的發現以及維護,discover模組能夠直接和臨近結點交換各自已知結點資訊,從而不斷的更新結點網路.ser...