日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

区块链P2P网络详细讲解

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 区块链P2P网络详细讲解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們已經(jīng)了解到,微觀上,區(qū)塊鏈本質(zhì)就是一種不可篡改且可追蹤溯源的哈希鏈條;宏觀上,還具備了另外三個(gè)基本特征:分布式存儲(chǔ)、P2P 網(wǎng)絡(luò)和共識(shí)機(jī)制。分布式存儲(chǔ)無(wú)非就是網(wǎng)絡(luò)上大部分節(jié)點(diǎn)都保存了整條區(qū)塊鏈,這容易理解也不復(fù)雜,所以就沒(méi)必要再展開細(xì)講了。但區(qū)塊鏈的 P2P 網(wǎng)絡(luò)和共識(shí)機(jī)制相對(duì)則復(fù)雜得多,因此我將用兩篇文章分別展開講講這兩部分內(nèi)容,本篇文章就先來(lái)了解區(qū)塊鏈的 P2P 網(wǎng)絡(luò)。

P2P 網(wǎng)絡(luò)

由于大部分人對(duì) P2P 網(wǎng)絡(luò)了解甚少,因此有必要先聊聊 P2P 網(wǎng)絡(luò)的一些基本原理。這個(gè)章節(jié)的內(nèi)容主要來(lái)自《P2P對(duì)等網(wǎng)絡(luò)原理與應(yīng)用》這本書,這本書較為系統(tǒng)地介紹了 P2P 的理論基礎(chǔ),非常適合希望全面掌握 P2P 知識(shí)的初級(jí)讀者,建議大伙都可以看看。

P2P 網(wǎng)絡(luò)不同于傳統(tǒng)的客戶端/服務(wù)端(client/server,C/S)結(jié)構(gòu),P2P 網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都可以既是客戶端也是服務(wù)端,因此也不適合使用 HTTP 協(xié)議進(jìn)行節(jié)點(diǎn)之間的通信,一般都是直接使用 Socket 進(jìn)行網(wǎng)絡(luò)編程。

P2P 主要存在四種不同的網(wǎng)絡(luò)模型,也代表著 P2P 技術(shù)的四個(gè)發(fā)展階段:集中式、純分布式、混合式和結(jié)構(gòu)化模型。不過(guò)需要指出的是,這里所說(shuō)的網(wǎng)絡(luò)模型主要是指路由查詢結(jié)構(gòu),即不同節(jié)點(diǎn)之間如何建立連接通道,兩個(gè)節(jié)點(diǎn)之間一旦建立連接,具體傳輸什么數(shù)據(jù)則是兩個(gè)節(jié)點(diǎn)之間的事情了。

最簡(jiǎn)單的路由方式就是集中式,即存在一個(gè)中心節(jié)點(diǎn)保存了其他所有節(jié)點(diǎn)的索引信息,索引信息一般包括節(jié)點(diǎn) IP 地址、端口、節(jié)點(diǎn)資源等。集中式路由的優(yōu)點(diǎn)就是結(jié)構(gòu)簡(jiǎn)單、實(shí)現(xiàn)容易。但缺點(diǎn)也很明顯,由于中心節(jié)點(diǎn)需要存儲(chǔ)所有節(jié)點(diǎn)的路由信息,當(dāng)節(jié)點(diǎn)規(guī)模擴(kuò)展時(shí),就很容易出現(xiàn)性能瓶頸;而且也存在單點(diǎn)故障問(wèn)題。

