計算機網絡層之 P2P


一、什麼是P2P
對等網絡(PeertoPeer,簡稱P2P)也稱爲對等連接,是一種新的通信模式,每個參與者具有同等的能力,可以發起一個通信會話。

這個定義有點抽象,下面就來簡單地解釋一下。粗略地講,應用程序可以設計成採用客戶機/服務器體系結構或對等體系結構(P2P)。我們日常生活中的許多應用程序,包括web、電子郵件和DNS,都是使用客戶機/服務器體系結構;而文件分發,例如大家熟悉的迅雷下載等,就是使用P2P文件分發的技術,使用的就是對待體系結構(P2P)。

對於客戶機/服務器體系結構,它要求總是打開的基礎設施服務器。相反,使用P2P體系結構,對總是打開的基礎設施服務器有最小的(或者沒有)依賴,任意間斷連接的主機對都稱爲對等方,各個對等方直接通信。對等方並不爲服務提供商所有,而是爲用戶控制的設備。

二、P2P文件分發
下面通過一個具體的應用來研究P2P,這個應用是從單一服務器向大量主機(對等方)分發大文件。

在客戶機/服務器文件分發中,服務器必須向每個客戶機發送該文件的一個拷貝,這同時給服務器造成了極大的負擔,並且消耗了大量的服務器帶寬。在P2P文件分發中,每個對等方(即對應客戶機/服務器體系結構中的客戶機)都能夠重新分發其所有的該文件的任何部分,從而協助服務器進行分發。

1、客戶機/服務器體系結構 VS P2P體系結構
首先我們假設文件的長度爲F,服務器上傳的速率爲U,下載速率爲D,而客戶機有N臺,每臺的上傳速率爲ui(i=1、2...N),每臺的下載速率爲di(i=1、2...N)。

由於每一次文件的分發都涉及服務器上傳文件和客戶機(或對等方)下載文件。在下面的討論中,我們假設F、U、D、ui、di均不變,而N,即對等方數量卻是可變的。

首先,對於客戶機/服務器體系結構,服務器上傳N個文件(因爲有N個客戶,每個客戶一個文件的副本)所需要的時間至少爲NF/U。而下載速率最小(用dmin表示)的對等方不可能在F/dmin秒內獲得該 文件的所有F比特,所以使用客戶機/服務器體系結構分發文件所需的時間爲
Dcs = max{NF/U,F/dmin}
即所需要的最小時間由下載文件最長時間和上傳文件中的較大者決定,其實這也是很自然的事,因爲分發時間,要不就是服務器上傳這N個文件用時多,要不就是對等方下載這N個文件用時多。然而,我們可以看到NF/U會隨着N的增大而線性增大,而F/dmin卻是個常值。也就是說當N達到一定的程度時,它必然大於F/dmin,也就變成是Dcs的值,即Dcs = NF/U。

然後,對於P2P體系結構,其中每個對等方都能夠幫助服務器來分發文件。也就是說,當一個對等方接收到文件數據時,它可以利用自己的上載能力重新將數據分發給其他對等方。

在分發的開始,只有服務器擁有文件。爲了使對等方得到該文件,服務器必須經其接入鏈路至少發送一次該文件。因此最小分發時間至少是F/U。因爲在P2P體系結構中,服務器發送一次文件就可能不用再次發送了,因爲其他對等方可以從擁有該文件的對等方中獲得。

與客戶機/服務器體系結構相同,下載速率最小的對等方不可能在F/dmin秒之內獲得文件F的所有比特。因此最小的分發時間也可能是F/dmin。

最後,系統的總上載能力等於服務器的上載速率加上每個對等方的上載速率,即Utotal=U+u1+u2...+uN。系統必須向N個對等方的都交付(上載)F比特,因此總的交付爲NF比特。所以最小分發時間至少是NF/(U+u1+u2...+uN)。

