第二章 背景知識
2.5 P2P 的運作架構
大多數的網路服務都採用主從(client/server)架構,如FTP、WEB等服務,
當越多client端加入連線,server會耗費更多運算資源及網路頻寬,而且client 只能被動的接受server所提供的資源。但是P2P的技術打破了這個藩籬,每個peer 都是對等的,同時扮演client以及server的角色,當越多節點加入這個網路,每 個節點所能夠得到資源會越多。P2P運作架構可分成三類,分別是集中式、分散式、
混合式,將於本節敘述。
2.5.1 集中式架構(Centralized)
Napster是這個系統架構的代表,此類P2P系統通常會使用固定的TCP port。
新節點的加入首先必須連接中央索引伺服器(index server),然後回報其擁有 的檔案列表,隨後各節點都透過詢問中央索引伺服器來得知擁有此檔案的使用者 資訊,再依此資訊,直接向檔案所在端點要求下載。
集中式架構的優點在於實作上較簡單,搜尋檔案快速有效率;而其主要缺點在 於一旦中央索引伺服器故障,整個系統便無法運作,而且伺服器必須處理大量客 戶端的請求,容易形成系統運作的瓶頸。
圖 2-6 集中式 P2P 架構
2.5.2 分散式架構(Decentralized)
分散式架構的代表是Gnutella[37],為改良第一代架構的缺點及違法問題,
此類P2P系統普遍採用dymanic port,或直接利用HTTP作為通信協定,以躲過防火 牆偵測。另外也不需要任何中央伺服器,所有參與連線的端點同時扮演server與 client的角色,地位完全對等。Gnutella系統定義了四種訊息格式:ping、pong 係用來確認身份,而query及query-replies則用來搜尋檔案。
新的端點想要加入Gnutella網路,會先連結到鄰近任意節點,並且發出Ping 訊息來表明自己身份,被連結到的節點會回應Pong訊息,內容包括IP、Port及分 享的檔案數量及大小,同時被連結的節點會將該Ping訊息以遞迴(Recursion)的 方式繼續往它的鄰居節點廣播,直到TTL(time-to-live)歸零。也因為這個方式,
很容易造成搜尋洪流(Query Flooding),所以如何定義TTL值,或者限制遞迴的 深度,以降低頻寬被佔滿的狀況,是分散式架構最大的挑戰。
圖 2-7 分散式 P2P 架構
2.5.3 混合式架構(Hybrid)
混合式架構(如eDonkey[19]、FastTrack[23]、WinMX[22])是以分散式P2P為 基礎,另外參考集中式P2P的特點,增加了Supernode這個角色。通常具有較大的 頻寬及運算能力的節點會被選為Supernode,負責提供以它為中心之小型網路的各 項服務,包括檔案索引及暫存等,因此讓整體網路傳輸更有效率。
為了避免防火牆阻擋,部分混合式P2P程式,如FastTrack、WinMX會採用連線 加密技術,而eMule[18]在v0.47b版發表了模糊運算技術,讓封包看起來變成毫無 規律的內容,這些方法都增加了封包辨識的困難度。
圖 2-8 混合式 P2P 架構