對(duì)等網(wǎng)絡(luò)(P2P)技術(shù)畢業(yè)論文設(shè)計(jì)_第1頁(yè)
對(duì)等網(wǎng)絡(luò)(P2P)技術(shù)畢業(yè)論文設(shè)計(jì)_第2頁(yè)
對(duì)等網(wǎng)絡(luò)(P2P)技術(shù)畢業(yè)論文設(shè)計(jì)_第3頁(yè)
對(duì)等網(wǎng)絡(luò)(P2P)技術(shù)畢業(yè)論文設(shè)計(jì)_第4頁(yè)
對(duì)等網(wǎng)絡(luò)(P2P)技術(shù)畢業(yè)論文設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1. 緒論1.1 研究背景對(duì)等網(wǎng)絡(luò)(P2P)技術(shù)是目前國(guó)際計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域研究的一個(gè)熱點(diǎn),被財(cái)富雜志譽(yù)為將改變Internet未來(lái)的四大新技術(shù)之一。所謂P2P,它是一種網(wǎng)絡(luò)模型,又稱對(duì)等網(wǎng)或點(diǎn)對(duì)點(diǎn)技術(shù)。簡(jiǎn)而言之,P2P技術(shù)就是各個(gè)點(diǎn)之間直接進(jìn)行資源和服務(wù)的共享,而不像傳統(tǒng)的客戶端/服務(wù)器結(jié)構(gòu)那樣需要服務(wù)器的介入,使用戶與用戶之間的連接更加方便、直接。但是隨著P2P技術(shù)應(yīng)用日益增多,關(guān)于P2P技術(shù)的研究相對(duì)來(lái)說(shuō)十分缺乏,因此加強(qiáng)對(duì)該技術(shù)的研究已成為當(dāng)務(wù)之急。本文就是在這個(gè)背景下進(jìn)行研究的。 為了加快P2P應(yīng)用程序的開(kāi)發(fā),開(kāi)發(fā)者們迫切的需要一個(gè)與語(yǔ)言無(wú)關(guān)、有統(tǒng)一規(guī)范、具有良好魯棒性的開(kāi)發(fā)平臺(tái),S

2、un 公司的 Bill Joy認(rèn)識(shí)到了這一點(diǎn),從而引發(fā)了Project JXTA的誕生。 JXTA是 Sun 公司為了構(gòu)建跨平臺(tái)、跨操作系統(tǒng)和跨編程語(yǔ)言的P2P應(yīng)用而設(shè)計(jì)的網(wǎng)絡(luò)開(kāi)發(fā)平臺(tái),它定義了一組P2P底層通信協(xié)議,使簡(jiǎn)單、方便地構(gòu)造P2P應(yīng)用成為可能。同時(shí)JXTA是一個(gè)開(kāi)放源代碼工程,并且具備良好的可擴(kuò)展性,有望成為P2P網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)的通用平臺(tái)。 JXTA的核心是六個(gè)協(xié)議,目前JXTA首先推出了基于Java的參考實(shí)現(xiàn),提供了支持六個(gè)協(xié)議的Java API,這極大方便了P2P應(yīng)用程序的開(kāi)發(fā),本文就是基于目前理論架構(gòu)相對(duì)比較完整JXTA技術(shù),研究并實(shí)現(xiàn)了Peer之間的通信。1.2 研究的意義

3、信息(Information)、帶寬(Bandwidth)、計(jì)算能力(Computing resource)是Internet的三大基礎(chǔ)資源。但是當(dāng)前,這些資源并沒(méi)有被充分利用,部分原因是大多數(shù)Internet服務(wù)采用C/S模式。 在信息方面,信息量在不斷地膨脹,但是沒(méi)有一個(gè)搜索引擎能及時(shí)地找到或者分類(lèi)這些信息,而且很多信息是短暫的,現(xiàn)有搜索技術(shù)搜索到的信息有限。帶寬方面,由于采用C/S模式,信息都集中在服務(wù)端,導(dǎo)致?lián)頂D的更擁擠,空閑的更加空閑,帶寬利用不足。處理器速度越來(lái)越快,儲(chǔ)存設(shè)備容量越來(lái)越大,使得網(wǎng)絡(luò)終端的處理能力相當(dāng)強(qiáng)大,但是計(jì)算還是集中在數(shù)據(jù)中心,這樣使中心的負(fù)載幾乎達(dá)到極限,而其

4、余終端的計(jì)算能力卻大量閑置。 P2P的分布式結(jié)構(gòu)則是為了有效負(fù)載均衡,充分利用帶寬并挖掘計(jì)算機(jī)空閑得計(jì)算能力。P2P技術(shù)將實(shí)現(xiàn)Internet的大部分潛力,將Internet轉(zhuǎn)變成一個(gè)動(dòng)態(tài)的、顆粒狀網(wǎng)絡(luò),在這樣一個(gè)網(wǎng)絡(luò)中,特定的信息組建可被有效的放置和分享,網(wǎng)絡(luò)與計(jì)算機(jī)將不再有什么差別了。真正實(shí)現(xiàn)“網(wǎng)絡(luò)就是計(jì)算機(jī),計(jì)算機(jī)就是網(wǎng)絡(luò)”的夢(mèng)想。 因此,對(duì)于P2P技術(shù)的研究顯得十分重要,而節(jié)點(diǎn)之間通信的實(shí)現(xiàn)是研究P2P應(yīng)用程序的基礎(chǔ),是研究P2P的第一步,是P2P技術(shù)殿堂的基石。通過(guò)對(duì)通信機(jī)制的研究,可以進(jìn)一步為實(shí)現(xiàn)P2P網(wǎng)絡(luò)監(jiān)控提供決策支持服務(wù),如果一種靈活,方便的通信機(jī)制能夠研究成功,那必將減輕P

5、2P網(wǎng)絡(luò)運(yùn)行和監(jiān)控的負(fù)擔(dān),從而促進(jìn)P2P網(wǎng)絡(luò)快速的發(fā)展。以上就是本文研究的意義所在。 1.3 論文的體系結(jié)構(gòu)2. P2P技術(shù)2.1 P2P的定義 最近幾年,對(duì)等計(jì)算(Peer-to-Peer,簡(jiǎn)稱P2P)迅速成為計(jì)算機(jī)界關(guān)注的熱門(mén)話題之一,財(cái)富雜志更將P2P列為影響Internet 未來(lái)的四項(xiàng)科技之一。 目前,在學(xué)術(shù)界、工業(yè)界對(duì)于P2P沒(méi)有一個(gè)統(tǒng)一的定義,常見(jiàn)的定義有很多,這些定義分別從不同的應(yīng)用角度描述出P2P 的應(yīng)用特點(diǎn)。P2P技術(shù)是一種用于不同PC 用戶之間、不經(jīng)過(guò)中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù)。這是P2P技術(shù)應(yīng)用的初衷,該定義確定了P2P 的通信方式。 P2P是一種分布式網(wǎng)絡(luò),網(wǎng)絡(luò)的

6、參與者共享他們所擁有的一部分硬件資源(處理能力、存儲(chǔ)能力、網(wǎng)絡(luò)連接能力、打印機(jī)等),這些共享資源需要向網(wǎng)絡(luò)提供服務(wù)和內(nèi)容,能被其它對(duì)等節(jié)點(diǎn)(Peer)直接訪問(wèn)而無(wú)需經(jīng)過(guò)中間實(shí)體。在此網(wǎng)絡(luò)中的參與者既是資源(服務(wù)和內(nèi)容)提供者(Server),又是資源(服務(wù)和內(nèi)容)獲取者(Client)。 Intel將P2P計(jì)算定義為“通過(guò)系統(tǒng)間的直接交換所達(dá)成的計(jì)算機(jī)資源與信息的共享”,這些資源與服務(wù)包括信息交換、處理器時(shí)鐘、緩存和磁盤(pán)空間等; IBM 則給P2P賦予更寬泛的定義,把P2P看成是由若干互聯(lián)協(xié)作的計(jì)算機(jī)構(gòu)成的系統(tǒng)并具備如下若干特性之一,系統(tǒng)依存于邊緣化(非中央式服務(wù)器)設(shè)備的主動(dòng)協(xié)作,每個(gè)成員直

