1. 程式人生 > >對等網路中主流分散式雜湊演算法比較分析(轉載)

對等網路中主流分散式雜湊演算法比較分析(轉載)

本文首先從P2P的定義出發,介紹了結構化P2P與非結構化P2P的區別以及結構化P2P的核心技術DHT。而後,本文深入介紹了幾種主流的DHT演算法與協議並對每種協議進行了討論。文章的最後展望了DHT在未來的發展趨勢。

對 等網路(Peer-to-Peer,簡稱P2P)是目前非常熱門的應用,自1999年以來,P2P的研究一直是國外知名學府(如美國麻省理工學院,加州大 學伯克利分校和萊斯大學等)以及知名企業的研發機構(如微軟,諾基亞的研究院)關注的重點。它甚至被美國《財富》雜誌稱為改變因特網發展的四大新技術之 一,被認為是代表無線寬頻網際網路未來的關鍵技術。

作為一項新興的技術,目前學術界對P2P在 技術層面上的定義尚未統一。Keith W. Ross (Polytechnic University)和Dan Rubenstein(Columbia University)在[9]中提到了對P2P系統的3個基本定義:

相比中央伺服器而言有明顯的自治性(Autonomy)。

利用網路邊緣的資源,如儲存/計算能力和資訊資源。

網路邊緣的資源處在動態的變化中(新的資源加入,已有的資源消失)。

自治性的要求使得P2P系統不再需要特定的中央管理機制,所有節點之間擁有對等的關係。這一方面為系統帶來了自組織、容錯性好、可擴充套件性強等優點;另一方面也提出了新的問題:如何在沒有集中管理機制的情況下實現系統的自組織和自管理?

定義2,3中分佈性和動態性的特點使得上述問題的實現具有更大的難度。在分散式系統中,過多過快的資訊互動可能消耗大量的網路資源;而為了實時反映系統的變化,又要求節點及時獲得更新資訊,這就需要在節點之間進行通訊。

為了解決這一對矛盾,已經有許多P2P的框架和協議被提出來並得到了很好的應用。

結構化與非結構化P2P

依照節點資訊儲存與搜尋方式的不同,諸多P2P協議可以分為2大類:結構化(Structured)的與非結構化(Unstructured)的系統。

非結構化P2P系統

在 非結構化的系統中,每個節點儲存自身的資訊或資訊的索引(如指標和IP地址)。當用戶需要在P2P系統中獲取資訊時,他們預先並不知道這些資訊(如某個文 件)會在那個節點上儲存。因此,在非結構化P2P系統中,資訊搜尋的演算法難免帶有一定的盲目性,例如最簡單的泛洪式查詢(類似於廣播)和擴充套件環查詢(從最 近的n個節點開始,層層轉發直到找到目標或超出了跳數的上限為止)。

一些典型的應用採用了一 些優化的辦法。如在Gnutella中,採用了等級制的組成結構:節點被分成超級節點(Super Node)和普通節點。普通節點必須依附於超級節點,每個超級節點作為一個獨立的域管理者,負責處理域內的查詢操作。在查詢的過程中,查詢首先在域內進 行,失敗後才會擴充套件到超級節點之間。

非結構化系統的優點在於實現結構簡單:無須中央伺服器,節點之間完全平等,網路的層次是單一的,而且節點之間無需維護拓撲資訊。

結構化P2P系統

在結構化P2P系統中,每個節點只儲存特定的資訊或特定資訊的索引。當用戶需要在P2P系統中獲取資訊時,他們必須知道這些資訊(或索引)可能存在於那些節點中。由於使用者預先知道應該搜尋哪些節點,避免了非結構化P2P系統中使用的泛洪式查詢,因此提高了資訊搜尋的效率。

但是,結構化P2P也引入了新的問題:

首先,既然資訊是分佈儲存的,那麼如何將資訊分佈儲存在重疊網中的節點上?

其次,由於節點動態的加入和離開重疊網,如何將拓撲的變更資訊通知其它節點?

