成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

區(qū)塊鏈中的P2P

jkyin / 1494人閱讀

摘要:為什么區(qū)塊鏈會選擇作為網(wǎng)絡(luò)基礎(chǔ)上面介紹的時候說過,他是無中心服務(wù)器的,中心服務(wù)器就意味著,當(dāng)受到攻擊的時候,中心服務(wù)器一旦宕機(jī),整個網(wǎng)絡(luò)和服務(wù)就會出現(xiàn)問題。區(qū)塊鏈的核心是去中心化,這和網(wǎng)絡(luò)的觀念不約而同,所以選擇的理由也就很充分。

區(qū)塊鏈中P2P介紹

p2p是什么

為什么區(qū)塊鏈需要P2P

比特幣、以太坊、超級賬本和EOS的P2P對比


P2P是什么
P2P作為區(qū)塊鏈網(wǎng)絡(luò)中去中心化的標(biāo)識
P2P全稱對等式網(wǎng)絡(luò)(peer-to-peer),又稱點(diǎn)對點(diǎn)技術(shù),是無中心服務(wù)器、依靠用戶群(peers)交換信息的互聯(lián)網(wǎng)體系;與有中心服務(wù)器的中央網(wǎng)絡(luò)系統(tǒng)不同,對等網(wǎng)絡(luò)的每個用戶端既是一個節(jié)點(diǎn),也有服務(wù)器的功能,任何一個節(jié)點(diǎn)無法直接找到其他節(jié)點(diǎn),必須依靠其戶群進(jìn)行信息交流。

優(yōu)勢

可在網(wǎng)絡(luò)的中央及邊緣區(qū)域共享內(nèi)容和資源。在客戶端/服務(wù)器網(wǎng)絡(luò)中,通常只能在網(wǎng)絡(luò)的中央?yún)^(qū)域共享內(nèi)

由對等方組成的網(wǎng)絡(luò)易于擴(kuò)展,而且比單臺服務(wù)器更加可靠。單臺服務(wù)器會受制于單點(diǎn)故障,或者會在網(wǎng)絡(luò)使用率偏高時,形為瓶頸。

由對等方組成的網(wǎng)絡(luò)可共享處理器,整合計算資源以執(zhí)行分布式計算任務(wù),而不只是單純依賴一臺計算機(jī),如一臺超級計算機(jī)。

用戶可直接訪問對等計算機(jī)上的共享資源。網(wǎng)絡(luò)中的對等方可直接在本地存儲器上共享文件,而不必在中央服務(wù)器上進(jìn)行共享。

p2p網(wǎng)絡(luò)的三個特性

離散性:構(gòu)成系統(tǒng)的節(jié)點(diǎn)并沒有任何中央式的協(xié)調(diào)機(jī)制。

伸縮性:即使有成千上萬個節(jié)點(diǎn),系統(tǒng)仍然應(yīng)該十分有效率。

容錯性:即使節(jié)點(diǎn)不斷地加入、離開或是停止工作,系統(tǒng)仍然必須達(dá)到一定的可靠度。


為什么區(qū)塊鏈會選擇P2P作為網(wǎng)絡(luò)基礎(chǔ)
上面介紹P2P的時候說過,他是無中心服務(wù)器的,中心服務(wù)器就意味著,當(dāng)受到攻擊的時候,中心服務(wù)器一旦宕機(jī),整個網(wǎng)絡(luò)和服務(wù)就會出現(xiàn)問題。而P2P網(wǎng)絡(luò)的優(yōu)勢在于,每個節(jié)點(diǎn)既是客戶端又是服務(wù)端,所以當(dāng)受到攻擊時,任何一臺機(jī)器垮掉,也不會影響整體的服務(wù)。
區(qū)塊鏈的核心是去中心化,這和P2P網(wǎng)絡(luò)的觀念不約而同,所以選擇P2P的理由也就很充分。

通過區(qū)塊鏈技術(shù)學(xué)習(xí)P2P

首先看一下P2P的整體技術(shù)點(diǎn):

首先是如何發(fā)現(xiàn)peers,在P2P網(wǎng)絡(luò)中,發(fā)現(xiàn)節(jié)點(diǎn)是最開始、最重要和最難的一部分;

節(jié)點(diǎn)之間建立鏈接;發(fā)現(xiàn)節(jié)點(diǎn)之后,就要進(jìn)行握手鏈接,確定節(jié)點(diǎn)之間的通信協(xié)議等

節(jié)點(diǎn)之間的通信;鏈接建立之后,就可以正常的進(jìn)行通信了;