7、接從其他成員而不是從服務(wù)器的參與中受益,系統(tǒng)中成員同時(shí)扮演服務(wù)器與客戶端的角色,系統(tǒng)應(yīng)用的用戶能夠意識(shí)到彼此的存在構(gòu)成一個(gè)虛擬或?qū)嶋H的群體。 Skype 對(duì)P2P的描述則更符合P2P在實(shí)時(shí)業(yè)務(wù)中應(yīng)用的特點(diǎn):P2P技術(shù)是指網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都動(dòng)態(tài)參與到路由、信息處理和帶寬增強(qiáng)等工作中,而不是單純依靠服務(wù)器來(lái)完成這些工作。雖然上述定義稍有不同,但共同點(diǎn)都是P2P 打破了傳統(tǒng)的Client/Server (C/S)模式,在網(wǎng)絡(luò)中的每個(gè)結(jié)點(diǎn)的地位都是對(duì)等的。每個(gè)結(jié)點(diǎn)既充當(dāng)服務(wù)器,為其他結(jié)點(diǎn)提供服務(wù),同時(shí)也享用其他結(jié)點(diǎn)提供的服務(wù)。P2P 與C/S 模式的對(duì)比如下圖所示:與傳統(tǒng)的分布式系統(tǒng)相比,P2P 技術(shù)

8、在共享應(yīng)用方面具有明顯的優(yōu)勢(shì)。同時(shí),P2P 技術(shù)具有廣闊的應(yīng)用前景。2.2 P2P技術(shù)的特點(diǎn)與C/S 模式相比,P2P 技術(shù)的特點(diǎn)體現(xiàn)在以下幾個(gè)方面。2.2.1 非中心化(Decentralization) 網(wǎng)絡(luò)中的資源和服務(wù)分散在所有結(jié)點(diǎn)上,信息的傳輸和服務(wù)的實(shí)現(xiàn)都直接在結(jié)點(diǎn)之間進(jìn)行,可以無(wú)需中間環(huán)節(jié)和服務(wù)器的介入,避免了可能的瓶頸。P2P 的非中心化基本特點(diǎn),帶來(lái)了其在可擴(kuò)展性、健壯性等方面的優(yōu)勢(shì)。2.2.2 可擴(kuò)展性 在P2P 網(wǎng)絡(luò)中,隨著用戶的加入,不僅服務(wù)的需求增加了,系統(tǒng)整體的資源和服務(wù)能力也在同步地?cái)U(kuò)充,始終能較容易地滿足用戶的需要。整個(gè)體系是全分布的,不存在瓶頸。理論上其可擴(kuò)展

9、性幾乎可以認(rèn)為是無(wú)限的。2.2.3 健壯性 P2P 架構(gòu)天生具有抗攻擊、高容錯(cuò)的優(yōu)點(diǎn)。由于服務(wù)是分散在各個(gè)結(jié)點(diǎn)之間進(jìn)行的,部分結(jié)點(diǎn)或網(wǎng)絡(luò)遭到破壞對(duì)其它部分的影響很小。P2P 網(wǎng)絡(luò)一般在部分結(jié)點(diǎn)失效時(shí)能夠自動(dòng)調(diào)整整體拓?fù)?,保持其它結(jié)點(diǎn)的連通性。P2P 網(wǎng)絡(luò)通常都是以自組織的方式建立起來(lái)的,并允許結(jié)點(diǎn)自由地加入和離開(kāi)。P2P 網(wǎng)絡(luò)還能夠根據(jù)網(wǎng)絡(luò)帶寬、結(jié)點(diǎn)數(shù)、負(fù)載等變化不斷地做自適應(yīng)式的調(diào)整。2.2.4 高性/價(jià)比 性能優(yōu)勢(shì)是P2P 被廣泛關(guān)注的一個(gè)重要原因。隨著硬件技術(shù)的發(fā)展,個(gè)人計(jì)算機(jī)的計(jì)算和存儲(chǔ)能力以及網(wǎng)絡(luò)帶寬等性能依照摩爾定理高速增長(zhǎng)。采用P2P 架構(gòu)可以有效地利用互聯(lián)網(wǎng)中散布的大量普通結(jié)點(diǎn)

10、,將計(jì)算任務(wù)或存儲(chǔ)資料分布到所有結(jié)點(diǎn)上。利用其中閑置的計(jì)算能力或存儲(chǔ)空間,達(dá)到高性能計(jì)算和海量存儲(chǔ)的目的。通過(guò)利用網(wǎng)絡(luò)中的大量空閑資源,可以用更低的成本提供更高的計(jì)算和存儲(chǔ)能力。2.2.5 負(fù)載均衡 P2P 網(wǎng)絡(luò)環(huán)境下由于每個(gè)節(jié)點(diǎn)既是服務(wù)器又是客戶機(jī),減少了對(duì)傳統(tǒng)C/S結(jié)構(gòu)服務(wù)器計(jì)算能力、存儲(chǔ)能力的要求,同時(shí)因?yàn)橘Y源分布在多個(gè)節(jié)點(diǎn),更好的實(shí)現(xiàn)了整個(gè)網(wǎng)絡(luò)的負(fù)載均衡。2.3 P2P模式2.3.1 集中式P2P 集中式P2P 模式由一個(gè)中心服務(wù)器來(lái)負(fù)責(zé)記錄共享信息以及反饋對(duì)這些信息的查詢;每一個(gè)對(duì)等實(shí)體要對(duì)它所需共享的信息以及進(jìn)行的通信負(fù)責(zé),根據(jù)需要下載它所需要的其他對(duì)等實(shí)體上的信息。這種形式具有中

11、心化的特點(diǎn),但是它不同于傳統(tǒng)意義上的Client/Server 模式。因?yàn)閭鹘y(tǒng)意義上的Client/Server 模式采用的是一種壟斷的手段,所有資料都存放在服務(wù)器上客戶機(jī)只能被動(dòng)地從服務(wù)器上讀取信息,并且客戶機(jī)之間不具有交互能力;而集中式P2P 模式則是所有網(wǎng)上提供的資料都存放在提供該資料的客戶機(jī)上,服務(wù)器上只保留索引信息,此外服務(wù)器與對(duì)等實(shí)體以及對(duì)等實(shí)體之間都具有交互能力。 集中目錄式P2P 模型還存在很多問(wèn)題,主要表現(xiàn)為:􀀹 中央服務(wù)器的癱瘓容易導(dǎo)致整個(gè)網(wǎng)絡(luò)的崩潰,可靠性和安全性較低;􀀹 隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,中央目錄服務(wù)器維護(hù)和更新的費(fèi)用將急劇增加;&