DHT的引入基本解決了上述問題,因此自從DHT協議出現以後,結構化P2P的應用得到了快速的發展。目前已經有很多較為成熟的DHT協議被提出並且得到了應用。其中比較有代表性的有:緩衝陣列路由協議(CARP);一致性雜湊;Chord;內容定址網路;Pastry。

DHT簡介

DHT使用分散式雜湊演算法來解決結構化的分散式儲存問題。分散式雜湊演算法的核心思想是通過將儲存物件的特徵(關鍵字)經過雜湊運算,得到鍵值(Hash Key),物件的分佈儲存依據鍵值來進行。具體來講,大致有以下步驟:

對儲存物件的關鍵字進行雜湊運算,得到鍵值。這樣就將所有的物件對映到了一個具體的數值範圍中。

重疊網中的每個節點負責數值範圍中的特定段落。例如,節點A負責儲存鍵值從8000到8999的物件;而節點B負責7000~7999的物件。這樣就將物件集合分佈地儲存在所有的節點中。

節點可以直接儲存物件本身,如檔案中的一個片段;也可以儲存物件的索引,如該物件所在節點的IP地址。

結 構化的分散式儲存問題解決後,剩下的問題就是使用者如何才能找到儲存著目標資訊的節點。在有著大量節點(如100萬個)的P2P系統中,任何節點都不可能擁 有全部的節點?鍵值?內容的對應關係;因此使用者獲得了鍵值之後,如何找到該鍵值對應的節點就被稱為DHT的路由問題。DHT協議必須定義優化的查詢(路 由)演算法來完成這一搜尋的工作。不同的DHT協議之間區別很大程度上就在於定義了不同的路由演算法。

DHT的應用非常簡潔—-API簡單到只有一項輸入和一項輸出:

應用層將資料物件(檔案、資料塊或索引)通過雜湊演算法獲得鍵值,將該鍵值提交給DHT後,返回結果就是鍵值所在節點的IP地址。圖1(來自[9])顯示了這種應用結構:


圖 1 DHT的應用結構

在這樣的支援下,可以開發多種P2P的應用程式,如網路儲存與檔案共享、即時訊息、音訊/視訊等。圖2(來自[9])顯示了這種應用結構:


圖 2 DHT應用的層次

主流DHT協議

緩衝陣列路由協議(CARP,Cache Array Routing Protocol)

協議簡介

CARP 是由微軟公司的Vinod Valloppillil和賓西法尼亞大學的Keith W. Ross在1997年提出的。該協議可以將URL空間對映到一個僅有鬆散關聯關係的Web cache 伺服器(在協議中稱為“代理”,Proxy)陣列中。支援該協議的HTTP客戶端可以根據要訪問的URL智慧選擇目標代理。該協議解決了在代理陣列內分佈 儲存內容的問題,避免了內容的重複儲存,提高了客戶端訪問時Web Cache命中的概率。

雜湊演算法

哈 希使用的關鍵字有2個,一個是代理的識別符號(每個代理均有唯一的標識),另一個是URL本身。儲存內容時,每個代理負責緩衝雜湊鍵值最大的URL。這樣, 當緩衝代理陣列發生少量變化時(新的代理加入或舊的代理退出),原有的URL還有可能仍然被對映到原來的代理上,仍可以按照原有的方式訪問。

路由演算法

客戶端(HTTP瀏覽器)首先載入一個代理配置檔案,該檔案中儲存了代理的識別符號和IP地址等用於雜湊的關鍵引數。瀏覽器在訪問網頁時,可以根據URL和代理標識獲得代理的位置資訊(IP地址),從而可以直接訪問緩衝代理中的頁面。

討論

CARP的雜湊過程比較簡單,路由查詢更是簡單到至多隻有一跳(O(1))。但是CARP在P2P的應用環境中有一些致命的缺陷:

每個節點必須知道其它所有節點的資訊。在大規模的重疊網環境中,由於可能存在大量的(數百萬)節點,加之節點都是動態加入和退出網路,因此這一條件幾乎不可能滿足。

