【大文觀鏈】DHT:比特幣和以太坊是如何實(shí)現(xiàn)去中心化的
圖片來(lái)源:視覺(jué)中國(guó)
鈦媒體注:大文觀鏈,是鏈得得App新推出的區(qū)塊鏈技術(shù)分析系列欄目。由鏈得得App作者馬文佩伴隨諸位用戶,對(duì)區(qū)塊鏈、數(shù)字貨幣市場(chǎng)中前端技術(shù)方案進(jìn)行應(yīng)用層講解與熱點(diǎn)事件的技術(shù)層分析。每個(gè)工作日與大家一同分享“鏈圈技術(shù)宅”的那些頭腦日常。
上周有朋友求助大文:DAG和DHT有什么區(qū)別?
DAG全程有向無(wú)環(huán)圖,我們之前有過(guò)介紹,是一種針對(duì)公有鏈的擴(kuò)容方案,其代表項(xiàng)目包括IOTA和Phantom。但因?yàn)殚_(kāi)發(fā)難度大、依然有技術(shù)難關(guān)需要攻克,因此目前公有鏈?zhǔn)袌?chǎng)中優(yōu)秀的DAG項(xiàng)目并不多見(jiàn)。
DHT全稱分布式散列表或分布式哈希表,是區(qū)塊鏈系統(tǒng)實(shí)現(xiàn)分布式網(wǎng)絡(luò)的底層算法,具體到每個(gè)項(xiàng)目又有不同,如比特幣使用的gossip protocol, 以太坊使用的Kademlia。
今天為大家詳細(xì)講講DHT。
DHT的誕生可以說(shuō)是現(xiàn)代互聯(lián)網(wǎng)去中心化的一個(gè)標(biāo)志:最初的互聯(lián)網(wǎng)是徹底去中心化的,每臺(tái)計(jì)算機(jī)(節(jié)點(diǎn))之間通過(guò)FPS等各種協(xié)議互相訪問(wèn)。在之后的發(fā)展過(guò)程中,互聯(lián)網(wǎng)逐漸發(fā)展出了適合進(jìn)行大規(guī)模商業(yè)應(yīng)用的服務(wù)器+客戶端模式,將部分節(jié)點(diǎn)特殊化成為服務(wù)器,其他節(jié)點(diǎn)之間的訪問(wèn)逐漸減少,這也是現(xiàn)代互聯(lián)網(wǎng)被冠上“中心化”稱呼的原因。
在互聯(lián)網(wǎng)中心化的發(fā)展過(guò)程當(dāng)中,以BT下載為代表的P2P網(wǎng)絡(luò)協(xié)議成為了互聯(lián)網(wǎng)去中心化的標(biāo)志。P2P全稱對(duì)等式網(wǎng)絡(luò)(peer-to-peer),又稱點(diǎn)對(duì)點(diǎn)技術(shù),是無(wú)中心服務(wù)器、依靠用戶群(peers)交換信息的互聯(lián)網(wǎng)體系,它的作用在于,減低以往網(wǎng)路傳輸中的節(jié)點(diǎn),以降低資料遺失的風(fēng)險(xiǎn)。與有中心服務(wù)器的中央網(wǎng)絡(luò)系統(tǒng)不同,對(duì)等網(wǎng)絡(luò)的每個(gè)用戶端既是一個(gè)節(jié)點(diǎn),也有服務(wù)器的功能,任何一個(gè)節(jié)點(diǎn)無(wú)法直接找到其他節(jié)點(diǎn),必須依靠其戶群進(jìn)行信息交流。
從某種意義上說(shuō),區(qū)塊鏈技術(shù)是P2P的延伸。與P2P相比,區(qū)塊鏈將應(yīng)用場(chǎng)景進(jìn)行了極大的擴(kuò)展,并且解決了對(duì)節(jié)點(diǎn)的獎(jiǎng)勵(lì)問(wèn)題。而P2P本身強(qiáng)調(diào)的離散性、伸縮性、容錯(cuò)性也能夠完美的支持區(qū)塊鏈網(wǎng)絡(luò)運(yùn)行。其中:
- 離散性:構(gòu)成系統(tǒng)的節(jié)點(diǎn)并沒(méi)有任何中央式的協(xié)調(diào)機(jī)制。
- 伸縮性:即使有成千上萬(wàn)個(gè)節(jié)點(diǎn),系統(tǒng)仍然應(yīng)該十分有效率。
- 容錯(cuò)性:即使節(jié)點(diǎn)不斷地加入、離開(kāi)或是停止工作,系統(tǒng)仍然必須達(dá)到一定的可靠度。
以比特幣采用的Gossip Protocol算法為例,Gossip算法能夠利用一種隨機(jī)的方式將信息散播到整個(gè)網(wǎng)絡(luò)中,正如Gossip的本意“緋聞八卦”一樣。
Gossip在運(yùn)行過(guò)程中,網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)隨機(jī)的選擇其他若干個(gè)個(gè)節(jié)點(diǎn)作為傳輸對(duì)象,該節(jié)點(diǎn)向其選中的若干個(gè)個(gè)節(jié)點(diǎn)傳輸相應(yīng)的信息,隨后接收到信息的節(jié)點(diǎn)重復(fù)完成相同的工作,最終建立了比特幣節(jié)點(diǎn)網(wǎng)絡(luò)。
在以太坊中采用的Kademlia(也被稱為Kad)算法則直接規(guī)定了網(wǎng)絡(luò)的結(jié)構(gòu),也規(guī)定了通過(guò)節(jié)點(diǎn)查詢進(jìn)行信息交換的方式。Kademlia網(wǎng)絡(luò)節(jié)點(diǎn)之間使用UDP進(jìn)行通訊。參與通訊的所有節(jié)點(diǎn)形成一張?zhí)摂M網(wǎng),并通過(guò)節(jié)點(diǎn)ID來(lái)進(jìn)行身份標(biāo)識(shí),與文件散列直接對(duì)應(yīng),它所表示的那個(gè)節(jié)點(diǎn)存儲(chǔ)著哪兒能夠獲取文件和資源的相關(guān)信息。當(dāng)我們?cè)诰W(wǎng)絡(luò)中搜索某些值的時(shí)候,Kademlia算法需要知道與這些值相關(guān)的鍵,然后分步在網(wǎng)絡(luò)中開(kāi)始搜索。每一步都會(huì)找到一些節(jié)點(diǎn),這些節(jié)點(diǎn)的ID與鍵更為接近,如果有節(jié)點(diǎn)直接返回搜索的值或者再也無(wú)法找到與鍵更為接近的節(jié)點(diǎn)ID的時(shí)候搜索便會(huì)停止。這種搜索值的方法是非常高效的:與其他的分散式雜湊表的實(shí)現(xiàn)類似,在一個(gè)包含n個(gè)節(jié)點(diǎn)的系統(tǒng)的值的搜索中,Kademlia僅訪問(wèn)O(log(n))個(gè)節(jié)點(diǎn)。非集中式網(wǎng)絡(luò)結(jié)構(gòu)還有更大的優(yōu)勢(shì),那就是它能夠顯著增強(qiáng)抵御拒絕服務(wù)攻擊的能力。即使網(wǎng)絡(luò)中的一整批節(jié)點(diǎn)遭受泛洪攻擊,也不會(huì)對(duì)網(wǎng)絡(luò)的可用性造成很大的影響,通過(guò)繞過(guò)這些漏洞(被攻擊的節(jié)點(diǎn))來(lái)重新編織一張網(wǎng)絡(luò),網(wǎng)絡(luò)的可用性就可以得到恢復(fù)。這也是以太坊系統(tǒng)較比特幣系統(tǒng)更為高效的原因之一。
(本文獨(dú)家首發(fā)鏈得得App)
本文原發(fā)布于鏈得得,授權(quán)鈦媒體App發(fā)布,作者:大文
責(zé)任編輯:售電衡衡