12、#1048633; 缺乏有效的強(qiáng)制共享機(jī)制,資源可用性差。2.3.2 分布式P2P 在分布式P2P 中,對(duì)等機(jī)通過(guò)與相鄰對(duì)等機(jī)之間的連接遍歷整個(gè)網(wǎng)絡(luò)體系。每個(gè)對(duì)等機(jī)在功能上都是相似的,并沒(méi)有專門(mén)的服務(wù)器,而對(duì)等機(jī)必須依靠它們所在的分布網(wǎng)絡(luò)來(lái)查找文件和定位其他對(duì)等機(jī)。 分布式對(duì)等網(wǎng)絡(luò)模型也存在很多弊端,主要表現(xiàn)在以下方面:􀀹 采用泛洪式的搜索方式,搜索請(qǐng)求要經(jīng)過(guò)整個(gè)網(wǎng)絡(luò)或者至少是一個(gè)很大的范圍才能得到結(jié)果,因此,這種模式占用很多帶寬,而且需要花費(fèi)很長(zhǎng)時(shí)間才能有返回結(jié)果。􀀹 隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,通過(guò)擴(kuò)散方式定位對(duì)等點(diǎn)及查詢信息的方法將會(huì)造成網(wǎng)絡(luò)流量急劇增加,從而

13、導(dǎo)致網(wǎng)絡(luò)擁塞,最終使分布式P2P 網(wǎng)絡(luò)被分片,使得查詢?cè)L問(wèn)只能在網(wǎng)絡(luò)很小的范圍內(nèi)進(jìn)行,因此,網(wǎng)絡(luò)的可擴(kuò)展性不好,不適合大型網(wǎng)絡(luò)。􀀹 純分布式的 P2P 模式很難被企業(yè)所利用,因?yàn)樗鄙賹?duì)網(wǎng)絡(luò)上的用戶節(jié)點(diǎn)數(shù)以及對(duì)他們提供的資源的一個(gè)總體把握。􀀹 安全性不高,易遭受惡意攻擊,如攻擊者發(fā)送垃圾查詢信息,造成網(wǎng)絡(luò)擁塞等。2.3.3 混合式P2P 混合式P2P在純P2P分布式模型基礎(chǔ)上引入了超級(jí)節(jié)點(diǎn)的概念,綜合了集中式P2P快速查找和純P2P去中心化的優(yōu)勢(shì)。將節(jié)點(diǎn)按能力不同(計(jì)算能力、內(nèi)存大小、連接帶寬、網(wǎng)絡(luò)滯留時(shí)間等)區(qū)分為普通節(jié)點(diǎn)和超級(jí)節(jié)點(diǎn)兩類(lèi)。其中超級(jí)節(jié)點(diǎn)與其臨

14、近的若干普通節(jié)點(diǎn)之間構(gòu)成一個(gè)自治的簇,簇內(nèi)采用基于集中目錄式的P2P模式,而整個(gè)P2P網(wǎng)絡(luò)中各個(gè)不同的簇之間再通過(guò)純P2P的模式將超級(jí)節(jié)點(diǎn)相連起來(lái),甚至也可以在各個(gè)超級(jí)節(jié)點(diǎn)之間再次選取性能最優(yōu)的節(jié)點(diǎn),或者另外引入新的性能最優(yōu)的節(jié)點(diǎn)作為索引節(jié)點(diǎn)來(lái)保存整個(gè)網(wǎng)絡(luò)中可以利用的超級(jí)節(jié)點(diǎn)信息,并且負(fù)責(zé)維護(hù)整個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)。 由于普通節(jié)點(diǎn)的文件搜索先在本地所屬的簇內(nèi)進(jìn)行,只有查詢結(jié)果不充分的時(shí)候,再通過(guò)超級(jí)節(jié)點(diǎn)之間進(jìn)行有限的泛洪。這樣就極為有效地消除純P2P 結(jié)構(gòu)中使用泛洪算法帶來(lái)的網(wǎng)絡(luò)擁塞、搜索遲緩等不利影響。同時(shí),由于每個(gè)簇中的超級(jí)節(jié)點(diǎn)監(jiān)控著所有普通節(jié)點(diǎn)的行為,這也能確保一些惡意的攻擊行為能在網(wǎng)絡(luò)局部得到

15、控制,并且超級(jí)節(jié)點(diǎn)的存在也能在一定程度上提高整個(gè)網(wǎng)絡(luò)的負(fù)載平衡。 總的來(lái)說(shuō),基于超級(jí)節(jié)點(diǎn)的混合式 P2P 網(wǎng)絡(luò)結(jié)構(gòu)比以往有較大程度的改進(jìn)。 然而,由于超級(jí)節(jié)點(diǎn)本身的脆弱性也可能導(dǎo)致其簇內(nèi)的結(jié)點(diǎn)處于孤立狀態(tài),因此這種局部索引的方法仍然存在一定的局限性。這導(dǎo)致了結(jié)構(gòu)化的P2P 網(wǎng)絡(luò)模型的出現(xiàn)。2.4 應(yīng)用領(lǐng)域2.5 JXTA平臺(tái)的引入 當(dāng)JAVA開(kāi)發(fā)者開(kāi)發(fā)新的互操作系統(tǒng)時(shí),為了支持系統(tǒng)將來(lái)的大量用戶實(shí)現(xiàn)最優(yōu)系統(tǒng)設(shè)計(jì),開(kāi)發(fā)者必須考慮多方面的因素,在開(kāi)放源代碼技術(shù)時(shí)代,Java開(kāi)發(fā)者很少甚至從不需要“白手起家”。P2P技術(shù)也是如此。 SUN公司的Bill Joy和Mike Clary認(rèn)識(shí)到了早期的P2

16、P技術(shù)存在的問(wèn)題:絕大多數(shù)P2P系統(tǒng)本質(zhì)上是專用而不是相互兼容的。早期的工作幾乎完全集中于互操作實(shí)現(xiàn)的可能性上,工程師們把互操作的可行性當(dāng)成了互聯(lián)網(wǎng)能提供的最重要的方面,卻忽略了P2P成為成熟技術(shù)的重要因素:在很長(zhǎng)時(shí)間內(nèi),開(kāi)發(fā)者可重用的穩(wěn)定的平臺(tái)的年代已經(jīng)到來(lái)。Bill Joy和Mike Clary的工作使得偉大的JXTA平臺(tái)誕生了。3. JXTA平臺(tái)3.1 JXTA簡(jiǎn)介 首先,JXTA是為了構(gòu)建P2P網(wǎng)絡(luò)二制訂的一組協(xié)議,是解決了上述構(gòu)建P2P網(wǎng)絡(luò)所碰到的問(wèn)題的解決方式。JXTA標(biāo)準(zhǔn)協(xié)議介紹如下: “JXTA由六個(gè)協(xié)議組成,這些協(xié)議是專為特定的、分布式的、對(duì)等的網(wǎng)絡(luò)計(jì)算而設(shè)計(jì)的。使用這些協(xié)議

17、,Peer可以互相合作來(lái)建立自我組織、自我管理的對(duì)等組,而不必關(guān)心他們?cè)诰W(wǎng)絡(luò)中所處的位置(在網(wǎng)絡(luò)邊緣或者防火墻的后面),并且也不需要集中的管理機(jī)構(gòu)?!?其次,JXTA是P2P應(yīng)用程序開(kāi)發(fā)的運(yùn)行平臺(tái):目前JXTA推出了基于Java的參考實(shí)現(xiàn),提供了支持六個(gè)協(xié)議的Java API,還推出了C語(yǔ)言等其他編程語(yǔ)言的API。3.2 JXTA的設(shè)計(jì)目標(biāo) JXTA的主要設(shè)計(jì)目標(biāo)如下:(1)互操作性:P2P系統(tǒng)很容易地找到并連接到對(duì)方,彼此進(jìn)行交流;(2)平臺(tái)無(wú)關(guān)性:P2P系統(tǒng)應(yīng)該設(shè)計(jì)成獨(dú)立于編程語(yǔ)言如C,Java等,獨(dú)立于系統(tǒng)平臺(tái)如Windows和UNIX,獨(dú)立于網(wǎng)絡(luò)平臺(tái)如TCP/IP和BLUETOOTH;