在緩衝陣列發生較大變化時(這在P2P網路中非常常見),原有的URL和代理之間的對應關係可能發生改變,從而使得原有的配置檔案失效。

一致性雜湊(Consistent Hash)

協議簡介

一致性雜湊演算法在1997年由麻省理工學院提出(參見0),設計目標是為了解決因特網中的熱點(Hot pot)問題,初衷和CARP十分類似。一致性雜湊修正了CARP使用的簡單雜湊演算法帶來的問題,使得DHT可以在P2P環境中真正得到應用。

雜湊演算法

一致性雜湊提出了在動態變化的Cache環境中,雜湊演算法應該滿足的4個適應條件:

平衡性(Balance)

平衡性是指雜湊的結果能夠儘可能分佈到所有的緩衝中去,這樣可以使得所有的緩衝空間都得到利用。很多雜湊演算法都能夠滿足這一條件。

單調性(Monotonicity)

單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝加入到系統中。雜湊的結果應能夠保證原有已分配的內容可以被對映到新的緩衝中去,而不會被對映到舊的緩衝集合中的其他緩衝區。

簡單的雜湊演算法往往不能滿足單調性的要求,如最簡單的線性雜湊:

x → ax + b mod (P)

在上式中,P表示全部緩衝的大小。不難看出,當緩衝大小發生變化時(從P1到P2),原來所有的雜湊結果均會發生變化,從而不滿足單調性的要求。

雜湊結果的變化意味著當緩衝空間發生變化時,所有的對映關係需要在系統內全部更新。而在P2P系統內,緩衝的變化等價於Peer加入或退出系統,這一情況在P2P系統中會頻繁發生,因此會帶來極大計算和傳輸負荷。單調性就是要求雜湊演算法能夠避免這一情況的發生。

分散性(Spread)

在 分散式環境中,終端有可能看不到所有的緩衝,而是隻能看到其中的一部分。當終端希望通過雜湊過程將內容對映到緩衝上時,由於不同終端所見的緩衝範圍有可能 不同,從而導致雜湊的結果不一致,最終的結果是相同的內容被不同的終端對映到不同的緩衝區中。這種情況顯然是應該避免的,因為它導致相同內容被儲存到不同 緩衝中去,降低了系統儲存的效率。分散性的定義就是上述情況發生的嚴重程度。好的雜湊演算法應能夠儘量避免不一致的情況發生,也就是儘量降低分散性。

負載(Load)

負載問題實際上是從另一個角度看待分散性問題。既然不同的終端可能將相同的內容對映到不同的緩衝區中,那麼對於一個特定的緩衝區而言,也可能被不同的使用者對映為不同的內容。與分散性一樣,這種情況也是應當避免的,因此好的雜湊演算法應能夠儘量降低緩衝的負荷。

從表面上看,一致性雜湊針對的是分散式緩衝的問題,但是如果將緩衝看作P2P系統中的Peer,將對映的內容看作各種共享的資源(資料,檔案,媒體流等),就會發現兩者實際上是在描述同一問題。

路由演算法

在 一致性雜湊演算法中,每個節點(對應P2P系統中的Peer)都有隨機分配的ID。在將內容對映到節點時,使用內容的關鍵字和節點的ID進行一致性雜湊運算 並獲得鍵值。一致性雜湊要求鍵值和節點ID處於同一值域。最簡單的鍵值和ID可以是一維的,比如從0000到9999的整數集合。

根據鍵值儲存內容時,內容將被儲存到具有與其鍵值最接近的ID的節點上。例如鍵值為1001的內容,系統中有ID為1000,1010,1100的節點,該內容將被對映到1000節點。

為 了構建查詢所需的路由,一致性雜湊要求每個節點儲存其上行節點(ID值大於自身的節點中最小的)和下行節點(ID值小於自身的節點中最大的)的位置資訊 (IP地址)。當節點需要查詢內容時,就可以根據內容的鍵值決定向上行或下行節點發起查詢請求。收到查詢請求的節點如果發現自己擁有被請求的目標,可以直 接向發起查詢請求的節點返回確認;如果發現不屬於自身的範圍,可以轉發請求到自己的上行/下行節點。