那第二種路由結(jié)構(gòu)則是純分布式的,移除了中心節(jié)點(diǎn),在 P2P 節(jié)點(diǎn)之間建立隨機(jī)網(wǎng)絡(luò),就是在一個(gè)新加入節(jié)點(diǎn)和 P2P 網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)間隨機(jī)建立連接通道,從而形成一個(gè)隨機(jī)拓?fù)浣Y(jié)構(gòu)。新節(jié)點(diǎn)加入該網(wǎng)絡(luò)的實(shí)現(xiàn)方法也有很多種,最簡(jiǎn)單的就是隨機(jī)選擇一個(gè)已經(jīng)存在的節(jié)點(diǎn)并建立鄰居關(guān)系。像比特幣的話,則是使用 DNS 的方式來(lái)查詢其他節(jié)點(diǎn),DNS 一般是硬編碼到代碼里的,這些 DNS 服務(wù)器就會(huì)提供比特幣節(jié)點(diǎn)的 IP 地址列表,從而新節(jié)點(diǎn)就可以找到其他節(jié)點(diǎn)建立連接通道。新節(jié)點(diǎn)與鄰居節(jié)點(diǎn)建立連接后,還需要進(jìn)行全網(wǎng)廣播,讓整個(gè)網(wǎng)絡(luò)知道該節(jié)點(diǎn)的存在。全網(wǎng)廣播的方式就是,該節(jié)點(diǎn)首先向鄰居節(jié)點(diǎn)廣播,鄰居節(jié)點(diǎn)收到廣播消息后,再繼續(xù)向自己的鄰居節(jié)點(diǎn)廣播,以此類推,從而廣播到整個(gè)網(wǎng)絡(luò)。這種廣播方法也稱為泛洪機(jī)制。純分布式結(jié)構(gòu)不存在集中式結(jié)構(gòu)的單點(diǎn)性能瓶頸問(wèn)題和單點(diǎn)故障問(wèn)題,具有較好的可擴(kuò)展性,但泛洪機(jī)制引入了新的問(wèn)題,主要是可控性差的問(wèn)題,包括兩個(gè)較大的問(wèn)題,一是容易形成泛洪循環(huán),比如節(jié)點(diǎn) A 發(fā)出的消息經(jīng)過(guò)節(jié)點(diǎn) B 到 節(jié)點(diǎn) C,節(jié)點(diǎn) C 再?gòu)V播到節(jié)點(diǎn) A,這就形成了一個(gè)循環(huán);另一個(gè)棘手問(wèn)題則是響應(yīng)消息風(fēng)暴問(wèn)題,如果節(jié)點(diǎn) A 想請(qǐng)求的資源被很多節(jié)點(diǎn)所擁有,那么在很短時(shí)間內(nèi),會(huì)出現(xiàn)大量節(jié)點(diǎn)同時(shí)向節(jié)點(diǎn) A 發(fā)送響應(yīng)消息,這就可能會(huì)讓節(jié)點(diǎn) A 瞬間癱瘓。

再來(lái)看看第三種路由結(jié)構(gòu):混合式。混合式其實(shí)就是混合了集中式和分布式結(jié)構(gòu),如下圖所示,網(wǎng)絡(luò)中存在多個(gè)超級(jí)節(jié)點(diǎn)組成分布式網(wǎng)絡(luò),而每個(gè)超級(jí)節(jié)點(diǎn)則有多個(gè)普通節(jié)點(diǎn)與它組成局部的集中式網(wǎng)絡(luò)。一個(gè)新的普通節(jié)點(diǎn)加入,則先選擇一個(gè)超級(jí)節(jié)點(diǎn)進(jìn)行通信,該超級(jí)節(jié)點(diǎn)再推送其他超級(jí)節(jié)點(diǎn)列表給新加入節(jié)點(diǎn),加入節(jié)點(diǎn)再根據(jù)列表中的超級(jí)節(jié)點(diǎn)狀態(tài)決定選擇哪個(gè)具體的超級(jí)節(jié)點(diǎn)作為父節(jié)點(diǎn)。這種結(jié)構(gòu)的泛洪廣播就只是發(fā)生在超級(jí)節(jié)點(diǎn)之間,就可以避免大規(guī)模泛洪存在的問(wèn)題。在實(shí)際應(yīng)用中,混合式結(jié)構(gòu)是相對(duì)靈活并且比較有效的組網(wǎng)架構(gòu),實(shí)現(xiàn)難度也相對(duì)較小,因此目前較多系統(tǒng)基于混合式結(jié)構(gòu)進(jìn)行開發(fā)實(shí)現(xiàn)。其實(shí),比特幣網(wǎng)絡(luò)如今也是這種結(jié)構(gòu),后面再細(xì)說(shuō)。