18、(3)廣泛性:P2P系統(tǒng)可以運(yùn)行在任何有數(shù)字處理和聯(lián)網(wǎng)功能的設(shè)備上。從本質(zhì)上講,JXTA的目標(biāo)是希望在任何設(shè)備,任何平臺(tái)上建立P2P應(yīng)用來(lái)互相交流溝通。3.3 JXTA平臺(tái)的關(guān)鍵要素3.3.1 對(duì)等機(jī)對(duì)等機(jī) (Peer)是一個(gè)虛擬的通信點(diǎn)。在一臺(tái)計(jì)算機(jī)或者設(shè)備上可以有很多個(gè)對(duì)等機(jī),一個(gè)對(duì)等機(jī)并不是一個(gè)用戶,因?yàn)橐粋€(gè)用戶可以有多個(gè)對(duì)等機(jī),同一個(gè)設(shè)備上也可以有多個(gè)對(duì)等機(jī)。因?yàn)閷?duì)等機(jī)不等同于用戶,所以需要將用戶和對(duì)等機(jī)抽象出來(lái)并分離開(kāi)。3.3.2 對(duì)等組 對(duì)等組(Peer Gourp)是一種組織Peer并且發(fā)布組內(nèi)的特定服務(wù)的方式。對(duì)等組可以被創(chuàng)建、加入和退出,在一個(gè)組里還可以更新一個(gè)組成員的關(guān)系,

19、由于一些原因,對(duì)等組需要對(duì)成員關(guān)系進(jìn)行一些限制,例如為了通信的安全、隱私的考慮等。這里使用一種協(xié)議來(lái)認(rèn)證,它專門(mén)收集信息并判斷其是否符合成員關(guān)系的要求。3.3.3 集合點(diǎn) 一個(gè)集合點(diǎn) (Rendezvous Peer)首先是一個(gè)Peer,而且是一個(gè)能夠處理來(lái)自其他Peer請(qǐng)求的Peer,集合點(diǎn)也可以將請(qǐng)求委托給其他Peer,當(dāng)然那些Peer也必須是集合點(diǎn)。使用集合點(diǎn)的一個(gè)主要目的就是為了方便在本地網(wǎng)絡(luò)之外搜索通告。集合點(diǎn)通常擁有更多資源,并且可以存儲(chǔ)大量的有關(guān)它周?chē)鶳eer的信息。集合點(diǎn)也可以作為搜索的傳遞者。集合點(diǎn)可以轉(zhuǎn)發(fā)發(fā)現(xiàn)請(qǐng)求到其他的集合點(diǎn)(原集合點(diǎn)通過(guò)與其他Peer的通告交互而得到了被

20、轉(zhuǎn)發(fā)集合點(diǎn)的信息)。每一個(gè)集合點(diǎn)如果本身沒(méi)有被請(qǐng)求的信息它都會(huì)轉(zhuǎn)發(fā)該請(qǐng)求。3.3.4 管道 管道(Pipe)是Peer之間的虛擬通道,可以透過(guò)防火墻的障礙進(jìn)行通信。從而使得Peer在大多數(shù)網(wǎng)絡(luò)情況下都可以通信。通常認(rèn)為對(duì)等通信是單個(gè)的通信連接,但是也并不是總是這樣的,因?yàn)榉阑饓推渌系K的存在,許多Peer并不能直接連接,這時(shí),管道更像一個(gè)在多種通信協(xié)議之上的虛擬層,可以通過(guò)起網(wǎng)關(guān)作用的Peer對(duì)通信提供中繼支持。管道提供了一種很好的方案,使得Peer在大多數(shù)網(wǎng)絡(luò)情況下都可以通信,而不用去管防火墻或者其他的障礙,即使你不知道另外一個(gè)Peer的位置以及它所使用的協(xié)議等信息, 通過(guò)管道仍然可以與之

21、通信。 管道可以分成以下兩種類(lèi)型: (1)點(diǎn)到點(diǎn)類(lèi)型:點(diǎn)到點(diǎn)的管道連接兩個(gè)不同的Peer??梢允褂枚鄠€(gè) 起網(wǎng)關(guān)作用的Peer來(lái)創(chuàng)建連接。 (2)傳播類(lèi)型:將一個(gè)Peer連接到多個(gè)目標(biāo)Peer。3.3.5 通告 一個(gè)通告(Advertisement)就是一個(gè)XML文檔,通告實(shí)際上是P2P網(wǎng)絡(luò)中的 “名片” ,用來(lái)描述JXTA的消息、Peer、對(duì)等組或者服務(wù)等。它必須遵守編碼、標(biāo)簽和內(nèi)容的標(biāo)準(zhǔn),用來(lái)交換JXTA網(wǎng)絡(luò)上可以獲得的任何信息。例如,一個(gè) Peer創(chuàng)建了名稱為“p2pchat Group”的對(duì)等組后,就可以使用IP多播方式把通告發(fā)布到本地的JXTA網(wǎng)絡(luò);也就說(shuō),子網(wǎng)中的每一個(gè)Peer都會(huì)收

22、到一份通告的副本,此外通告還會(huì)被發(fā)送到集合點(diǎn)去。3.3.6 消息在JXTA中,有兩種方式來(lái)處理消息(Message) 。一種是使用X ML格式,數(shù)據(jù)都遵循X ML標(biāo)準(zhǔn)被包裝到消息里:另外一種是使用二進(jìn)制格式。盡管希望對(duì)所有的JXTA消息都使用X ML格式,可是由于大量的消息需要傳送,使用X ML格式的消息會(huì)導(dǎo)致效率較低,而且由于消息通常是在程序之間傳送的,所以可以規(guī)范的消息內(nèi)容使用二進(jìn)制的格式;對(duì)于其他的仍然采用XML格式。3.3.7 標(biāo)識(shí)符在JXTA網(wǎng)絡(luò)社區(qū)中,所有資源(對(duì)等機(jī)、管道、對(duì)等機(jī)組、消息等)都被分配一個(gè)全局唯一的JXTA ID。3.4JXTA平臺(tái)的六種協(xié)議 JXTA通過(guò)定義一系列

23、協(xié)議來(lái)進(jìn)行對(duì)等機(jī)之間的交流通信,對(duì)等機(jī)應(yīng)用這些協(xié)議可以發(fā)布自己的通告來(lái)廣播自己的資源,還可以在對(duì)等網(wǎng)絡(luò)中發(fā)現(xiàn)其他的點(diǎn),并且發(fā)現(xiàn)網(wǎng)絡(luò)資源,以及路由消息等。JXTA系統(tǒng)利用這些協(xié)議,構(gòu)成了可以適用于各種應(yīng)用目的和計(jì)算環(huán)境的基礎(chǔ)平臺(tái)。 下面詳細(xì)介紹JXTA的六種協(xié)議:3.4.1、對(duì)等機(jī)發(fā)現(xiàn)協(xié)議對(duì)等機(jī)發(fā)現(xiàn)協(xié)議 (Peer Discovery Protocol ,P D P )主要用來(lái)發(fā)布自己的通告信息,并且從其他Peer 處獲得通告。PDP允許一個(gè)Peer 發(fā)現(xiàn)其他Peer的通告( 包括Peer通告、對(duì)等組通告、服務(wù)通告,或者是管道通告)。該協(xié)議通過(guò)指定一種通告類(lèi)型如Peer、對(duì)等組)、一個(gè)XML標(biāo)簽