為 了維護上述路由資訊,在節點加入/退出系統時,相鄰的節點必須及時更新路由資訊。這就要求節點不僅儲存直接相連的下行節點位置資訊,還要知道一定深度(n 跳)的間接下行節點資訊,並且動態地維護節點列表。當節點退出系統時,它的上行節點將嘗試直接連線到最近的下行節點,連線成功後,從新的下行節點獲得下行 節點列表並更新自身的節點列表。同樣的,當新的節點加入到系統中時,首先根據自身的ID找到下行節點並獲得下行節點列表,然後要求上行節點修改其下行節點 列表,這樣就恢復了路由關係。

討論

一致性雜湊基本解決了在P2P環境中最為關鍵的問題——如何在動態的網路拓撲中分佈儲存和路由。每個節點僅需維護少量相鄰節點的資訊,並且在節點加入/退出系統時,僅有相關的少量節點參與到拓撲的維護中。所有這一切使得一致性雜湊成為第一個實用的DHT演算法。

但 是一致性雜湊的路由演算法尚有不足之處。在查詢過程中,查詢訊息要經過O(N)步(O(N)表示與N成正比關係,N代表系統內的節點總數) 才能到達被查詢的節點。不難想象,當系統規模非常大時,節點數量可能超過百萬,這樣的查詢效率顯然難以滿足使用的需要。換個角度來看,即使使用者能夠忍受漫 長的時延,查詢過程中產生的大量訊息也會給網路帶來不必要的負荷。

下文中討論的幾種DHT協議都對路由做出了優化,提出了各自的演算法。

Chord協議

Chord 在2001年由麻省理工學院提出(參見0),其核心思想就是要解決在P2P應用中遇到的基本問題:如何在P2P網路中找到存有特定資料的節點。與前兩種協 議不同,Chord專門為P2P應用設計,因此考慮了在P2P應用中可能遇到的特殊問題,這些內容將在路由的部分進行討論。

雜湊演算法

Chord使用一致性雜湊作為雜湊演算法。在一致性雜湊協議中並沒有定義具體的演算法,在Chord協議中將其規定為SHA-1。

路由演算法

Chord在一致性雜湊的基礎上提供了優化的路由演算法:

在 Chord中,每個節點同樣需要儲存m個其他節點的資訊,這些資訊的集合被稱為查詢表(Finger Table)。一致性雜湊中的節點同樣具有這樣的表格,但在Chord中,表格中的節點不再是直接相鄰的節點,它們的間距(ID間隔)將成2i 的關係排列(i 表示表中的陣列下標)。這樣形成的節點之間路由關係實際上就是折半查詢演算法需要的排列關係。

在 查詢的過程中,查詢節點將請求傳送到與鍵值最接近的節點上。收到查詢請求的節點如果發現自身儲存了被查詢的資訊,可以直接回應查詢節點 (這與一致性雜湊完全相同);如果被查詢的資訊不在本地,就根據查詢表將請求轉發到與鍵值最接近的節點上。這樣的過程一直持續到找到相應的節點為止。不難 看出,查詢過程實際上就是折半查詢的過程。

經過Chord的優化後,查詢需要的跳數由O ( N)減少到O(log(N))。這樣即使在大規模的P2P網路中(例如N=100,000,000),查詢的跳數也僅為O(8),每個節點僅需儲存27個(log2100000000)其他節點的資訊。

Chord還考慮到多個節點同時加入系統的情況並對節點加入/退出演算法作了優化。

討論

Chord演算法本身具有如下優點:

負載平衡

這一優點來自於一致性雜湊,也就是一致性雜湊中提到的平衡性。所有的節點以同等的概率分擔系統負荷,從而可以避免某些節點負載過大的情況。

分佈性

Chord是純分散式系統,節點之間完全平等並完成同樣的工作。這使得Chord具有很高的魯棒性,可以抵禦DoS攻擊。