最后一種網(wǎng)絡(luò)則是結(jié)構(gòu)化 P2P 網(wǎng)絡(luò),它也是一種分布式網(wǎng)絡(luò)結(jié)構(gòu),但與純分布式結(jié)構(gòu)不同。純分布式網(wǎng)絡(luò)就是一個(gè)隨機(jī)網(wǎng)絡(luò),而結(jié)構(gòu)化網(wǎng)絡(luò)則將所有節(jié)點(diǎn)按照某種結(jié)構(gòu)進(jìn)行有序組織,比如形成一個(gè)環(huán)狀網(wǎng)絡(luò)或樹狀網(wǎng)絡(luò)。而結(jié)構(gòu)化網(wǎng)絡(luò)的具體實(shí)現(xiàn)上,普遍都是基于?DHT(Distributed Hash Table,分布式哈希表)?算法思想。DHT 只是提出一種網(wǎng)絡(luò)模型,并不涉及具體實(shí)現(xiàn),主要想解決如何在分布式環(huán)境下快速而又準(zhǔn)確地路由、定位數(shù)據(jù)的問(wèn)題。具體的實(shí)現(xiàn)方案有 Chord、Pastry、CAN、Kademlia 等算法,其中?Kademlia也是以太坊網(wǎng)絡(luò)的實(shí)現(xiàn)算法,很多常用的 P2P 應(yīng)用如 BitTorrent、電驢等也是使用 Kademlia。因?yàn)槠邢?#xff0c;就不展開講這些算法的具體原理了。目前,我們主要理解 DHT 的核心思想即可。

在 P2P 網(wǎng)絡(luò)中,可以抽象出兩種空間:資源空間和節(jié)點(diǎn)空間。資源空間就是所有節(jié)點(diǎn)保存的資源集合,節(jié)點(diǎn)空間就是所有節(jié)點(diǎn)的集合。對(duì)所有資源和節(jié)點(diǎn)分別進(jìn)行編號(hào),如把資源名稱或內(nèi)容用 Hash 函數(shù)變成一個(gè)數(shù)值(這也是 DHT 常用的一種方法),這樣,每個(gè)資源就有對(duì)應(yīng)的一個(gè) ID,每個(gè)節(jié)點(diǎn)也有一個(gè) ID,資源 ID 和節(jié)點(diǎn) ID 之間建立起一種映射關(guān)系,比如,將資源 n 的所有索引信息存放到節(jié)點(diǎn) n 上,那要搜索資源 n 時(shí),只要找到節(jié)點(diǎn) n 即可,從而就可以避免泛洪廣播,能更快速而又準(zhǔn)確地路由和定位數(shù)據(jù)。當(dāng)然,在實(shí)際應(yīng)用中,資源 ID 和節(jié)點(diǎn) ID 之間是無(wú)法做到一一對(duì)應(yīng)的,但因?yàn)?ID 都是數(shù)字,就存在大小關(guān)系或偏序關(guān)系等,基于這些關(guān)系就能建立兩者的映射關(guān)系。這就是 DHT 的核心思想。DHT 算法在資源編號(hào)和節(jié)點(diǎn)編號(hào)上就是使用了分布式哈希表,使得資源空間和節(jié)點(diǎn)空間的編號(hào)有唯一性、均勻分布式等較好的性質(zhì),能夠適合結(jié)構(gòu)化分布式網(wǎng)絡(luò)的要求。

綜上,這就是 P2P 網(wǎng)絡(luò)的一點(diǎn)理論基礎(chǔ),不同的區(qū)塊鏈可能會(huì)使用不一樣的網(wǎng)絡(luò)模型,但基本原理是一樣的。后面分別講解下最有代表性的兩個(gè)區(qū)塊鏈的網(wǎng)絡(luò):比特幣網(wǎng)絡(luò)和以太坊網(wǎng)絡(luò)。

比特幣網(wǎng)絡(luò)

首先,比特幣網(wǎng)絡(luò)中的節(jié)點(diǎn)主要有四大功能:錢包、挖礦、區(qū)塊鏈數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)路由。每個(gè)節(jié)點(diǎn)都會(huì)具備路由功能,但其他功能不一定都具備,不同類型的節(jié)點(diǎn)可能只包含部分功能,一般只有比特幣核心(bitcoin core)節(jié)點(diǎn)才會(huì)包含所有四大功能。