24、名、一個(gè)匹配這個(gè) X ML標(biāo)簽所表示數(shù)據(jù)的字符串來(lái)定義查詢。它使用Peer Resolver Protocol 來(lái)發(fā)送和傳播搜索通告的請(qǐng)求。3.4.2、對(duì)等機(jī)信息協(xié)議對(duì)等機(jī)信息協(xié)議(Peer Information Protocol,PIP)用來(lái)獲得其他Peer的狀態(tài)信息,包括更新時(shí)間、狀態(tài)等。該協(xié)議有時(shí)被用做ping命令,有時(shí)被用來(lái)獲得一個(gè)Peer的基本狀態(tài)信息,PIP消息的正文是自由格式的,它允許詢問(wèn)特定的Peer信息。此外,這種能力可以被擴(kuò)展以提供控制能力,它使用Peer Resolver Protocol來(lái)發(fā)送和傳播搜索通告的請(qǐng)求。3.4.3、管道綁定協(xié)議 管道綁定協(xié)議(Pipe Bi

25、nding Protocol,PBP)描述了如何在對(duì)等點(diǎn)之間建立連接和傳播消息,如何將一個(gè)管道的輸入端和輸出端綁定到一個(gè)對(duì)等節(jié)點(diǎn)的端點(diǎn)上。管道是一個(gè)對(duì)等點(diǎn)與一個(gè)或多個(gè)對(duì)等點(diǎn)之間建立連接的虛擬通信通道,它位于物理網(wǎng)絡(luò)傳輸層之上。管道可以看做是一個(gè)消息序列,能夠支持創(chuàng)建、打開(kāi)、關(guān)閉、刪除、發(fā)送和接收操作。管道在使用前,首先必須與一個(gè)端點(diǎn)綁定。對(duì)等點(diǎn)用輸入管道(Input Pipe)來(lái)接收數(shù)據(jù),用輸出管道(Output Pipe)發(fā)送數(shù)據(jù)。當(dāng)一個(gè)對(duì)等點(diǎn)將數(shù)據(jù)發(fā)送給其他的對(duì)等點(diǎn)時(shí),首先將數(shù)據(jù)打包成消息格式,利用輸出管道發(fā)送數(shù)據(jù)。在接收端的對(duì)等點(diǎn),利用輸入管道接收消息。3.4.4、端點(diǎn)路由協(xié)議 端點(diǎn)路由

26、協(xié)議(Endpoint Routing Protocol,ERP),定義了JXTA中消息路由機(jī)制。當(dāng)一個(gè)對(duì)等點(diǎn)(源點(diǎn))要發(fā)送消息給指定的目的對(duì)等點(diǎn)(目的點(diǎn))時(shí),它首先查詢自己本地緩存來(lái)判斷是否有到達(dá)目的點(diǎn)的路由信息。如果沒(méi)有找到路由信息,它就發(fā)送路由解析查詢請(qǐng)求給它可以連接的中繼對(duì)等點(diǎn),請(qǐng)求這個(gè)中繼對(duì)等點(diǎn)的路由信息。當(dāng)這個(gè)中繼對(duì)等點(diǎn)收到路由請(qǐng)求,它就檢查是否知道到達(dá)目的點(diǎn)的路由信息。如果知道,那么就返回路由信息給源點(diǎn)。3.4.5、對(duì)等機(jī)解析協(xié)議 在JXTA協(xié)議中,各種協(xié)議都是基于發(fā)送請(qǐng)求消息和得到響應(yīng)消息的模式。例如,對(duì)等發(fā)現(xiàn)協(xié)議中,規(guī)定了兩種消息,發(fā)現(xiàn)請(qǐng)求消息和發(fā)現(xiàn)響應(yīng)消息。在路由協(xié)議中,規(guī)

27、定了路由請(qǐng)求消息和發(fā)現(xiàn)響應(yīng)消息。它們各自都有著消息格式,各自的消息格式并不相同。對(duì)等點(diǎn)解析協(xié)議(Peer Resolver Protocol,PRP),就是用于標(biāo)準(zhǔn)化這些請(qǐng)求消息和響應(yīng)消息解析的格式,使得對(duì)等點(diǎn)能夠發(fā)送通用一致的請(qǐng)求消息和響應(yīng)消息。所有需要通用的請(qǐng)求一響應(yīng)機(jī)制的協(xié)議都需要依靠PRP協(xié)議進(jìn)行工作。對(duì)等解析協(xié)議的實(shí)現(xiàn)為JXTA網(wǎng)絡(luò)提供了一種通用的解析請(qǐng)求服務(wù)。3.4.6、集合點(diǎn)協(xié)議通過(guò)集合點(diǎn)協(xié)議(Rendezvous Protocol,RVP),對(duì)等機(jī)可以對(duì)一個(gè)服務(wù)訂閱或者被訂閱。集合點(diǎn)協(xié)議負(fù)責(zé)在JXTA對(duì)等組內(nèi)傳播消息,它為Peer在組內(nèi)接收和發(fā)送消息并且控制消息如何傳播定義了一

28、個(gè)基本的協(xié)議。4. 通信機(jī)制研究4.1 通信的障礙 雖然P2P網(wǎng)絡(luò)希望每個(gè)Peer之間都可以直接進(jìn)行通信,但是在現(xiàn)實(shí)的網(wǎng)絡(luò)中實(shí)際存在著許多情況導(dǎo)致計(jì)算機(jī)之間無(wú)法相互直接通信。接下來(lái)將討論現(xiàn)實(shí)網(wǎng)絡(luò)中阻礙P2P網(wǎng)絡(luò)通信的主要的障礙防火墻、NAT等。4.1.1 防火墻防火墻經(jīng)常出現(xiàn)在大公司網(wǎng)絡(luò)和個(gè)人PC中,它將一個(gè)網(wǎng)絡(luò)分隔成以防火墻為界的兩個(gè)網(wǎng)絡(luò)。任何從一個(gè)網(wǎng)絡(luò)傳遞到另一個(gè)網(wǎng)絡(luò)的信息都必須通過(guò)防火墻。防火墻所處的關(guān)鍵性位置允許它監(jiān)視和控制網(wǎng)絡(luò)間的流量。防火墻是安全網(wǎng)絡(luò)不可或缺的部分,主要用于防止對(duì)網(wǎng)絡(luò)的非授權(quán)訪問(wèn)。典型的防火墻使用IP過(guò)濾控制那些從防火墻外到內(nèi)部網(wǎng)的連接,它幾乎過(guò)濾掉了除HTTP外的

29、所有東西。防火墻也可以限制通信端口。因?yàn)榉阑饓赡茏柚惯M(jìn)來(lái)的連接,所以防火墻外的一個(gè)對(duì)等節(jié)點(diǎn)很可能不能直接與防火墻內(nèi)的對(duì)等節(jié)點(diǎn)建立連接,進(jìn)一步限制了對(duì)等通信的可能。4.1.2 NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)網(wǎng)絡(luò)地址轉(zhuǎn)換 NAT(Network Address Translation),一則解決IPV4地址日益缺乏的問(wèn)題,二則通過(guò)隱藏內(nèi)部網(wǎng)絡(luò)地址的手段為用戶提供了安全保護(hù)。內(nèi)部網(wǎng)絡(luò)用戶,通常位于 NAT 服務(wù)器的內(nèi)側(cè),在連接互聯(lián)網(wǎng)時(shí),NAT 將用戶的內(nèi)部網(wǎng)絡(luò) IP 地址轉(zhuǎn)換成一個(gè)外部的公共的 IP 地址(存儲(chǔ)于 NAT 的地址池中),當(dāng)外部網(wǎng)絡(luò)數(shù)據(jù)返回時(shí),NAT 則反向?qū)⒌刂纺繕?biāo)替換成初始的內(nèi)部用戶的地

