專利名稱::一種基于阿瑞斯協(xié)議的對(duì)等網(wǎng)絡(luò)緩存系統(tǒng)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明是一種阿瑞斯(Ares)對(duì)等網(wǎng)絡(luò)的緩存系統(tǒng),主要用來(lái)緩解對(duì)等網(wǎng)絡(luò)流量給骨干網(wǎng)帶來(lái)的巨大壓力,屬于對(duì)等網(wǎng)絡(luò)領(lǐng)域。
背景技術(shù):
:P2P網(wǎng)絡(luò)(Peer-to-Peernetwork)即對(duì)等網(wǎng)絡(luò),是分布式系統(tǒng)與計(jì)算機(jī)網(wǎng)絡(luò)相結(jié)合的產(chǎn)物,采用對(duì)等模式工作。其本質(zhì)在于打破傳統(tǒng)的C/S模式(Client/krvermode)即客戶端/服務(wù)器模式,使一切網(wǎng)絡(luò)成員享有自由、平等、互聯(lián)的功能,它們既是客戶端又是服務(wù)器,任何兩個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)間都能共享文件、傳遞消息。Ares是一個(gè)非常不錯(cuò)的P2P文件共享體系,它始于2002年,開(kāi)始作為一個(gè)Gnutella客戶端在Gnutella網(wǎng)絡(luò)上運(yùn)營(yíng),2002年底經(jīng)過(guò)改寫(xiě),成為目前的Ares網(wǎng)絡(luò)。目前的Ares網(wǎng)絡(luò)采用混合架構(gòu),包含葉子結(jié)點(diǎn)和超級(jí)結(jié)點(diǎn)。Ares網(wǎng)絡(luò)是一種基于超級(jí)節(jié)點(diǎn)的兩層覆蓋網(wǎng)絡(luò)。在超級(jí)節(jié)點(diǎn)層,通過(guò)分布式哈希表(DHT)技術(shù)完成跨越搜索。和BitTorrent類似,Ares支持同步下載和從一個(gè)對(duì)等體到多個(gè)對(duì)等體的上載,同時(shí)支持直接超鏈接至P2P網(wǎng)絡(luò)文件的能力。Ares的優(yōu)點(diǎn)在于能快速地搜索和下載文件,并具有自設(shè)代理服務(wù)器、自訂聊天社群、內(nèi)建多媒體播放器和瀏覽器等功能,目前支持超過(guò)300,000用戶,是非常流行的P2P網(wǎng)絡(luò)。近年來(lái),隨著各種P2P應(yīng)用的流行,P2P網(wǎng)絡(luò)已成為互聯(lián)網(wǎng)的重要組成部分。據(jù)統(tǒng)計(jì),目前P2P流量占據(jù)了互聯(lián)網(wǎng)流量的60%以上,其中Ares業(yè)務(wù)占很大一部分??焖僭鲩L(zhǎng)的P2P流量給運(yùn)營(yíng)商帶來(lái)了很大的問(wèn)題,P2P用戶能以運(yùn)營(yíng)商分配的帶寬進(jìn)行全速下載,而這些流量只有小部分請(qǐng)求本地內(nèi)網(wǎng)結(jié)點(diǎn),大部分以運(yùn)營(yíng)商出口流量的方式流向外網(wǎng)。為緩解P2P流量給骨干網(wǎng)帶來(lái)的巨大壓力,降低運(yùn)營(yíng)商的成本,目前解決該問(wèn)題的方法主要分為限制和緩存兩種方法。所謂限制是通過(guò)對(duì)P2P協(xié)議的識(shí)別,在網(wǎng)絡(luò)出口處對(duì)P2P流量進(jìn)行限速或攔截,但這種方法會(huì)在很大程度上會(huì)降低網(wǎng)絡(luò)內(nèi)的用戶體驗(yàn)。所謂緩存是指在網(wǎng)絡(luò)內(nèi)部署P2P內(nèi)容緩存服務(wù)器,使內(nèi)網(wǎng)用戶從緩存服務(wù)器上獲得內(nèi)容,來(lái)減少網(wǎng)絡(luò)出口的P2P流量。鑒于復(fù)雜的Ares網(wǎng)絡(luò)服務(wù),通過(guò)部署P2P緩存系統(tǒng),網(wǎng)絡(luò)運(yùn)營(yíng)商可以利用有限的投入支撐增長(zhǎng)的P2P業(yè)務(wù)需求,從而解決當(dāng)前P2P技術(shù)帶來(lái)的帶寬沖擊。另外,P2P緩存系統(tǒng)的使用還可以改善P2P應(yīng)用的用戶體驗(yàn),從而吸引更多P2P客戶,并可能為網(wǎng)絡(luò)運(yùn)營(yíng)商帶來(lái)更多客戶。因此,P2P緩存系統(tǒng)的部署不僅能緩和P2P技術(shù)和網(wǎng)絡(luò)運(yùn)營(yíng)商的矛盾,而且能引導(dǎo)二者協(xié)同發(fā)展,創(chuàng)造出雙贏局面。
發(fā)明內(nèi)容技術(shù)問(wèn)題本發(fā)明的目的是提供一種基于阿瑞斯協(xié)議的對(duì)等網(wǎng)絡(luò)緩存系統(tǒng)的實(shí)現(xiàn)方法,該方案具有新穎性、靈活性、易擴(kuò)展性和易操作性,具有很好的市場(chǎng)前景。技術(shù)方案=Ares緩存系統(tǒng)包括以下三個(gè)組成部分協(xié)議分析器、索引服務(wù)器和緩存服務(wù)器。協(xié)議分析器根據(jù)哈希(Hash)搜索請(qǐng)求報(bào)文的應(yīng)用層特征字,將報(bào)文識(shí)別,然后對(duì)報(bào)文進(jìn)行分析、提取源地址和下載資源ID等信息,并把其發(fā)送到索引服務(wù)器,等待索引服務(wù)器返回資源節(jié)點(diǎn)列表信息,最后根據(jù)返回的信息,構(gòu)造哈希搜索返回結(jié)果報(bào)文并傳給Ares客戶端。索引服務(wù)器接收協(xié)議分析器發(fā)送來(lái)的資源信息查詢請(qǐng)求,將搜索到的擁有此資源的內(nèi)網(wǎng)節(jié)點(diǎn)列表和緩存服務(wù)器的列表地址等信息返回。如果沒(méi)有在索引服務(wù)器中查詢到需要的文件信息,則通知協(xié)議分析器對(duì)用戶的哈希搜索請(qǐng)求報(bào)文不做處理,并告知緩存服務(wù)器下載此文件以供內(nèi)網(wǎng)用戶分享,下載完成后通知索引服務(wù)模塊進(jìn)行信息更新。索引服務(wù)器設(shè)置閾值來(lái)對(duì)資源進(jìn)行更新。緩存服務(wù)器主要功能有響應(yīng)Ares內(nèi)網(wǎng)節(jié)點(diǎn)的下載請(qǐng)求,為其提供下載服務(wù);響應(yīng)索引服務(wù)器發(fā)送來(lái)的下載請(qǐng)求和哈希搜索請(qǐng)求,根據(jù)超級(jí)節(jié)點(diǎn)的返回信息,構(gòu)建資源節(jié)點(diǎn)列表并發(fā)送給索引服務(wù)器。該系統(tǒng)實(shí)現(xiàn)方法包括的步驟為步驟1).進(jìn)行需求分析,對(duì)Ares緩存系統(tǒng)需要完成的功能進(jìn)行分析,并生成需求分析文檔;步驟幻.按照步驟1的分析文檔設(shè)計(jì)模塊,對(duì)各模塊的功能進(jìn)行詳細(xì)分析,生成各個(gè)模塊之間的邏輯關(guān)系和功能說(shuō)明文檔;步驟幻.按照步驟2的文檔,設(shè)計(jì)與實(shí)現(xiàn)協(xié)議分析模塊。協(xié)議分析模塊由以下的幾個(gè)部分組成報(bào)文識(shí)別、提取報(bào)文、發(fā)送報(bào)文以及構(gòu)造報(bào)文。協(xié)議分析模塊中的識(shí)別效率,影響著整個(gè)系統(tǒng)的工作效率。報(bào)文識(shí)別模塊根據(jù)報(bào)文長(zhǎng)度以及固定位特征字來(lái)識(shí)別Ares對(duì)等網(wǎng)絡(luò)服務(wù)中的哈希搜索請(qǐng)求報(bào)文;提取報(bào)文模塊是提取哈希搜索請(qǐng)求報(bào)文中的源地址和下載資源號(hào)信息,進(jìn)而由源地址和下載資源號(hào)生成哈希值,用來(lái)標(biāo)識(shí)不同用戶的不同文件資源;發(fā)送報(bào)文模塊將提取的下載資源號(hào)和生成的哈希值發(fā)送給索引服務(wù)器,并等待索引服務(wù)器返回查詢結(jié)果;構(gòu)造報(bào)文模塊根據(jù)索引服務(wù)器返回的報(bào)文,判斷索引服務(wù)器查詢是否成功,如果索引服務(wù)器查詢成功,說(shuō)明內(nèi)網(wǎng)有相關(guān)的下載資源并返回了內(nèi)網(wǎng)中的資源列表,結(jié)合哈希搜索請(qǐng)求報(bào)文頭部和索引服務(wù)器返回的內(nèi)網(wǎng)資源列表,構(gòu)造出哈希搜索返回結(jié)果報(bào)文并發(fā)送給Ares客戶端,Ares客戶端就可以根據(jù)返回的資源地址進(jìn)行內(nèi)網(wǎng)下載,如果索引服務(wù)器查詢失敗,說(shuō)明內(nèi)網(wǎng)中沒(méi)有相關(guān)的下載資源,將相應(yīng)哈希搜索請(qǐng)求報(bào)文放行到外網(wǎng),不做其他處理;步驟4).按照步驟2的文檔,設(shè)計(jì)與實(shí)現(xiàn)索引服務(wù)模塊。索引服務(wù)模塊主要完成數(shù)據(jù)檢索功能以及和協(xié)議分析器、緩存服務(wù)器的交互功能。首先把內(nèi)網(wǎng)節(jié)點(diǎn)列表信息存儲(chǔ)在Memcached中,Memcached是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng)。在Mysql數(shù)據(jù)庫(kù)中存儲(chǔ)緩存服務(wù)器的地址信息和文件哈希值并把Mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射到Memcached中。當(dāng)查詢請(qǐng)求到來(lái)時(shí),先在Memcached所管理的內(nèi)存數(shù)據(jù)庫(kù)中查找,若沒(méi)有發(fā)現(xiàn)相應(yīng)的資源,則需要在Mysql數(shù)據(jù)庫(kù)中進(jìn)行查詢,找到數(shù)據(jù)后同步到Memcached中。若沒(méi)有在Mysql數(shù)據(jù)庫(kù)中發(fā)現(xiàn)所需查詢的表項(xiàng),索引服務(wù)器發(fā)送命令給協(xié)議分析系統(tǒng),使其放棄對(duì)內(nèi)網(wǎng)用戶請(qǐng)求報(bào)文的篡改,同時(shí)發(fā)送下載請(qǐng)求給緩存服務(wù)器進(jìn)行下載。下載完成后,Mysql數(shù)據(jù)庫(kù)將文件哈希值和緩存服務(wù)器的信息添加至表中,完成更新工作,同時(shí)通過(guò)Mysql的觸發(fā)機(jī)制,將表項(xiàng)同步至Memcached,以待用戶查詢;步驟5).按照步驟2的文檔,設(shè)計(jì)與頭現(xiàn)緩存服務(wù)模塊。緩存服務(wù)器的主要功能有上傳功能響應(yīng)內(nèi)網(wǎng)節(jié)點(diǎn)的下載請(qǐng)求,與內(nèi)網(wǎng)節(jié)點(diǎn)協(xié)商傳輸端口,用協(xié)商好的傳輸端口為其提供下載服務(wù);下載功能與超級(jí)節(jié)點(diǎn)建立連接,登陸4個(gè)超級(jí)節(jié)點(diǎn),進(jìn)行哈希搜索,并根據(jù)超級(jí)節(jié)點(diǎn)返回的資源列表進(jìn)行文件分片下載;響應(yīng)下載請(qǐng)求功能丌啟特殊的端口進(jìn)行監(jiān)聽(tīng),對(duì)索引服務(wù)器發(fā)送來(lái)的下載請(qǐng)求進(jìn)行處理,并根據(jù)傳輸來(lái)的哈希值進(jìn)行下載;響應(yīng)哈希搜索請(qǐng)求功能對(duì)索引服務(wù)器發(fā)送來(lái)的哈希搜索請(qǐng)求進(jìn)行響應(yīng),向超級(jí)節(jié)點(diǎn)發(fā)送哈希搜索請(qǐng)求,根據(jù)超級(jí)節(jié)點(diǎn)的返回信息,構(gòu)建資源節(jié)點(diǎn)列表并發(fā)送給索引服務(wù)器。有益效果本發(fā)明是一個(gè)針對(duì)Ares對(duì)等網(wǎng)絡(luò)緩存系統(tǒng)的實(shí)現(xiàn)方法,本發(fā)明通過(guò)引導(dǎo)內(nèi)網(wǎng)P2P用戶互聯(lián),充分利用內(nèi)網(wǎng)P2P結(jié)點(diǎn)的服務(wù)能力,有效地降低了P2P緩存服務(wù)器負(fù)載壓力,使得通過(guò)部署少量的P2P緩存服務(wù)器,就可以在不影響用戶體驗(yàn)的前提下,減少P2P流量對(duì)網(wǎng)絡(luò)運(yùn)營(yíng)商網(wǎng)絡(luò)出口帶寬的占用。在整體上提高了P2P緩存系統(tǒng)的性能。相比以往的方法有一些顯著的優(yōu)點(diǎn)良好的系統(tǒng)擴(kuò)展性由于系統(tǒng)模塊之間采用的是獨(dú)立模塊化,功能并行層次化設(shè)計(jì),系統(tǒng)模塊之間的通信機(jī)制完全采用層次化的結(jié)構(gòu),因此可以方便地添加新的功能,也可以很容易地升級(jí)現(xiàn)有的功能,所以該系統(tǒng)擁有良好的可擴(kuò)展性。高度的可靠性和穩(wěn)定性通過(guò)對(duì)Ares協(xié)議分析系統(tǒng)的單元測(cè)試、集成測(cè)試以及整個(gè)P2P緩存系統(tǒng)的系統(tǒng)測(cè)試,表明該協(xié)議分析系統(tǒng)運(yùn)行狀況良好,占用系統(tǒng)資源少,擁有良好的容錯(cuò)機(jī)制以及災(zāi)難恢復(fù)能力。圖1是Ares緩存系統(tǒng)的物理組網(wǎng)圖,圖2是Ares緩存系統(tǒng)的結(jié)構(gòu)圖,圖3是Ares緩存系統(tǒng)的流程圖,圖4是協(xié)議分析器的時(shí)序圖,圖5是索引服務(wù)器的流程圖,圖6是緩存服務(wù)器的時(shí)序圖,圖7是緩存服務(wù)器哈希搜索流程圖。具體實(shí)施例方式體系結(jié)構(gòu)協(xié)議分析器報(bào)文識(shí)別功能基于應(yīng)用層數(shù)據(jù)檢測(cè)的P2P流量識(shí)別技術(shù)是通過(guò)協(xié)議分析與還原技術(shù),提取P2P應(yīng)用層數(shù)據(jù)即P2P載荷,通過(guò)分析P2P載荷所包含的協(xié)議特征值,來(lái)判斷是否屬于P2P應(yīng)用。因此,這類方法也叫做深層數(shù)據(jù)包檢測(cè)技術(shù)(DPI)。本發(fā)明的報(bào)文識(shí)別部分即采用DPI掃描技術(shù),根據(jù)固定位特征字來(lái)協(xié)議識(shí)別Ares特定P2P網(wǎng)絡(luò)服務(wù)中的哈希搜索報(bào)文以及一些相關(guān)交互報(bào)文。協(xié)議分析器構(gòu)造報(bào)文功能根據(jù)緩存于先進(jìn)先出隊(duì)列的索引服務(wù)器返回的擁有資源節(jié)點(diǎn)列表信息的報(bào)文與緩存于分離鏈接散列表中的哈希搜索請(qǐng)求報(bào)文,構(gòu)造哈希搜索返回結(jié)果報(bào)文。報(bào)文構(gòu)造成功后,按照原路返回給Ares客戶端,使其完成下載。5索引服務(wù)器數(shù)據(jù)檢索功能=Mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射到Memcached中,當(dāng)查詢請(qǐng)求到來(lái)時(shí),先在Memcached所管理的內(nèi)存數(shù)據(jù)庫(kù)中查找,若沒(méi)有發(fā)現(xiàn)相應(yīng)的資源,則需要在Mysql數(shù)據(jù)庫(kù)中進(jìn)行查詢,找到數(shù)據(jù)后同步到Memcached中。若沒(méi)有在Mysql數(shù)據(jù)庫(kù)中發(fā)現(xiàn)所需查詢的表項(xiàng),索引服務(wù)器發(fā)送命令給協(xié)議分析系統(tǒng),使其放棄對(duì)內(nèi)網(wǎng)用戶請(qǐng)求報(bào)文的篡改,同時(shí)發(fā)送下載請(qǐng)求給緩存服務(wù)器進(jìn)行下載。下載完成后,Mysql數(shù)據(jù)庫(kù)將文件hashid和緩存服務(wù)器的信息添加至表中,完成更新工作,同時(shí)通過(guò)Mysql的觸發(fā)機(jī)制,將表項(xiàng)同步至Memcached,以待用戶查詢。索引服務(wù)器信息交互功能與協(xié)議分析模塊的交互協(xié)議分析模塊識(shí)別用戶請(qǐng)求資源的報(bào)文,提取出其中的資源ID,發(fā)送給索引服務(wù)器,在索引服務(wù)器中查找后,如果有,則返回資源列表;如果沒(méi)有,則要求緩存服務(wù)器到外網(wǎng)下載。與緩存服務(wù)器模塊的交互緩存服務(wù)器上報(bào)其擁有的資源,通知索引服務(wù)器及時(shí)更新;提供和緩存系統(tǒng)之間的TCP資源查詢功能;對(duì)命中緩存的次數(shù)進(jìn)行統(tǒng)計(jì);索引服務(wù)器統(tǒng)計(jì)在一定時(shí)間內(nèi)用戶請(qǐng)求資源文件的次數(shù),確定是否進(jìn)行資源更新。當(dāng)達(dá)到事先設(shè)定的閾值后,發(fā)送HashID值到緩存服務(wù)器,由緩存服務(wù)器到外網(wǎng)為其進(jìn)行資源更新。緩存服務(wù)器哈希搜索功能對(duì)索引服務(wù)器發(fā)送來(lái)的哈希搜索請(qǐng)求進(jìn)行響應(yīng),向超級(jí)節(jié)點(diǎn)發(fā)送哈希搜索請(qǐng)求,根據(jù)超級(jí)節(jié)點(diǎn)的返回信息,構(gòu)建資源節(jié)點(diǎn)列表并發(fā)送給索引服務(wù)器。緩存服務(wù)器文件下載功能丌啟特殊的端口進(jìn)行監(jiān)聽(tīng),對(duì)內(nèi)網(wǎng)結(jié)點(diǎn)和索引服務(wù)器發(fā)送來(lái)的下載請(qǐng)求進(jìn)行處理,與超級(jí)節(jié)點(diǎn)建立連接,登陸4個(gè)超級(jí)節(jié)點(diǎn),進(jìn)行哈希搜索,并根據(jù)超級(jí)節(jié)點(diǎn)返回的資源列表進(jìn)行文件分片下載。方法流程該部分詳細(xì)說(shuō)明
發(fā)明內(nèi)容各個(gè)部分的設(shè)計(jì)與實(shí)現(xiàn)協(xié)議分析器報(bào)文識(shí)別功能實(shí)現(xiàn)利用Linux的Netfilter防火墻里的TCP/IP協(xié)議棧的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)SocketBuffer(SkJxiff),來(lái)操作流經(jīng)的數(shù)據(jù)包。如果是報(bào)文分片的,或是無(wú)連接數(shù),則返回?zé)o操作。當(dāng)一個(gè)報(bào)文流經(jīng)Netfilter第一個(gè)鉤子函數(shù)NF_IP_PRE_ROUTING,會(huì)被送到內(nèi)存的控制結(jié)構(gòu)sk_buff中暫時(shí)存儲(chǔ)。在這個(gè)控制結(jié)構(gòu)里,有個(gè)指向網(wǎng)絡(luò)報(bào)文的指針(如Skb->nh),首先識(shí)別報(bào)文是否為T(mén)CP報(bào)文,再根據(jù)sk_bufT結(jié)構(gòu)提供的網(wǎng)絡(luò)層和傳輸層頭部的大小,slA->nh加上之前兩者的頭部長(zhǎng)度,指針就指向了應(yīng)用層數(shù)據(jù)的頭部(如Appdata指針)。sk_bufT里還提供數(shù)據(jù)包的總長(zhǎng)度,通過(guò)減去網(wǎng)絡(luò)層和傳輸層頭部的大小,就能得到應(yīng)用層數(shù)據(jù)的長(zhǎng)度。上述準(zhǔn)備工作完成后,就可以通過(guò)Appdata指針來(lái)比對(duì)需要識(shí)別的Ares報(bào)文,也就是通過(guò)對(duì)報(bào)文長(zhǎng)度和固定位進(jìn)行匹配來(lái)確定。本發(fā)明需要剖析Ares特定網(wǎng)絡(luò)服務(wù)中的哈希搜索報(bào)文,判斷是否為Ares的上行TCP數(shù)據(jù)包中的哈希搜索請(qǐng)求報(bào)文數(shù)據(jù)包,不是則放行數(shù)據(jù)包。協(xié)議分析器構(gòu)造報(bào)文功能實(shí)現(xiàn)索引服務(wù)器進(jìn)行檢索,如果有該ID資源,則向協(xié)議分析系統(tǒng)返回構(gòu)造哈希搜索返回結(jié)果報(bào)文所需的資源節(jié)點(diǎn)列表信息,協(xié)議分析模塊在內(nèi)核中構(gòu)造哈希搜索返回結(jié)果報(bào)文,傳給Ares客戶端。構(gòu)造報(bào)文的過(guò)程如下步驟一讀取出當(dāng)前數(shù)據(jù)包的slib結(jié)構(gòu)體0ldslib;步驟二檢查該數(shù)據(jù)包IP首部的frag_0fT成員,判斷是否是分片包。對(duì)于IP分片,調(diào)用ip_defrag把它與已經(jīng)收到的IP分片重組,并等待后來(lái)的IP分片,直至形成一個(gè)完整的IP數(shù)據(jù)包;步驟三檢查T(mén)CP校驗(yàn)和是否正確,若不正確則丟棄該數(shù)據(jù)包;步驟四對(duì)截獲的當(dāng)前數(shù)據(jù)包的slib結(jié)構(gòu)體,調(diào)用slib_COpy_eXpand0函數(shù)重新拷貝一個(gè)nslcb,包括slib結(jié)構(gòu)體和數(shù)據(jù)部分;步驟五更新nslcb引用的路由項(xiàng),將當(dāng)前數(shù)據(jù)包的源IP當(dāng)做路由的目的IP,同時(shí)由數(shù)據(jù)包的目的IP得到去往該源IP的路由;步驟六清除nslcb中鏈接跟蹤相關(guān)的內(nèi)容,交換源地址和目的地址的IP和端口,重新設(shè)置TCP頭部的長(zhǎng)度,TCP數(shù)據(jù)部分改為索引服務(wù)器返回的資源節(jié)點(diǎn)列表信息,并修改IP頭部中記錄的數(shù)據(jù)包的總長(zhǎng)度;步驟七重新設(shè)置TCP的序列號(hào)和確認(rèn)號(hào),序列號(hào)為原slib中的確認(rèn)號(hào),確認(rèn)號(hào)為原slA中的序列號(hào)與原TCP數(shù)據(jù)部分長(zhǎng)度的和;步驟八重新計(jì)算TCP校驗(yàn)和,修改IP包的TTL,重新計(jì)算IP數(shù)據(jù)包頭部校驗(yàn)和;步驟九使nskb和oldskb的鏈接記錄關(guān)聯(lián),讓新數(shù)據(jù)包經(jīng)過(guò)NetfiIter的NF_IP_L0CAL_0UT點(diǎn),然后查路由,最后經(jīng)由NF_IP_P0ST_R0UTING點(diǎn)將數(shù)據(jù)包發(fā)送出去。索引服務(wù)器數(shù)據(jù)檢索功能實(shí)現(xiàn)步驟一設(shè)計(jì)函數(shù)searchjiiemcached(),當(dāng)協(xié)議分析系統(tǒng)截獲到哈希搜索請(qǐng)求報(bào)文后,將其hashid發(fā)送到Memcached中查詢,此函數(shù)實(shí)現(xiàn)了在內(nèi)存中查找索引服務(wù)模塊所存儲(chǔ)的內(nèi)網(wǎng)peerlist信息。步驟二設(shè)計(jì)函數(shù)search_mysql(),當(dāng)Memcached中沒(méi)有查找到所對(duì)應(yīng)的hashid值的記錄后,索引服務(wù)模塊將在Mysql數(shù)據(jù)庫(kù)中進(jìn)行查詢,如有相應(yīng)的記錄則先返回給協(xié)議分析系統(tǒng),同時(shí)將其記錄通過(guò)數(shù)據(jù)庫(kù)的觸發(fā)機(jī)制同步到Memcached中。若在數(shù)據(jù)庫(kù)中沒(méi)有發(fā)現(xiàn)相應(yīng)的記錄,則通知緩存服務(wù)器模塊進(jìn)行下載,下載完成后將得到的信息存儲(chǔ)到Mysql中并將其同步到內(nèi)存數(shù)據(jù)庫(kù)。步驟三設(shè)計(jì)函數(shù)updatelistO,當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)被訪問(wèn)的記錄超過(guò)一定閾值的時(shí)候,數(shù)據(jù)庫(kù)向緩存服務(wù)器發(fā)送更新列表的請(qǐng)求,當(dāng)緩存服務(wù)器下載完成后將信息進(jìn)行過(guò)濾(按照IP地址段進(jìn)行過(guò)濾),將內(nèi)網(wǎng)的節(jié)點(diǎn)信息進(jìn)行保留,告知數(shù)據(jù)庫(kù)進(jìn)行更新,同時(shí),將信息同步到Memcached中。索引服務(wù)器信息交互功能實(shí)現(xiàn)由于索引服務(wù)器涉及到和協(xié)議分析器及緩存服務(wù)器的信息交互,采用多線程技術(shù)搭建印oil模型。印oil是Linux下多路復(fù)用IO接口select/poll的增強(qiáng)版本,它能顯著減少程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率,印oil模型的工作流程為首先通過(guò)印ollcreate()函數(shù)來(lái)創(chuàng)建一個(gè)epoll的句柄。這個(gè)函數(shù)會(huì)返回一個(gè)新的印oil句柄,之后的所有操作將通過(guò)這個(gè)句柄來(lái)進(jìn)行操作。在用完之后,用closeO來(lái)關(guān)閉這個(gè)創(chuàng)建出來(lái)的印oil句柄。之后在網(wǎng)絡(luò)主循環(huán)里面,每一幀的調(diào)用印oll_Wait()函數(shù)來(lái)查詢所有的網(wǎng)絡(luò)接口,看哪一個(gè)可以讀,哪一個(gè)可以寫(xiě)。當(dāng)^olljait這個(gè)函數(shù)操作成功之后,epoll_events里面將儲(chǔ)存所有的讀寫(xiě)事件。max_events是當(dāng)前需要監(jiān)聽(tīng)的所有socket句柄數(shù)。timeout是印oll_wait的超時(shí),為O的時(shí)候表示馬上返回,為-1的時(shí)候表示一直等下去,直到有事件發(fā)生,為任意正整數(shù)的時(shí)候表示等這么長(zhǎng)的時(shí)間,如果一直沒(méi)有事件,則放棄。如果網(wǎng)絡(luò)主循環(huán)是單線程,可以用-ι來(lái)等,這樣可以保證效率,如果是和主邏輯在同一個(gè)線程,則可以用0來(lái)保證主循環(huán)的效率。印oll_Wait()范圍之后應(yīng)該是一個(gè)循環(huán),遍利所有的事件如果是主socket的事件的話,則表示有新連接進(jìn)入了,進(jìn)行新連接的處理,并將新連接置于非阻塞模式。隨后將新連接也加入印oil的監(jiān)聽(tīng)隊(duì)列。設(shè)置好event之后,將這個(gè)新的event通過(guò)印oll_ctl()函數(shù)加入到epoll的監(jiān)聽(tīng)隊(duì)列里面。如果不是主socket的事件的話,則代表是一個(gè)用戶socket的事件,則來(lái)處理這個(gè)用戶socket的事情。緩存服務(wù)器哈希搜索功能實(shí)現(xiàn)步驟一設(shè)計(jì)as_searchman_locate()函數(shù)創(chuàng)建并發(fā)送Hash搜索,調(diào)用as_hashtable_lookup()查詢消息管理器是否包含此hash信息,若沒(méi)有則調(diào)用as_search_create_locate()新建Hash搜索,然后調(diào)用as_hashtable_insert()插入此消息到管理器中,若插入失敗,調(diào)用as_hashtable_remove_int()刪除此Hash搜索消息,并as_search_free()釋放此消息,最后調(diào)用asjessmaruforeach()依次發(fā)送管理器中的消息到相連的超級(jí)節(jié)點(diǎn)。步驟二設(shè)計(jì)hashtable_search()函數(shù)查詢哈希表指定項(xiàng),as_hashtable_create_mem()調(diào)用hashtable_new()為返回結(jié)果建立哈希表;as_hashtable_create_int()調(diào)用hashtablejewO建立哈希表存儲(chǔ)已發(fā)送的超級(jí)節(jié)點(diǎn)信息,若失敗則調(diào)用as_hashtable_free()釋放結(jié)果哈希表,并釋放此搜索消息。步驟三設(shè)計(jì)hashtable_entry()函數(shù)返回哈希表入口信息,hashtable_insert()函數(shù)插入指定項(xiàng)到哈希表,hashtable_remove()函數(shù)從哈希表刪除某項(xiàng);as_search_free()釋放Hash搜索消息。步驟四設(shè)計(jì)send_search_itr()函數(shù)發(fā)送搜索消息到相連的超級(jí)節(jié)點(diǎn),其中as_search_sent_count()用來(lái)返回已發(fā)送的超級(jí)節(jié)點(diǎn)數(shù)目,aS_Search_Sent_t0()用來(lái)判斷此搜索消息是否已經(jīng)發(fā)送到某超級(jí)節(jié)點(diǎn),as_search_send()發(fā)送一個(gè)搜索請(qǐng)求到超級(jí)節(jié);search_query_packet()^Csearch^;']packetH-ζ,ijffflas—session—send()發(fā)送報(bào)文,完畢則aS_paCket_free()釋放報(bào)文,timer_add用來(lái)設(shè)置search消息的超時(shí)時(shí)間。緩存服務(wù)器文件下載功能實(shí)現(xiàn)該模塊的主要功能能根據(jù)Hash搜索到的資源HashID信息,系統(tǒng)到外網(wǎng)去下載相應(yīng)的資源,以便以后為內(nèi)網(wǎng)用戶提供上傳服務(wù)。下載過(guò)程函數(shù)開(kāi)始文件塊下載函數(shù)aS_dOWnCOrm_Start()、文件塊下載請(qǐng)求函數(shù)downconn_request()、發(fā)送文件塊下載請(qǐng)求函數(shù)downconn_send_request()、力口密傳輸i青求函數(shù)as_encrypt_transfer_request()、下載連接函數(shù)downconn_connected()、讀取傳輸包頭部函數(shù)downconn_read_header()、PUSH回調(diào)函數(shù)downconn_push_calIback(),該函數(shù)將搜索得到的資源節(jié)點(diǎn)信息和資源節(jié)點(diǎn)答復(fù)報(bào)文中的信息進(jìn)行比對(duì),若一致則下載,否則視為無(wú)效,比對(duì)的信息有ip、port和^erName等。為方便描述,假定如下網(wǎng)絡(luò)環(huán)境主機(jī)A上安裝Ares軟件客戶端,在網(wǎng)橋上部署Ares協(xié)議分析器,主機(jī)A上所有報(bào)文流經(jīng)網(wǎng)橋,并且在內(nèi)網(wǎng)部署索引服務(wù)器和緩存服務(wù)器,構(gòu)成Ares緩存系統(tǒng)。具體實(shí)施方式如下1、主機(jī)A連接hternet并打開(kāi)Ares客戶端;82、Ares客戶端進(jìn)行搜索并下載,網(wǎng)橋截獲到報(bào)文交由協(xié)議分析器進(jìn)行分析和處理,識(shí)別是否是Ares報(bào)文,以判斷是否進(jìn)行下一步的處理;3、如果是Ares哈希搜索請(qǐng)求報(bào)文,則提取哈希搜索請(qǐng)求報(bào)文的源地址和下載資源ID,進(jìn)而由源地址和下載資源ID生成哈希值并發(fā)送給索引服務(wù)器,并等待索引服務(wù)器的返回報(bào)文;4、協(xié)議分析器讀取索引服務(wù)器返回的報(bào)文,根據(jù)報(bào)文內(nèi)容判斷是否查詢成功,如果索引服務(wù)器查詢失敗,說(shuō)明內(nèi)網(wǎng)中沒(méi)有相關(guān)的下載資源,則放行相應(yīng)的哈希搜索請(qǐng)求報(bào)文,使其到外網(wǎng)節(jié)點(diǎn)進(jìn)行搜索;如果索引服務(wù)器查詢成功,說(shuō)明內(nèi)網(wǎng)中有相關(guān)的下載資源,則根據(jù)索引服務(wù)器返回報(bào)文里的哈希值,并結(jié)合哈希搜索請(qǐng)求報(bào)文的頭部和索引服務(wù)器返回報(bào)文里的資源列表信息構(gòu)造出哈希搜索返回結(jié)果報(bào)文并返回給Ares用戶,Ares客戶端就可以根據(jù)構(gòu)造的哈希搜索返回結(jié)果報(bào)文里的資源地址進(jìn)行內(nèi)網(wǎng)下載;5、若索引服務(wù)器無(wú)該Hash記錄,則將該HashID發(fā)給緩存服務(wù)器,讓緩存服務(wù)器去外網(wǎng)下載;6、緩存服務(wù)器根據(jù)該HashID到外網(wǎng)去進(jìn)行Hash搜索并下載資源,下載完成后緩存服務(wù)器告知索引服務(wù)器,緩存中擁有該Hash資源的節(jié)點(diǎn)信息。索引服務(wù)器根據(jù)該信息選擇15條內(nèi)網(wǎng)節(jié)點(diǎn)信息和緩存服務(wù)器信息存入數(shù)據(jù)庫(kù);7、在索引服務(wù)器的數(shù)據(jù)表中設(shè)置一個(gè)點(diǎn)擊次數(shù)字段,并為其設(shè)置一個(gè)閾值。當(dāng)大于該閾值時(shí),則發(fā)送它的HashID值給緩存服務(wù)器,請(qǐng)求緩存服務(wù)器為其進(jìn)行資源列表更新;8、緩存服務(wù)器根據(jù)索引服務(wù)器告知的HashID信息,到Ares網(wǎng)絡(luò)中進(jìn)行資源列表更新,將最新的資源列表信息返回給索引服務(wù)器;9、索引服務(wù)器對(duì)外網(wǎng)節(jié)點(diǎn)按照IP地址網(wǎng)段進(jìn)行過(guò)濾后,選擇最優(yōu)的15個(gè)內(nèi)網(wǎng)節(jié)點(diǎn)資源進(jìn)行存儲(chǔ)更新。同時(shí)將點(diǎn)擊次數(shù)字段置為0。權(quán)利要求1.一種基于阿瑞斯協(xié)議的對(duì)等網(wǎng)絡(luò)緩存系統(tǒng)的實(shí)現(xiàn)方法,其特征在于該系統(tǒng)實(shí)現(xiàn)方法包括的步驟為步驟1).進(jìn)行需求分析,對(duì)協(xié)議分析系統(tǒng)需要完成的功能進(jìn)行分析,并生成需求分析文檔;步驟幻.按照步驟1的分析文檔設(shè)計(jì)模塊,對(duì)協(xié)議分析模塊、索引服務(wù)模塊、緩存服務(wù)模塊的功能進(jìn)行詳細(xì)分析,生成各個(gè)模塊之間的邏輯關(guān)系和功能說(shuō)明文檔;步驟;3).按照步驟2的文檔,設(shè)計(jì)與實(shí)現(xiàn)協(xié)議分析模塊,協(xié)議分析模塊由以下的幾個(gè)部分組成報(bào)文識(shí)別模塊、提取報(bào)文模塊、發(fā)送報(bào)文模塊以及構(gòu)造報(bào)文模塊;協(xié)議分析模塊中的識(shí)別效率影響著整個(gè)系統(tǒng)的工作效率;報(bào)文識(shí)別模塊根據(jù)報(bào)文長(zhǎng)度以及固定位特征字來(lái)識(shí)別阿瑞斯對(duì)等網(wǎng)絡(luò)服務(wù)中的哈希搜索請(qǐng)求報(bào)文;提取報(bào)文模塊是提取哈希搜索請(qǐng)求報(bào)文中的源地址和下載資源號(hào)信息,進(jìn)而由源地址和下載資源號(hào)生成哈希值,用來(lái)標(biāo)識(shí)不同用戶的不同文件資源;發(fā)送報(bào)文模塊將提取的下載資源號(hào)和生成的哈希值發(fā)送給索引服務(wù)器,并等待索引服務(wù)器返回查詢結(jié)果;構(gòu)造報(bào)文模塊根據(jù)索引服務(wù)器返回的報(bào)文,判斷索引服務(wù)器查詢是否成功,如果索引服務(wù)器查詢成功,說(shuō)明內(nèi)網(wǎng)有相關(guān)的下載資源并返回了內(nèi)網(wǎng)中的資源列表,結(jié)合哈希搜索請(qǐng)求報(bào)文頭部和索引服務(wù)器返回的內(nèi)網(wǎng)資源列表,構(gòu)造出哈希搜索返回結(jié)果報(bào)文并發(fā)送給阿瑞斯客戶端,阿瑞斯客戶端就可以根據(jù)返回的資源地址進(jìn)行內(nèi)網(wǎng)下載,如果索引服務(wù)器查詢失敗,說(shuō)明內(nèi)網(wǎng)中沒(méi)有相關(guān)的下載資源,將相應(yīng)哈希搜索請(qǐng)求報(bào)文放行到外網(wǎng),不做其他處理;步驟4).按照步驟2的文檔,設(shè)計(jì)與實(shí)現(xiàn)索引服務(wù)模塊,索引服務(wù)模塊主要完成數(shù)據(jù)檢索功能以及和協(xié)議分析器、緩存服務(wù)器的交互功能,把內(nèi)網(wǎng)節(jié)點(diǎn)列表信息存儲(chǔ)在內(nèi)存對(duì)象緩存系統(tǒng)中,在數(shù)據(jù)庫(kù)中存儲(chǔ)緩存服務(wù)器的地址信息和文件哈希值并把數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射到內(nèi)存對(duì)象緩存系統(tǒng)中,當(dāng)查詢請(qǐng)求到來(lái)時(shí),先在內(nèi)存對(duì)象緩存系統(tǒng)所管理的內(nèi)存數(shù)據(jù)庫(kù)中查找,若沒(méi)有發(fā)現(xiàn)相應(yīng)的資源,則需要在數(shù)據(jù)庫(kù)中進(jìn)行查詢,找到數(shù)據(jù)后同步到內(nèi)存對(duì)象緩存系統(tǒng)中;若沒(méi)有在數(shù)據(jù)庫(kù)中發(fā)現(xiàn)所需查詢的表項(xiàng),索引服務(wù)器發(fā)送命令給協(xié)議分析系統(tǒng),使其放棄對(duì)內(nèi)網(wǎng)用戶請(qǐng)求報(bào)文的篡改,同時(shí)發(fā)送下載請(qǐng)求給緩存服務(wù)器進(jìn)行下載,下載完成后,數(shù)據(jù)庫(kù)將文件哈希值和緩存服務(wù)器的信息添加至表中,完成更新工作,同時(shí)通過(guò)數(shù)據(jù)庫(kù)的觸發(fā)機(jī)制,將表項(xiàng)同步至內(nèi)存對(duì)象緩存系統(tǒng),以待用戶查詢;步驟5).按照步驟2的文檔,設(shè)計(jì)與實(shí)現(xiàn)緩存服務(wù)模塊,緩存服務(wù)器的主要功能有上傳功能響應(yīng)內(nèi)網(wǎng)節(jié)點(diǎn)的下載請(qǐng)求,與內(nèi)網(wǎng)節(jié)點(diǎn)協(xié)商傳輸端口,用協(xié)商好的傳輸端口為其提供下載服務(wù);下載功能與超級(jí)節(jié)點(diǎn)建立連接,登陸4個(gè)超級(jí)節(jié)點(diǎn),進(jìn)行哈希搜索,并根據(jù)超級(jí)節(jié)點(diǎn)返回的資源列表進(jìn)行文件分片下載;響應(yīng)下載請(qǐng)求功能開(kāi)啟特殊的端口進(jìn)行監(jiān)聽(tīng),對(duì)索引服務(wù)器發(fā)送來(lái)的下載請(qǐng)求進(jìn)行處理,并根據(jù)傳輸來(lái)的哈希值進(jìn)行下載;響應(yīng)哈希搜索請(qǐng)求功能對(duì)索引服務(wù)器發(fā)送來(lái)的哈希搜索請(qǐng)求進(jìn)行響應(yīng),向超級(jí)節(jié)點(diǎn)發(fā)送哈希搜索請(qǐng)求,根據(jù)超級(jí)節(jié)點(diǎn)的返回信息,構(gòu)建資源節(jié)點(diǎn)列表并發(fā)送給索引服務(wù)器。全文摘要基于阿瑞斯協(xié)議的對(duì)等網(wǎng)絡(luò)緩存系統(tǒng)及其實(shí)現(xiàn)方法包括以下三個(gè)組成部分協(xié)議分析器、索引服務(wù)器和緩存服務(wù)器。協(xié)議分析器根據(jù)深層數(shù)據(jù)包檢測(cè)技術(shù)識(shí)別哈希搜索請(qǐng)求報(bào)文,然后對(duì)報(bào)文進(jìn)行分析、提取源地址和下載資源標(biāo)識(shí)信息并發(fā)送到索引服務(wù)器,索引服務(wù)器將搜索到的擁有此資源的內(nèi)網(wǎng)節(jié)點(diǎn)列表和緩存服務(wù)器的列表地址等信息返回。協(xié)議分析器根據(jù)返回的信息構(gòu)造哈希搜索返回結(jié)果報(bào)文并傳給阿瑞斯客戶端,使對(duì)等網(wǎng)絡(luò)用戶從內(nèi)網(wǎng)結(jié)點(diǎn)和緩存服務(wù)器下載資源。如果在索引服務(wù)器中沒(méi)有查詢到需要的文件信息,則通知協(xié)議分析器對(duì)用戶的哈希搜索請(qǐng)求報(bào)文不做處理,并告知緩存服務(wù)器下載此文件以供內(nèi)網(wǎng)用戶分享,下載完成后通知索引服務(wù)模塊進(jìn)行信息更新。文檔編號(hào)H04L29/08GK102130838SQ20111008570公開(kāi)日2011年7月20日申請(qǐng)日期2011年4月2日優(yōu)先權(quán)日2011年4月2日發(fā)明者徐鶴,李致遠(yuǎn),王汝傳,蔣華,邵星,韓志杰申請(qǐng)人:南京郵電大學(xué)