摘要:網(wǎng)絡(luò)仿真是一種專(zhuān)門(mén)對(duì)實(shí)際網(wǎng)絡(luò)進(jìn)行模擬與分析的工具,是網(wǎng)絡(luò)研究者研究新理論新算法經(jīng)濟(jì)而有效的手段#65377;本文研究網(wǎng)絡(luò)仿真軟件NS2的功能擴(kuò)展及網(wǎng)絡(luò)仿真實(shí)現(xiàn)過(guò)程,并將其應(yīng)用于網(wǎng)絡(luò)擁塞控制的研究中,研究了模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法,取得了較好的效果#65377;
關(guān)鍵詞:網(wǎng)絡(luò)仿真;網(wǎng)絡(luò)擁塞;網(wǎng)絡(luò)擁塞控制
中圖分類(lèi)號(hào):TP393
文獻(xiàn)標(biāo)識(shí)碼:A
1引言近
十幾年來(lái),計(jì)算機(jī)網(wǎng)絡(luò)飛速發(fā)展,其應(yīng)用領(lǐng)域不斷拓展,應(yīng)用模式不斷豐富,網(wǎng)絡(luò)數(shù)據(jù)流量激增,網(wǎng)絡(luò)擁塞問(wèn)題也變得越來(lái)越嚴(yán)重#65377;擁塞控制是保證網(wǎng)絡(luò)魯棒性的關(guān)鍵因素,同時(shí)又牽涉到網(wǎng)絡(luò)運(yùn)行的經(jīng)濟(jì)性,也是為網(wǎng)絡(luò)提供QoS保證的必要前提#65377;因此,對(duì)網(wǎng)絡(luò)擁塞控制的研究具有重要的理論意義和實(shí)際應(yīng)用價(jià)值,是當(dāng)前網(wǎng)絡(luò)研究的一個(gè)熱點(diǎn)問(wèn)題[1,2]#65377;
NS2(Network Simulator Version2)是由UC Berkely大學(xué)開(kāi)發(fā)的基于事件驅(qū)動(dòng)的仿真器,是一種免費(fèi)的開(kāi)放源代碼的網(wǎng)絡(luò)仿真軟件[3],用C++和Otcl語(yǔ)言編寫(xiě)而成,能近乎真實(shí)地模擬網(wǎng)絡(luò)環(huán)境,支持的協(xié)議廣泛可以在各個(gè)層次上模擬網(wǎng)絡(luò)的運(yùn)行,可運(yùn)行在Linux#65380;Unix#65380;Solaris#65380;Windows等平臺(tái)上供研究人員進(jìn)行二次研發(fā)#65377;NS2采用開(kāi)放的體系結(jié)構(gòu),用戶(hù)可以根據(jù)需要進(jìn)行功能擴(kuò)展,但現(xiàn)有的一些中文文獻(xiàn)重在討論NS2的模塊組成#65380;仿真腳本的編寫(xiě)技巧等方面[4-7],對(duì)NS2擴(kuò)展原理的討論相對(duì)較少#65377;本文研究了網(wǎng)絡(luò)仿真軟件NS2的功能擴(kuò)展及網(wǎng)絡(luò)仿真實(shí)現(xiàn)過(guò)程,并將其應(yīng)用于網(wǎng)絡(luò)擁塞控制的研究中,研究了模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法,取得了較好的控制效果#65377;
2NS2網(wǎng)絡(luò)仿真及實(shí)現(xiàn)
2.1NS2網(wǎng)絡(luò)仿真過(guò)程
網(wǎng)絡(luò)仿真一般要經(jīng)過(guò)建立模型#65380;模擬實(shí)現(xiàn)和結(jié)果分析三個(gè)過(guò)程#65377;NS2仿真分兩個(gè)層次:一個(gè)是基于Otcl編程的用戶(hù)層次,利用已有的網(wǎng)絡(luò)元素實(shí)現(xiàn)仿真,只需編寫(xiě)Otcl腳本;另一個(gè)層次是基于C++和Otcl編程的系統(tǒng)層次,如果沒(méi)有所需的網(wǎng)絡(luò)元素,就需先進(jìn)行功能擴(kuò)展,添加所需的網(wǎng)絡(luò)元素#65377;這就要利用分裂對(duì)象模型,增加新的C++和Otcl類(lèi),然后再編寫(xiě)Otcl腳本#65377;仿真過(guò)程如圖1所示#65377;圖1NS2網(wǎng)絡(luò)仿真過(guò)程
2.2NS2網(wǎng)絡(luò)仿真的功能擴(kuò)展與實(shí)現(xiàn)
已有的NS2軟件往往不能直接提供新的協(xié)議和算法,網(wǎng)絡(luò)研究者要不斷研究新的協(xié)議和算法,為網(wǎng)絡(luò)的發(fā)展作前瞻性的研究分析,就需要對(duì)NS2的功能進(jìn)行擴(kuò)展,一般步驟如下:
#8226;定義或繼承C++協(xié)議類(lèi);
#8226;編寫(xiě)該類(lèi)成員函數(shù)和協(xié)議算法;
#8226;建立這個(gè)類(lèi)在TCL中連接類(lèi);
#8226;把C++代碼綁定到TCL,即將C++類(lèi)中的成員變量和成員函數(shù)影射到TCL類(lèi)中;
#8226;修改makefile文件,用make命令重新編譯生成ns.exe文件,則新建的對(duì)象被加入到NS2的網(wǎng)絡(luò)組件庫(kù)中,可以被用戶(hù)在TCL中調(diào)用#65377;
3NS2在網(wǎng)絡(luò)擁塞控制研究中的應(yīng)用
網(wǎng)絡(luò)擁塞是一種持續(xù)過(guò)載的狀態(tài),此時(shí)用戶(hù)對(duì)網(wǎng)絡(luò)資源(包括鏈路帶寬#65380;存儲(chǔ)空間和處理器處理能力等)的需求超過(guò)了其固有的容量#65377;網(wǎng)絡(luò)擁塞控制算法對(duì)保證Internet的穩(wěn)定具有十分重要的作用#65377;目前,已提出多種網(wǎng)絡(luò)擁塞控制算法,本文對(duì)NS2進(jìn)行功能擴(kuò)展,并應(yīng)用于網(wǎng)絡(luò)擁塞控制研究中,研究了一種模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法,取得了較好效果#65377;
3.1模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法
模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法運(yùn)用模糊數(shù)學(xué)的基本理論和方法,把規(guī)則#65380;條件及操作用模糊集表示,并把這些模糊控制規(guī)則及有關(guān)信息(如評(píng)價(jià)指標(biāo)#65380;初始PID參數(shù)等)作為知識(shí)存入計(jì)算機(jī)知識(shí)庫(kù),然后計(jì)算機(jī)根據(jù)系統(tǒng)實(shí)際響應(yīng)情況(即專(zhuān)家系統(tǒng)的輸入條件),運(yùn)用模糊推理,自動(dòng)實(shí)現(xiàn)對(duì)PID參數(shù)的自動(dòng)修改和完善,以達(dá)到最佳控制效果#65377;
網(wǎng)絡(luò)丟包概率表達(dá)式如下:為實(shí)現(xiàn)模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法,需建立一個(gè)新的fuzzyQueue類(lèi)#65377;由式(3)(4)可看出,在fuzzyQueue的結(jié)構(gòu)中應(yīng)有一組變量來(lái)記錄相關(guān)參數(shù)的初始值,如控制器初始值a#65380;b#65380;c及采樣頻率等#65377;此外,還需另有一組參數(shù)記錄fuzzyQueue的一些歷史狀態(tài)(如上一時(shí)刻隊(duì)列長(zhǎng)度及丟包率等)以便計(jì)算新的丟包率#65377;所以用如下兩個(gè)結(jié)構(gòu):edp和edv,其中edp(early drop parameters)記錄初始參數(shù)情況,這些參數(shù)值由用戶(hù)提供,程序運(yùn)行中不再改變;edv(early drop variables)記錄隊(duì)列的歷史狀態(tài)信息,這些變量值在程序運(yùn)行中會(huì)動(dòng)態(tài)改變,由該段代碼是edp結(jié)構(gòu),其中mean-pktsize為平均包大小,bytes和setbit為兩個(gè)標(biāo)志,bytes通過(guò)0#65380;1設(shè)置指出隊(duì)列長(zhǎng)度是通過(guò)緩存中包的個(gè)數(shù)來(lái)計(jì)算還是通過(guò)字節(jié)來(lái)計(jì)算,setbit指出當(dāng)檢測(cè)到擁塞時(shí)是否采用標(biāo)記位的辦法,a#65380;b#65380;c為模糊自適應(yīng)PID算法中的參數(shù),w為采樣頻率,qref為期望隊(duì)列長(zhǎng)度#65377;
該段代碼是edv結(jié)構(gòu),其中v-prob為丟包概率,count和count-bytes分別為目前丟包的個(gè)數(shù)和丟包字節(jié)數(shù),eold為上一時(shí)刻隊(duì)列誤差,eoldold為上兩時(shí)刻隊(duì)列誤差#65377;該算法每隔一段時(shí)間要對(duì)丟包概率更新一次#65377;為保證這個(gè)過(guò)程周期性進(jìn)行,需要建立一個(gè)fuzzyCalcTimer類(lèi),它是timer-handler的子類(lèi)#65377;以上結(jié)構(gòu)是建立最重要的類(lèi)fuzzyQueue的必要支持#65377;在fuzzyQueue類(lèi)中,最主要成員變量包括:fuzzyCalcTimer CalcTimer#65380;edp edp-#65380;edv edv-#65380;int curq(當(dāng)前隊(duì)列長(zhǎng)度)#65380;PacketQueue q-#65377;
程序中要先得到當(dāng)前隊(duì)列長(zhǎng)度:int qlen = qib- ? q-->byteLength() : q-->le ngth(),然后更新丟包概率:
其中qib-標(biāo)志隊(duì)列長(zhǎng)度是用包的個(gè)數(shù)來(lái)表示還是用字節(jié)數(shù)來(lái)表示#65377;當(dāng)qib-為1時(shí),表示用字節(jié)數(shù)來(lái)表示隊(duì)列長(zhǎng)度#65377;edv-.v-prob為上一時(shí)刻的丟包概率,edv-.qold為上一時(shí)刻隊(duì)列長(zhǎng)度,eoldold為上兩時(shí)刻隊(duì)列誤差#65377;而edp-.mean-pktsize為平均包大小,edp-.qref為期望隊(duì)列長(zhǎng)度,edp-.a#65380;edp-.b#65380;edp-.c為算法和模型提供的參數(shù)#65377;隨后添加以下代碼,以對(duì)狀態(tài)變量進(jìn)行更新:
在ns-allinone-2.29下的ns-default.tcl文件里對(duì)TCL變量初始化:隊(duì)列長(zhǎng)度使用包進(jìn)行計(jì)算,采樣頻率為170Hz,期望隊(duì)列長(zhǎng)度為300個(gè)包,平均包大小為600字節(jié),檢測(cè)到擁塞時(shí)直 接丟包,初始的丟包率和隊(duì)列長(zhǎng)度為0#65377;
最后打開(kāi)ns-allinone-2.29下的makefile文件,在其輸出文件列表中加入新協(xié)議的輸出文件queue/fuzzy.o,然后執(zhí)行命令make#65377;NS2的功能得以擴(kuò)充,即可仿真網(wǎng)絡(luò)擁塞控制算法的效果#65377;
4仿真實(shí)驗(yàn)
考慮如圖2所示的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),瓶頸鏈路位于路由器R1和R2之間,鏈路容量15 Mbps(3750packets/s,分組缺省大小為500 bytes),延時(shí)10 ms#65377;假設(shè)圖中連接數(shù)n為500,所有的500個(gè)TCP連接均為持久性的FTP業(yè)務(wù)源,發(fā)送節(jié)點(diǎn)與R1之間的鏈路容量均為10 Mbps,傳輸延時(shí)10 ms,R2與接收節(jié)點(diǎn)之間的鏈路容量也均為10 Mbps,傳輸延時(shí)10 ms#65377;除R1的隊(duì)列管理采用各種AQM算法外,其余隊(duì)列管理算法均為DropTail,所有節(jié)點(diǎn)的隊(duì)列緩存大小為600Packets,隊(duì)列大小期望值為300Packets#65377;圖2網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖3兩種算法的控制效果圖3給出了PID和模糊自適應(yīng)PID兩種網(wǎng)絡(luò)擁塞控制算法下的控制效果#65377;由仿真結(jié)果可以看出,模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法在調(diào)節(jié)時(shí)間上明顯優(yōu)于PID網(wǎng)絡(luò)擁塞控制算法,且該算法始終將隊(duì)列保持在目標(biāo)隊(duì)列附近,同時(shí)隊(duì)列的抖動(dòng)也明顯小于PID網(wǎng)絡(luò)擁塞控制算法的隊(duì)列抖動(dòng),模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法的控制效果比PID網(wǎng)絡(luò)擁塞控制算法的控制效果好#65377;
5小結(jié)
本文研究和探討了網(wǎng)絡(luò)仿真軟件NS2的功能擴(kuò)展及仿真實(shí)現(xiàn)過(guò)程,并將其應(yīng)用于網(wǎng)絡(luò)擁塞控制的研究中,研究了模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法,從仿真結(jié)果可以看出,模糊自適應(yīng)PID網(wǎng)絡(luò)擁塞控制算法具有較好的控制效果#65377;
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。