30、址從而讓網(wǎng)內(nèi)用戶接受。由于這樣對(duì)外隱藏了內(nèi)部網(wǎng)絡(luò)的 IP 地址,因此,外部用戶無(wú)法直接發(fā)起到內(nèi)部用戶的連接,從而隱藏了內(nèi)部的用戶。NAT只允許那些由內(nèi)部網(wǎng)發(fā)起的連接,私有網(wǎng)外部的網(wǎng)絡(luò)無(wú)法與內(nèi)部建立連接,除非有內(nèi)部機(jī)器首先發(fā)起到外部的連接,結(jié)果實(shí),對(duì)等網(wǎng)中的外部對(duì)等節(jié)點(diǎn)不能主動(dòng)與位于NAT網(wǎng)關(guān)之內(nèi)的對(duì)等節(jié)點(diǎn)建立連接。4.1.3 節(jié)點(diǎn)的動(dòng)態(tài)變化許多公司特別是ISP使用動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP)。DHCP動(dòng)態(tài)的為計(jì)算機(jī)分配IP地址,結(jié)果每一次當(dāng)DHCP服務(wù)器或者是用戶電腦重起時(shí),IP地址都會(huì)變化。IP地址同樣因?yàn)檫^(guò)期而發(fā)生變化,這樣導(dǎo)致一個(gè)已知的地址是暫時(shí)的地址。因?yàn)橛辛薉HCP的存在,Peer可

31、能不會(huì)擁有可信賴的地址。這樣就使通過(guò)防火墻與另端的Peer的通信變得困難。另一方面,Peer可能消失后又出現(xiàn)。很多計(jì)算機(jī)不是24小時(shí)都連入Internet的,同時(shí)還有一部分無(wú)線設(shè)備,它們經(jīng)常只是非常短的時(shí)間在線,在這種情況下,同一個(gè)設(shè)備可從不同的城市不同的拓?fù)浣Y(jié)構(gòu)中冒出來(lái)。因?yàn)橐陨显颍沟霉?jié)點(diǎn)的經(jīng)常處于動(dòng)態(tài)變化中,Peer路由的有效性就難以保證,重新計(jì)算路由就顯得非常重要。4.1.4物理連接圖1-1 對(duì)等網(wǎng)絡(luò)物理連接圖對(duì)等網(wǎng)絡(luò)實(shí)際的物理連接可能類(lèi)似上圖,都位于各自防火墻內(nèi)的對(duì)等節(jié)點(diǎn)之間的通信模式。造成P2P網(wǎng)絡(luò)的通信不暢。4.2 問(wèn)題的解決為了解決上述問(wèn)題,在P2P網(wǎng)絡(luò)中必須有一部分的Pee

32、r和普通類(lèi)型的Peer功能不太一樣,所以需要在P2P網(wǎng)絡(luò)中從概念上抽象出一些特殊的用于通信目的的Peer。4.2.1 Peer的分類(lèi)每一個(gè)Peer根據(jù)其提供的角色功能可以劃分為三種類(lèi)型,即簡(jiǎn)單類(lèi)型Peer,super-peer和服務(wù)器型的peer。1. 簡(jiǎn)單類(lèi)型Peer:該類(lèi)型節(jié)點(diǎn)僅僅是一個(gè)簡(jiǎn)單的終端用戶,它可以請(qǐng)求獲得服務(wù)并為網(wǎng)絡(luò)中的其它Peer提供服務(wù)。2. Super-peer:該類(lèi)型節(jié)點(diǎn)除了具有和簡(jiǎn)單Peer節(jié)點(diǎn)類(lèi)似的功能外,還提供某些特殊功能。如JXTA系統(tǒng)中就存在路由器Peer節(jié)點(diǎn)和匯聚點(diǎn)Peer節(jié)點(diǎn),前者作為一個(gè)橋梁,使得被防火墻或NAT隔離的Peer可以相互通信;后者為簡(jiǎn)單節(jié)點(diǎn)

33、提供查詢定位信息的功能。3. 服務(wù)器型Peer:該類(lèi)型節(jié)點(diǎn)主要提供類(lèi)似與客戶/服務(wù)器模型下的服務(wù)器功能,如提供一個(gè)全局統(tǒng)一的目錄查詢。例如,在Napster這種混雜型的P2P系統(tǒng)中,有若干個(gè)簡(jiǎn)單Peer節(jié)點(diǎn)相互提供文件下載功能的服務(wù),還有一個(gè)目錄服務(wù)器節(jié)點(diǎn)提供文件條目的注冊(cè)管理。Groove和Magi系統(tǒng)中也均存在這樣的服務(wù)器型節(jié)點(diǎn)。而在純P2P網(wǎng)絡(luò)中,每一個(gè)Peer節(jié)點(diǎn)均充當(dāng)了上述的三種角色。4.2.2 節(jié)點(diǎn)動(dòng)態(tài)變化的處理P2P網(wǎng)絡(luò)中節(jié)點(diǎn)的登錄和退出,在服務(wù)器模型的P2P網(wǎng)絡(luò)中,由于Peer節(jié)點(diǎn)的狀態(tài)信息和管理的資源信息直接記錄在服務(wù)器中,Peer節(jié)點(diǎn)的登錄和退出僅需和服務(wù)器進(jìn)行交互,由服務(wù)

34、器進(jìn)行協(xié)調(diào)處理。如在Napster系統(tǒng)中,Peer節(jié)點(diǎn)登錄系統(tǒng)后,向服務(wù)器發(fā)送當(dāng)前的網(wǎng)絡(luò)狀態(tài)和所有的文件列表信息,由服務(wù)器更新目錄索引。在一些即時(shí)消息通訊系統(tǒng)中,Peer節(jié)點(diǎn)往往是與用戶綁定的。服務(wù)器接收到用戶的登錄消息或退出消息后,通知訂閱該用戶在線狀態(tài)的所有在線用戶。同時(shí),可能發(fā)生的地址的變化情況因?yàn)橛新酚蒔eer的存在而得到改善,當(dāng)?shù)刂钒l(fā)生變化時(shí)路由Peer能夠在Peer間建立新的路由。4.2.3 穿透防火墻和NAT通常在防火墻或者 NAT 后面的對(duì)等節(jié)點(diǎn)可以直接發(fā)送消息到位于防火墻外部的對(duì)等點(diǎn)。但是在防火墻外部的對(duì)等點(diǎn)卻不能直接和位于防火墻后的對(duì)等點(diǎn)建立連接。為了使位于防火墻外部與內(nèi)部

35、的對(duì)等節(jié)點(diǎn)直接可以穿透防火墻進(jìn)行通信,必須滿足以下三個(gè)條件:l 在防火墻內(nèi)部的對(duì)等組中必須至少有一個(gè)對(duì)等節(jié)點(diǎn)知道在防火墻外部的一個(gè)或多個(gè)對(duì)等點(diǎn)的存在,并且都支持HTTP 傳輸協(xié)議l Peer 之間進(jìn)行通信時(shí),必須由內(nèi)部網(wǎng)絡(luò)的機(jī)器首先發(fā)起連接請(qǐng)求,如果通信雙方均處于防火墻之后,則需要有防火墻外的轉(zhuǎn)發(fā)節(jié)點(diǎn)進(jìn)行消息轉(zhuǎn)發(fā)。l 需要使用在一般情況下可以通過(guò)防火墻的協(xié)議,如基于請(qǐng)求/應(yīng)答方式的HTTP 協(xié)議。如圖1-2描述,JXTA的對(duì)等點(diǎn) Peer A 和 Peer B 之間需要相互傳遞消息,但是,防火墻阻止了它們之間的直接通信。對(duì)等點(diǎn) Peer A 在發(fā)送消息時(shí),首先,會(huì)采用能夠穿透防火墻的 HTTP

