劉班
摘 要:JXTA網(wǎng)絡(luò)中節(jié)點(diǎn)之間的通信問題是開發(fā)基于JXTA協(xié)議的應(yīng)用程序必須要解決的技術(shù)難題,本文針對(duì)JXTA網(wǎng)絡(luò)中的發(fā)現(xiàn)廣告和節(jié)點(diǎn)、穿越防火墻和NAT以及在節(jié)點(diǎn)之間路由消息等問題進(jìn)行了比較詳細(xì)的論述。
關(guān)鍵詞:JXTA;P2P;廣告;節(jié)點(diǎn);防火墻;NAT
在P2P網(wǎng)絡(luò)中要解決的基本問題是在聯(lián)網(wǎng)設(shè)備之間如何交換服務(wù),而解決這個(gè)問題首先需要找到兩個(gè)問題的答案:一個(gè)聯(lián)網(wǎng)設(shè)備如何才能找到P2P網(wǎng)絡(luò)中的節(jié)點(diǎn)和服務(wù);在內(nèi)部網(wǎng)絡(luò)中的一個(gè)聯(lián)網(wǎng)設(shè)備如何才能加入到P2P網(wǎng)絡(luò)中。第一個(gè)問題是非常重要的,因?yàn)槿绻荒苤谰W(wǎng)絡(luò)中一個(gè)節(jié)點(diǎn)或一個(gè)服務(wù)的存在,對(duì)于一個(gè)設(shè)備而言就不可能使用那個(gè)服務(wù)。第二個(gè)問題也是重要的,因?yàn)镻2P網(wǎng)絡(luò)中的很多設(shè)備都被一些專門設(shè)計(jì)用來阻止來自兩個(gè)不同內(nèi)部網(wǎng)絡(luò)的設(shè)備進(jìn)行直接連接的網(wǎng)絡(luò)裝置隔離。
1 發(fā)現(xiàn)廣告
在基于JXTA構(gòu)建的P2P網(wǎng)絡(luò)中,幾乎任何一個(gè)JXTA網(wǎng)絡(luò)資源都可以表示為廣告,這個(gè)特性大大簡化了發(fā)現(xiàn)P2P網(wǎng)絡(luò)中的節(jié)點(diǎn)、節(jié)點(diǎn)組、管道以及端點(diǎn)的問題,只需找到表示那些資源的廣告,就相當(dāng)于找到了對(duì)應(yīng)的資源。
P2P網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn)能使用三種技術(shù)發(fā)現(xiàn)一個(gè)廣告:即,本地發(fā)現(xiàn)技術(shù)、直接發(fā)現(xiàn)技術(shù)以及間接發(fā)現(xiàn)技術(shù)。第一種發(fā)現(xiàn)技術(shù)不需要聯(lián)網(wǎng),可以將其看作一種消極被動(dòng)的發(fā)現(xiàn)技術(shù)。后兩種發(fā)現(xiàn)技術(shù)需連接網(wǎng)絡(luò)后才能執(zhí)行查詢操作,可將其看作是一種積極主動(dòng)的發(fā)現(xiàn)技術(shù)。
1.1 本地發(fā)現(xiàn)
對(duì)于節(jié)點(diǎn)而言,最簡單的發(fā)現(xiàn)廣告技術(shù)是在本地緩存中發(fā)現(xiàn)廣告。盡管這種技術(shù)看起來很簡單,但該技術(shù)可以有效地減少由節(jié)點(diǎn)產(chǎn)生的網(wǎng)絡(luò)流量,同時(shí)也可以使節(jié)點(diǎn)瞬間獲得結(jié)果。
在最簡單的情況下,節(jié)點(diǎn)本地緩存只包含一個(gè)文本文件,該文件中列出了該節(jié)點(diǎn)以前發(fā)現(xiàn)的集合節(jié)點(diǎn)的IP地址和端口號(hào),以此提供一個(gè)積極發(fā)現(xiàn)的起點(diǎn)。而在較復(fù)雜的情況下,節(jié)點(diǎn)緩存中有一個(gè)包含了該節(jié)點(diǎn)以前發(fā)現(xiàn)的所有廣告的數(shù)據(jù)庫。節(jié)點(diǎn)緩存甚至可能是被硬編碼到P2P應(yīng)用中,盡管這會(huì)限制P2P應(yīng)用的靈活性。
使用節(jié)點(diǎn)本地廣告緩存的一個(gè)缺點(diǎn)是緩存中的廣告可能已經(jīng)過期,這種過期的廣告所描述的資源是不可用的,這時(shí)如果一個(gè)節(jié)點(diǎn)試圖去使用一個(gè)過期廣告對(duì)應(yīng)的資源就會(huì)出問題。盡管使用緩存發(fā)現(xiàn)廣告可能減少網(wǎng)絡(luò)的流量,但如果節(jié)點(diǎn)使用一個(gè)過期的廣告,反而會(huì)增加網(wǎng)絡(luò)的流量,這是因?yàn)楫?dāng)一個(gè)節(jié)點(diǎn)試圖去使用一個(gè)網(wǎng)絡(luò)上的資源,但發(fā)現(xiàn)那個(gè)資源不再可用,這個(gè)節(jié)點(diǎn)就會(huì)使用積極發(fā)現(xiàn)的方法,在這種情況下,這個(gè)節(jié)點(diǎn)就相當(dāng)于訪問了兩次網(wǎng)絡(luò),而節(jié)點(diǎn)如果單純用積極發(fā)現(xiàn)的方法,則只需訪問一次網(wǎng)絡(luò)。
為了減少廣告過期的可能,緩存可以采用使廣告失效的方法將過期廣告從其中刪除。一種使廣告失效的方法是在每個(gè)廣告中加入一個(gè)時(shí)間標(biāo)記。當(dāng)一個(gè)廣告被發(fā)現(xiàn)后,就在其中加入時(shí)間標(biāo)記,同時(shí)設(shè)置廣告的最長有效期,這樣在使用一個(gè)廣告之前,緩存會(huì)檢查廣告的時(shí)間標(biāo)記,如果認(rèn)為其不再有效,就將其刪除。緩存會(huì)周期性地檢查其中過期的廣告,以此減少存儲(chǔ)消耗和提高響應(yīng)速度。緩存可能使用的另一種使廣告失效的技術(shù)是先進(jìn)先出的廣告棧技術(shù),這種技術(shù)將廣告緩存看作是一個(gè)棧,當(dāng)該緩存裝滿了廣告之后,如果這時(shí)又有新發(fā)現(xiàn)的廣告要存入,則緩存會(huì)先刪除其中最老的廣告,然后再執(zhí)行新廣告存入操作。
1.2 直接發(fā)現(xiàn)
在同一個(gè)局域網(wǎng)中的節(jié)點(diǎn),能夠不依靠中間的集合節(jié)點(diǎn)的幫助而直接發(fā)現(xiàn)對(duì)方。直接發(fā)現(xiàn)技術(shù)需要節(jié)點(diǎn)使用網(wǎng)絡(luò)傳輸?shù)膹V播或多播能力。當(dāng)其他節(jié)點(diǎn)通過直接發(fā)現(xiàn)機(jī)制被發(fā)現(xiàn)后,節(jié)點(diǎn)就可以通過直接和這些被發(fā)現(xiàn)的節(jié)點(diǎn)通信的方式來發(fā)現(xiàn)其他的廣告,而不需要使用廣播或多播的能力。但是,這種發(fā)現(xiàn)技術(shù)要求節(jié)點(diǎn)必須限制在本地局域網(wǎng)內(nèi),而且一般不能用于發(fā)現(xiàn)本地網(wǎng)絡(luò)外的其它節(jié)點(diǎn)。發(fā)現(xiàn)本地網(wǎng)絡(luò)外的其它節(jié)點(diǎn)和廣告,需要使用基于集合節(jié)點(diǎn)的間接發(fā)現(xiàn)技術(shù)。
1.3 間接發(fā)現(xiàn)
間接發(fā)現(xiàn)技術(shù)需要借助集合節(jié)點(diǎn)代替節(jié)點(diǎn)執(zhí)行發(fā)現(xiàn)操作。本地局域網(wǎng)中的節(jié)點(diǎn)可以用該技術(shù)找到其它節(jié)點(diǎn),而不需用廣播或多播能力,同時(shí)本地網(wǎng)絡(luò)中的節(jié)點(diǎn)也可用該技術(shù)去發(fā)現(xiàn)本地網(wǎng)絡(luò)外的節(jié)點(diǎn)。
集合節(jié)點(diǎn)為節(jié)點(diǎn)提供了兩種可能的方式執(zhí)行發(fā)現(xiàn)操作:傳播方式:集合節(jié)點(diǎn)發(fā)送發(fā)現(xiàn)請求給網(wǎng)絡(luò)上它知道的那些節(jié)點(diǎn),其中包括其它的集合節(jié)點(diǎn)和一般的節(jié)點(diǎn);緩存廣告方式:和一般節(jié)點(diǎn)利用緩存廣告的機(jī)制來減少網(wǎng)絡(luò)流量一樣,集合節(jié)點(diǎn)也能夠利用緩存廣告機(jī)制響應(yīng)其它節(jié)點(diǎn)的發(fā)現(xiàn)請求。這兩種技術(shù)為集合節(jié)點(diǎn)緩存大量的廣告以及服務(wù)大量的一般節(jié)點(diǎn)提供了一種有效的解決方案。集合節(jié)點(diǎn)能夠?qū)碜砸话愎?jié)點(diǎn)或其它集合節(jié)點(diǎn)的響應(yīng)廣告緩存起來方便以后使用,從而更進(jìn)一步減少了網(wǎng)絡(luò)流量、提高了網(wǎng)絡(luò)性能。
盡管緩存廣告機(jī)制減少了發(fā)現(xiàn)資源所需的網(wǎng)絡(luò)流量,但如果沒有任何限制地傳播發(fā)現(xiàn)請求給其它集合節(jié)點(diǎn),那么就會(huì)導(dǎo)致P2P網(wǎng)絡(luò)中出現(xiàn)嚴(yán)重的網(wǎng)絡(luò)堵塞。為了防止發(fā)現(xiàn)請求的無限制地傳播,發(fā)現(xiàn)請求所在消息通常會(huì)包含一個(gè)TTL屬性,該屬性的含義是一個(gè)發(fā)現(xiàn)請求可在網(wǎng)絡(luò)節(jié)點(diǎn)間傳播的最大次數(shù)。當(dāng)一個(gè)集合節(jié)點(diǎn)接收到一個(gè)包含發(fā)現(xiàn)請求的消息后,這個(gè)集合節(jié)點(diǎn)會(huì)將該消息的TTL原值減1,如果減1后TTL值為0,則這個(gè)集合節(jié)點(diǎn)會(huì)將該消息丟棄,否則這個(gè)集合節(jié)點(diǎn)會(huì)將該消息繼續(xù)傳播到其它節(jié)點(diǎn)。
2 發(fā)現(xiàn)集合節(jié)點(diǎn)和轉(zhuǎn)發(fā)節(jié)點(diǎn)
對(duì)于大多數(shù)內(nèi)網(wǎng)節(jié)點(diǎn)而言,找到集合節(jié)點(diǎn)和路由節(jié)點(diǎn)對(duì)于其能否加入P2P網(wǎng)絡(luò)至關(guān)重要。由于內(nèi)部網(wǎng)絡(luò)中防火墻的限制,一個(gè)內(nèi)網(wǎng)節(jié)點(diǎn)沒有能力利用直接發(fā)現(xiàn)機(jī)制發(fā)現(xiàn)位于內(nèi)部網(wǎng)絡(luò)之外的其它節(jié)點(diǎn),然而該節(jié)點(diǎn)仍然能夠利用內(nèi)部網(wǎng)絡(luò)中的集合節(jié)點(diǎn)和路由節(jié)點(diǎn)執(zhí)行間接發(fā)現(xiàn)操作。
在大多數(shù)P2P應(yīng)用中,最容易使一個(gè)節(jié)點(diǎn)找到集合節(jié)點(diǎn)和路由節(jié)點(diǎn)的方法是在該節(jié)點(diǎn)中植入固定的一套集合點(diǎn)和路由節(jié)點(diǎn)的地址,這些集合節(jié)點(diǎn)和轉(zhuǎn)發(fā)節(jié)點(diǎn)通常都具有靜態(tài)的或可解析的IP地址,并且被其它節(jié)點(diǎn)用作進(jìn)入P2P網(wǎng)絡(luò)的入口。一個(gè)位于防火墻后的內(nèi)網(wǎng)節(jié)點(diǎn)可以使這些靜態(tài)的集合節(jié)點(diǎn)作為發(fā)現(xiàn)其它節(jié)點(diǎn)和服務(wù)的起點(diǎn),同時(shí)能夠使用一系列轉(zhuǎn)發(fā)節(jié)點(diǎn)穿越防火墻連接其它節(jié)點(diǎn)。
3 穿越防火墻/NAT
NAT和防火墻的聯(lián)合使用將導(dǎo)致節(jié)點(diǎn)P2P通信的不便。如果連接不是由內(nèi)網(wǎng)節(jié)點(diǎn)主動(dòng)發(fā)起的,那么外網(wǎng)節(jié)點(diǎn)就無法和內(nèi)網(wǎng)節(jié)點(diǎn)連接通信,而且防火墻也可以基于連接使用的協(xié)議或目標(biāo)節(jié)點(diǎn)IP及端口號(hào)阻止該連接。
內(nèi)網(wǎng)節(jié)點(diǎn)可以用來解決這個(gè)問題的工具是其自身擁有的與防火墻/NAT外部的外網(wǎng)節(jié)點(diǎn)主動(dòng)建立連接的能力。內(nèi)網(wǎng)節(jié)點(diǎn)可以使用防火墻允許的協(xié)議穿越防火墻,建立和外部網(wǎng)絡(luò)的連接。通過從內(nèi)部網(wǎng)絡(luò)建立初始連接,在NAT路由表中必要的內(nèi)外網(wǎng)節(jié)點(diǎn)IP地址及端口號(hào)的映射關(guān)系就會(huì)建立起來,從而使一個(gè)外網(wǎng)節(jié)點(diǎn)可以將數(shù)據(jù)傳送到內(nèi)網(wǎng)節(jié)點(diǎn)。然而,如果防火墻被配置成阻止所有的對(duì)外連接,那么內(nèi)外網(wǎng)節(jié)點(diǎn)間的通信就完全不能進(jìn)行了。
在大多數(shù)公司的內(nèi)部網(wǎng)絡(luò)中,幾乎所有的防火墻都允許內(nèi)網(wǎng)節(jié)點(diǎn)基于HTTP協(xié)議對(duì)外部網(wǎng)絡(luò)發(fā)送連接請求,但HTTP協(xié)議并沒有為外網(wǎng)節(jié)點(diǎn)提供穿越防火墻去主動(dòng)連接內(nèi)網(wǎng)節(jié)點(diǎn)的功能。為了解決這個(gè)問題,防火墻后的內(nèi)網(wǎng)節(jié)點(diǎn)利用位于防火墻外部或防火墻外部可見的轉(zhuǎn)發(fā)節(jié)點(diǎn)實(shí)現(xiàn)穿越防火墻的功能。一個(gè)試圖和防火墻后的內(nèi)網(wǎng)節(jié)點(diǎn)主動(dòng)連接的外網(wǎng)節(jié)點(diǎn)可以先與轉(zhuǎn)發(fā)節(jié)點(diǎn)連接,防火墻后的內(nèi)網(wǎng)節(jié)點(diǎn)再周期性地連接轉(zhuǎn)發(fā)節(jié)點(diǎn),并從中取出外網(wǎng)節(jié)點(diǎn)傳入的消息。該技術(shù)必須使用防火墻和轉(zhuǎn)發(fā)節(jié)點(diǎn)可以都可以理解的協(xié)議進(jìn)行消息的傳輸。轉(zhuǎn)發(fā)節(jié)點(diǎn)可以有效地在用于P2P通信的網(wǎng)絡(luò)傳輸協(xié)議和用于穿越防火墻的網(wǎng)絡(luò)傳輸協(xié)議間進(jìn)行轉(zhuǎn)換。
4 在節(jié)點(diǎn)間路由消息
在防火墻或NAT位于兩個(gè)節(jié)點(diǎn)之間的情況下,轉(zhuǎn)發(fā)節(jié)點(diǎn)就必須用于在外網(wǎng)節(jié)點(diǎn)和位于防火墻后的內(nèi)網(wǎng)節(jié)點(diǎn)之間代理一個(gè)連接。在只有一個(gè)防火墻分隔源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)的簡單情況下,只需要一個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)。而在源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)各有一個(gè)防火墻或NAT保護(hù)的復(fù)雜情況下,就需要使用多個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)實(shí)現(xiàn)穿越雙方的防火墻/NAT的功能。
4.1 穿越單一防火墻/NAT
一個(gè)位于防火墻或NAT后面的內(nèi)網(wǎng)節(jié)點(diǎn)可以通過三個(gè)步驟向另一個(gè)外網(wǎng)節(jié)點(diǎn)發(fā)送消息:位于防火墻/NAT后的內(nèi)網(wǎng)源節(jié)點(diǎn)使用可以穿越防火墻的協(xié)議(比如HTTP協(xié)議)連接轉(zhuǎn)發(fā)節(jié)點(diǎn),并請求轉(zhuǎn)發(fā)節(jié)點(diǎn)轉(zhuǎn)發(fā)一個(gè)消息到外網(wǎng)目標(biāo)節(jié)點(diǎn);轉(zhuǎn)發(fā)節(jié)點(diǎn)接受來自位于防火墻后的內(nèi)網(wǎng)源節(jié)點(diǎn)的連接,并代表該節(jié)點(diǎn)初始化和外網(wǎng)目標(biāo)節(jié)點(diǎn)的連接,這個(gè)連接使用轉(zhuǎn)發(fā)節(jié)點(diǎn)和外網(wǎng)目標(biāo)節(jié)點(diǎn)共同使用的協(xié)議;消息從內(nèi)網(wǎng)源節(jié)點(diǎn)經(jīng)由轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送到外網(wǎng)目標(biāo)節(jié)點(diǎn)。此時(shí)轉(zhuǎn)發(fā)節(jié)點(diǎn)充當(dāng)了內(nèi)網(wǎng)源節(jié)點(diǎn)的代理。
為了讓一個(gè)外網(wǎng)節(jié)點(diǎn)可以發(fā)送消息到位于防火墻/NAT后的內(nèi)網(wǎng)節(jié)點(diǎn),外網(wǎng)源節(jié)點(diǎn)必須知道描述了能將消息路由到內(nèi)網(wǎng)目標(biāo)節(jié)點(diǎn)的一個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)的路由信息,該路由信息可以通過向P2P網(wǎng)絡(luò)發(fā)送發(fā)現(xiàn)請求獲得。
4.2 穿越兩個(gè)防火墻/NAT
大多數(shù)位于Internet邊緣的節(jié)點(diǎn)很可能被防火墻/NAT保護(hù)起來。因此,任何從源節(jié)點(diǎn)發(fā)送到目標(biāo)節(jié)點(diǎn)的消息可能需要穿越兩個(gè)防火墻/NAT邊界。穿越兩個(gè)防火墻的過程與穿越一個(gè)防火墻的過程非常相似,基本上就是兩個(gè)方向的單防火墻穿越方案的結(jié)合。
5 結(jié)語
在JXTA網(wǎng)絡(luò)中,發(fā)現(xiàn)廣告和各類節(jié)點(diǎn)是進(jìn)行P2P通信的基礎(chǔ),而穿越防火墻和NAT在節(jié)點(diǎn)間路由消息是P2P通信過程中必須解決的技術(shù)難題,本文在原理上針對(duì)這些問題進(jìn)行了比較詳細(xì)的分析,為基于JXTA協(xié)議的P2P應(yīng)用程序開發(fā)提供了理論依據(jù)。
參考文獻(xiàn):
[1] 胡放明,李俊兵,賀貴明,等.對(duì)P2P網(wǎng)中發(fā)現(xiàn)機(jī)制的研究[J].計(jì)算機(jī)應(yīng)用.2004(06):46-47.
[2] 李志晉,段富.基于語義的Web服務(wù)發(fā)現(xiàn)機(jī)制的研究[J].太原理工大學(xué)學(xué)報(bào).2006(S1):82-84.
[3] 歐陽曄,姜浩,潘順.移動(dòng)Agent域間發(fā)現(xiàn)機(jī)制研究[J].現(xiàn)代計(jì)算機(jī): 專業(yè)版.2003(01):10-12.
[4] 馮百明,劉興武,李偉.一種面向消費(fèi)者的服務(wù)發(fā)現(xiàn)機(jī)制[J].計(jì)算機(jī)研究與發(fā)展.2003(12):1787-1790.
[5] 馬秀琴,馮百明,秦紅武.一種面向服務(wù)提供者的服務(wù)發(fā)現(xiàn)機(jī)制[J].甘肅廣播電視大學(xué)學(xué)報(bào).2005(01):60-63.
[6] 秦志光,楊毅,楊磊,等.P2P網(wǎng)絡(luò)中利用推拉模式實(shí)現(xiàn)的信譽(yù)系統(tǒng)[J].計(jì)算機(jī)工程與應(yīng)用.2013(05):88-92.
[7] 汪胡青,孫知信.P2P網(wǎng)絡(luò)中惡意節(jié)點(diǎn)控制算法的研究[J].計(jì)算機(jī)工程.2012(17):142-144.
[8] 譚振華,王興偉,程維,等.基于多維歷史向量的P2P分布式信任評(píng)價(jià)模型[J].計(jì)算機(jī)學(xué)報(bào).2010(09):1725-1735.
[9] 陳愛國,徐國愛,楊義先.評(píng)價(jià)離散度敏感的P2P交易系統(tǒng)信任模型[J].電子科技大學(xué)學(xué)報(bào).2010(03):425-429.
[10] 譚振華,王賀,程維,等.基于通信歷史相關(guān)性的P2P網(wǎng)絡(luò)分布式信任模型[J].東北大學(xué)學(xué)報(bào): 自然科學(xué)版.2009(09):1245-1248.
[11] 苗光勝,馮登國,蘇璞睿.P2P信任模型中基于行為相似度的共謀團(tuán)體識(shí)別模型[J].通信學(xué)報(bào).2009(08):9-20.
[12] 姜守旭,李建中.一種P2P電子商務(wù)系統(tǒng)中基于聲譽(yù)的信任機(jī)制[J].軟件學(xué)報(bào).2007(10):2551-2563.
[13] 宋芳.P2P技術(shù)的研究與應(yīng)用[J].湘潭師范學(xué)院學(xué)報(bào): 自然科學(xué)版.
2009(04):70-72.
[14] 宮麗華,李登道,李克峰.P2P技術(shù)的研究與應(yīng)用現(xiàn)狀[J].電腦知識(shí)與技術(shù).2009(36):10556-10558.
[15] 潘國浩.因特網(wǎng)中P2P技術(shù)的研究與應(yīng)用[J].電腦知識(shí)與技術(shù): 學(xué)術(shù)交流.2007(07):57-59.
[16] 陳姝,方濱興,周勇林.P2P技術(shù)的研究與應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用.2002(13):20-23.