所有節(jié)點(diǎn)都會(huì)參與校驗(yàn)和廣播交易及區(qū)塊信息,且會(huì)發(fā)現(xiàn)和維持與其他節(jié)點(diǎn)的連接。有些節(jié)點(diǎn)會(huì)包含完整的區(qū)塊鏈數(shù)據(jù)庫(kù),包括所有交易數(shù)據(jù),這種節(jié)點(diǎn)也稱為全節(jié)點(diǎn)(Full Node)。另外一些節(jié)點(diǎn)只存儲(chǔ)了區(qū)塊鏈數(shù)據(jù)庫(kù)的一部分,一般只存儲(chǔ)區(qū)塊頭而不存儲(chǔ)交易數(shù)據(jù),它們會(huì)通過(guò)“簡(jiǎn)化交易驗(yàn)證(SPV)”的方式完成交易校驗(yàn),這樣的節(jié)點(diǎn)也稱為?SPV節(jié)點(diǎn)輕節(jié)點(diǎn)(Lightweight Node)。錢包一般是 PC 或手機(jī)客戶端的功能,用戶通過(guò)錢包查看自己的賬戶金額、管理錢包地址和私鑰、發(fā)起交易等。除了比特幣核心錢包是全節(jié)點(diǎn)之外,大部分錢包都是輕節(jié)點(diǎn)。挖礦節(jié)點(diǎn)則通過(guò)解決工作量證明(PoW)算法問(wèn)題,與其他挖礦節(jié)點(diǎn)相互競(jìng)爭(zhēng)創(chuàng)建新區(qū)塊。有些挖礦節(jié)點(diǎn)同時(shí)也是全節(jié)點(diǎn),即也存儲(chǔ)了完整的區(qū)塊鏈數(shù)據(jù)庫(kù),這種節(jié)點(diǎn)一般都是獨(dú)立礦工(Solo Miner)。還有一些挖礦節(jié)點(diǎn)不是獨(dú)立挖礦的,而是和其他節(jié)點(diǎn)一起連接到礦池,參與集體挖礦,這種節(jié)點(diǎn)一般也稱為礦池礦工(Pool Miner)。這會(huì)形成一個(gè)局部的集中式礦池網(wǎng)絡(luò),中心節(jié)點(diǎn)是一個(gè)礦池服務(wù)器,其他挖礦節(jié)點(diǎn)全部連接到礦池服務(wù)器。礦池礦工和礦池服務(wù)器之間的通信也不是采用標(biāo)準(zhǔn)的比特幣協(xié)議,而是使用礦池挖礦協(xié)議,而礦池服務(wù)器作為一個(gè)全節(jié)點(diǎn)再與其他比特幣節(jié)點(diǎn)使用主網(wǎng)絡(luò)的比特幣協(xié)議進(jìn)行通信。

在整個(gè)比特幣網(wǎng)絡(luò)中,除了不同節(jié)點(diǎn)間使用比特幣協(xié)議作為通信協(xié)議的主網(wǎng)絡(luò),也存在很多擴(kuò)展網(wǎng)絡(luò),包括上面提到的礦池網(wǎng)絡(luò)。不同的礦池網(wǎng)絡(luò)可能還會(huì)使用不同的礦池挖礦協(xié)議,目前主流的具體礦池協(xié)議應(yīng)該是?Stratum協(xié)議,該協(xié)議除了支持挖礦節(jié)點(diǎn),也支持瘦客戶端錢包。一個(gè)包含了比特幣協(xié)議主網(wǎng)絡(luò)各種節(jié)點(diǎn)和 Stratum 網(wǎng)絡(luò),以及其他礦池網(wǎng)絡(luò)的擴(kuò)展比特幣網(wǎng)絡(luò)大概如下圖所示:

另外,挖礦這塊還有特殊需求。我們知道,礦工創(chuàng)建新區(qū)塊后,是需要廣播給全網(wǎng)所有節(jié)點(diǎn)的,當(dāng)全網(wǎng)都接受了該區(qū)塊,給礦工的挖礦獎(jiǎng)勵(lì)才算是有效的,這之后才好開始下一個(gè)區(qū)塊 Hash 的計(jì)算。所以礦工必須最大限度縮短新區(qū)塊的廣播和下一個(gè)區(qū)塊 Hash 計(jì)算之間的時(shí)間。如果礦工之間傳播區(qū)塊只采用上圖所示的比特幣協(xié)議網(wǎng)絡(luò),那無(wú)疑會(huì)有很高的網(wǎng)絡(luò)延遲,所以,需要一個(gè)專門的傳播網(wǎng)絡(luò)用來(lái)加快新區(qū)塊在礦工之間的同步傳播,這個(gè)專門網(wǎng)絡(luò)也叫比特幣傳播網(wǎng)絡(luò)或比特幣中繼網(wǎng)絡(luò)(Bitcoin Relay Network)。

