P2P技術原理
P2P技術屬于覆蓋層網絡(Overlay Network)的范疇,是相對于客戶機/服務器(C/S)模式來說的一種網絡信息交換方式。在C/S模式中,數據的分發采用專門的服務器,多個客戶端都從此服務器獲取數據。這種模式的優點是:數據的一致性容易控制,系統也容易管理。但是此種模式的缺點是:因為服務器的個數只有一個(即便有多個也非常有限),系統容易出現單一失效點;單一服務器面對眾多的客戶端,由于CPU能力、內存大小、網絡帶寬的限制,可同時服務的客戶端非常有限,可擴展性差。P2P技術正是為了解決這些問題而提出來的一種對等網絡結構。在P2P網絡中,每個節點既可以從其他節點得到服務,也可以向其他節點提供服務。這樣,龐大的終端資源被利用起來,一舉解決了C/S模式中的兩個弊端。
對等網絡的基本結構
(1)集中式對等網絡(Napster、QQ)
集中式對等網絡基于中央目錄服務器,為網絡中各節目提供目錄查詢服務,傳輸內容無需再經過中央服務器。這種網絡,結構比較簡單,中央服務器的負擔大大降低。但由于仍存在中央節點,容易形成傳輸瓶頸,擴展性也比較差,不適合大型網絡。但由于目錄集中管理,對于小型網絡的管理和控制上倒是一種可選擇方案。
(2)無結構分布式網絡(Gnutella)
無結構分布式網絡與集中式的最顯著區別在于,它沒有中央服務器,所有結點通過與相鄰節點間的通信,接入整個網絡。在無結構的網絡中,節點采用一種查詢包的機制來搜索需要的資源。具體的方式為,某節點將包含查詢內容的查詢包發送到與之相鄰的節點,該查詢包以擴散的方式在網絡中蔓延,由于這樣的方式如果不加節制,會造成消息泛濫,因此一般會設置一個適當的生存時間(TTL),在查詢的過程中遞減,當TTL值為0時,將不再繼續發送。
這種無結構的方式,組織方式比較松散,節點的加入與離開比較自由,當查詢熱門內容時,很容易就能找到,但如果需求的內容比較冷門,較小的TTL不容易找到,而較大的TTL值又容易引起較大的查詢流量,尤其當網絡范圍擴展到一定規模時,即使限制的TTL值較小,仍然會引起流量的劇增。但當網絡中存在一些擁有豐富資源的所謂的類服務器節點時,可顯著提高查詢的效率。
(3)結構化分布式網絡(第三代P2P Pastry、Tapestry、Chord、CAN)
結構化分布式網絡,是近幾年基于分布式哈希表(Distributed Hash Table)技術的研究成果。它的基本思想是將網絡中所有的資源整理成一張巨大的表,表內包含資源的關鍵字和所存放結點的地址,然后將這張表分割后分別存儲到網絡中的每一結點中去。當用戶在網絡中搜索相應的資源時,它將能發現存儲與關鍵詞對應的哈希表內容所存放的結點,在該結點中存儲了包含所需資源的結點地址,然后發起搜索的結點根據這些地址信息,與對應結點連接并傳輸資源。這是一種技術上比較先進的對等網絡,它具有高度結構化,高可擴展性,結點的加入與離開比較自由。這種方式適合比較大型的網絡。
P2P網絡有3種比較流行的組織結構,被應用在不同的P2P應用中。
(1)DHT結構
分布式哈希表(DHT)[1]是一種功能強大的工具,它的提出引起了學術界一股研究DHT的熱潮。雖然DHT具有各種各樣的實現方式,但是具有共同的特征,即都是一個環行拓撲結構,在這個結構里每個節點具有一個唯一的節點標識(ID),節點ID是一個128位的哈希值。每個節點都在路由表里保存了其他前驅、后繼節點的ID。如圖1(a)所示。通過這些路由信息,可以方便地找到其他節點。這種結構多用于文件共享和作為底層結構用于流媒體傳輸[2]。
(2)樹形結構
P2P網絡樹形結構如圖1(b)所示。在這種結構中,所有的節點都被組織在一棵樹中,樹根只有子節點,樹葉只有父節點,其他節點既有子節點也有父節點。信息的流向沿著樹枝流動。最初的樹形結構多用于P2P流媒體直播[3-4]。
(3)網狀結構
網狀結構如圖1(c)所示,又叫無結構。顧名思義,這種結構中,所有的節點無規則地連在一起,沒有穩定的關系,沒有父子關系。網狀結構[5]為P2P提供了最大的容忍性、動態適應性,在流媒體直播和點播應用中取得了極大的成功。當網絡變得很大時,常常會引入超級節點的概念,超級節點可以和任何一種以上結構結合起來組成新的結構,如KaZaA[6]。
P2P技術應用
(1)分布式科學計算
P2P技術可以使得眾多終端的CPU資源聯合起來,服務于一個共同的計算。這種計算一般是計算量巨大、數據極多、耗時很長的科學計算。在每次計算過程中,任務(包括邏輯與數據等)被劃分成多個片,被分配到參與科學計算的P2P節點機器上。在不影響原有計算機使用的前提下,人們利用分散的CPU資源完成計算任務,并將結果返回給一個或多個服務器,將眾多結果進行整合,以得到最終結果。
(2)文件共享
BitTorrent是一種無結構的網絡協議。除了BitTorrent之外,還有不少著名的無結構化的P2P文件共享協議,典型的有Gnutella[8]和KaZaA[6]。
(3)流媒體直播
(4)流媒體點播
(5)IP層語音通信
Skype采取類似KaZaA的拓撲結構,在網絡中選取一些超級節點。在通信雙方直連效果不好時,一些合適的超級節點則擔當起其中轉節點的角色,為通信雙方創建中轉連接,并轉發相應的語音通信包。
典型P2P應用的機制分析
3.1BitTorrent
BitTorrent軟件用戶首先從Web服務器上獲得下載文件的種子文件,種子文件中包含下載文件名及數據部分的哈希值,還包含一個或者多個的索引(Tracker)服務器地址。它的工作過程如下:客戶端向索引服務器發一個超文本傳輸協議(HTTP)的GET請求,并把它自己的私有信息和下載文件的哈希值放在GET的參數中;索引服務器根據請求的哈希值查找內部的數據字典,隨機地返回正在下載該文件的一組節點,客戶端連接這些節點,下載需要的文件片段。因此可以將索引服務器的文件下載過程簡單地分成兩個部分:與索引服務器通信的HTTP,與其他客戶端通信并傳輸數據的協議,我們稱為BitTorrent對等協議。BitTorrent軟件的工作原理如圖 4所示。BitTorrent協議也處在不斷變化中,可以通過數據報協議(UDP)和DHT的方法獲得可用的傳輸節點信息,而不是僅僅通過原有的 HTTP,這種方法使得BitTorrent應用更加靈活,提高BitTorrent用戶的下載體驗。
3.2eMule
eMule軟件基于eDonkey協議改進后的協議,同時兼容eDonkey協議。每個eMule客戶端都預先設置好了一個服務器列表和一個本地共享文件列表,客戶端通過TCP連接到eMule服務器進行登錄,得到想要的文件的信息以及可用的客戶端的信息。一個客戶端可以從多個其他的EMule客戶端下載同一個文件,并從不同的客戶端取得不同的數據片段。eMule同時擴展了eDonkey的能力,允許客戶端之間互相交換關于服務器、其他客戶端和文件的信息。eMule服務器不保存任何文件,它只是文件位置信息的中心索引。eMule客戶端一啟動就會自動使用傳輸控制協議 (TCP)連接到eMule服務器上。服務器給客戶端提供一個客戶端標識(ID),它僅在客戶端服務器連接的生命周期內有效。連接建立后,客戶端把其共享的文件列表發送給服務器。服務器將這個列表保存在內部數據庫內。eMule客戶端也會發送請求下載列表。連接建立以后,eMule服務器給客戶端返回一個列表,包括哪些客戶端可以提供請求文件的下載。然后,客戶端再和它們主動建立連接下載文件。圖5所示為eMule的工作原理。
eMule基本原理與BitTorrent類似,客戶端通過索引服務器獲得文件下載信息。eMule同時允許客戶端之間傳遞服務器信息,BitTorrent只能通過索引服務器或者DHT獲得。eMule共享的是整個文件目錄,而BitTorrent只共享下載任務,這使得 BitTorrent更適合分發熱門文件,eMule傾向于一般熱門文件的下載。
3.3迅雷
迅雷是一款新型的基于多資源多線程技術的下載軟件,迅雷擁有比目前用戶常用的下載軟件快7~10倍的下載速度。迅雷的技術主要分成兩個部分,一部分是對現有Internet下載資源的搜索和整合,將現有Internet上的下載資源進行校驗,將相同校驗值的統一資源定位(URL)信息進行聚合。當用戶點擊某個下載連接時,迅雷服務器按照一定的策略返回該URL信息所在聚合的子集,并將該用戶的信息返回給迅雷服務器。另一部分是迅雷客戶端通過多資源多線程下載所需要的文件,提高下載速率。迅雷高速穩定下載的根本原因在于同時整合多個穩定服務器的資源實現多資源多線程的數據傳輸。多資源多線程技術使得迅雷在不降低用戶體驗的前提下,對服務器資源進行均衡,有效降低了服務器負載。
每個用戶在網上下載的文件都會在迅雷的服務器中進行數據記錄,如有其他用戶再下載同樣的文件,迅雷的服務器會在它的數據庫中搜索曾經下載過這些文件的用戶,服務器再連接這些用戶,通過用戶已下載文件中的記錄進行判斷,如用戶下載文件中仍存在此文件(文件如改名或改變保存位置則無效),用戶將在不知不覺中扮演下載中間服務角色,上傳文件。
評論
查看更多