綜上所述,使用P2P體系結構分發文件所需要的時間爲
Dp2p = max{F/U, F/dmin, NF/(U+u1+u2...+uN)}
即最小分發時間由服務器上傳的時間,對等方下載的最長時間和所有對待方上傳下載的時間來決定。同樣,因爲F/U, F/dmin都是常數,所以當N達到一定值後,NF/(U+u1+u2...+uN)就會大於前面的兩者,成爲分發文件所需要的時間,即Dp2p = NF/(U+u1+u2...+uN)。從表達式中,我們可以看到,當N的值增大時,由於對等方的數量也能加了,所以U+u1+u2...+uN的值也會隨之增大,所以函數並不像客戶機/服務器體系結構中函數那樣,分發時間會線性地增加,它的曲線與對數函數(如log2N)的曲線相似。所以當N的值較大時,P2P體系結構分發文件所需要時間遠比客戶機/服務器體系結構的小。

2、BitTorrent——用於文件分發的流行P2P協議
前面用數學的方法說明了基於客戶機/服務器體系結構和基於P2P體系結構的文件分發所需的時間的差別,下面來說一下,這個P2P文件分發是如何實現的。下面以使用BitTorrent協議爲例子說明。

在BitTorrent中,把參與一個特定文件分發的所有對等方的集合稱爲一個洪流。在一個洪流中,對等方彼此下載等長度的文件塊,塊長度通常爲256KB。當一個對等方開始加入一個洪流時,它沒有文件塊。但是隨着時間的推移,它將累積到越來越多的文件塊。當它下載文件塊時,也爲其他對等方上載多個文件塊。對待方一旦獲得了整個文件,它可以離開洪流,或留在洪流中,爲其他對等方上載文件塊。同時,任何一個對等方可以在任何時候離開洪流,以後也可以重新加入洪流。

這裏有個問題1)我們的主機或設備加入一個洪流中時如何知道它有哪些對等方,即它如何知道它要向哪些主機請求所需要的文件。2)我們在下載文件時,如果確定我們所需要的文件塊是哪一塊,換句話說就是,文件有很多塊組成,而我們下載時並不按文件原有的順序下載,那麼我如何確定我還需要下載哪些塊來讓這個文件變得完整。

首先回答第一個問題,每個洪流具有一個基礎設施節點,稱爲追蹤器。當一個對等方加入洪流時,它向追蹤器註冊,並週期性地通知追蹤器它仍在洪流中。一個特定的洪流可能在任意時刻擁有數以百計或千計的對等方。當一個新的對等方A加入洪流時,追蹤器隨機地從參與對等方集合中選擇一些對等方,並將這些對等方的IP地址發送給A,A持有對等方的這張列表,試圖與該列表上的對等方創建並行的TCP連接,與A成功地創建TCP連接的對等方稱爲“鄰近對等方”。隨着時間的推移,其中的一些對待方可能離開,而另一些對等方可能試圖與A創建TCP連接,就像A之前所做的那樣。這樣我們就可以知道我們要下載的文件所在洪流中有哪些的對等方。

再來回答第二個問題,在任何時刻,每個對等方都具有某文件塊的子集,且不同的對等方具有不同的文件塊子集。A週期性詢問每個鄰近對等方所具有的塊列表並獲得其鄰居的塊列表,因此A將對它當前還沒有的塊發出請求。同時由於在洪流中的每一個對等方既下載又上傳,所以A還應決定它請求的塊應該發送給它的哪些鄰居。通常在請求塊的過程中,使用一種叫最稀罕優先的技術,即根據A沒有的塊從它的鄰居中確定最稀罕的塊(即那些在它的鄰居中拷貝數量最少的那些塊),並優先請求這些最稀罕的塊。這樣做的目的也是很明顯,就是讓每個塊在洪流中的拷貝數量大致相等,這樣同時也能提高總的下載速率,因爲下載不會卡在某個文件塊的下載中。

三、P2P區域搜索信息
P2P的另一個重要應用就是信息索引,即信息到主機位置的映射。

