畢業(yè)設(shè)計(jì)(論文)-基于內(nèi)容中心網(wǎng)絡(luò)開(kāi)發(fā)平臺(tái)的文件分享_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于內(nèi)容中心網(wǎng)絡(luò)開(kāi)發(fā)平臺(tái)的文件分享_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于內(nèi)容中心網(wǎng)絡(luò)開(kāi)發(fā)平臺(tái)的文件分享_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于內(nèi)容中心網(wǎng)絡(luò)開(kāi)發(fā)平臺(tái)的文件分享_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于內(nèi)容中心網(wǎng)絡(luò)開(kāi)發(fā)平臺(tái)的文件分享_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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)介

第二章相關(guān)研究綜述.2CCN設(shè)計(jì)目標(biāo)和原則CCN的主要設(shè)計(jì)目標(biāo)是更好地支持當(dāng)今的主要應(yīng)用:內(nèi)容存取。只這一個(gè)目標(biāo)就決定了CCN的體系結(jié)構(gòu)不會(huì)是一個(gè)會(huì)話模型,而應(yīng)該是一個(gè)以信息為中心的模型(兼顧資源共享式的通信)。另外,PARC的VanJacobson和UCLA的LixiaZhang教授等提出了設(shè)計(jì)CCN的6個(gè)原則[6]G.Carofiglio,L.Muscariello,andM.Gallo,Bandwidthandstoragesharingperformanceininformationcentricnetworking,ACMSigcommWorkshoponInformation-CentricNetworking(ICN)2011[6]G.Carofiglio,L.Muscariello,andM.Gallo,Bandwidthandstoragesharingperformanceininformationcentricnetworking,ACMSigcommWorkshoponInformation-CentricNetworking(ICN)2011這六個(gè)設(shè)計(jì)原則分別是:保留沙漏模型。這種“細(xì)腰”特性保證了互聯(lián)網(wǎng)的迅猛增長(zhǎng),因?yàn)樗试S下層和上層不斷革新變化,在CCN設(shè)計(jì)中也保留了這一模型??紤]安全性。當(dāng)今互聯(lián)網(wǎng)的設(shè)計(jì)是沒(méi)有考慮安全的,所有的安全都是事后增加的,這種修補(bǔ)式的安全,對(duì)互聯(lián)網(wǎng)造成很大的負(fù)面影響。而CCN要把安全放在體系結(jié)構(gòu)的設(shè)計(jì)中。保留端到端原則。端到端原則考慮系統(tǒng)性能和代價(jià)的均衡,一般分層系統(tǒng)的設(shè)計(jì)都應(yīng)該考慮,CCN系統(tǒng)也繼承了這一原則。流量自調(diào)節(jié)。流量均衡對(duì)一個(gè)穩(wěn)定的網(wǎng)絡(luò)運(yùn)行是必不可少的。當(dāng)今互聯(lián)網(wǎng)的流量調(diào)節(jié)要依靠端的傳輸協(xié)議,網(wǎng)絡(luò)本身的設(shè)計(jì)沒(méi)有考慮。保留了路由和轉(zhuǎn)發(fā)平面的分離。保證了最好的轉(zhuǎn)發(fā)技術(shù)和路由技術(shù)并行發(fā)展。保證體系結(jié)構(gòu)的中立,使得用戶選擇和競(jìng)爭(zhēng)盡可能簡(jiǎn)單。2.3、CCN工作機(jī)制2.3.1、CCN節(jié)點(diǎn)結(jié)構(gòu) 圖2-2CCN節(jié)點(diǎn)結(jié)構(gòu)CCN節(jié)點(diǎn)包括路由器和端接點(diǎn),節(jié)點(diǎn)內(nèi)部結(jié)構(gòu)如上圖所示。ContentStore相當(dāng)于路由器中的緩沖存儲(chǔ)器,緩存數(shù)據(jù)以備以后使用,采用的緩存策略為L(zhǎng)RU或LFU。PendingInterestTable(PIT)的作用是存儲(chǔ)已發(fā)送的數(shù)據(jù)請(qǐng)求或這些請(qǐng)求各自的到達(dá)接口。轉(zhuǎn)發(fā)信息表FIB可以通過(guò)在節(jié)點(diǎn)間傳播名字前綴公告建立,然后利用FIB中記錄的信息轉(zhuǎn)發(fā)興趣包。ContentStore、PIT、FIB是CCN節(jié)點(diǎn)中三個(gè)最重要的組件。2.3.2、CCN包類(lèi)型圖2-3CCN包類(lèi)型如圖3-3所示CCN的包有興趣包和數(shù)據(jù)包兩種類(lèi)型,興趣包的名字由三個(gè)部分(component)組成,Nonce為隨機(jī)數(shù),用于檢測(cè)重復(fù)的包并將其丟棄。數(shù)據(jù)包由簽名、名字、簽名信息和內(nèi)容四個(gè)部分組成。CCN直接保護(hù)數(shù)據(jù)的安全,所有的內(nèi)容都經(jīng)過(guò)數(shù)字簽名認(rèn)證。名字部分與興趣包相同,有三個(gè)component構(gòu)成。簽名信息中包含內(nèi)容發(fā)布者公鑰的摘要、時(shí)間標(biāo)簽和內(nèi)容類(lèi)型,其中公鑰摘要用于獲取密鑰和內(nèi)容鑒權(quán),時(shí)間標(biāo)簽可作為確定失效時(shí)間的依據(jù)。2.3.3CCN包處理流程CCN通信由數(shù)據(jù)消費(fèi)者驅(qū)動(dòng),數(shù)據(jù)可以進(jìn)行塊級(jí)傳輸,有兩個(gè)包類(lèi)型:Interest和Data,消費(fèi)者廣播Interest包,請(qǐng)求內(nèi)容,監(jiān)聽(tīng)節(jié)點(diǎn)如果有該內(nèi)容則響應(yīng)。興趣包和數(shù)據(jù)包與位置無(wú)關(guān),在一個(gè)廣播介質(zhì)上,如果有一個(gè)興趣包請(qǐng)求,則其它對(duì)同一內(nèi)容感興趣的消費(fèi)者可以共享該請(qǐng)求。興趣包的Contentname是數(shù)據(jù)包的Contentname的前綴,則該數(shù)據(jù)包滿足該請(qǐng)求。內(nèi)容的名字是復(fù)雜的,內(nèi)容的名字可以動(dòng)態(tài)生成,即讓不存在該應(yīng)用請(qǐng)求內(nèi)容的應(yīng)用接收該興趣包,而臨時(shí)產(chǎn)生該內(nèi)容。像現(xiàn)在的動(dòng)態(tài)Web(靜態(tài)內(nèi)容和動(dòng)態(tài)產(chǎn)生混合支持)。當(dāng)一個(gè)包到達(dá)一個(gè)face,利用名字進(jìn)行最長(zhǎng)前綴匹配查找NOTEREF_Ref325901554\f\h⑥,有三個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)完成轉(zhuǎn)發(fā)(FIB、內(nèi)容緩存、PIT)。FIB類(lèi)似于IP的FIB,但允許一列出口,而不限于一個(gè)。內(nèi)容緩存可以盡可能長(zhǎng)時(shí)間地緩存轉(zhuǎn)發(fā)的包,以供其它消費(fèi)者使用。PIT記錄已經(jīng)轉(zhuǎn)發(fā)的興趣包,為了讓響應(yīng)的數(shù)據(jù)包能到達(dá)其請(qǐng)求者。當(dāng)響應(yīng)興趣的數(shù)據(jù)包利用PIT的某條目轉(zhuǎn)發(fā)后或者超出時(shí)間設(shè)定,該條目被刪除。當(dāng)一個(gè)Interest包到達(dá),首先匹配內(nèi)容緩存(如果有,則響應(yīng)并丟棄Interest),其次匹配PIT(如果有,則在PIT響應(yīng)條目中增加Face,并丟棄Interest),最后匹配FIB(按照所有匹配的Face(除Interest到達(dá)Face)進(jìn)行轉(zhuǎn)發(fā)Interest,并存在PIT中記錄)。如果沒(méi)有匹配則丟棄。Data包的處理相對(duì)簡(jiǎn)單,當(dāng)數(shù)據(jù)包到達(dá)時(shí),先對(duì)數(shù)據(jù)包的ContentName字段進(jìn)行最長(zhǎng)前綴匹配,先在Contentstore中匹配(如果有,則丟棄),再在PIT中匹配條目,如果有,轉(zhuǎn)發(fā)到請(qǐng)求者,然后緩存在Contentstore,如果沒(méi)有匹配則丟棄。 圖2-4興趣包和數(shù)據(jù)包到達(dá)節(jié)點(diǎn)的數(shù)據(jù)流程圖如圖3-4所示CCN節(jié)點(diǎn)對(duì)興趣包和數(shù)據(jù)包的處理流程,以興趣包為例當(dāng)Interest到達(dá)某個(gè)節(jié)點(diǎn)的face端口時(shí),節(jié)點(diǎn)首先檢查自己的contentstore中是否有與interest匹配的content,若有則返回content給請(qǐng)求節(jié)點(diǎn);若沒(méi)有則檢查PIT中是否存有這個(gè)Interest的條目,若有則將這個(gè)請(qǐng)求接口記錄到該條目中;若沒(méi)有則檢查FIB,若有記錄這個(gè)Interest的條目,則根據(jù)轉(zhuǎn)發(fā)接口將Interest轉(zhuǎn)發(fā)出去,并將該Interest和轉(zhuǎn)發(fā)出去的接口一起作為一個(gè)新條目加入PIT中;若沒(méi)有則丟棄該Interest。圖2-5CCN節(jié)點(diǎn)轉(zhuǎn)發(fā)模型舉例2.4CCN的研究熱點(diǎn)緩存IP和CCN路由器都緩存數(shù)據(jù)包,不同的是,IP路由器在完成數(shù)據(jù)轉(zhuǎn)發(fā)就會(huì)將存儲(chǔ)的數(shù)據(jù)清空,即MRU策略,而CCN路由器能夠重復(fù)使用數(shù)據(jù),方便請(qǐng)求相同數(shù)據(jù)的用戶。緩存在CCN中很重要,它可以幫助減少內(nèi)容下載時(shí)延和網(wǎng)絡(luò)帶寬占用。NDN采用LRU或LFU替換策略來(lái)最大限度地存儲(chǔ)重要的信息[7]V.Jacobson,D.K.Smetters,J.D.Thorntonetal.,“NetworkingNamedContent,”inproc.ofCoNEXT2009,Rome,Italy,pp.1-12,Dec.2009.[7]V.Jacobson,D.K.Smetters,J.D.Thorntonetal.,“NetworkingNamedContent,”inproc.ofCoNEXT2009,Rome,Italy,pp.1-12,Dec.2009.在NDN路由器中使用緩存來(lái)減少不必要帶寬需求和初始服務(wù)器負(fù)載。主要考慮的問(wèn)題有:(1)研究緩存替換政策研究表明LRU(least-recently-used)或者LFU(least-frequently-used)策略合適NDN路由器,同時(shí)也會(huì)研究更為簡(jiǎn)單的隨機(jī)替換策略。(2)避免存儲(chǔ)過(guò)時(shí)的數(shù)據(jù)采取讓發(fā)布者為每個(gè)數(shù)據(jù)分配一個(gè)TTL的方法(DNS中采用)。(3)阻止緩存攻擊(cachepollutionattacks)為了阻止這種攻擊,路由器需要認(rèn)證每一個(gè)數(shù)據(jù)簽名,計(jì)劃研究快速認(rèn)證機(jī)制,減少攻擊的成功率,且不需要對(duì)所有的不良簽名進(jìn)行檢測(cè)。(4)抵御DDoS攻擊在NDN中,對(duì)緩存進(jìn)行DDoS攻擊相較于IP困難很多,因?yàn)楣粽咴跊](méi)有收到興趣包的前提下無(wú)法通過(guò)網(wǎng)絡(luò)大量發(fā)送無(wú)用的數(shù)據(jù)。路由和轉(zhuǎn)發(fā)為了顯示CCN能夠?qū)崿F(xiàn)全球規(guī)模的部署,首先要解決的問(wèn)題是可擴(kuò)展的路由和線速的轉(zhuǎn)發(fā)引擎。CCN長(zhǎng)期部署關(guān)注的是路由可擴(kuò)展性,互聯(lián)網(wǎng)規(guī)模不斷擴(kuò)大,相應(yīng)路由表大小呈指數(shù)增加,形成未來(lái)互聯(lián)網(wǎng)可擴(kuò)展路由“瓶頸”。下一代網(wǎng)絡(luò)中理想的路由一定是規(guī)??蓴U(kuò)展的,隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大能夠自適應(yīng)的路由。路由設(shè)計(jì)要解決的問(wèn)題主要有兩個(gè):(1)如何用有限的狀態(tài)路由無(wú)限的命名空間;(2)多路徑轉(zhuǎn)發(fā)策略。NDN工程組建議最初的部署,可以使用擴(kuò)展的OSPF和BGP,用來(lái)支持名字前綴和多路徑轉(zhuǎn)發(fā)。至于轉(zhuǎn)發(fā),NDN采用的也是最長(zhǎng)名字前綴匹配查找算法進(jìn)行轉(zhuǎn)發(fā)操作,雖然NDN的名字長(zhǎng)度是變長(zhǎng)的,且通常長(zhǎng)于IP地址,但是利用無(wú)循環(huán),狀態(tài)可近似的bloomfilter也同樣能夠保證查找效率。Bloomfilter廣泛用于網(wǎng)頁(yè)存儲(chǔ)、入侵檢測(cè)和基于內(nèi)容的路由,它是一種空間效率很高的隨機(jī)數(shù)據(jù)結(jié)構(gòu),可用來(lái)判斷地址前綴是否屬于某個(gè)按前綴長(zhǎng)度分類(lèi)的前綴集合。目前針對(duì)轉(zhuǎn)發(fā)平面,主要問(wèn)題是:(1)可變長(zhǎng)的分級(jí)名字的最長(zhǎng)前綴匹配;(2)當(dāng)路由協(xié)議重新計(jì)算或Interest/Data包到達(dá)后,F(xiàn)IB,PIT和內(nèi)容存儲(chǔ)的快速更新。(3)cache策略和存儲(chǔ)管理。S.Arianfar等人第一個(gè)研究了內(nèi)容路由器的設(shè)計(jì)問(wèn)題,他們分析了怎樣擴(kuò)展今天的路由器,以及支持包級(jí)別的Cache問(wèn)題。安全和隱私CCN保護(hù)內(nèi)容安全的方法是讓內(nèi)容發(fā)布者對(duì)名字和內(nèi)容進(jìn)行聯(lián)合簽名而不是分別對(duì)名字或內(nèi)容簽名[8]MarkAin,ATechnicalReport,“AcademicDisseminationandExploitationofaClean-slateInternetworkingArchitecture:ThePublish-SubscribeInternetRoutingParadigm,”2008.。即所謂的“Authenticatingthelinkbetweennamesandcontent”。若發(fā)布者P發(fā)布內(nèi)容時(shí)說(shuō)N是內(nèi)容C的名字,則可以這樣表示:讓P對(duì)N到C的映射簽名。因此,內(nèi)容是一個(gè)映射三元組M(NPC)=(NCSignP(NC))。用戶請(qǐng)求任意的名字N,鑒權(quán)獲得的內(nèi)容和它與N的聯(lián)系,無(wú)需預(yù)先知道內(nèi)容C的唯一且自認(rèn)證的標(biāo)識(shí),以及P的具體身份。保證了validity,provenance和relevance[8]MarkAin,ATechnicalReport,“AcademicDisseminationandExploitationofaClean-slateInternetworkingArchitecture:ThePublish-SubscribeInternetRoutingParadigm,”2008.安全關(guān)注的研究?jī)?nèi)容如下:(1)簽名的效率為了對(duì)每個(gè)包進(jìn)行簽名和認(rèn)證,需要在簽名的產(chǎn)生、傳輸、認(rèn)證和存儲(chǔ)方面提高效率。RSA簽名是可以借鑒的方法。還可以研究的技術(shù)有快速簽名機(jī)制、Merkle哈希樹(shù)、批認(rèn)證機(jī)制等。NDN團(tuán)隊(duì)也在研究如何在多個(gè)包中傳播簽名元數(shù)據(jù)的技術(shù)。計(jì)算效率、帶寬效率和認(rèn)證成本都是研究簽名機(jī)制要考慮的因素。(2)信任管理NDN的信任模型是端到端的,能夠保護(hù)發(fā)布者到用戶的安全。不同的用戶和不同的內(nèi)容對(duì)安全的需求是不一樣,NDN可由用戶根據(jù)具體的應(yīng)用來(lái)判斷所收到的內(nèi)容是否安全,或者是否可信。信任管理可借鑒方法有分級(jí)的公鑰體系架構(gòu)(PKI)和PGP及兩者的改進(jìn)方法。SDSI/SPKI是NDN重點(diǎn)研究的模型。(3)網(wǎng)絡(luò)安全和防御NDN的設(shè)計(jì)原理可以預(yù)防很多種類(lèi)的網(wǎng)絡(luò)攻擊[9]PARCTechnicalReportNDN-0001“NamedDataNetworking(NDN)Project,”O(jiān)ctober2010.Availableat:。因?yàn)镹DN包對(duì)內(nèi)容“尋址”而不是終端設(shè)備,讓針對(duì)特定目標(biāo)主機(jī)的攻擊難以實(shí)現(xiàn)。其次,NDN節(jié)點(diǎn)響應(yīng)興趣回應(yīng)數(shù)據(jù)包,這種一個(gè)數(shù)據(jù)包對(duì)應(yīng)一個(gè)用戶興趣請(qǐng)求的特點(diǎn),使得攻擊者不可能通過(guò)NDN網(wǎng)絡(luò)大量發(fā)送未被請(qǐng)求的數(shù)據(jù),防止了非法內(nèi)容的傳播。需要處理的兩類(lèi)攻擊是InterestFloodingAttacks(類(lèi)似[9]PARCTechnicalReportNDN-0001“NamedDataNetworking(NDN)Project,”O(jiān)ctober2010.Availableat:(4)內(nèi)容保護(hù)和隱私NDN采用基于內(nèi)容的方法來(lái)進(jìn)行接入控制,常見(jiàn)的方法是內(nèi)容加密。對(duì)內(nèi)容的加密是端到端的,對(duì)網(wǎng)絡(luò)層透明,由應(yīng)用程序或支持庫(kù)完成。NDN并不要求必須是安全的服務(wù)器才能接入網(wǎng)絡(luò),或者強(qiáng)制執(zhí)行安全策略。但無(wú)論誰(shuí)截獲了經(jīng)過(guò)的信息都是沒(méi)用的,只有授權(quán)的用戶才能解密。2.5CCN應(yīng)用舉例(1)實(shí)時(shí)通話應(yīng)用。為了驗(yàn)證CCN網(wǎng)絡(luò)不只是能較好地支持內(nèi)容分發(fā)應(yīng)用,也能支持實(shí)時(shí)會(huì)話等當(dāng)前IP上使用的其它普遍功能,VanJacobson實(shí)現(xiàn)了一個(gè)基于CCN的實(shí)時(shí)會(huì)話應(yīng)用——VoCCN。發(fā)現(xiàn)它和VoIP在性能和功能上是相當(dāng)?shù)?,但更?jiǎn)單、更安全、可擴(kuò)展性更強(qiáng)。但是,原型系統(tǒng)的環(huán)境是在局域網(wǎng)環(huán)境的概念證明系統(tǒng)(Proof-of-Concept),實(shí)際應(yīng)用還需要進(jìn)一步驗(yàn)證NOTEREF_Ref325899797\f\h②。(2)音頻會(huì)議工具[10]ZhenkaiZhu,SenWang,XuYang,VanJacobson,LixiaZhang,“AudioConferenceToolOverNamedDataNetworking,October,2010.。為了推進(jìn)CCN[10]ZhenkaiZhu,SenWang,XuYang,VanJacobson,LixiaZhang,“AudioConferenceToolOverNamedDataNetworking,October,2010.圖2-6語(yǔ)音會(huì)議的模型圖(3)全媒體交互(Omedia-CCN)。清華大學(xué)網(wǎng)絡(luò)安全實(shí)驗(yàn)室一直從事覆蓋網(wǎng)絡(luò)的研究,開(kāi)發(fā)了非結(jié)構(gòu)化的P2P覆蓋網(wǎng)CROS系統(tǒng)(CooperativelyOverlayRoutingService),能支持大規(guī)模網(wǎng)絡(luò)節(jié)點(diǎn),并在Planet-lab上進(jìn)行了交互多媒體通信加速實(shí)驗(yàn)。同時(shí)開(kāi)發(fā)了基于CROS系統(tǒng)的P2P流媒體系統(tǒng)CROSTV,對(duì)比研究了普通P2P流媒體系統(tǒng)和基于網(wǎng)絡(luò)編碼的P2P流媒體系統(tǒng),研究基于網(wǎng)絡(luò)編碼的P2P流媒體數(shù)據(jù)傳輸、調(diào)度算法,以及通過(guò)降低系統(tǒng)的數(shù)據(jù)包冗余率,以改善播放質(zhì)量和播放時(shí)延等性能。目前,清華大學(xué)網(wǎng)絡(luò)安全實(shí)驗(yàn)室正在積極開(kāi)展內(nèi)容中心網(wǎng)絡(luò)的研究,已經(jīng)搭建了CCN實(shí)驗(yàn)環(huán)境,并遷移正在開(kāi)發(fā)的面向社交媒體、交互媒體和流媒體的三媒一體Omedia全媒體通信系統(tǒng)到基于CCN網(wǎng)絡(luò)的環(huán)境,試驗(yàn)環(huán)境如下圖所示。實(shí)驗(yàn)環(huán)境中用三臺(tái)運(yùn)行ccnd服務(wù)的Linux系統(tǒng)作為CCN的網(wǎng)絡(luò)節(jié)點(diǎn),提供路由、轉(zhuǎn)發(fā)和內(nèi)容緩存功能。下一步將利用若干終端設(shè)備發(fā)布和訂閱全媒體資源,以驗(yàn)證各方面性能。圖2-7基于CCN傳輸?shù)娜襟w交互實(shí)驗(yàn)環(huán)境第三章基于CCNx開(kāi)發(fā)平臺(tái)的文件下載享實(shí)驗(yàn)3.1CCNx平臺(tái)介紹CCNx平臺(tái)是由美國(guó)PaloAlto研究中心開(kāi)發(fā)的開(kāi)源項(xiàng)目[11]CCNxproject,[12]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò).第五版.電子工業(yè)出版社.2011年[11]CCNxproject,[12]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò).第五版.電子工業(yè)出版社.2011年.12月致謝隨著論文工作的結(jié)束,本科學(xué)習(xí)生活也即將成為過(guò)去。在此要衷心感謝畢設(shè)指導(dǎo)老師黃韜老師,從論文的選題到最后的完成,都少不了黃老師的悉心指導(dǎo)。同時(shí)也非常劉江師兄,劉師兄在我論文寫(xiě)作中給予了非常誠(chéng)懇和寶貴的意見(jiàn)和建議。同時(shí),感謝夏宇和李凌晗等同學(xué),感謝你們?cè)谶@段緊張充實(shí)的日子里給予我的幫助、支持和肯定。最后再次感謝所有關(guān)心和支持過(guò)我的人!附錄/***@fileccnseqwriter.c*Streamsdatafromstdinintoccn**ACCNxcommand-lineutility.**Copyright(C)2010-2012PaloAltoResearchCenter,Inc.**Thisworkisfreesoftware;youcanredistributeitand/ormodifyitunder*thetermsoftheGNUGeneralPublicLicenseversion2aspublishedbythe*FreeSoftwareFoundation.*Thisworkisdistributedinthehopethatitwillbeuseful,butWITHOUTANY*WARRANTY;withouteventheimpliedwarrantyofMERCHANTABILITYor*FITNESSFORAPARTICULARPURPOSE.SeetheGNUGeneralPublicLicense*formoredetails.YoushouldhavereceivedacopyoftheGNUGeneralPublic*Licensealongwiththisprogram;ifnot,writetothe*FreeSoftwareFoundation,Inc.,51FranklinStreet,FifthFloor,*Boston,MA02110-1301,USA.*/#include<stdlib.h>#include<time.h>#include<errno.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<ccn/ccn.h>#include<ccn/uri.h>#include<ccn/seqwriter.h>typedefstructPACKED1//cpu_occupystruct{charname[20];unsignedintuser;unsignedintnice;unsignedintsystem;unsignedintidle;}CPU_OCCUPY;typedefstructPACKED2 //mem_occupystruct{charname[20];unsignedlongtotal;charname2[20];unsignedlongfree;}MEM_OCCUPY;typedefstructPACKED3 //netoccupystruct{charlo[20];unsignedlonglo_in;unsignedlonglo_out;chareth[20];unsignedlongeth_in;unsignedlongeth_out;}NET_OCCUPY;get_memoccupy(MEM_OCCUPY*mem) //readtotalmemoryandunusedmemoryfrommeminfo{FILE*fd;charbuff[256];MEM_OCCUPY*m;m=mem;fd=fopen("/proc/meminfo","r");fgets(buff,64,fd);sscanf(buff,"%s%lu",m->name,&m->total);fgets(buff,64,fd);sscanf(buff,"%s%lu",m->name2,&m->free);fclose(fd);}get_netoccupy(NET_OCCUPY*net)//getnetworkthroughput{FILE*fd;charbuff[256];inta,b,c,d,e,f,g,h,i,j,k,l,m,n;NET_OCCUPY*t;t=net;fd=fopen("/proc/net/dev","r");fgets(buff,128,fd);fgets(buff,128,fd);fgets(buff,128,fd);sscanf(buff,"%s%lu%d%d%d%d%d%d%d%lu%d%d%d%d%d%d%d",t->lo,&t->lo_in,&a,&b,&c,&d,&e,&f,&g,&t->lo_out,&h,&i,&j,&k,&l,&m,&n);fgets(buff,128,fd);sscanf(buff,"%s%lu%d%d%d%d%d%d%d%lu%d%d%d%d%d%d%d",t->eth,&t->eth_in,&a,&b,&c,&d,&e,&f,&g,&t->eth_out,&h,&i,&j,&k,&l,&m,&n);fclose(fd);}intcal_cpuoccupy(CPU_OCCUPY*o,CPU_OCCUPY*n) //calculatecpuusage{unsignedlongod,nd;unsignedlongid,sd;intcpu_use=0;od=(unsignedlong)(o->user+o->nice+o->system+o->idle); nd=(unsignedlong)(n->user+n->nice+n->system+n->idle); id=(unsignedlong)(n->user-o->user); sd=(unsignedlong)(n->system-o->system); if((nd-od)!=0)cpu_use=(int)((sd+id)*10000)/(nd-od); elsecpu_use=0;returncpu_use;}get_cpuoccupy(CPU_OCCUPY*cpust) //cpuusagerate{ FILE*fd; intn; charbuff[256]; CPU_OCCUPY*cpu_occupy; cpu_occupy=cpust; fd=fopen("/proc/stat","r"); fgets(buff,sizeof(buff),fd); sscanf(buff,"%s%u%u%u%u",cpu_occupy->name,&cpu_occupy->user,&cpu_occupy->nice,&cpu_occupy->system,&cpu_occupy->idle); fclose(fd);}staticvoidusage(constchar*progname){fprintf(stderr,"%s[-h][-b0<blocksize<=4096][-r]ccnx:/some/uri\n""Readsstdin,sendingdataunderthegivenURI""usingccnversioningandsegmentation.\n""-hgeneratethishelpmessage.\n""-bspecifytheblock(segment)sizeforcontentobjects.Default1024.\n""-rgeneratestart-writeinterestsoarepositorywill""storethecontent.\n""-snsetscopeofstart-writeinterest.\n""n=1(local),2(neighborhood),3(everywhere)Default1.\n",progname);exit(1);}/**make_template:constructaninteresttemplatecontainingthespecifiedscope*Anunlimitedscopeispassedinas3,andtheomissionofthescope*fieldfromthetemplateindicatesthis.*/structccn_charbuf*make_template(intscope){structccn_charbuf*templ=NULL;templ=ccn_charbuf_create();ccn_charbuf_append_tt(templ,CCN_DTAG_Interest,CCN_DTAG);ccn_charbuf_append_tt(templ,CCN_DTAG_Name,CCN_DTAG);ccn_charbuf_append_closer(templ);/*</Name>*/if(0<=scope&&scope<=2)ccnb_tagged_putf(templ,CCN_DTAG_Scope,"%d",scope);ccn_charbuf_append_closer(templ);/*</Interest>*/return(templ);}char*stringJoin(constchar*first,constchar*last)//StringJoin函數(shù)負(fù)責(zé)連接兩個(gè)字符串,將參數(shù)列表中的first字符串和last字符串連接起來(lái){ char*result; intlen=strlen(first)+strlen(last)+1; result=(char*)malloc(len*sizeof(char)); memset(result,0,len*sizeof(char)); strcpy(result,first); strcat(result,last); returnresult;}intmain(intargc,char**argv){constchar*progname=argv[0];structccn*ccn=NULL;structccn_charbuf*name=NULL;structccn_seqwriter*w=NULL;intblocksize=1024;inttorepo=0;intscope=1;inti;intstatus=0;intres;ssize_tread_res;size_tblockread;char*cpuTemp=malloc(20);char*memTemp=malloc(20);char*netTemp=malloc(20);char*output=malloc(100);structccn_charbuf*templ;torepo=1;//flag標(biāo)志位,torepo為1表明系統(tǒng)輸出要輸出到repositary中char*statusUrl="ccnx:/server2";//repository輸出路徑name=ccn_charbuf_create();res=ccn_name_from_uri(name,statusUrl);if(res<0){fprintf(stderr,"%s:badCCNURI:%s\n",progname,statusUrl);exit(1);}ccn=ccn_create();if(ccn_connect(ccn,NULL)==-1){perror("Couldnotconnecttoccnd");exit(1);} CPU_OCCUPYcpu_stat1;//聲明存儲(chǔ)cpu占用率、內(nèi)存占用率、網(wǎng)絡(luò)連接占用率變量 CPU_OCCUPYcpu_stat2; MEM_OCCUPYmem_stat; NET_OCCUPYnet_stat; intcpu=0; while(1) { w=ccn_seqw_create(ccn,name); if(w==NULL){ fprintf(stderr,"ccn_seqw_createfailed\n"); exit(1); } ccn_seqw_set_block_limits(w,blocksize,blocksize); if(torepo){ structccn_charbuf*name_v=ccn_charbuf_create(); ccn_seqw_get_name(w,name_v); ccn_name_from_uri(name_v,"%C1.R.sw"); ccn_name_append_nonce(name_v); templ=make_template(scope); res=ccn_get(ccn,name_v,templ,60000,NULL,NULL,NULL,0); ccn_charbuf_destroy(&templ); ccn_charbuf_destroy(&name_v); if(res<0){ fprintf(stderr,"Noresponsefromrepository\n"); exit(1); } } blockread=0; get_cpuoccupy((CPU_OCCUPY*)&cpu_stat1);//通過(guò)get_cpuoccupy函數(shù),調(diào)用linux系統(tǒng)函數(shù)獲得cpu使用情況 sleep(10);//令進(jìn)程睡眠10秒 get_cpuoccupy((CPU_OCCUPY*)&cpu_stat2);//獲得十秒后的cpu使用情況 cpu=cal_cpuoccupy((CPU_OCCUPY*)&cpu_stat1,(CPU_OCCUPY*)&cpu_stat2);//借助于兩組cpu使用情況,計(jì)算cpu利用率 sprintf(cpuTemp,"%d\t",cpu);//將cpu這個(gè)整形變量賦給cpuTemp,并轉(zhuǎn)換為string類(lèi)型 get_memoccupy((MEM_OCCUPY*)&mem_stat);//獲得內(nèi)存使用情況 sprintf(memTemp,"%lu\t%lu\t",mem_stat.total,mem_stat.free);//將內(nèi)存使用情況int值轉(zhuǎn)為memTemp,sting類(lèi)型 get_netoccupy((NET_OCCUPY*)&net_stat);//獲得網(wǎng)絡(luò)數(shù)據(jù)包流量 sprintf(netTemp,"%lu\t%lu\t%lu\t%lu",net_stat.lo_in,net_stat.lo_out,net_stat.eth_in,net_stat.eth_out);//將數(shù)據(jù)包int值轉(zhuǎn)換為string,賦給netTemp output=stringJoin(cpuTemp,memTemp); output=stringJoin(output,netTemp);//通過(guò)兩次字符串連接,將所有數(shù)據(jù)轉(zhuǎn)換為一個(gè)string類(lèi)型。 blockread=strlen(output);//計(jì)算最終輸出string變量長(zhǎng)度 res=ccn_seqw_write(w,output,blockread);//將字符串a(chǎn)ppend到ccn_seqwriter結(jié)構(gòu)體w的buffer上 while(res==-1){ ccn_run(ccn,100); res=ccn_seqw_write(w,output,blockread);將 } if(res!=blockread)abort();//hmm,ccn_seqw_writedidashortwriteorsomethingblockread=0;//flushoutanyremainingdataandcloseif(blockread>0){res=ccn_seqw_write(w,output,blockread);while(res==-1){ccn_run(ccn,100);res=ccn_seqw_write(w,output,blockread);}}ccn_seqw_close(w);//將ccn_seqwriter結(jié)構(gòu)體w中的buffer中數(shù)據(jù)寫(xiě)入到repositary中ccn_run(ccn,1);sleep(5); }free(output);//釋放一系列資源free(cpuTemp);free(memTemp);free(netTemp);output=NULL;cpuTemp=NULL;memTemp=NULL;netTemp=NULL;ccn_charbuf_destroy(&name);ccn_destroy(&ccn); printf("%d",res);//exit(status);}CCNx包括以下主要模塊:(1)ccnd:核心守護(hù)進(jìn)程,支持緩存、轉(zhuǎn)發(fā)和包鑒權(quán)功能,由C代碼實(shí)現(xiàn)。(2)repository:用于永久存儲(chǔ)應(yīng)用程序數(shù)據(jù),由Java語(yǔ)言實(shí)現(xiàn)。(3)大量概念驗(yàn)證型的應(yīng)用:由C或Java語(yǔ)言編寫(xiě),如用于聊天的工具ccnchatCCNx支持的平臺(tái)有UbuntuLinux、MacOS、Solaris和FreeBSD,不支持Windows操作系統(tǒng)。在安裝CCNx前,還需要?jiǎng)?chuàng)建好C和Java的編譯環(huán)境,以支持C和Java源代碼編譯。 圖3-1當(dāng)前CCN架構(gòu)在網(wǎng)絡(luò)中所處的位置及其發(fā)展趨勢(shì)如上圖所示,最左邊的是CCN在當(dāng)前網(wǎng)絡(luò)體系中所處的位置,即實(shí)驗(yàn)中所進(jìn)行的CCN文件下載還必須的基于IP地址,而隨著CCN網(wǎng)絡(luò)體系架構(gòu)的不斷完善,CCN可以逐漸部分地拋開(kāi)TCP/IP進(jìn)行通信,最終CCN設(shè)計(jì)成與當(dāng)今網(wǎng)絡(luò)的使用方式相匹配,既能與TCP/IP協(xié)議并行,也能獨(dú)立運(yùn)行,而且不會(huì)破壞現(xiàn)有的網(wǎng)絡(luò)。3.2運(yùn)行環(huán)境的搭建本實(shí)驗(yàn)選擇在Ubuntu10.10上安裝CCNx-0.5.0,首先安裝好Ubuntu10.10操作系統(tǒng),然后進(jìn)行以下操作:(1)下載CCNx源代碼,從網(wǎng)站/上下載最新版本的CCNx源代碼,本次實(shí)驗(yàn)使用的是CCNx-0.5.0,下載后解壓到指定的文件夾(2)下載編譯所需的庫(kù)文件,打開(kāi)Ubuntu終端輸入一下指令,sudoApt-getinstallgit-corepython-devlibssl-devlibpcap-devlibexpat1-devAthena-jot。(3)安裝ant,先下載ant-1.8.2-bin.tar.gz,然后執(zhí)行如下指令:sudocpapache-ant-1.8.2-bin.tar.gz/usr/local/復(fù)制到/usr/local/sudotarxzfapache-ant-1.8.2-bin.tar.gz解壓然后設(shè)置環(huán)境變量,在終端輸入命令:sudogedit/etc/profile,在最后加入如下代碼:#setANTenvironmentexportANT_HOME=/usr/local/ant exportPATH=/usr/local/ant/bin:$PATH使環(huán)境變量生效:source/etc/profile測(cè)試ant是否安裝成功:ant–version如果輸出ApacheAntversion1.8.2compiledonSeptember302011則說(shuō)明ant安裝成功圖3-2ant安裝成功在終端下的截圖(4)安裝jdk,先下載jdk-6u27-linux-i586.bin,然后執(zhí)行如下命令sudocpjdk-6u27-linnux-i586.bin/usr/bin復(fù)制到/usr/localcd/usr/local進(jìn)入local路徑sudochmodu+xjdk-6u27-linux-i586.bin賦予當(dāng)前用戶解壓權(quán)限sudo./jdk-6u27-linux-i586.bin執(zhí)行bin文件開(kāi)始安裝,jdk會(huì)自動(dòng)被安裝在/usr/local/jdk1.6.0_22目錄中然后設(shè)置環(huán)境變量,在終端輸入命令sudogedit/etc/profile,在最后加入如下代碼: #setJDKenvironmentexportJAVA_HOME=/usr/local/jdk1.6.0_27exportPATH=$PATH:$JAVA_HOME/binexportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportJRE_HOME=$JAVA_HOME/jre使環(huán)境變量生效:source/etc/profile測(cè)試環(huán)境變量設(shè)置是否正確:java–version如果輸出如下:Javaversion“1.6.0_27”Java(TM)SERuntimeEnvironment(build1.6.0_27-b07)JavaHotSpot(TM)ClientVM(build17.1-b03,mixedmode,sharing)則表明JDK已經(jīng)安裝成功圖3-3JDK安裝成功在終端下的截圖(5)、安裝ccnx先從終端進(jìn)入ccnx-0.5.0目錄下,檢查java1.60與ant1.8.2是否正確配置,(java-versionant-version)檢查成功配置后再進(jìn)行ccnx的安裝。執(zhí)行如下安裝指令:sudotar–xvfccnx-0.5.0.tar.gz在當(dāng)前目錄下生成ccnx-0.5.0目錄cdccnx-0.5.0進(jìn)入該目錄sudo./configure檢查系統(tǒng)環(huán)境,如檢測(cè)通過(guò)則生成編譯腳本sudomake編譯,編譯成功在當(dāng)前目錄生成二進(jìn)制可執(zhí)行文件sudomakeinstall進(jìn)行安裝,該命令將ccnx中的一些指令如ccnstart等加入到shell的指令集中,這樣可以不必進(jìn)入/ccnx-0.5.0/bin中執(zhí)行命令安裝成功后會(huì)出現(xiàn)如下目錄結(jié)構(gòu):bin/——包含可運(yùn)行的命令工具lib/——包含應(yīng)用程序需要的庫(kù)include/——應(yīng)用程序需要的C頭文件javasrc/build——包含與ant和java相關(guān)的文件(6)、測(cè)試ccnx在終端下輸入ccndstart(執(zhí)行過(guò)makeinstall情況下)開(kāi)啟ccnx守護(hù)進(jìn)程。打開(kāi)瀏覽器,輸入http://localhost:9695此時(shí)應(yīng)能看到檢測(cè)ccnx運(yùn)行狀態(tài)的網(wǎng)頁(yè),若能看到說(shuō)明ccnx正常工作。至此運(yùn)行環(huán)境搭建完成!圖3-4ccnd正常運(yùn)行的網(wǎng)頁(yè)截圖3.3實(shí)驗(yàn)描述本實(shí)驗(yàn)使用已有的ccnxjavaapi及capi,在ccnx的框架下,實(shí)現(xiàn)能根據(jù)節(jié)點(diǎn)及鏈路狀態(tài)參數(shù)智能選擇下載源的文件下載功能。實(shí)驗(yàn)中所搭建的文件傳輸拓?fù)浣Y(jié)構(gòu)圖如下:CCADBADB EE圖3-5實(shí)驗(yàn)所搭建的拓?fù)浣Y(jié)構(gòu)圖如圖所示,五臺(tái)電腦相連,其中一臺(tái)作為客戶端(client),另外三臺(tái)C、D、E作為服務(wù)節(jié)點(diǎn)。由于CCN路由器還未能在硬件上實(shí)現(xiàn),所以此處用主機(jī)B作為CCN路由器,實(shí)現(xiàn)CCN路由轉(zhuǎn)發(fā)的功能。首先client以廣播的方式依次發(fā)送針對(duì)三個(gè)服務(wù)節(jié)點(diǎn)及鏈路狀態(tài)信息的Interest請(qǐng)求,經(jīng)過(guò)路由器B的轉(zhuǎn)發(fā)請(qǐng)求到達(dá)服務(wù)節(jié)點(diǎn)C、D、E,各服務(wù)節(jié)點(diǎn)在收到請(qǐng)求后沿著逆路徑經(jīng)過(guò)路由B將自己的狀態(tài)信息回饋給Client。Client通過(guò)分析各服務(wù)節(jié)點(diǎn)的狀態(tài)信息確定一個(gè)最優(yōu)的下載節(jié)點(diǎn),然后以單獨(dú)向該服務(wù)節(jié)點(diǎn)發(fā)送針對(duì)所需文件的interest請(qǐng)求,最終獲得所需文件。原始的CCN文件傳輸工作方式原始的ccnx文件傳輸工作方式如下C、D、E為三個(gè)服務(wù)節(jié)點(diǎn),他們?cè)谙嗤穆窂絚cnx:/server下維護(hù)一個(gè)相同的文件filetest。Client節(jié)點(diǎn)想要下載filetest文件。首先client會(huì)通過(guò)廣播的方式向和它相連的所有節(jié)點(diǎn)發(fā)出針對(duì)于filetest的interest請(qǐng)求當(dāng)三個(gè)服務(wù)節(jié)點(diǎn)接收到interest請(qǐng)求后會(huì)首先在其ContentStore中搜索是否存在ccnx:/server/filetest這個(gè)ContentObject,(本實(shí)驗(yàn)比較簡(jiǎn)單,設(shè)定的三個(gè)服務(wù)節(jié)點(diǎn)都存有filetest這個(gè)文件),則三個(gè)服務(wù)節(jié)點(diǎn)都會(huì)向client返回它們本地filetest文件,client會(huì)存儲(chǔ)最先到達(dá)的文件,然后丟棄后續(xù)到來(lái)的文件,至此文件傳輸結(jié)束。具體流程如下圖所示:各服務(wù)節(jié)點(diǎn)搜索其ContentStore各個(gè)服務(wù)節(jié)點(diǎn)收到各服務(wù)節(jié)點(diǎn)搜索其ContentStore各個(gè)服務(wù)節(jié)點(diǎn)收到Interest請(qǐng)求Clien廣播針對(duì)文件filetest的Interest請(qǐng)求Client收到最先收到的Client收到最先收到的content,丟棄后續(xù)到達(dá)的向client返回與Interest相對(duì)應(yīng)的content圖3-6原始的CCN文件下載流程以上是CCNx上提供的文件傳輸功能,我們的目標(biāo)是改進(jìn)這個(gè)文件傳輸系統(tǒng),通過(guò)利用平臺(tái)上提供的javaapi及Capi使客戶端能夠動(dòng)態(tài)地選擇(最優(yōu))下載路徑。3.3.2初步改進(jìn)后的CCN文件傳輸工作方式初步改進(jìn)后的CCNx文件傳輸工作方式改進(jìn)后的系統(tǒng),服務(wù)節(jié)點(diǎn)C、D、E除了默認(rèn)的ccnx:/server/filetest路徑外還會(huì)維護(hù)一個(gè)ccnx:/server/status的路徑,每過(guò)一定時(shí)間,服務(wù)節(jié)點(diǎn)就會(huì)對(duì)statuscontentobject進(jìn)行更新,更新的內(nèi)容為該服務(wù)節(jié)點(diǎn)的當(dāng)前狀態(tài)信息,比如CPU利用率、contentstore負(fù)載、IP數(shù)據(jù)包的流量等等。※在發(fā)出針對(duì)文件filetest的interest請(qǐng)求之前,client會(huì)廣播針對(duì)各服務(wù)節(jié)點(diǎn)status的請(qǐng)求,同樣C、D、E都會(huì)將自己的status回饋給client,但因?yàn)榘l(fā)布者的簽名不同,client不會(huì)認(rèn)為是同樣的content,因此不會(huì)在收到第一個(gè)status后刪除后續(xù)到來(lái)的兩個(gè)status※client對(duì)接收到的status進(jìn)行分析比較,判斷從哪個(gè)服務(wù)節(jié)點(diǎn)來(lái)獲取文件最佳※在確定最優(yōu)下載節(jié)點(diǎn)后,client單獨(dú)向最佳服務(wù)節(jié)點(diǎn)發(fā)送針對(duì)filetest的interest請(qǐng)求※最佳服務(wù)節(jié)點(diǎn)向client返回相應(yīng)的filetest文件。至此文件下載結(jié)束。具體流程圖如下所示:Cilent分析statusCilent分析status確定一條最優(yōu)下載路徑各服務(wù)節(jié)點(diǎn)將自己的status返回給clientClient依次廣播對(duì)各服務(wù)節(jié)點(diǎn)的status請(qǐng)求最優(yōu)服務(wù)節(jié)點(diǎn)向client返回最優(yōu)服務(wù)節(jié)點(diǎn)向client返回filetest文件最優(yōu)服務(wù)節(jié)點(diǎn)搜索其contentstoreClient單獨(dú)向最優(yōu)服務(wù)節(jié)點(diǎn)發(fā)送針對(duì)filetest的請(qǐng)求圖3-7初步改進(jìn)后的CCN文件下載流程3.3.3改進(jìn)前后的對(duì)比相比于原始的ccnx文件傳輸方式,改進(jìn)后的文件傳輸方式會(huì)在一定程度上降低鏈路的負(fù)載。因?yàn)樵挤绞绞紫葟V播對(duì)filetest的interest請(qǐng)求,然后三個(gè)服務(wù)節(jié)點(diǎn)都會(huì)回饋本地的filetest文件,客戶端只會(huì)留下最先收到的文件,后續(xù)的文件都會(huì)被丟棄,被丟棄的那些文件在傳輸過(guò)程中明顯浪費(fèi)了不少帶寬(尤其是當(dāng)要傳輸?shù)奈募艽髸r(shí)),同時(shí)也使傳輸這些文件的服務(wù)節(jié)點(diǎn)被不必要的占用;而改進(jìn)后,client首先進(jìn)行一系列判斷最終只有一個(gè)節(jié)點(diǎn)回饋本地的filetest文件,因此改進(jìn)后可以減少傳輸文件時(shí)消耗的帶寬,減少鏈路的擁堵。注意到改進(jìn)方式多了一套請(qǐng)求分析status的過(guò)程,可能會(huì)增加一定的時(shí)間浪費(fèi),但由于本實(shí)驗(yàn)的拓?fù)浣Y(jié)構(gòu)比較簡(jiǎn)單,當(dāng)有幾百臺(tái)甚至上千臺(tái)的主機(jī)相連時(shí),狀態(tài)分析所消耗的時(shí)間相比于原始的文件傳輸因鏈路擁堵所消耗的時(shí)間完全可以忽略不計(jì)(另外針對(duì)的status所發(fā)送的Interest包也很小,不會(huì)占用太多的帶寬),改進(jìn)方式的優(yōu)勢(shì)會(huì)更加明顯的表現(xiàn)出來(lái)。3.4操作步驟(1)首先按照如圖所示用ccndc將五臺(tái)主機(jī)的IP建立連接,并用ping命令檢查是否連通注:當(dāng)前的CCN還是運(yùn)行在TCP/IP這套協(xié)議之上,文件傳輸還得依靠IP地址在五臺(tái)主機(jī)上運(yùn)行ccnd、ccnr,在服務(wù)節(jié)點(diǎn)C、D、E上運(yùn)行ccnseqwriter注:ccnseqwriter是一個(gè)負(fù)責(zé)將服務(wù)節(jié)點(diǎn)的狀態(tài)信息定期更新到repository中的進(jìn)程,設(shè)定的C、D、E的狀態(tài)信息分別存放在路徑ccnx:/server1、ccnx:/server2和ccnx:/server3下圖3-8運(yùn)行中的ccnd進(jìn)程圖3-9運(yùn)行中的ccnr進(jìn)程服務(wù)節(jié)點(diǎn)C、D、、E分別在路徑ccnx:/server1、ccnx:/server2和ccnx:/server3下維護(hù)一個(gè)相同的文件filetest用ccncat分別查看各服務(wù)節(jié)點(diǎn)在路徑ccnx:/server1、ccnx:/server2和ccnx:/server3下保存的狀態(tài)信息,根據(jù)自己在客戶端預(yù)先設(shè)定好的算法分析判斷哪一個(gè)服務(wù)節(jié)點(diǎn)是當(dāng)前最優(yōu)節(jié)點(diǎn)。在client端用ccngetfile取filetest文件,注意觀察最終取得的filetest文件是否來(lái)自于最優(yōu)節(jié)點(diǎn)。注:本實(shí)驗(yàn)中在服務(wù)節(jié)點(diǎn)中所存放的文件名字都是filetest,但filetest中所寫(xiě)入的數(shù)據(jù)有區(qū)別,這主要是為了區(qū)分最后client取出的filetest是來(lái)自哪一個(gè)服務(wù)節(jié)點(diǎn)。3.5實(shí)驗(yàn)結(jié)果圖3-10控制臺(tái)文件下載截圖如圖所示是控制臺(tái)下顯示的文件成功下載的截圖,由圖中可知客戶端A最終確定的最優(yōu)節(jié)點(diǎn)是C,這與通過(guò)命令ccncat查看服務(wù)節(jié)點(diǎn)狀態(tài)信息確定的最優(yōu)節(jié)點(diǎn)相同。3.6實(shí)驗(yàn)分析與總結(jié)在設(shè)定好的狀態(tài)信息的分析算法下,最終client從最優(yōu)下載節(jié)點(diǎn)取到filetest文件。本實(shí)驗(yàn)客戶端智能選擇最優(yōu)下載節(jié)點(diǎn)是基于CCN的通信機(jī)制設(shè)計(jì)的,CCN中是以發(fā)布和獲取信息

溫馨提示

  • 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)論