可擴充套件性

Chord協議的開銷隨著系統規模(結點總數N)的增加而按照O(logN)的比例增加。因此Chord可以用於大規模的系統。

可用性

Chord協議要求節點根據網路的變化動態的更新查詢表,因此能夠及時恢復路由關係,使得查詢可以可靠地進行。

命名的靈活性

Chord並未限制查詢內容的結構,因此應用層可以靈活的將內容對映到鍵值空間而不受協議的限制。

Chord在CFS系統中得到了應用,具體的介紹可參見[8]

內容定址網路(Content-Addressable Network,CAN)

CAN在2001年由加州大學伯克利分校提出(參見[3])。與Chord一樣,CAN也是DHT的一個變種。

雜湊演算法

CAN的雜湊演算法與一致性雜湊有所不同。Chord中,雜湊得到的鍵值總是一維的,而在CAN中,雜湊的結果由d維的笛卡爾空間來表示。d是一個由系統規模決定的常量。

路由演算法

CAN的路由查詢將在d維笛卡爾空間中進行。

在 CAN中,每個節點自身的ID經由雜湊後得到的d維向量。經過這樣的對映後,整個P2P系統將被對映到一個d維笛卡爾空間中,每個節點的位置由其自身ID 決定。CAN對鄰居節點的定義並不要求成2i的關係排列,而是改為用在笛卡爾空間上相鄰來表示:在d維笛卡爾空間中,2個節點的d維座標中有d-1維是相 等的,剩餘的一維是相鄰的節點稱之為相鄰節點。

CAN中的節點僅儲存相鄰節點表。由於在d維的空間中最多有2d個相鄰的節點,因此節點的相鄰節點表最多有2d個表項。

在 查詢的過程中,查詢節點首先計算被查詢內容的鍵值(d維向量),然後在節點列表中查詢在笛卡爾空間中與該鍵值最為接近的相鄰節點,找到後向該節點發送查詢 請求(這一策略被稱為貪婪策略)。查詢請求中將攜帶被查詢內容的鍵值。收到查詢請求的節點如果發現自身儲存了被查詢的資訊,可以直接回應查詢節點(這與一 致性雜湊完全相同);如果被查詢的資訊不在本地,就根據相鄰節點表將請求轉發到與鍵值最接近的節點上。這樣的過程一直持續到找到相應的節點為止。在查詢過 程中,被查詢節點到目標節點的笛卡爾空間距離單調地減少。

如果查詢節點或轉發節點發現鄰居節點表中無法找到可用的下一跳節點,則採用非結構化P2P常用的擴充套件環搜尋(Expanding Ring Search,使用無狀態,受控的泛洪演算法在重疊網中搜索)以找到合適的(符合貪婪策略)下一節點。

經過CAN的優化後,查詢需要的跳數由O ( N)減少到均值為(d/4)(n1/d)的隨機制,考慮到d為常數,這一值可以表示為O(n1/d)或O(dn1/d)。

討論

CAN 和Chord的主要區別在於路由演算法不同。相比之下,在節點數量非常大時,CAN的平均查詢跳數要比Chord增加得更快。而且 CAN查詢過程中需要的運算量也要高於Chord。但CAN使用的d為預先設定的常量,因此並不假設系統節點數量。在節點總數動態變化範圍很大的系統中, CAN的相鄰節點表結構保持穩定,這在P2P的應用中也是很重要的優點。

Pastry

Pastry在2001年由位於英國劍橋的微軟研究院和萊斯(Rice)大學提出(參見[4])。Pastry也是DHT的一個變種。

雜湊演算法

Pastry使用一致性雜湊作為雜湊演算法。雜湊所得的鍵值為一維(實際上使用的是128bit的整數空間)。Pastry也沒有規定具體應該採用何種雜湊演算法。

路由演算法

在Pastry協議中,每個節點都擁有一個128bit的標識(Node Id)。為了保證Node ID的唯一性,一般由節點的網路標識(如IP地址)經過雜湊得到。