36、 協(xié)議向已知的位于防火墻外部的對(duì)等點(diǎn) Peer C 發(fā)送消息,形成一個(gè) HTTP 協(xié)議連接(HTTP Connection)。Peer C 在收到對(duì)等點(diǎn) Peer A 發(fā)送的消息時(shí),就會(huì)采用 JXTA 的管道通信和 Peer B 建立連接 (JXTA Connection)。這樣,一個(gè)想要的虛擬的連接就會(huì)在對(duì)等點(diǎn) Peer A 和 Peer B 之間建立起來(lái)。圖1-2 穿透防火墻和NAT策略4.3 Pipe及PBP在通信中的作用沒(méi)有Pipe,節(jié)點(diǎn)之間就無(wú)法實(shí)現(xiàn)基于JXTA的通信方法,理解Pipe的工作方式至關(guān)重要。JXTA的Pipe不是內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),也不是硬盤(pán)中上的文件,它僅僅是封裝在XM

37、L廣告文檔中的以ID為標(biāo)志的標(biāo)簽或者名字,因此它是JXTA中的抽象概念,通過(guò)管道廣告來(lái)唯一標(biāo)示Pipe,輸出管道要找到與其廣告相同的輸入管道才能發(fā)送數(shù)據(jù)。在建立管道時(shí),注意先建立輸入管道,然后建立輸出管道。因?yàn)?,輸出管道在一定的時(shí)間和次數(shù)內(nèi)探測(cè)不到輸入管道的存在,就會(huì)主動(dòng)放棄。否則,容易讓網(wǎng)絡(luò)系統(tǒng)在這些無(wú)休止的探測(cè)中癱瘓。利用管道發(fā)送消息,就要用到JXTA標(biāo)準(zhǔn)協(xié)議中的PBP(管道綁定協(xié)議),其實(shí)定位Pipe Advertisement到一個(gè)“物理管道末端(Endpoint)”的過(guò)程就稱為綁定的過(guò)程,這個(gè)過(guò)程只動(dòng)態(tài)的發(fā)生在通信的過(guò)程中,而且,JXTA的PIPE可以在不同時(shí)刻動(dòng)態(tài)地綁定到不同的“物

38、理管道末端”,下面詳細(xì)說(shuō)明Peer之間利用PBP通信的過(guò)程。圖1-3 管道綁定交換信息過(guò)程對(duì)等點(diǎn) A 要通過(guò)管道發(fā)送消息給對(duì)等點(diǎn) B,必須監(jiān)聽(tīng)網(wǎng)絡(luò)中是否有來(lái)自點(diǎn) B的管道通告信息。如果沒(méi)有點(diǎn) B 的管道通告,那么點(diǎn) A 就一直監(jiān)聽(tīng)網(wǎng)絡(luò)或者放棄發(fā)送消息給點(diǎn) B。如果點(diǎn) B 由管道通告創(chuàng)建了輸入管道,并一致等待消息輸入。當(dāng)點(diǎn) A 監(jiān)聽(tīng)到管道通告后,為了能利用管道發(fā)送消息給點(diǎn) B,點(diǎn) A 必須用與點(diǎn)B 相同的管道通告,創(chuàng)建一個(gè)輸出管道用于發(fā)送消息。這時(shí)候,點(diǎn) A 發(fā)送管道綁定請(qǐng)求消息給所有它己知的對(duì)等點(diǎn)和集合點(diǎn)。當(dāng)集合點(diǎn) A 收到管道綁定請(qǐng)求消息后,檢查它自己的緩存,是否自己的管道通告與 A 的管道

39、通告相匹配。沒(méi)有相匹配的管道通告,這時(shí)就繼續(xù)轉(zhuǎn)發(fā)消息給點(diǎn) B。點(diǎn) B 收到管道綁定請(qǐng)求消息后,檢查它自己的緩存,是否自己的管道通告與 A 的管道通告相匹配。存在匹配的管道通告,那么點(diǎn) B 就發(fā)送管道綁定響應(yīng)消息,并且在響應(yīng)消息中包含自己對(duì)等點(diǎn)的通告。最后,點(diǎn) A 接收管道綁定響應(yīng)消息后,從響應(yīng)消息中得知點(diǎn) B的通告,獲取點(diǎn) B 的端點(diǎn)信息。有了端點(diǎn)信息就可以創(chuàng)建從點(diǎn) A 到點(diǎn) B 的虛擬通信通道,這時(shí)點(diǎn) A 就可以發(fā)送消息給點(diǎn) B 了。4.4 系統(tǒng)運(yùn)行環(huán)境l 軟件平臺(tái):在 Win32 平臺(tái)下用 Java 語(yǔ)言開(kāi)發(fā),采用 JXTA J2SE 參考實(shí)現(xiàn)。開(kāi)發(fā)工具使用 Eclipse。l 硬件平臺(tái):

40、開(kāi)發(fā)在本機(jī)上進(jìn)行,在本機(jī)構(gòu)成一個(gè) JXTA 虛擬網(wǎng)絡(luò)。l 配置信息: 在本機(jī)上運(yùn)行通信系統(tǒng),必須配置成兩個(gè)Peer節(jié)點(diǎn),每個(gè)Peer的配置信息如下:Peer NameNode1Node2TransportTCP Enabled HTTP EnabledTCP Enabled HTTP EnabledHTTP AddressLocalhost port: 9710Localhost port :9720TCP AddressLocalhost port :9709Localhost port: 9719Act as Relay選中選中表1-1 兩個(gè)節(jié)點(diǎn)的配置實(shí)例4.5 基于pipe的通信流程在設(shè)

41、計(jì)系統(tǒng)的結(jié)構(gòu)時(shí),我們主要考慮是將系統(tǒng)盡量離散化,使其不依賴特定的服務(wù)器,因而應(yīng)用程序可以部署在一個(gè) P2P 網(wǎng)絡(luò)上,每個(gè)應(yīng)用程序作為一個(gè)端點(diǎn),同時(shí)充當(dāng)服務(wù)器和客戶機(jī)Pipe(管道)是基于JXTA通信的重要一環(huán),JXTA中提供了Pipe的API,主要有兩個(gè)包組成:net.jxta.pipe以及net.jxta.impl.pipe,前者主要是定義一些接口,就是JXTA管道服務(wù)需要實(shí)現(xiàn)的功能與JXTA規(guī)范密切相關(guān),而后者是前者的實(shí)現(xiàn),是我們編程過(guò)程中實(shí)際用到的部分,它們的結(jié)構(gòu)類(lèi)似1、基于Pipe的通信過(guò)程如圖所示: 圖1-4 Pipe的基本通信過(guò)程。l 接收方的Peer需要具備一個(gè)Pipe Adve

42、rtisement,然后根據(jù)這個(gè)Pipe Advertisement創(chuàng)建一個(gè)Input Pipe,然后等待Message的到達(dá)。l 發(fā)送方的Peer使用相同的Pipe Advertisement,并根據(jù)這個(gè)Pipe Advertisement創(chuàng)建一個(gè)Output Pipe以發(fā)送數(shù)據(jù)。要?jiǎng)?chuàng)建Output Pipe,它要先發(fā)送一個(gè)Pipe Binding Query Message給所有它所知道的Peers。l 接收方收到這個(gè)Pipe Binding Query Message,看看自己緩存的Pipes中有沒(méi)有匹配的Pipe ID。如果有,它就回復(fù)一個(gè)Pipe Binding Answer Mes

