P2P(Peer-to-Peer)計算是指不同系統之間通過直接交換,實現計算機資源和服務共享、進行信息處理的過程,這里,資源可以是處理器、緩存和磁盤空間等,服務包括信息交換、數據計算等。P2P模式與傳統客戶/服務器模式的關鍵區別在于Peer與Peer在通信過程中,可以完全摒棄服務器的角色,完成一種直接通信,來獲得共享資源或服務。
從P2P的發展史來看,Internet的快速發展是P2P系統崛起的催化劑,在Internet上進行客戶/服務器模式的訪問,使得信息源分布過于集中,邊緣網絡的資源被閑置和浪費,而P2P技術的引入,使得網絡中任何一個與網絡相關的設備都可能為網絡中的其他設備提供有效的內容服務。
一般的P2P系統都有強烈的應用背景,系統實現也與應用類型緊密相關。為了深入分析P2P系統的關鍵技術,我們將P2P系統劃分為P2P平臺層和應用層,P2P平臺包含支撐P2P應用所需的基礎組件,例如,發現機制、通信、安全、資源集成等組件。P2P應用層利用P2P平臺提供的功能,向用戶提供專門的服務。這種區分可界定P2P的關鍵技術,幫助我們設計和實現更多種類的P2P應用.
本文主要討論P2P平臺的關鍵技術,全文按如下方式組織:第1節描述了P2P系統的特點,第2節概括了Peer通信的各種技術,第3節敘述了P2P平臺的安全措施,第4節討論了P2P平臺的性能問題,最后是全文小結。
1.P2P系統特點
在P2P系統中,每一個Peer都是平等的參與者,承擔服務
使用者和
服務提供者兩個角色。資源的所有權和控制權被分散到網絡的每一個節點中。服務使用者和服務提供者之間進行直接通信,可充分利用網絡帶寬,減少網絡的擁塞狀況,使得資源的有效利用率大大提高(包括各種計算資源和存儲資源)。同時由于沒有中央節點的集中控制,系統的伸縮性較強,也能避免單點故障,提高系統的容錯性能。
但由于P2P網絡的分散性、自治性、動態性等特點,造成了某些情況下Peer的訪問結果是不可預見的。例如,一個請求可能得不到任何應答消息的反饋。P2P系統的匿名性等特點可能會帶來系統的安全漏洞。
P2P系統的這些特點也決定了P2P 應用主要包括資源共享和協作。資源共享主要是文件共享系統、文件分發系統(File Distribution System)。通過P2P網絡實現文件共享和文件分發,能夠應付爆發式訪問,系統的可伸縮性好,可靠性好。
此類典型系統有Napster[1],Gnutella[2],FreeNet[3],Chord-based System,BitTorrent[4]。
P2P協作應用的種類很多,包括即時消息系統、在線游戲、共享企業應用(在提供即時消息之外,還可共享內容和進行共同的活動如組內共同開發和編輯)、文件搜索、pub/sub系統等。
其中,
即時消息系統[5]有AOL AIM、Yahoo Messenger、MSN Messenger、Jabber[6,7]等;
在線游戲有星際爭霸、Net-Z和DOOM;
共享企業應用有Groove[8]、Magi[9];
文件搜索有YouSearch[10], OpenCola等;
pub/sub系統有Scribe、Herms等;
還有基于P2P網絡構造的
email系統。
而從P2P系統的典型特點來分析,常常被引證為P2P應用的科學計算系統
Seti@Home[11]應該屬于P2P的非典型應用。各種P2P系統由于應用背景的差異,彼此互不兼容,導致不同的P2P網絡無法通信,難以有效地利用網絡資源提供服務。Sun公司組織開發的JXTA[12]項目,希望通過提供一個簡單通用的P2P平臺來解決這個問題。從上述應用可以看出,P2P系統并不能替代客戶/服務器系統,它們兩者是相輔相成的關系。
從P2P系統的基本特點和應用情況分析,我們認為P2P平臺中的Peer的通信、平臺的安全和平臺的性能優化這三項技術是P2P系統的成功與否的關鍵所在。
2 P2P通信
P2P通信時需要解決的最基本的問題即是
如何連接其它的終端獲得信息、資源和服務。該問題可細分為以下一些問題:
1、P2P網絡的拓撲結構和Peer節點的功能角色劃分;
?? 2、資源和服務如何標識;
?? 3、進行資源查找時如何進行Peer定位;
?? 4、P2P網絡中Peer節點的動態變化的處理;
?? 5、如何穿越NAT(Network Address Translation)和防火墻進行Peer節點之間的直接通信。
P2P網絡的拓撲結構和Peer節點的角色劃分
在P2P網絡中,有兩種典型的拓撲結構,即純P2P網絡和混雜的P2P網絡[13]。
在純P2P網絡中,每個Peer都具有同等的責任和地位,不存在中間節點的協調。FreeNet、Gnutella都屬于純P2P網絡。而在混雜的P2P網絡中,存在著充當服務器角色的Peer節點或提供特殊功能的Super-Peer節點,這些節點保存其它Peer節點的基本狀態和存儲內容源信息,協助完成對其它節點的記錄、查詢等工作。Napster, Groove, Magi等系統均是典型的混雜型P2P系統。
每一個Peer根據其提供的角色功能可以劃分為三種類型,即簡單類型Peer節點,super-peer節點和服務器型的peer節點。簡單類型Peer節點僅僅是一個簡單的終端用戶,它可以請求獲得服務并為網絡中的其它Peer提供服務。Super-peer節點除了具有和簡單Peer節點類似的功能外,還提供某些特殊功能。如JXTA系統中就存在路由器Peer節點和會聚點Peer節點[12],前者作為一個橋梁,使得被防火墻或NAT隔離的Peer可以相互通信;后者為簡單節點提供查詢定位信息的功能。服務器型的Peer節點主要提供類似與客戶/服務器模型下的服務器功能,如提供一個全局統一的目錄查詢。在Napster這種混雜型的P2P系統中,有若干個簡單Peer節點相互提供文件下載功能的服務,還有一個目錄服務器節點提供文件條目的注冊管理。Groove和Magi系統中也均存在這樣的服務器型節點。而在純P2P網絡中,每一個Peer節點均充當了上述的三種角色。
資源的標識
為了在P2P網絡中準確地查找資源進行Peer定位,還需要確定Peer中存貯資源的標識(這里我們將在P2P網絡中需要進行查找的對象統稱為資源)。不同的應用場景均有適合自身特點的資源標識方式。
在以文件共享為主的應用中,資源主要以文件的名稱、關鍵字、源數據等進行標識。而即時消息通訊系統往往采用類似于電子郵件的命名方式,如在Jabber系統中,Jabber的用戶ID以[node@]domain/[resource]的形式進行地址標識[7],提供一個全局統一的地址空間。其中,Domain是主要的ID標識,是與多個用戶連接進行消息轉發的Jabber Server;Node為用戶姓名或昵稱,Resource屬于一個Node,標識屬于一個用戶的多個資源。一個用戶可以同時與同一服務器建立多次連接。
以用戶之間協作為主的P2P應用如Groove系統和Magi系統,由于在協作中對即時消息通訊和文件共享的要求兼而有之,用戶一般以用戶名進行標識,而文件則以源數據標識[14]。
JXTA作為一個解決不同P2P應用彼此不兼容的底層平臺,提出了一個統一的資源標識定義,即廣告[12]
(advertisement)。廣告是一個XML結構的文檔,由Peer或相互協作共同完成一種應用Peer 組進行發布,用來描述現有的資源、服務或實體Peer。Peer節點通過查詢廣告以獲得各種資源的消息,進行Peer定位。
Peer的定位方式在查找資源的過程中,可采用直接或間接方式定位Peer。直接定位Peer的方式比較簡單,即利用廣播或多播的形式發出查詢請求,符合查詢要求的Peer節點進行應答,然后建立直接的通信連接。由于這種方式只能在局域網中使用,所以應用范圍有限。當然這種方式可以和其它的定位方式結合使用以獲得良好的查詢效率。
間接方式包括三種模型:服務器模型、洪流模型、和路由模型。
服務器模型:該模型是基于混雜型的P2P拓撲結構。充當服務器的peer節點提供資源查詢。peer將請求發送至服務器獲得查詢結果,隨后,直接與目標節點通信獲取所需服務。但這種方式存在單點失敗問題,同時,也存在伸縮性問題。但因為peer節點僅在啟動、停止及查詢的時候才與服務器交互,所以此時的伸縮性還是強于客戶/服務器模式。典型系統有Napster,Magi,Groove和Jabber。Napster系統采用一個目錄服務器記錄資源索引,Groove系統和Magi系統均是采用動態DNS查找用戶的IP地址[14]。Jabber系統由于其資源標識類似于Email地址,所以,利用DNS的MX記錄進行IP地址的查詢[7]。
洪流模型:該模型基于純P2P拓撲結構。Peer節點采用洪流法將查詢請求不斷地轉發至鄰居節點,直到到達目標節點,獲得查詢結果。同時為了避免消息無限制的轉發,查詢請求中設定有TTL(Time to Live)或HTL(Hops to Live)進行轉發控制。Gnutella是采用此類模型的典型系統。
路由模型:該模型也是基于純P2P網絡結構。首先為網絡中的每一個peer賦予一個ID,同時,每個Peer存儲的資源和服務也有類似的ID。Peer節點的路由表中登記一定數量的鄰居節點。Peer的請求被轉發至與所請求的資源或服務的ID 最接近的Peer,直到發現這個資源或服務[15]。插入一個新資源/服務的過程與查詢過程類似,也是通過查找該資源/服務ID來確定存儲的正確位置。此類模型主要用在文件共享系統中,如FreeNet,Chord[16],CAN[17],Tapestry,Pastry等。
路由模型又可細分為非結構化路由模型和結構化路由模型。FreeNet系統屬于典型的非結構化路由模型。在查找到所需資源后,為了提高搜索性能,系統沿搜索路徑復制資源。這樣,由于資源的存儲位置不固定,其行為不易觀察,不確定因素較大。所以相對于結構化路由模型來說,其資源分布的規律性不強,難以從全局上把握整個系統的資源分布狀況。而結構化路由模型如Chord, CAN, Tapestry, Pastry均采用了DHT(Distributed Hash Table)作為主要的存儲算法。DHT的主要思想是將資源定位用的索引(索引結構通常是兩元組(文件名,實際的存儲位置))分散存儲到整個P2P網絡上,這樣,哈希表的存儲和查詢操作就會涉及到P2P網絡中的多個節點。
以DHT思想進行路由模型的設計時,首先需要確定通過Hash函數進行虛擬地址空間映射的規則。虛擬地址空間的設計有多種方式, Chord采用的虛擬地址空間為m-位的循環地址空間[16],CAN系統采用的是多維的地址空間[17]。Peer節點的IP地址和端口號經過哈希函數映射到地址空間,再將映射空間進行劃分,每個節點負責存儲屬于自己空間的值對(key,value)。其次需要確定路由表項的存儲內容,即鄰居節點的規模,以適應于不同的網絡需求。這里需要對路由表項的規模與網絡搜索跳轉數進行綜合考慮。在動態性較強的網絡中,節點頻繁加入和退出網絡會使得規模較大的路由表更新頻率過高,操作費時。但規模較小的路由表在進行資源定位時,又使得查找時間過長。再次是確定在接收到一個資源的查詢請求時,從路由表中選擇轉發的鄰居節點的規則。最后要確定新節點的插入和刪除操作后,虛擬的地址空間如何進行分裂和合并。
P2P網絡中節點的登錄和退出在服務器模型的P2P網絡中,由于Peer節點的狀態信息和管理的資源信息直接記錄在服務器中,Peer節點的登錄和退出僅需和服務器進行交互,由服務器進行協調處理。如在Napster系統中,Peer節點登錄系統后,向服務器發送當前的網絡狀態和所有的文件列表信息,由服務器更新目錄索引。在Jabber等即時消息通訊系統中,Peer節點往往是與用戶綁定的。服務器接收到用戶的登錄消息或退出消息后,通知訂閱
該用戶在線狀態的所有在線用戶。
非結構化路由模型FreeNet中,新節點首先需要獲知網絡中的若干可連接節點的信息,通過執行搜索操作向整個網絡宣布自己的存在。在結構化路由模型的P2P網絡中,節點的登錄和退出,將導致虛擬地址空間的分裂和合并。Peer節點登錄網絡的操作,類似于一個資源的查找過程。Peer節點定位到所屬的地址空間后,將地址空間以一定規則進行分裂。負責管理該地址空間資源的原節點將所屬資源按分裂的規則,部分轉移到新節點。同時兩個節點的路由表項和其它相關節點的路由表項均要進行修改。而Peer節點退出網絡的過程,則是登錄網絡的逆過程,資源需要轉移合并,相關節點的路由表項同樣需要更新。
防火墻和NAT的穿越在實際的網絡通信中,Peer節點往往是一個私有網絡中的節點,位于防火墻之后。這樣,Peer與Peer之間直接通信需要解決的一個關鍵問題是穿越防火墻和NAT。由于防火墻會對IP進行過濾,限制了墻內外的連接,而NAT技術雖然可以使得內部網絡地址映射到外部網絡地址,但要求內部網絡首先發起對外連接,否則外部網絡機器無法達到內部網絡[12]。穿越防火墻和NAT的策略有兩個基本點:
(1) 需要使用在一般情況下可以通過防火墻的協議,如基于請求/應答方式的HTTP協議。
(2) Peer之間進行通信時,必須由內部網絡的機器首先發起連接請求,如果通信雙方均處于防火墻之后,則需要有防火墻外的轉發節點進行消息轉發。
在Napster系統中當Peer節點請求下載的資源位于一個防火墻之后的節點上,請求節點向服務器端發送需要進行轉換下載的請求 (Alternate download request),由服務器通知被請求節點首先發起文件下載的連接請求。而Gnutella是在將查詢的詳細信息返回給請求者的同時發送資源文件,以此方式解決文件提供者位于防火墻之后的情況。
JXTA平臺中,其super-peer節點中的路由節點是提供防火墻和NAT穿越功能的特殊節點。若通信一方在防火墻之后,那么單向穿越的過程由試圖與防火墻后的peer A連接的peer節點B發起,節點B首先與路由Peer連接,同時peer A周期性地連接路由 Peer,由于路由 Peer對Peer A是可見的,且不在防火墻后,連接請求消息可作為http的應答內容返回至peer A。若通信的雙方都在防火墻之后,那么需要兩個路由 peer。Peer1 通過路由節點1 轉發消息,路由節點1將消息轉發至路由節點 2,Peer2周期性地向路由節點2發送http請求,獲得消息后斷開連接。JXTA平臺中路由節點的使用不僅可以穿越防火墻,還可以解決瓶頸問題,解決網絡傳輸的不兼容性[12]。
3.P2P平臺的安全機制與安全有緊密關系的是P2P平臺提供的匿名性。
為了進行自由的交互,避免引起不必要的法律糾紛,所以,P2P系統允許匿名方式的信息交換[15]。匿名性可分為以下三種類型:
?? 發布者匿名:發布者匿名地發布服務或資源
?? 請求者匿名:請求方匿名地請求服務或資源
?? 服務提供者匿名:P2P網絡中的資源擁有者匿名地提供資源或服務
提供匿名性的基本方法有六種:
?? 組播:采用IP組播方法進行資源發送可以達到請求者匿名的目的。但是這種方法需要底層網絡如以太網的支持。
?? 地址欺騙:使用面向無連接協議如UDP,可以更改地址,達到地址欺騙的目的。
?? 身份欺騙:網絡中的文件可能擁有多個備份,所以應答者往往并不是文件的提供者,如FreeNet就使用了這種方法提供匿名性。
?? 隱藏路徑:Peer之間并不是進行直接的消息通信,而是通過若干的中間節點,這樣可以達到發送者匿名的要求。
?? 別名:每一個Peer在網絡中均有一個別名,Peer之間通過別名進行消息傳遞,這種方法需要一
個Proxy Server保存所有的Peer實體與別名的對應關系。
?? 強制存放:一個文件存放的位置是由文件本身確定的,發布者無法選擇,從而實現發布者匿名,如基于Chord的系統。
上述方法可以組合應用,例如,FreeNet采用純P2P網絡中的非結構化文檔路由模型,同時在發布文件和查找文件的過程中,沿搜索路徑復制文件。通過隱藏路徑和身份欺騙的方法達到服務提供者匿名的目的,通過隱藏路徑的方法形成請求者匿名,同時由于文件的發布是一個根據文件名強制存放的過程,所以也完成了發布者匿名的功能。
P2P平臺所具有的上述特性可能會帶來下列安全隱患:?? 拒絕服務攻擊:P2P應用會消耗網絡帶寬,占用磁盤空間,使得系統性能降低甚至完全癱瘓。如果被大量惡意地使用,就會出現正常服務請求得不到服務的現象。處理這種攻擊的難點在于如何將惡意節點和真正負載過重的節點區分開。從根本上說,限制網絡服務請求的數量是解決拒絕服務攻擊的根本方法。合理選擇網絡底層的拓撲結構,均衡系統中的負載和資源,加入流量控制策略,這三種措施綜合使用可使惡意節點根本無法占用過多的資源,降低其對系統的影響。
?? 惡意軟件分發:P2P無中央服務器控制,允許匿名分發資源,對軟件的分發缺乏控制,如果P2P系統被惡意使用,會給系統用戶帶來安全隱患。通常的名譽評估系統可以用來跟蹤和處理Peer的狀態,并根據得到的信息選擇資源的提供者。但是這種方法比較消耗網絡資源。
?? 信息泄露和篡改:例如,有些P2P系統在路由表中保存了一批網絡地址,這些信息可能會被泄露和篡改;有些P2P系統例如Napster、Gnutella允許直接訪問用戶硬盤,惡意用戶可利用這個特性察看和篡改磁盤信息。這些都需要有相應的策略加以解決,例如,設計安全路由策略,可解決路由表信息泄露問題。
4.P2P平臺的性能改善技術P2P平臺的性能指標包括請求響應時間、公平性等。
請求響應時間與P2P平臺的拓撲結構有很大關系。對于有中央服務器的P2P系統如Napster系統和
Seti@Home系統,Peer之間由服務器進行協調,服務器變成了系統的瓶頸,影響系統性能。為了改善性能,可采用層次性的混雜式結構,由每一個協調者負責一個Peer組,形成一個層次的管理結構。在非集中式的P2P網絡中,主要通過消息轉發來獲取和查詢數據,消息轉發的次數影響帶寬的消耗,因此要盡量減少消息的轉發次數[15]。采用復制的方法可提供多個資源備份,提高容錯性,也減少了請求節點到服務節點的距離,減少了請求響應時間。但復制會帶來數據一致性的問題;另一種減少消息轉發次數的方法是建立智能路由和網絡組織,尋找目標文件到請求節點的最小路徑。該類方法包括:在基于DHT的結構化路由模型中設計合乎應用背景要求的路由表存儲結構,以減少網絡中的消息跳轉數;采用一些反饋機制,智能地選擇曾經命中過的Peer節點進行消息轉發;監測網絡中的運行狀態,繞過一些負載較重的Peer節點。這些方法都可以根據不同的使用背景獲得較好的性能提升。
除了通過復制改善系統的響應時間之外,緩存的替換策略對響應時間改善也有很大影響。SmallWorld模型刻畫了網絡通信中的一個有趣的特征:在規則網絡中隨機地添加少量通路,能很好減短通信距離,減少請求的響應時間,它被用來改進FreeNet中的緩存替換策略,也獲得了較好的性能改善[18]。
P2P體系結構使得P2P系統中會出現“無政府主義”行為,例如,過量下載或有意讓下載的文件中包含廣告等,這些行為導致P2P信息交換的不公平性。在P2P網絡中,為避免每一個Peer享受服務而不提供服務的現象,需要實行一定的管理機制。在P2P網絡中引入經濟學中買賣交易的原理,可以促進資源的共享和交互。Stanford大學的P2P研究小組提出了RTR(right-to-respond)協議[19],用以解決在洪流模型中,中間節點不愿消耗資源轉發請求的問題。RTR是指對查詢請求的響應權,Peer節點可以購買和出售系統中每個查詢請求的RTR。當某一Peer節點轉發請求時,其它Peer節點可以向其購買RTR。購買了RTR的Peer節點可以執行兩個操作,一是響應該請求,如果被請求的發出者選中,就可以為其提供服務并收取費用;二是再將RTR售出給其它節點。通過這種方法,Peer節點在經濟利益的驅使下會不斷轉發請求,擴大搜索范圍。同時可
以促進擁有類似資源或服務的Peer節點頻繁聯系,形成Peer Group,提高搜索效率。
另一個利用經濟學原理的實例是數據交易(data trading)方法的引入[20]。P2P系統經常采用數據備份的機制來增強資源可用性,提高系統性能。而用戶往往不愿無償提供存儲資源備份其它數據。這時利用數據交易的方法提供相互備份,即獲得對方存儲空間或數據資源是以向對方提供存儲空間為前提的。系統中Peer節點之間建立了良好的相互備份關系,將會減少搜索和訪問的開銷。以上這些實例均表明,采用經濟學中以交易為基礎的資源管理機制,可以提高P2P系統的資源使用率。
5.小結
P2P計算,作為分布式計算的一個分支,目前不論是從技術研究還是產品開發來看,都已成為了一個重要的領域。P2P的算法、平臺和應用都將有進一步的發展空間。P2P的思想也被廣泛地應用在很多其他的研究領域。本文著重介紹了P2P的發展背景、P2P系統的特點,在P2P平臺層識別出若干P2P平臺的關鍵技術,包括Peer的通信技術、P2P平臺的安全機制和P2P平臺的性能改善技術,這些技術的總結和分析能對設計和實現P2P平臺和應用起到一定的借鑒和指導作用。
參考文獻:
[1] Napster Inc.http://www.naspter.com
[2] Gnutella,http://www.gnutelliums.com
[3] Freenet,http://freenetproject.org/lang/en
[4] BitTorrent,
http://bitconjurer.org/BitTorrent/[5] Sixto Ortiz Jr., "Instant Messaging: No Longer Just Chat", IEEE Computer,March 2001
[6] Jeremie Miller, "Jabber, Peer-to-Peer:Harnessing the Power Of Disruptive Technologies,” O'Reilly, March 2001
[7] Peter Saint-Andre, “Jabber Technology Overview”
[8] Preeti Mehra,Groove,16th November,2001,ECE-579
[9] Gregory Alan Bolcer,Michael Gorlick,”Peer-to-Peer Architectures and the Magi Open-Source Infrastructure”, Endeavors Technology ,2000
[10] Mayank Bawa,Roberto J.Bayardo Jr.,Sridhar Rajagopalan,Eugene J.Shekita, “Make it Fresh,Make it Quick-Searching a Network of Personal Webservers”
[11]
Seti@Home,
http://setiathome.ssl.berkeley.edu/[12] Jxta Book,http://www.brendonwilson.com/projects/jxta
[13] Siu Man Lui, Sai Ho Kwok, “Interoperablility of Peer-To-Peer File Sharing Protocols”,ACM SIGecom Exchanges,Vol.2,No.2,August 2002
[14] Dana Moore,John Hebeler, 蘇忠,戰曉雷等譯, 《對等網》,清華大學出版社,2003.2
[15] Dejan S.Milojicic,Vana Kalogeraki Rajan Lukose,Kiran Nagaraja,Jim Pruyne,Bruno Richard,Sami Rollins,Zhichen Xu,HP Laboratories Palo Alto,” Peer-to-Peer Computing”,University of California
[16] Ion Stoica,Robert Morris,Divid Liben-Nowell,David R.Karger,M.Grans Kaashoek,Frank Dabek,Hari Balakrishnan. ”Chord: A scalable Peer-to-peer Lookup Protocol for Internet Applications”
[17] S.Ratnasamy,P,Francis, M. Handley, R.Karp,and S.Shenker,”A Scalable Content-Addressable Network”,ACM SIGCOMM ’01,San Diego,CA,USA,2001
[18] Hui Zhang, Ashish Goel and Ramesh Govindan. Using the Small-World Model to Improve Freenet Performance. IEEE Infocom, 2002.
[19] B.Yang,S.Kamvar,and H.Garcia-Molina Addressing the non-cooperation problem in competitive P2P systems.Stanford University Database Group Technical Report,2003
[20] Mayank Bawa,Brian F.Cooper,Arturo Crespo. Peer-to-Peer Research at Stanford,Stanford