爲了說明什麼是索引,舉個例子說明吧,P2P文件共享系統中有一個索引,它動態地跟蹤這些對等方可供共享的文件。該索引維護了一個記錄,記錄將有關拷貝的信息映射到具有拷貝對等方的IP地址。當一個對等方加入系統時,它通知系統它所擁有的文件索引。當一個用戶希望獲得一個文件時,他搜索索引以定位該文件的拷貝的位置。

注:P2P文件分發與P2P文件共享還是有一定的區別的,P2P的文件共享有可能發生在不同的時段,例如,現在收到的文件,1小時後才需上傳。P2P的文件共享也有可能發生在不同的文件,例如,需要下載A文件,卻爲其他用戶提供B文件。而P2P的文件分發更多是針對單一文件,在下載的同一時間爲其他用戶提供上傳服務,這是一個協同處理的過程。

1、集中式索引
由一臺大型服務器(或服務器場)來提供索引服務。當用戶啓動P2P文件共享應用程序時,該應用程序將它的IP地址以及可供共享的文件名稱通知索引服務器。索引服務器收集可共享的對象,建立集中式的動態數據庫(對象名稱到IP地址的映射)。
它有如下的缺點:
1、單點故障
2、性能瓶頸
3、可靠性差
這種索引方式的特點是:文件傳輸是分散的(P2P的),但定位內容的過程是高度集中的(客戶機/服務器)。

2、查詢洪泛
查詢洪泛採用完全分佈式的方法,索引全面地分佈在對等方的區域中,對等方形成了一個抽象的邏輯網絡,稱爲覆蓋網絡。當A要定位索引(例如abc)時,它向它的所有鄰居發送一條查詢報文(包含關鍵字abc)。A的所有鄰居向它們的所有鄰居轉發該報文,這些鄰居又接着向它們的所有鄰居轉發該報文等。如果其中一個對等主與索引(abc)配置,則返回一個查詢命中報文。

但是這種簡單的方法卻有一個致命的缺點,就是它會產生大量的流量。

一個解決辦法就是採用範圍受限查詢洪泛。設置一個計數值,對等方向其鄰居轉發請求之前就將對等方的計數字段減1,當一個對等方的計數字段爲0時,停止查詢。

3、層次覆蓋
該方法結合了集中式索引和查詢洪泛的優點,與查詢洪泛相似,層次覆蓋設計並不使用專用的服務器來跟蹤和索引文件。不同的是在層次覆蓋中並非所有的對等方都是平等的。

它的示意圖如下:


超級對等方(組長對等方)維護着一個索引,該索引包括了其子對等方(普通對待方)正在共享的所有文件的標識符、有關文件的元數據和保持這些文件的子對等方的IP地址。而超級對等方通常也只是一個普通的對等方。超級對等方之間相互建立TCP連接,從而形成一個覆蓋網絡,超級對等方可以向其相信超級對等方轉發查詢,但是僅在超級對等方使用範圍受限查詢洪泛。

當某對等方進行索引時,它向其超級對等方發送帶有關鍵詞的查詢。超級對等方則用其具有相關文件的子對等方的IP地址進行響應,該超級對等方還可能向一個或多個相鄰的超級對等方轉發該查詢。如果某相鄰對等方收到了這樣一個請求,它也會用具有匹配文件的子對等方的IP地址進行響應。

與受限查詢洪泛設計相比,層次覆蓋設計允許數量多得多的對等方檢查匹配,而不會產生過量的查詢流量。

通過這兩種P2P常用應用的介紹,大家對P2P應該有一定的認識了吧!

注:由於IP地址的不夠用,在IP的使用中有一種技術叫做NAT地址轉換,從而對P2P的應用產生了一定的影響,因爲使用了NAT後,對等方不能正確地獲取處於同一洪流是的對等方的IP地址,從而把P2P的應用限制在一個局域網中。這在後面說IP的NAT時再作介紹。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章