以太坊網(wǎng)絡(luò)

和比特幣一樣,以太坊的節(jié)點(diǎn)也具備錢包、挖礦、區(qū)塊鏈數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)路由四大功能,也同樣存在很多不同類型的節(jié)點(diǎn),除了主網(wǎng)絡(luò)之外也同樣存在很多擴(kuò)展網(wǎng)絡(luò)。但與比特幣不同的,比特幣主網(wǎng)的 P2P 網(wǎng)絡(luò)是無(wú)結(jié)構(gòu)的,但以太坊的 P2P 網(wǎng)絡(luò)是有結(jié)構(gòu)的。前面我們已經(jīng)提過(guò),以太坊的 P2P 網(wǎng)絡(luò)主要采用了?Kademlia(簡(jiǎn)稱 Kad)?算法實(shí)現(xiàn),Kad 是一種分布式哈希表(DHT)技術(shù),使用該技術(shù),可以實(shí)現(xiàn)在分布式環(huán)境下快速而又準(zhǔn)確地路由、定位數(shù)據(jù)的問(wèn)題。所以,下面主要講解下以太坊的 Kad 網(wǎng)絡(luò)。

在 Kad 網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)都具有一個(gè)唯一的節(jié)點(diǎn) ID。另外,也會(huì)計(jì)算不同節(jié)點(diǎn)之間的距離,但這個(gè)距離不是物理上的距離,而是邏輯上的距離,是通過(guò)對(duì)兩個(gè)節(jié)點(diǎn) ID 進(jìn)行?異或(符號(hào)為^)?計(jì)算得到的,即 A、B 兩節(jié)點(diǎn)之間的距離的計(jì)算公式為:D(A,B) = A.ID^B.ID。異或有一個(gè)重要的性質(zhì):假設(shè) a、b、c 為任意三個(gè)數(shù),如果 a^b = a^c 成立,那就一定 b = c。因此,如果給定一個(gè)結(jié)點(diǎn) a 和距離 L,那就有且僅有一個(gè)結(jié)點(diǎn) b, 會(huì)使得 D(a,b) = L。通過(guò)這種方式,就能有效度量 Kad 網(wǎng)絡(luò)中不同節(jié)點(diǎn)之間的邏輯距離。

在異或距離度量的基礎(chǔ)上,Kad 還可以將整個(gè)網(wǎng)絡(luò)拓?fù)浣M織成如下圖所示的一個(gè)二叉前綴樹,每個(gè) NodeID 會(huì)映射到二叉樹上的某個(gè)葉子。

