先拋開區(qū)塊鏈漫雕,只講P2P还绘,對P2P了解后稽穆,再慢慢解開區(qū)塊鏈對P2P的應(yīng)用。
P2P發(fā)展歷史
本文是從《P2P對等網(wǎng)絡(luò)原理及應(yīng)用》和網(wǎng)上資料總結(jié)出來
第一代 - 集中式P2P
-
拓補(bǔ)圖
image.png 實(shí)現(xiàn)原理
選擇一個節(jié)點(diǎn)作為中心節(jié)點(diǎn)米丘,使所有其他節(jié)點(diǎn)和這個中心節(jié)點(diǎn)建立星形拓?fù)浣Y(jié)構(gòu)剑令。每個節(jié)點(diǎn)把自己的資源索引信息存儲在中心節(jié)點(diǎn),從而中心節(jié)點(diǎn)擁有全網(wǎng)的資源索引信息拄查。當(dāng)某個節(jié)點(diǎn)需要獲取某個資源時吁津,向中心節(jié)點(diǎn)提交關(guān)鍵字/索引,中心節(jié)點(diǎn)定位出能夠提供內(nèi)容服務(wù)的節(jié)點(diǎn)堕扶,請求節(jié)點(diǎn)與這些節(jié)點(diǎn)分別建立傳輸通道碍脏,實(shí)現(xiàn)并行傳送∩运悖可以看出典尾,它在路由查詢(內(nèi)容路由)上,與傳統(tǒng)系統(tǒng)架構(gòu)并無區(qū)別糊探,P2P主要體現(xiàn)在請求節(jié)點(diǎn)從其他多個節(jié)點(diǎn)并行獲得數(shù)據(jù)上钾埂。優(yōu)點(diǎn)
集中式結(jié)構(gòu)非常簡單,是最容易實(shí)現(xiàn)的一種方式科平,而且維護(hù)簡單褥紫,資源發(fā)現(xiàn)效率高。-
缺點(diǎn)
- 因為所有資源索引都保存在中心節(jié)點(diǎn)瞪慧,很容易形成單點(diǎn)故障髓考,中央索引服務(wù)器的癱瘓容易導(dǎo)致整個網(wǎng)絡(luò)的崩潰,因此可靠性和安全性較低弃酌。
- 隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大氨菇,對中央索引服務(wù)器進(jìn)行維護(hù)和更新的費(fèi)用將急劇增加,所需成本較高妓湘。
- 中央索引服務(wù)器的存在常引起版權(quán)問題上的糾紛查蓉,服務(wù)提供商容易被追究法律責(zé)任。
-
典型應(yīng)用:
Mp3共享軟件 Napster
image.png
第二代 - 純分布式P2P
-
拓?fù)鋱D
image.png
-
實(shí)現(xiàn)原理
這種結(jié)構(gòu)不需要中心節(jié)點(diǎn)多柑,是一種純分布式的機(jī)制奶是。一個新加入的節(jié)點(diǎn)和P2P網(wǎng)絡(luò)中的某個節(jié)點(diǎn)間隨機(jī)建立連接通道,從而形成一個隨機(jī)的拓?fù)浣Y(jié)構(gòu)竣灌。當(dāng)一個節(jié)點(diǎn)需要進(jìn)行內(nèi)容路由時聂沙,將請求的信息通過隨意拓?fù)浞汉槌鋈ィ沟萌W(wǎng)點(diǎn)節(jié)點(diǎn)都收到路由查詢消息初嘹。接到查詢消息的節(jié)點(diǎn)進(jìn)行檢索判斷是否擁有相應(yīng)資源及汉,如有則進(jìn)行查詢響應(yīng)。
關(guān)鍵原理
1.小世界模型
image.png
“小世界網(wǎng)絡(luò)模型”屯烦,也叫“六度分割”坷随,就是從人群中任意挑選兩個陌生人房铭,他們要達(dá)到彼此認(rèn)識的最短關(guān)系鏈數(shù)是6。
有幾個參數(shù)需要關(guān)注:- 概率P(0-1):節(jié)點(diǎn)以較小的概率將邊的一端移到另一個隨機(jī)選取的位置上
- L長度(上面的6):也就是兩個節(jié)點(diǎn)相連的最少邊長度的平均數(shù)
- 節(jié)點(diǎn)的度:也就是平均每個節(jié)點(diǎn)的鄰居節(jié)點(diǎn)(朋友)數(shù)量
- 集團(tuán)化系數(shù)C:某個人的兩個朋友有可能互相是朋友温眉,表示一種重疊特征
2.泛洪原理
請求節(jié)點(diǎn)要尋找資源缸匪,必須要向全網(wǎng)進(jìn)行廣播,這就是泛洪技術(shù)类溢。
泛洪有兩個弊端:
-
泛洪循環(huán)凌蔬,如下圖,查詢消息從1-2-4-3-1形成一個環(huán)路闯冷。
image.png
可以通過設(shè)置TTL限制(就是在節(jié)點(diǎn)之間轉(zhuǎn)發(fā)最大跳數(shù))和利用樹形結(jié)構(gòu)消除環(huán)路來解決問題砂心。
image.png -
響應(yīng)消息風(fēng)暴,大量的節(jié)點(diǎn)向請求節(jié)點(diǎn)響應(yīng)信息蛇耀,瞬間讓請求節(jié)點(diǎn)癱瘓辩诞,這個問題非常致命。
image.png 優(yōu)點(diǎn)
這種網(wǎng)絡(luò)完全隨機(jī)纺涤,不需要按照某種規(guī)定去構(gòu)建译暂,實(shí)現(xiàn)起來簡單,在小范圍內(nèi)查詢性能較好撩炊;
一般不提供性能保證秧秉,但容錯性好,支持復(fù)雜的查詢衰抑,并受結(jié)點(diǎn)頻繁加入和退出系統(tǒng)的影響小。缺點(diǎn)
除了上面的防洪問題荧嵌,還有查詢的結(jié)果不保證呛踊,查詢速度較慢,對網(wǎng)絡(luò)帶寬的消耗非常大啦撮,并由此帶來可擴(kuò)展性差等問題谭网。-
典型應(yīng)用
采用這種拓?fù)浣Y(jié)構(gòu)最典型的案例便是Gnutella(音譯:紐特拉)。準(zhǔn)確地說赃春,Gnutella不是特指某一款軟件愉择,而是指遵守Gnutella協(xié)議[3]的網(wǎng)絡(luò)以及客戶端軟件的統(tǒng)稱。目前基于Gnutella網(wǎng)絡(luò)的客戶端軟件非常多织中,著名的有Shareaza锥涕、LimeWire和BearShare等。
image.png
第三代 - 混合式P2P
-
拓補(bǔ)圖
image.png 實(shí)現(xiàn)原理
混合式P2P網(wǎng)絡(luò)是指局部上呈現(xiàn)集中式狭吼,整體上表現(xiàn)分布式的組織結(jié)構(gòu)层坠。以KazaA為例介紹這種網(wǎng)絡(luò)結(jié)構(gòu),主要有兩類節(jié)點(diǎn):超級節(jié)點(diǎn)(SN)和普通節(jié)點(diǎn)(ON)刁笙。整個網(wǎng)絡(luò)有兩級結(jié)構(gòu)破花,第一級是由SN組成的分布式拓?fù)浣Y(jié)構(gòu)谦趣,每個SN大概有40個SN鄰居;第二級是ON與SN組成的星形集中式結(jié)構(gòu)座每,每個SN下面有100多個ON前鹅。一個節(jié)點(diǎn)加入網(wǎng)絡(luò)成為SN還是ON,是根據(jù)節(jié)點(diǎn)的CPU峭梳、內(nèi)存舰绘、網(wǎng)絡(luò)帶寬等資源決定。全網(wǎng)的資源索引存儲在所有的SN節(jié)點(diǎn)延赌,當(dāng)一個ON需要下載某個文件時除盏,會向其父SN節(jié)點(diǎn)發(fā)送查詢請求,父節(jié)點(diǎn)再通過泛洪方式在SN組成的網(wǎng)絡(luò)平面內(nèi)進(jìn)行泛洪廣播挫以,由SN返回資源存儲的位置信息者蠕。優(yōu)點(diǎn)
結(jié)合了集中式和純分布式的優(yōu)缺點(diǎn),提供了更好的性能掐松,可擴(kuò)展性較好踱侣,組網(wǎng)方式更加靈活,容易管理大磺;根據(jù)節(jié)點(diǎn)的能力決定功能抡句,具有高度適應(yīng)性。缺點(diǎn)
超級點(diǎn)依賴性大杠愧,易于受到攻擊待榔,容錯性也受到影響。典型應(yīng)用
KaZaa是當(dāng)前世界最流行的幾款P2P文件共享軟件之一流济。
第四代 - 結(jié)構(gòu)化P2P
-
拓補(bǔ)圖
image.png 實(shí)現(xiàn)原理
結(jié)構(gòu)化P2P網(wǎng)絡(luò)與純分布式網(wǎng)絡(luò)的結(jié)構(gòu)是一樣的锐锣,沒有中心節(jié)點(diǎn)。但是相對于純分布式結(jié)構(gòu)的節(jié)點(diǎn)網(wǎng)絡(luò)是隨機(jī)組建的绳瘟,結(jié)構(gòu)化P2P網(wǎng)絡(luò)讓所有節(jié)點(diǎn)按照某種結(jié)構(gòu)進(jìn)行有序組織如形成一種環(huán)形網(wǎng)絡(luò)或樹形網(wǎng)絡(luò)雕憔,將資源的索引信息也進(jìn)行有序組織并按照某種規(guī)律保存在相應(yīng)節(jié)點(diǎn),從而避免了消息的泛洪問題糖声。
舉個簡單的例子推演結(jié)構(gòu)化網(wǎng)絡(luò)的實(shí)現(xiàn):
資源空間斤彼,代表P2P網(wǎng)絡(luò)所有資源的集合,每個資源都有一個資源索引<資源編號蘸泻,資源名稱琉苇,資源存儲節(jié)點(diǎn)ip端口>,資源編號是對資源的唯一標(biāo)志悦施,比如1翁潘,2,3歼争,4等
節(jié)點(diǎn)空間拜马,即P2P網(wǎng)絡(luò)所有節(jié)點(diǎn)的集合渗勘,每個節(jié)點(diǎn)也有一個編號作為唯一標(biāo)志,比如1俩莽,2旺坠,3,4等
加入有一種方法扮超,可以讓資源的編號與節(jié)點(diǎn)的編號完全一一對應(yīng)取刃,即剛好N個資源和N個節(jié)點(diǎn),且編號剛好都是從1-N出刷,那么重要讓資源i存放在節(jié)點(diǎn)i上璧疗,某個節(jié)點(diǎn)請求資源i,只需要找到節(jié)點(diǎn)i即可馁龟。
怎么找到節(jié)點(diǎn)i呢崩侠,如果有一種網(wǎng)絡(luò)節(jié)點(diǎn)拓?fù)鋱D,使得鄰居之間節(jié)點(diǎn)編號有一定規(guī)則坷檩,如按照大小排成一個鏈表却音,并且讓每個節(jié)點(diǎn)除了保存距離近的節(jié)點(diǎn),還保存一些相距稍遠(yuǎn)的節(jié)點(diǎn)信息矢炼,那么請求節(jié)點(diǎn)在搜索節(jié)點(diǎn)i時系瓢,可以根據(jù)自己的節(jié)點(diǎn)編號與節(jié)點(diǎn)i的關(guān)系大致判斷節(jié)點(diǎn)i的位置,從而把請求信息首先發(fā)給距離節(jié)點(diǎn)i較近的節(jié)點(diǎn)句灌。這樣就能形成一種更好的搜索效果夷陋。
這就是DHT算法,結(jié)構(gòu)化P2P的核心思想胰锌。
優(yōu)點(diǎn)
網(wǎng)絡(luò)自組織肌稻,自適應(yīng)和可拓展性強(qiáng),不需要中心節(jié)點(diǎn)匕荸。使用結(jié)構(gòu)化算法,查詢效率高枷邪;缺點(diǎn)
DHT這類結(jié)構(gòu)最大的問題是DHT的維護(hù)機(jī)制較為復(fù)雜榛搔,尤其是結(jié)點(diǎn)頻繁加入退出造成的網(wǎng)絡(luò)波動(Churn)會極大增加DHT的維護(hù)代價。DHT所面臨的另外一個問題是DHT僅支持精確關(guān)鍵詞匹配查詢东揣,無法支持內(nèi)容/語義等復(fù)雜查詢践惑。-
典型應(yīng)用
最經(jīng)典的案例是Tapestry,Pastry嘶卧,Chord和CAN尔觉。
image.png
image.png
四種網(wǎng)絡(luò)結(jié)構(gòu)比較
區(qū)塊鏈?zhǔn)褂玫腜2P類型 - 結(jié)構(gòu)化P2p
P2P技術(shù)
對于文件下載,流媒體領(lǐng)域芥吟,關(guān)鍵技術(shù):
- 文件索引獲日焱(下載種子)
- 內(nèi)容路由(找到那些節(jié)點(diǎn)有目標(biāo)下載文件)
- 內(nèi)容傳送(實(shí)時专甩,非實(shí)時)
對于區(qū)塊鏈,關(guān)鍵的技術(shù)點(diǎn)是:
- NAT穿越
- 節(jié)點(diǎn)發(fā)現(xiàn)
- 節(jié)點(diǎn)通信(下次分享)