一、什么是對等網(wǎng)絡(luò) P2P
P2P一般指對等網(wǎng)絡(luò) 對等計算(Peer to Peer,簡稱p2p)可以簡單的定義成通過直接交換來共享計算機資源和服務(wù),而對等計算模型應(yīng)用層形成的網(wǎng)絡(luò)通常稱為對等網(wǎng)絡(luò)。在P2P網(wǎng)絡(luò)環(huán)境中,成千上萬臺彼此連接的計算機都處于對等的地位,整個網(wǎng)絡(luò)一般來說不依賴專用的集中服務(wù)器。網(wǎng)絡(luò)中的每一臺計算機既能充當(dāng)網(wǎng)絡(luò)服務(wù)的請求者,又對其它計算機的請求作出響應(yīng),提供資源和服務(wù)。通常這些資源和服務(wù)包括:信息的共享和交換、計算資源(如CPU的共享)、存儲共享(如緩存和磁盤空間的使用)等。
這個定義有點抽象,下面就來簡單地解釋一下。粗略地講,應(yīng)用程序可以設(shè)計成采用客戶機/服務(wù)器體系結(jié)構(gòu)或?qū)Φ润w系結(jié)構(gòu)(P2P)。我們?nèi)粘I钪械脑S多應(yīng)用程序,包括web、電子郵件和DNS,都是使用客戶機/服務(wù)器體系結(jié)構(gòu);而文件分發(fā),例如大家熟悉的迅雷下載等,就是使用P2P文件分發(fā)的技術(shù),使用的就是對待體系結(jié)構(gòu)(P2P)。
對于客戶機/服務(wù)器體系結(jié)構(gòu),它要求總是打開的基礎(chǔ)設(shè)施服務(wù)器。相反,使用P2P體系結(jié)構(gòu),對總是打開的基礎(chǔ)設(shè)施服務(wù)器有最小的(或者沒有)依賴,任意間斷連接的主機對都稱為對等方,各個對等方直接通信。對等方并不為服務(wù)提供商所有,而是為用戶控制的設(shè)備。
二、P2P文件分發(fā)
下面通過一個具體的應(yīng)用來研究P2P,這個應(yīng)用是從單一服務(wù)器向大量主機(對等方)分發(fā)大文件。
在客戶機/服務(wù)器文件分發(fā)中,服務(wù)器必須向每個客戶機發(fā)送該文件的一個拷貝,這同時給服務(wù)器造成了極大的負(fù)擔(dān),并且消耗了大量的服務(wù)器帶寬。在P2P文件分發(fā)中,每個對等方(即對應(yīng)客戶機/服務(wù)器體系結(jié)構(gòu)中的客戶機)都能夠重新分發(fā)其所有的該文件的任何部分,從而協(xié)助服務(wù)器進(jìn)行分發(fā)。
1、客戶機/服務(wù)器體系結(jié)構(gòu) VS P2P體系結(jié)構(gòu)
首先我們假設(shè)文件的長度為F,服務(wù)器上傳的速率為U,下載速率為D,而客戶機有N臺,每臺的上傳速率為ui(i=1、2...N),每臺的下載速率為di(i=1、2...N)。
由于每一次文件的分發(fā)都涉及服務(wù)器上傳文件和客戶機(或?qū)Φ确?下載文件。在下面的討論中,我們假設(shè)F、U、D、ui、di均不變,而N,即對等方數(shù)量卻是可變的。
首先,對于客戶機/服務(wù)器體系結(jié)構(gòu),服務(wù)器上傳N個文件(因為有N個客戶,每個客戶一個文件的副本)所需要的時間至少為NF/U。而下載速率最小(用dmin表示)的對等方不可能在F/dmin秒內(nèi)獲得該 文件的所有F比特,所以使用客戶機/服務(wù)器體系結(jié)構(gòu)分發(fā)文件所需的時間為
Dcs = max{NF/U,F(xiàn)/dmin}
即所需要的最小時間由下載文件最長時間和上傳文件中的較大者決定,其實這也是很自然的事,因為分發(fā)時間,要不就是服務(wù)器上傳這N個文件用時多,要不就是對等方下載這N個文件用時多。然而,我們可以看到NF/U會隨著N的增大而線性增大,而F/dmin卻是個常值。也就是說當(dāng)N達(dá)到一定的程度時,它必然大于F/dmin,也就變成是Dcs的值,即Dcs = NF/U。
然后,對于P2P體系結(jié)構(gòu),其中每個對等方都能夠幫助服務(wù)器來分發(fā)文件。也就是說,當(dāng)一個對等方接收到文件數(shù)據(jù)時,它可以利用自己的上載能力重新將數(shù)據(jù)分發(fā)給其他對等方。
在分發(fā)的開始,只有服務(wù)器擁有文件。為了使對等方得到該文件,服務(wù)器必須經(jīng)其接入鏈路至少發(fā)送一次該文件。因此最小分發(fā)時間至少是F/U。因為在P2P體系結(jié)構(gòu)中,服務(wù)器發(fā)送一次文件就可能不用再次發(fā)送了,因為其他對等方可以從擁有該文件的對等方中獲得。
與客戶機/服務(wù)器體系結(jié)構(gòu)相同,下載速率最小的對等方不可能在F/dmin秒之內(nèi)獲得文件F的所有比特。因此最小的分發(fā)時間也可能是F/dmin。
最后,系統(tǒng)的總上載能力等于服務(wù)器的上載速率加上每個對等方的上載速率,即Utotal=U+u1+u2...+uN。系統(tǒng)必須向N個對等方的都交付(上載)F比特,因此總的交付為NF比特。所以最小分發(fā)時間至少是NF/(U+u1+u2...+uN)。
綜上所述,使用P2P體系結(jié)構(gòu)分發(fā)文件所需要的時間為
Dp2p = max{F/U, F/dmin, NF/(U+u1+u2...+uN)}
即最小分發(fā)時間由服務(wù)器上傳的時間,對等方下載的最長時間和所有對待方上傳下載的時間來決定。同樣,因為F/U, F/dmin都是常數(shù),所以當(dāng)N達(dá)到一定值后,NF/(U+u1+u2...+uN)就會大于前面的兩者,成為分發(fā)文件所需要的時間,即Dp2p = NF/(U+u1+u2...+uN)。從表達(dá)式中,我們可以看到,當(dāng)N的值增大時,由于對等方的數(shù)量也能加了,所以U+u1+u2...+uN的值也會隨之增大,所以函數(shù)并不像客戶機/服務(wù)器體系結(jié)構(gòu)中函數(shù)那樣,分發(fā)時間會線性地增加,它的曲線與對數(shù)函數(shù)(如log2N)的曲線相似。所以當(dāng)N的值較大時,P2P體系結(jié)構(gòu)分發(fā)文件所需要時間遠(yuǎn)比客戶機/服務(wù)器體系結(jié)構(gòu)的小。
2、BitTorrent——用于文件分發(fā)的流行P2P協(xié)議
前面用數(shù)學(xué)的方法說明了基于客戶機/服務(wù)器體系結(jié)構(gòu)和基于P2P體系結(jié)構(gòu)的文件分發(fā)所需的時間的差別,下面來說一下,這個P2P文件分發(fā)是如何實現(xiàn)的。下面以使用BitTorrent協(xié)議為例子說明。
在BitTorrent中,把參與一個特定文件分發(fā)的所有對等方的集合稱為一個洪流。在一個洪流中,對等方彼此下載等長度的文件塊,塊長度通常為256KB。當(dāng)一個對等方開始加入一個洪流時,它沒有文件塊。但是隨著時間的推移,它將累積到越來越多的文件塊。當(dāng)它下載文件塊時,也為其他對等方上載多個文件塊。對待方一旦獲得了整個文件,它可以離開洪流,或留在洪流中,為其他對等方上載文件塊。同時,任何一個對等方可以在任何時候離開洪流,以后也可以重新加入洪流。
這里有二個問題,1)我們的主機或設(shè)備加入一個洪流中時如何知道它有哪些對等方,即它如何知道它要向哪些主機請求所需要的文件。2)我們在下載文件時,如果確定我們所需要的文件塊是哪一塊,換句話說就是,文件有很多塊組成,而我們下載時并不按文件原有的順序下載,那么我如何確定我還需要下載哪些塊來讓這個文件變得完整。
首先回答第一個問題,每個洪流具有一個基礎(chǔ)設(shè)施節(jié)點,稱為追蹤器。當(dāng)一個對等方加入洪流時,它向追蹤器注冊,并周期性地通知追蹤器它仍在洪流中。一個特定的洪流可能在任意時刻擁有數(shù)以百計或千計的對等方。當(dāng)一個新的對等方A加入洪流時,追蹤器隨機地從參與對等方集合中選擇一些對等方,并將這些對等方的IP地址發(fā)送給A,A持有對等方的這張列表,試圖與該列表上的對等方創(chuàng)建并行的TCP連接,與A成功地創(chuàng)建TCP連接的對等方稱為“鄰近對等方”。隨著時間的推移,其中的一些對待方可能離開,而另一些對等方可能試圖與A創(chuàng)建TCP連接,就像A之前所做的那樣。這樣我們就可以知道我們要下載的文件所在洪流中有哪些的對等方。
再來回答第二個問題,在任何時刻,每個對等方都具有某文件塊的子集,且不同的對等方具有不同的文件塊子集。A周期性詢問每個鄰近對等方所具有的塊列表并獲得其鄰居的塊列表,因此A將對它當(dāng)前還沒有的塊發(fā)出請求。同時由于在洪流中的每一個對等方既下載又上傳,所以A還應(yīng)決定它請求的塊應(yīng)該發(fā)送給它的哪些鄰居。通常在請求塊的過程中,使用一種叫最稀罕優(yōu)先的技術(shù),即根據(jù)A沒有的塊從它的鄰居中確定最稀罕的塊(即那些在它的鄰居中拷貝數(shù)量最少的那些塊),并優(yōu)先請求這些最稀罕的塊。這樣做的目的也是很明顯,就是讓每個塊在洪流中的拷貝數(shù)量大致相等,這樣同時也能提高總的下載速率,因為下載不會卡在某個文件塊的下載中。
三、P2P區(qū)域搜索信息
P2P的另一個重要應(yīng)用就是信息索引,即信息到主機位置的映射。
為了說明什么是索引,舉個例子說明吧,P2P文件共享系統(tǒng)中有一個索引,它動態(tài)地跟蹤這些對等方可供共享的文件。該索引維護(hù)了一個記錄,記錄將有關(guān)拷貝的信息映射到具有拷貝對等方的IP地址。當(dāng)一個對等方加入系統(tǒng)時,它通知系統(tǒng)它所擁有的文件索引。當(dāng)一個用戶希望獲得一個文件時,他搜索索引以定位該文件的拷貝的位置。
注:P2P文件分發(fā)與P2P文件共享還是有一定的區(qū)別的,P2P的文件共享有可能發(fā)生在不同的時段,例如,現(xiàn)在收到的文件,1小時后才需上傳。P2P的文件共享也有可能發(fā)生在不同的文件,例如,需要下載A文件,卻為其他用戶提供B文件。而P2P的文件分發(fā)更多是針對單一文件,在下載的同一時間為其他用戶提供上傳服務(wù),這是一個協(xié)同處理的過程。
1、集中式索引
由一臺大型服務(wù)器(或服務(wù)器場)來提供索引服務(wù)。當(dāng)用戶啟動P2P文件共享應(yīng)用程序時,該應(yīng)用程序?qū)⑺腎P地址以及可供共享的文件名稱通知索引服務(wù)器。索引服務(wù)器收集可共享的對象,建立集中式的動態(tài)數(shù)據(jù)庫(對象名稱到IP地址的映射)。
它有如下的缺點:
1、單點故障
2、性能瓶頸
3、可靠性差
這種索引方式的特點是:文件傳輸是分散的(P2P的),但定位內(nèi)容的過程是高度集中的(客戶機/服務(wù)器)。
2、查詢洪泛
查詢洪泛采用完全分布式的方法,索引全面地分布在對等方的區(qū)域中,對等方形成了一個抽象的邏輯網(wǎng)絡(luò),稱為覆蓋網(wǎng)絡(luò)。當(dāng)A要定位索引(例如abc)時,它向它的所有鄰居發(fā)送一條查詢報文(包含關(guān)鍵字abc)。A的所有鄰居向它們的所有鄰居轉(zhuǎn)發(fā)該報文,這些鄰居又接著向它們的所有鄰居轉(zhuǎn)發(fā)該報文等。如果其中一個對等主與索引(abc)配置,則返回一個查詢命中報文。
但是這種簡單的方法卻有一個致命的缺點,就是它會產(chǎn)生大量的流量。
一個解決辦法就是采用范圍受限查詢洪泛。設(shè)置一個計數(shù)值,對等方向其鄰居轉(zhuǎn)發(fā)請求之前就將對等方的計數(shù)字段減1,當(dāng)一個對等方的計數(shù)字段為0時,停止查詢。
3、層次覆蓋
該方法結(jié)合了集中式索引和查詢洪泛的優(yōu)點,與查詢洪泛相似,層次覆蓋設(shè)計并不使用專用的服務(wù)器來跟蹤和索引文件。不同的是在層次覆蓋中并非所有的對等方都是平等的。
它的示意圖如下:
超級對等方(組長對等方)維護(hù)著一個索引,該索引包括了其子對等方(普通對待方)正在共享的所有文件的標(biāo)識符、有關(guān)文件的元數(shù)據(jù)和保持這些文件的子對等方的IP地址。而超級對等方通常也只是一個普通的對等方。超級對等方之間相互建立TCP連接,從而形成一個覆蓋網(wǎng)絡(luò),超級對等方可以向其相信超級對等方轉(zhuǎn)發(fā)查詢,但是僅在超級對等方使用范圍受限查詢洪泛。
當(dāng)某對等方進(jìn)行索引時,它向其超級對等方發(fā)送帶有關(guān)鍵詞的查詢。超級對等方則用其具有相關(guān)文件的子對等方的IP地址進(jìn)行響應(yīng),該超級對等方還可能向一個或多個相鄰的超級對等方轉(zhuǎn)發(fā)該查詢。如果某相鄰對等方收到了這樣一個請求,它也會用具有匹配文件的子對等方的IP地址進(jìn)行響應(yīng)。
與受限查詢洪泛設(shè)計相比,層次覆蓋設(shè)計允許數(shù)量多得多的對等方檢查匹配,而不會產(chǎn)生過量的查詢流量。
通過這兩種P2P常用應(yīng)用的介紹,它的定義,結(jié)構(gòu),搜索方式都有大略的講解了,大家對P2P應(yīng)該有一定的認(rèn)識了吧,,謝謝閱讀,希望能幫到大家,請繼續(xù)關(guān)注武林網(wǎng),我們會努力分享更多優(yōu)秀的文章。
新聞熱點
疑難解答
圖片精選