以上三點(diǎn)解決之后,基本就可以實(shí)現(xiàn)一個簡單的P2P網(wǎng)絡(luò)。如果想要實(shí)現(xiàn)一個比較完整的P2P網(wǎng)絡(luò),當(dāng)然還有很多的細(xì)節(jié)需要考慮,比如說,節(jié)點(diǎn)發(fā)現(xiàn)協(xié)議,快速定位節(jié)點(diǎn),安全性,節(jié)點(diǎn)的加入和退出機(jī)制,節(jié)點(diǎn)的心跳?;畹取N覀冎饕榻B的是DHT分布式哈希表的知識點(diǎn);

比特幣、以太坊、超級賬本和EOS都使用了DHT的具體實(shí)現(xiàn);

鏈類型 使用的P2P協(xié)議
區(qū)塊鏈 Gossip協(xié)議
超級賬本 Gossip協(xié)議
以太坊 Kademlia協(xié)議
EOS 自己實(shí)現(xiàn)的P2P協(xié)議 (待研究)

比特幣

節(jié)點(diǎn)發(fā)現(xiàn)
  新節(jié)點(diǎn)啟動后,想要參與協(xié)同運(yùn)作,必須發(fā)現(xiàn)其他的比特幣節(jié)點(diǎn),也就是至少需要發(fā)現(xiàn)一個比特幣網(wǎng)絡(luò)中的節(jié)點(diǎn),并建立聯(lián)系。

   新節(jié)點(diǎn)找到對等體的方法:
   - 種子節(jié)點(diǎn):使用多個DNS服務(wù)器(比特幣節(jié)點(diǎn)專用)來解析比特幣節(jié)點(diǎn)的IP。
   - 節(jié)點(diǎn)引薦:如果不知道DNS,則必須知道至少一個比特幣節(jié)點(diǎn)的IP。

節(jié)點(diǎn)鏈接
節(jié)點(diǎn)向peer節(jié)點(diǎn)發(fā)送version消息開始握手,peer節(jié)點(diǎn)需要檢驗(yàn)版本,秘鑰等數(shù)據(jù),驗(yàn)證通過,會返回verack消息。
握手消息完成,節(jié)點(diǎn)發(fā)送包含自己IP地址和addr的消息給peer節(jié)點(diǎn),對等節(jié)點(diǎn)收到,繼續(xù)向它的對等節(jié)點(diǎn)發(fā)出addr消息,這樣新節(jié)點(diǎn)的IP地址就會在P2P網(wǎng)絡(luò)中廣播出去(Gossip協(xié)議的Rumor-Mongering);

因?yàn)榫W(wǎng)絡(luò)中,節(jié)點(diǎn)可以隨時加入和離開,所以所有的節(jié)點(diǎn)必須在一個節(jié)點(diǎn)退出的時候,尋找新節(jié)點(diǎn),并且在其他節(jié)點(diǎn)啟動的時候,對其進(jìn)行幫組。

超級賬本

以太坊
以太坊使用的是kademlia協(xié)議,簡稱Kad協(xié)議,具體的Kad協(xié)議在其他的文章中介紹。本文我們只需要知道Kad使用UDP進(jìn)行節(jié)點(diǎn)間消息通信,每個節(jié)點(diǎn)根據(jù)與鄰居節(jié)點(diǎn)距離之間的距離(NodeID的差距),分別放到不同的桶(bucket)中,且有4種消息

ping - 用于探測其他節(jié)點(diǎn)是否還存在

store - 接收者受到后,將信息中key/value對存儲在本節(jié)點(diǎn)

findnode - 接受者向發(fā)送者返回 k 個它知道的與目標(biāo)結(jié)點(diǎn)距離最近的節(jié)點(diǎn)

findvalue - 和findnode 差不多,區(qū)別是如果接收者本地存在與目標(biāo)結(jié)點(diǎn)對應(yīng)的value,那么就回復(fù)這個值給發(fā)送者。

以太坊中的P2P網(wǎng)絡(luò)是比較完整的,很值得學(xué)習(xí),有發(fā)現(xiàn)、子協(xié)議和Nat映射等模塊。我們主要講解的是發(fā)現(xiàn)模塊;
整體結(jié)構(gòu):

結(jié)構(gòu)名 作用
Server 本地客戶端服務(wù)
Node 節(jié)點(diǎn)的信息
table 存儲peer節(jié)點(diǎn)的結(jié)構(gòu)
udp 底層節(jié)點(diǎn)的通訊協(xié)議
Server

當(dāng)本地啟動一個客戶端,并配置好靜態(tài)peer節(jié)點(diǎn)的配置信息之后,啟動的Server會進(jìn)行三個操作

主動發(fā)現(xiàn)鄰居

ECDH密鑰建立,確認(rèn)身份并進(jìn)行身份驗(yàn)證

鏈接已經(jīng)建立,確認(rèn)生層交換協(xié)議,并運(yùn)行這些協(xié)議

Node