43、sage(包含了自己的Peer Advertisement)給對(duì)方。l 發(fā)送方接收到Pipe Binding Answer Message后,將Peer Advertisement從中抽取出來(lái)。然后使用Peer Advertisement中的Endpoint信息來(lái)創(chuàng)建Output Pipe,這樣發(fā)送方才可以發(fā)送數(shù)據(jù)。以上分析可知,基于Pipe通信的連接過(guò)程都需要?jiǎng)?chuàng)建、綁定Input Pipe(包括創(chuàng)建監(jiān)聽(tīng)器)、創(chuàng)建Output Pipe才能通信,為了避免代碼重復(fù),我們將所有基本的過(guò)程放在一個(gè)P2PSocket的模塊里。利用P2PSocket這個(gè)模塊,可以開(kāi)發(fā)包括通信在內(nèi)的其它P2P應(yīng)用程序,例

44、如文件傳輸程序。用戶通過(guò)P2PSocket建立連接之后,創(chuàng)建傳輸?shù)南?,隨后利用Output Pipe傳輸消息,在相應(yīng)的Input Pipe的監(jiān)聽(tīng)器將捕獲這個(gè)事件,獲得傳輸過(guò)來(lái)的消息,最終顯示消息?;赑2PSocket模塊的通信程序的流程如圖五所示。圖1-5 P2PChat 流程圖。4.6 對(duì)等組模塊4.6.1 創(chuàng)建/加入對(duì)等組JXTA中的一個(gè)重要的概念就是對(duì)等組,對(duì)等組提供一系列的基礎(chǔ)服務(wù),這些服務(wù)使用JXTA協(xié)議為對(duì)等組提供的必要的功能,如管道服務(wù)、成員資格服務(wù)等等。在建立對(duì)等平臺(tái)以后,就可以建立用戶級(jí)的對(duì)等組,在對(duì)等組中定義發(fā)布自己的服務(wù)。Chatpg類(lèi)負(fù)責(zé)發(fā)現(xiàn)并加入chatNet對(duì)等

45、組,如果沒(méi)有發(fā)現(xiàn)chatNet對(duì)等組,那么該對(duì)等體將創(chuàng)建chatNet對(duì)等組。Chatpg類(lèi)的結(jié)構(gòu)比較簡(jiǎn)單:1. 使用PeerGroupFactory方法創(chuàng)建NetPeerGroup對(duì)等組來(lái)啟動(dòng)JXTA平臺(tái)。2. 發(fā)現(xiàn)現(xiàn)有的chatNet對(duì)等組廣告l 尋找本地緩存中以前發(fā)現(xiàn)的廣告,查看有無(wú)chatNet對(duì)等組廣告。l 發(fā)送PDP請(qǐng)求,通過(guò)廣播類(lèi)型機(jī)制或者通過(guò)聯(lián)系已知的匯聚對(duì)等體以發(fā)現(xiàn)chatNet對(duì)等組廣告。l 等待響應(yīng)的到來(lái)。l 再次查詢本地緩存中的響應(yīng)。3. 如果沒(méi)有找到現(xiàn)有的chatNet對(duì)等組廣告,那么就為之創(chuàng)建一個(gè)對(duì)等組廣告,接著啟動(dòng)NetPeerGroup發(fā)現(xiàn)服務(wù),發(fā)布chatNe

46、t廣告,最后根據(jù)該廣告創(chuàng)建chatNet對(duì)等組。4. 如果找到現(xiàn)有的chatNet對(duì)等組廣告,那么就使用發(fā)現(xiàn)廣告來(lái)加入對(duì)等組。4.6.2 代碼詳細(xì)實(shí)現(xiàn)1、平臺(tái)啟動(dòng):private void startJxta() try /創(chuàng)建加入默認(rèn)組 netpg = PeerGroupFactory.newNetPeerGroup(); catch (PeerGroupException e) System.out.println("Fatal error:creating the net PeerGroup"); System.exit(1); try joinchatpg();/加

47、入對(duì)等組chatNet catch (Exception e) System.out.println("Can't join or create chatNet"); System.exit(1); 2、加入或創(chuàng)建對(duì)等組 private void joinchatNet() throws Exception int count = 3; /查找三次 / 從NetPeergroup獲取發(fā)現(xiàn)服務(wù) DiscoveryService hdisco = netpg.getDiscoveryService(); Enumeration ae = null; / 定義一向量,用于

48、保存查找結(jié)果 while (count- > 0) try / 首先在當(dāng)?shù)鼐彺嬷胁檎以搶?duì)等組廣告 ae = hdisco.getLocalAdvertisements(DiscoveryService.GROUP,"Name", "chatNet"); if (ae != null) && ae.hasMoreElements() break;/加入找到該對(duì)等組廣告,就退出循環(huán) / 本地沒(méi)有找到,就發(fā)送一個(gè)遠(yuǎn)程查詢請(qǐng)求 hdisco.getRemoteAdvertisements(null, DiscoveryService.GRO

49、UP, "Name", "RestoNet", 1, null); try Thread.sleep(3000);/休眠3秒等待查詢請(qǐng)求結(jié)果 catch (InterruptedException ie) catch (IOException e) PeerGroupAdvertisement chatNetAdv = null; / 假如還沒(méi)有發(fā)現(xiàn)對(duì)等組,那接下來(lái)就創(chuàng)建它 if (ae = null | !ae.hasMoreElements() System.out.println("Could not find the RestoNet

50、peergroup; creating one"); try ModuleImplAdvertisement implAdv = netpg.getAllPurposePeerGroupImplAdvertisement();/創(chuàng)建一般性的對(duì)等組廣告 chatNet = netpg.newGroup( mkGroupID(), / 賦予該對(duì)等組一個(gè)ID implAdv, / 用于生成對(duì)等組的廣告 "chatNet", / 該對(duì)等組的名稱 "chatNet is one of chat peergroups");/ 對(duì)這個(gè)組的描述 / 得到對(duì)等組

51、廣告 chatNetAdv = netpg.getPeerGroupAdvertisement(); catch (Exception e) System.out.println("Error in creating RestoNet Peergroup"); throw e; else / 假如在本地緩存中發(fā)現(xiàn)該對(duì)等組廣告,那就加入該對(duì)等組 try chatNetAdv = (PeerGroupAdvertisement) ae.nextElement(); chatNet = netpg.newGroup(chatNetAdv); System.out.println(

52、 "Found the RestoNet Peergroup advertisement; joined existing group"); catch (Exception e) System.out.println("Error in creating chatNet PeerGroup from existing adv"); throw e; try / 從chatNet對(duì)等組獲得發(fā)現(xiàn)服務(wù)和管道服務(wù) disco = chatNet.getDiscoveryService(); pipes = chatNet.getPipeService(); c

53、atch (Exception e) System.out.println("Error getting services from chatNet"); throw e; return; 3、需要指出,如果對(duì)等體找不到chatNet對(duì)等組組,那么它們要?jiǎng)?chuàng)建相同的chatNet對(duì)等組,我們不想碰到不同的對(duì)等體創(chuàng)建不同版本的chatNet對(duì)等組,通過(guò)使用mkGroupID的方法和與定義的字符串,就可以生成定義對(duì)等組ID的URL,這樣保證chatNet對(duì)等組ID的唯一。private PeerGroupID mkGroupID() throws Exception String groupURL = "jxta:uuid-4d6172676572696e204272756e6f202002" return (PeerGroupID) IDFactory.fro

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論