Pastry中的每個節點擁有一個路由表R(Routing table),一個鄰居節點集M(Neighborhood Set)和一個葉子節點集合L(Leaf set),它們一起構成了節點的狀態表。

路 由表R共有logBN(B = 2b為系統引數,典型值為16,N表示系統的節點總數)行,每行包括B-1個表項,每個表項記錄了一個鄰居節點的資訊(節點標識、IP地址、當前狀態 等)。這樣就形成了擁有(B-1)logBN個條目的二維表格。路由表第n行的表項所記錄的鄰居節點的Node ID前n個數位和當前節點的前n個數位相同,而第n+1個數位則分別取從0到B-1的值(除了與當前節點第n+1數位的值)。這樣形成的路由表很類似IP 路由中最長掩碼匹配的演算法。引數b(或B)大小非常關鍵:B過大則節點需要維護很大的路由表,可能超出節點的負載能力,但路由表大些可以儲存更多的鄰居節 點,在轉發時更為精確。平均每次路由查詢需要的跳數在Pastry中計算的結果是logBN,因此B的選擇反映了路由表大小和路由效率之間的折衷。

葉子節點集合L中存放的是在鍵值空間中與當前節點距離最近的|L|個節點的資訊,其中一半節點標識大於當前節點,另一半節點標識小於當前節點。|L|的典型值為2b或者2*2b。

鄰 居節點集合M中存放的是在真實網路中與當前節點“距離”最近的|M|個節點的資訊。“距離”的定義在Pastry中非常類似IP路由協議中對距離的定義, 也就是考慮到轉發跳數、傳輸路徑頻寬、QoS等綜合因素後所得的轉發開銷(可以參見OSPF等路由協議)。Pastry並未提供距離資訊的獲取方法,而是 假設應用層可以通過某種手段(人工配製或自動協商)得到資訊並配置鄰居節點集合。|M|的典型值為2b或者2*2b。


圖 3給出了一個Pastry節點狀態表的例子,該圖來源於[4]。

在節點狀態表中,節點本身的ID為10233102。葉子集合中有8項,每一項都代表一個當前節點已知的其他節點的資訊。路由表共有4*8項,可以看出由上至下節點ID重合的位數(字首)不斷增加。鄰居集合中的節點ID由於來源於應用層,一般沒有規律性可循。

Pastry的路由過程如下:

首 先,路由查詢訊息中將攜帶被查詢物件ID(Object Id),又稱訊息鍵值。當收到路由訊息時,節點首先檢查訊息鍵值是否落在葉子節點集合的範圍內。如果是,則直接把訊息轉發給葉子節點集合中節點標識和訊息 鍵值最接近的節點;否則就從路由表中根據最長字首優先的原則選擇一個節點作為路由目標,轉發路由訊息。如果不存在這樣的節點,當前節點將會從其維護的所有 鄰居節點集合(包括路由表葉子集合及鄰居集合中的節點)中選擇一個距離訊息鍵值最近的節點作為轉發目標。

從上述過程中可以看出,每一步路由和上一步相比都更靠近目標節點,因此這個過程是收斂的。如果路由表不為空,每步路由至少能夠增加一個字首匹配數位,因此在路由表始終有效時,路由的步數至多為logBN。

討論

Pastry的路由利用了成熟的最大掩碼匹配演算法,因此實現時可以利用很多現成的軟體演算法和硬體框架,可以獲得很好的效率。

與Chord和CAN相比,Pastry引入了葉子節點和鄰居節點集合的概念。在應用層能夠及時準確地獲得這兩個集合的節點資訊時,可以大大加快路由查詢的速度,同時降低因路由引起的網路傳輸開銷;不過在動態變化的P2P網路中如何理想地做到這一點的確有很大的難度。

Pastry的典型應用包括PAST(參見[5][6])和SCRIBE(參見[7])。

趨勢分析

目前DHT演算法的發展方向非常多,不斷有新的改進演算法被提出來。就筆者目前瞭解到的資訊而言,至少有以下一些方向:

