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