P2P在區(qū)塊鏈中處于底層服務(wù)的一層,所以也有必要了解一下基本的P2P技術(shù)原理。
網(wǎng)絡(luò)拓?fù)?/h3>
現(xiàn)代的網(wǎng)絡(luò)環(huán)境都是很復(fù)雜的,在C/S模式下的網(wǎng)絡(luò)相對(duì)比較好組織。但是在分布式的情況下還要維持一個(gè)相對(duì)穩(wěn)定的網(wǎng)絡(luò)拓?fù)涫潜容^難的。所以我們需要先學(xué)習(xí)一下基本的網(wǎng)絡(luò)拓?fù)涞念愋汀?/p>
- 星型網(wǎng)絡(luò)
- 總線型網(wǎng)絡(luò)
- 環(huán)形網(wǎng)絡(luò)
這三種是用的最多的網(wǎng)絡(luò)拓?fù)?,?dāng)然也有其他的一些網(wǎng)絡(luò),比如樹(shù)型網(wǎng)絡(luò),全聯(lián)接網(wǎng)絡(luò),只是這些不再我們的討論范圍之內(nèi)。
對(duì)于一個(gè)P2P類型的網(wǎng)絡(luò),如何在節(jié)點(diǎn)不斷加入和退出的情況下,維護(hù)一個(gè)網(wǎng)絡(luò)基本的拓?fù)錉顟B(tài)是很重要的一點(diǎn)。
P2P網(wǎng)絡(luò)類型
P2P網(wǎng)絡(luò)類型很重要的一個(gè)區(qū)分依據(jù)就是網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)的關(guān)系。
主要類型有:
- 集中式拓?fù)?/li>
- 全分布式結(jié)構(gòu)式拓?fù)?/li>
- 全分布式非結(jié)構(gòu)化拓?fù)?/li>
- 混合式拓?fù)?br>
以上的四種類型也是按照P2P網(wǎng)絡(luò)發(fā)展的趨勢(shì)來(lái)排列的。
我們可以試想一下全是C/S模式的互聯(lián)網(wǎng)時(shí)代,現(xiàn)在我們想實(shí)現(xiàn)的是:我怎么才能讓我的電腦連到并不是一臺(tái)服務(wù)器的別人的電腦來(lái)獲取資源呢?很自然的想法就是——我把我的IP放到服務(wù)器上,告訴大家我這里擁有某項(xiàng)資源不就好了嗎?這也就是第一代的P2P做的事情。
集中式P2P網(wǎng)絡(luò)
這種形式的拓?fù)鋱D如下:
[圖片上傳中...(0021pC59zy6QhssSI5jc9&690.jpeg-87f7bd-1571721640609-0)]
一次完整的P2P訪問(wèn)的過(guò)程如下L:
- Peer A注冊(cè)自己的信息到目錄服務(wù)器S上
- Peer D需要 FileA,向目錄服務(wù)器S進(jìn)行查詢,得知Peer A擁有這個(gè)資源,服務(wù)器通過(guò)應(yīng)答方式,將Peer A的注冊(cè)信息和文件位置的信息發(fā)送回去。
- Peer B便可以和Peer A建立起單獨(dú)的聯(lián)系,拿到信息。
可以看到這樣形式的P2P還是很樸素的,雖然解決了部分服務(wù)器帶寬和存儲(chǔ)上的負(fù)擔(dān),但是整個(gè)系統(tǒng)實(shí)際上離開(kāi)了中心的目錄服務(wù)器還是無(wú)法工作,并不是真正意義上的P2P。
我們急需要新的組織方式來(lái)解除對(duì)于中心服務(wù)器的依賴。這就是第二代“全分布式結(jié)構(gòu)化拓?fù)銹2P網(wǎng)絡(luò)”所完成的。
全分布式結(jié)構(gòu)式拓?fù)?/h4>
為了能夠不依賴中心化的服務(wù)器,我們碰到的第一個(gè)問(wèn)題就是——如何在分布式的P2P網(wǎng)絡(luò)中快速定位到資源所在的Peer節(jié)點(diǎn)呢?
這也就是DHT(Distributed Hash Table)技術(shù)所解決的問(wèn)題。
DHT技術(shù)
DHT技術(shù),用來(lái)將不同的資源按照關(guān)鍵字(key)分散存儲(chǔ)到網(wǎng)絡(luò)中去,獲取資源時(shí)也同樣通過(guò)這個(gè)Key值得到具體的Peer節(jié)點(diǎn)的位置。
而這個(gè)Key值是通過(guò)一定的Hash函數(shù)對(duì)于一個(gè)文件的名字進(jìn)行哈希得到的。