接近性(Proximity)

文中提到的DHT演算法中,除了Pasrty以外,均未考慮重疊網路拓撲結構與真實的IP網路之間的重合關係。節點之間進行對等通訊時,不會考慮優先選取距離自己最近的節點。這樣就使得最終形成的重疊網結構混亂,效率低下。因此如何讓節點獲得並利用接近性資訊就非常重要。

結構化

目 前基於DHT的應用尚未大規模展開,很多工程上的細節問題尚待解決。例如:目前有很多種類的P2P應用,如檔案儲存和共享、電子郵件、流媒體等。這些應用 在處理P2P路由演算法、拓撲維護和資訊檢索上使用的方法均有很大差別,導致即使是同類的應用也無法實現互通。如何為各種P2P的應用抽象出一個通用的層 次,也是目前研究的熱點問題之一。

資訊查詢

基於分散式雜湊表的查詢是一種單關鍵字的精確匹配,儘管相對於非結構化系統它使得系統資源可被確定性地查詢到,但它也極大地限制了查詢的應用範圍。目前有許多改進的結構化查詢演算法已經被提出來。

參考文獻

David Karger, Eric Lehman, Tom Leighton, Matthew Levine, Daniel Lewin, Rina Panigrahy “Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web”. In Proceedings of the 29th Annual ACM Sym-posium on Theory of Computing (El Paso, TX, May 1997), pp. 654-663.

Ion Stoica, Robert Morris, David Karger, M. Frans Kaashoek, Hari Balakrishnan_ “Chord: A Scalable Peertopeer Lookup Service for Internet Applications” SIGCOMM’01, August 2731, 2001, San Diego, California, USA.

Sylvia Ratnasamy, Paul Francis, Mark Handley, Richard Karp, Scott Shenker “A Scalable Content-Addressable Network” SIGCOMM’01, August 27-31, 2001, San Diego, California, USA..

Antony Rowstron1 and Peter Druschel “Pastry: Scalable, decentralized object location and routing for large-scale peer-to-peer systems” Appears in Proc. of the 18th IFIP/ACM International Conference on Distributed Systems Platforms (Middleware 2001). Heidelberg, Germany, November 2001.

P. Druschel and A. Rowstron. PAST: A large-scale, persistent peer-to-peer storage utility. In Proc. HotOS VIII, Schloss Elmau, Germany, May 2001.

A. Rowstron and P. Druschel. Storage management and caching in PAST, a large-scale, persistent peer-to-peer storage utility. In Proc. ACM SOSP’01, Banff, Canada, Oct. 2001.

A. Rowstron, A.-M. Kermarrec, P. Druschel, and M. Castro. Scribe: The design of a large-scale event notification infrastructure. Submitted for publication. June 2001. http://www.research.microsoft.com/ antr/SCRIBE/.

F. Dabek, M. F. Kaashoek, D. Karger, R. Morris, and I. Stoica. Wide-area cooperative storage with CFS. In Proc. ACM SOSP’01, Banff, Canada, Oct. 2001.

Keith W. Ross, Dan Rubenstein, “P2P Systems”

寧 寧,“對等網路組通訊機制的位置感知技術研究Research on Location-Aware Tech-nology in Peer-to-Peer Group Com-munication Mechanism”,申請清華大學工學碩士學位論文,May.2005.

李祖鵬,黃建華,唐輝,“基於P2P計算模式的自組織網路路由模型”,軟體學報,1000-9825/2005/16(05)0916

胡進鋒,鄭緯民(清華大學計算機系高效能運算研究所,北京,100084),“p2p系統結點資訊收集演算法 Node Collection Protocol in P2P Systems”

鄒 福泰,馬範援(上海交通大學電腦科學與工程系),“基於分散式雜湊表的對等系統關鍵技術研究RESEARCH ON THE KEY TECHNIQUE OF PEER-TO-PEER SYSTEMS BASED ON DISTRIBUTED HASH TABLE”,申請上海交通大學博士學位論文,二零零四年十一月