映射規(guī)則主要是:

  • 將 NodeID 以二進(jìn)制形式表示,然后從高到低對(duì)每一位的 0 或 1 依次處理;
  • 二進(jìn)制的第 n 位就對(duì)應(yīng)了二叉樹的第 n 層;
  • 如果該位是 0,進(jìn)入左子樹,是 1 則進(jìn)入右子樹(反過(guò)來(lái)也可以);
  • 全部位都處理完后,這個(gè) NodeID 就對(duì)應(yīng)了二叉樹上的某個(gè)葉子。
  • 在這種二叉樹結(jié)構(gòu)下,對(duì)每個(gè)節(jié)點(diǎn)來(lái)說(shuō),離它越近的節(jié)點(diǎn)異或距離也是越近的。接著,可以按照離自己異或距離的遠(yuǎn)近,對(duì)整顆二叉樹進(jìn)行拆分。拆分規(guī)則是:從根節(jié)點(diǎn)開始,將不包括自己的那顆子樹拆分出來(lái),然后在包含自己的子樹中,把不包括自己的下一層子樹再拆分出來(lái),以此類推,直到只剩下自己。以上圖的 110 節(jié)點(diǎn)為例,從根節(jié)點(diǎn)開始,由于 110 節(jié)點(diǎn)在右子樹,所以將左邊的整顆子樹拆分出來(lái),即包含 000、001、010 這三個(gè)節(jié)點(diǎn)的這顆子樹;接著,到第二層子樹,將不包含 110 節(jié)點(diǎn)的左子樹再拆分出來(lái),即包含 100 和 101 這兩個(gè)節(jié)點(diǎn)的子樹;最后,再將 111 拆分出來(lái)。這樣,就將 110 節(jié)點(diǎn)之外的整個(gè)二叉樹拆分出了三顆子樹。

    完成子樹拆分后,只要知道每個(gè)子樹里面的其中一個(gè)節(jié)點(diǎn),就可以進(jìn)行遞歸路由實(shí)現(xiàn)整顆二叉樹所有節(jié)點(diǎn)的遍歷。但在實(shí)際場(chǎng)景下,由于節(jié)點(diǎn)是動(dòng)態(tài)變化的,所以一般不會(huì)只知道每個(gè)子樹的一個(gè)節(jié)點(diǎn),而是需要知道多個(gè)節(jié)點(diǎn)。因此,Kad 中有一個(gè)叫?K-桶(K-bucket)的概念,每個(gè)桶會(huì)記錄每顆子樹里所知道的多個(gè)節(jié)點(diǎn)。其實(shí),一個(gè)K-桶就是一張路由表,如果拆分出來(lái)有 m 顆子樹,那對(duì)應(yīng)節(jié)點(diǎn)就需要維護(hù) m 個(gè)路由表。每個(gè)節(jié)點(diǎn)都會(huì)各自維護(hù)自己的 m 個(gè) K-桶,每個(gè) K-桶里記錄的節(jié)點(diǎn)信息一般會(huì)包括 NodeID、IP、Endpoint、與 Target 節(jié)點(diǎn)(即維護(hù)該 K-桶的節(jié)點(diǎn))的異或距離等信息。以太坊中,每個(gè)節(jié)點(diǎn)維護(hù)的 K-桶數(shù)量為 256 個(gè),這 256 個(gè) K-桶會(huì)根據(jù)與 Target 節(jié)點(diǎn)的異或距離進(jìn)行排序,每個(gè) K-桶保存的節(jié)點(diǎn)數(shù)量上限是 16。

    在以太坊的 Kad 網(wǎng)絡(luò)中,節(jié)點(diǎn)之間的通信是基于 UDP 的,另外設(shè)置了 4 個(gè)主要的通信協(xié)議:

  • Ping:用于探測(cè)一個(gè)節(jié)點(diǎn)是否在線
  • Pong:用于響應(yīng) Ping 命令
  • FindNode:用于查找與 Target 節(jié)點(diǎn)異或距離最近的其他節(jié)點(diǎn)
  • Neighbours:用于響應(yīng) FindNode 命令,會(huì)返回一或多個(gè)節(jié)點(diǎn)
  • 通過(guò)以上 4 個(gè)命令,就可以實(shí)現(xiàn)新節(jié)點(diǎn)的加入、K-桶的刷新等機(jī)制。具體的實(shí)現(xiàn)流程就不細(xì)講了,留給大伙自己去思考。

    總結(jié)

    不同結(jié)構(gòu)的 P2P 網(wǎng)絡(luò),會(huì)有不同的優(yōu)點(diǎn)和缺點(diǎn)。比特幣網(wǎng)絡(luò)的結(jié)構(gòu)明顯容易理解,實(shí)現(xiàn)起來(lái)也相對(duì)容易得多,而以太坊網(wǎng)絡(luò)引入了異或距離、二叉前綴樹、K-桶等,結(jié)構(gòu)上復(fù)雜不少,但在節(jié)點(diǎn)路由上的確會(huì)比比特幣快很多。另外,不管是比特幣還是以太坊,其實(shí)都只是一種或多種協(xié)議的集合,不同節(jié)點(diǎn)其實(shí)可以用不同的具體實(shí)現(xiàn),比如,比特幣就有用 C++ 實(shí)現(xiàn)的 Bitcoin Core,還有用 Java 實(shí)現(xiàn)的 BitcoinJ;以太坊也有用 Go 語(yǔ)言實(shí)現(xiàn)的 go-ethereum,也有用 C++ 實(shí)現(xiàn)的 go-ethereum,還有用 Java 實(shí)現(xiàn)的 Ethereum(J)。

    思考和實(shí)踐

    在以太坊的 Kad 網(wǎng)絡(luò)中,新節(jié)點(diǎn)的加入和 K-桶的刷新流程是怎樣的?比特幣的新節(jié)點(diǎn)加入流程又是怎樣的?哈希表有哪些實(shí)現(xiàn)方式?

    總結(jié)

    以上是生活随笔為你收集整理的区块链P2P网络详细讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。