Node節(jié)點(diǎn)唯一的表示網(wǎng)絡(luò)中的一個以太坊節(jié)點(diǎn),并且Node節(jié)點(diǎn)有如下的信息:

IP地址

連接使用的UDP/TCP端口號

ID:以太坊網(wǎng)絡(luò)中唯一標(biāo)識一個節(jié)點(diǎn),本質(zhì)上是一個橢圓曲線公鑰(PublicKey),與Server的PrivateKey對應(yīng)。一個節(jié)點(diǎn)的IP地址不一定是固定的,但I(xiàn)D是唯一的。

用于節(jié)點(diǎn)間的距離計算的sha

table

Table主要用來管理與本節(jié)點(diǎn)與其他節(jié)點(diǎn)的連接的建立更新刪除:

bucket - 所有peer按與本節(jié)點(diǎn)的距離遠(yuǎn)近放在不同的桶(bucket)中

refreshReq - 更新Table請求通道

Table會循環(huán)的監(jiān)控并對peer節(jié)點(diǎn)進(jìn)行刷新

定時(30s)啟動Peer刷新過程的定時器

接收其他線程投遞到Table的刷新Peer連接的通知,當(dāng)收到該通知時啟動更新

定時重新檢查以連接節(jié)點(diǎn)的有效性的定時器

udp

udp的底層接受數(shù)據(jù)包循環(huán),負(fù)責(zé)接收其他節(jié)點(diǎn)的packet,并將解析后的信息交給另一個循環(huán)處理,這個循環(huán)處理負(fù)責(zé)控制消息的向上遞交和收發(fā)控制

節(jié)點(diǎn)發(fā)現(xiàn)的流程:

鄰居初始化

當(dāng)一個節(jié)點(diǎn)啟動后,它會首先向配置的靜態(tài)節(jié)點(diǎn)發(fā)起連接,發(fā)起連接的過程稱為Dial,此時的Dial需要知道IP地址,如果不知道需要有一個解析IP的過程(根據(jù)ID來解析)

建立連接,下面兩個都成功則加入table中:

秘鑰鏈接和確認(rèn)

上層協(xié)議確認(rèn)

探活檢測(Revalidate)

有效性檢測就是利用ping消息進(jìn)行探活操作。Table啟動了一個定時器(0~10s),定期隨機(jī)選擇一個bucket,向其末尾的節(jié)點(diǎn)發(fā)送ping消息,如果對方回應(yīng)了pong,則探活成功。

更新鄰居關(guān)系

定期(定時器超時)或不定期(收到refreshReq)地進(jìn)行更新鄰居關(guān)系(發(fā)現(xiàn)新鄰居),兩者都調(diào)用doRefresh()方法,該方法對在網(wǎng)絡(luò)上查找離自身和三個隨機(jī)節(jié)點(diǎn)最近的若干個節(jié)點(diǎn)。

EOS

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24626.html

相關(guān)文章

  • 分析比特幣網(wǎng)絡(luò):一種去中心化、點(diǎn)對點(diǎn)的網(wǎng)絡(luò)架構(gòu)

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接分析比特幣網(wǎng)絡(luò)一種去中心化點(diǎn)對點(diǎn)的網(wǎng)絡(luò)架構(gòu)原文已更新,請讀者前往原文閱讀比特幣采用了基于互聯(lián)網(wǎng)的點(diǎn)對點(diǎn)分布式網(wǎng)絡(luò)架構(gòu)。比特幣網(wǎng)絡(luò)可以認(rèn)為是按照比特幣協(xié)議運(yùn)行的一系列節(jié)點(diǎn)的集合。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:分析比特幣網(wǎng)絡(luò):一種去中心化、點(diǎn)對點(diǎn)的網(wǎng)絡(luò)架構(gòu)原文已更新,請讀者前往原文閱讀 比特幣采用了基于互聯(lián)網(wǎng)的點(diǎn)對點(diǎn)(P2P:peer-to-p...

    fjcgreat 評論0 收藏0
  • Don’t Trust, Verify

    摘要:和比特幣網(wǎng)絡(luò)傳輸協(xié)議的一系列優(yōu)化使得比特幣的新區(qū)塊幾乎可以在瞬間被全世界的礦工接收,非常有效的降低了孤塊率,保證了網(wǎng)絡(luò)安全。 這篇文章試圖討論全節(jié)點(diǎn)對于區(qū)塊鏈的意義。 角色 我們都知道,區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)有不同的角色。例如: 出塊節(jié)點(diǎn) 出塊節(jié)點(diǎn)負(fù)責(zé)打包交易,生產(chǎn)區(qū)塊。出塊節(jié)點(diǎn)在不同的地方有不同的名字,例如比特幣和以太坊中的礦工/礦池,Bitshares的Delegator,EOS的Pr...

    simpleapples 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<