孫彥景, 陳 巖, 蘆楠楠, 李 松, 王艷芬, 張曉光
(中國礦業(yè)大學(xué) 信息與控制工程學(xué)院, 江蘇 徐州 221116)
無線通信與網(wǎng)絡(luò)發(fā)展的趨勢(shì)是從通信到上層應(yīng)用網(wǎng)絡(luò)的高度融合。傳統(tǒng)的通信與網(wǎng)絡(luò)割裂式實(shí)驗(yàn)教學(xué)導(dǎo)致學(xué)生系統(tǒng)認(rèn)知不強(qiáng)、所學(xué)知識(shí)零散,不利于培養(yǎng)學(xué)生系統(tǒng)性與工程性思維。因此,有必要改變分別開設(shè)實(shí)驗(yàn)課程和設(shè)計(jì)實(shí)驗(yàn)的模式,圍繞通信系統(tǒng)與計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)構(gòu)建科學(xué)、系統(tǒng)且相對(duì)獨(dú)立的系統(tǒng)性教學(xué)實(shí)驗(yàn)體系,構(gòu)建起從底層通信到高層網(wǎng)絡(luò)系統(tǒng)逐步遞增模式的全過程系統(tǒng)實(shí)驗(yàn)教學(xué)環(huán)節(jié),增強(qiáng)專業(yè)實(shí)驗(yàn)的連續(xù)性,提升實(shí)驗(yàn)教學(xué)質(zhì)量,使得信息與通信工程相關(guān)實(shí)驗(yàn)教學(xué)符合“新工科”教學(xué)發(fā)展理念。
本文以無線通信網(wǎng)絡(luò)協(xié)議設(shè)計(jì)仿真實(shí)驗(yàn)為例,利用NS3(Network Simulator 3)軟件,針對(duì)無線局域網(wǎng)IEEE 802.11標(biāo)準(zhǔn)中的MAC協(xié)議進(jìn)行了物理層到應(yīng)用層的整體性仿真實(shí)驗(yàn)設(shè)計(jì)。該實(shí)驗(yàn)可用于無線通信及網(wǎng)絡(luò)的相關(guān)研究和教學(xué),并可進(jìn)一步開展無線局域網(wǎng)絡(luò)MAC協(xié)議的相關(guān)研究和信息與通信工程的一系列課程實(shí)驗(yàn)教學(xué)。
NS3是一個(gè)離散事件驅(qū)動(dòng)的網(wǎng)絡(luò)模擬工具,是一種較新的開源仿真軟件,可以對(duì)網(wǎng)絡(luò)中物理層到應(yīng)用層的所有研究進(jìn)行仿真,因而成為研究網(wǎng)絡(luò)的有效實(shí)驗(yàn)工具[1-4]。該軟件應(yīng)用于實(shí)驗(yàn)教學(xué)中,可以有效構(gòu)建專業(yè)課程群整體連續(xù)性實(shí)驗(yàn),培養(yǎng)學(xué)生系統(tǒng)性與工程性認(rèn)知[5]。
圖1為NS3仿真實(shí)驗(yàn)的基本流程[7],若現(xiàn)有模塊無法滿足仿真需要,應(yīng)添加修改模塊并重新編譯。
圖1 NS3網(wǎng)絡(luò)仿真實(shí)驗(yàn)基本流程
根據(jù)仿真需要?jiǎng)?chuàng)建的腳本主要包括4部分內(nèi)容:
(1) 網(wǎng)絡(luò)仿真場(chǎng)景及相關(guān)參數(shù);
(2) 事件跟蹤函數(shù),用于統(tǒng)計(jì)仿真實(shí)驗(yàn)數(shù)據(jù);
(3) 仿真參數(shù)傳遞入口,用于每次仿真向仿真腳本傳遞參數(shù)值,避免仿真腳本頻繁修改;
(4) 信息結(jié)果處理程序,用于處理事件跟蹤函數(shù)統(tǒng)計(jì)的仿真數(shù)據(jù),并輸出當(dāng)次實(shí)驗(yàn)結(jié)果。
為方便仿真不同參數(shù)下的網(wǎng)絡(luò)性能,需要借助Linux腳本語言,在不同參數(shù)下自動(dòng)執(zhí)行仿真腳本,并將仿真輸出結(jié)果輸出至文件中。仿真結(jié)束后,利用腳本語言處理仿真輸出文件,輸出最終仿真結(jié)果。如果需要進(jìn)一步修改實(shí)驗(yàn),可以按照上述步驟重復(fù)進(jìn)行。
一種新的無線通信技術(shù)的應(yīng)用,需要與之相配套的網(wǎng)絡(luò)協(xié)議的支持;針對(duì)特定的應(yīng)用場(chǎng)景,也需要特定的組網(wǎng)方式來保證系統(tǒng)的有效性與可靠性[8]。因此,對(duì)現(xiàn)代通信系統(tǒng)網(wǎng)絡(luò)的研究不僅是物理層點(diǎn)對(duì)點(diǎn)通信技術(shù),網(wǎng)絡(luò)協(xié)議與資源分配也是重點(diǎn)研究方向。在無線網(wǎng)絡(luò)中,媒體接入控制(medium access control,MAC)層作為物理層的上一層,直接關(guān)系到通信信道的使用與分配問題。此外,MAC層向上層網(wǎng)絡(luò)傳輸正確接收到的數(shù)據(jù)包,是通信與網(wǎng)絡(luò)結(jié)合的關(guān)鍵。因此,在無線網(wǎng)絡(luò)的研究中,MAC層協(xié)議的設(shè)計(jì)與改進(jìn)成為一個(gè)主要的研究方向。尤其是針對(duì)新的網(wǎng)絡(luò)應(yīng)用場(chǎng)景與異構(gòu)網(wǎng)絡(luò)融合的研究,原有的理論研究結(jié)果無法得到有效驗(yàn)證。與新興技術(shù)同步進(jìn)行的MAC協(xié)議設(shè)計(jì)研究在初始階段難以在硬件設(shè)備上實(shí)驗(yàn)驗(yàn)證[9],因此,軟件仿真成為一種有效的研究和實(shí)驗(yàn)方式。
在現(xiàn)有的IEEE802.11無線局域網(wǎng)絡(luò)中,MAC協(xié)議為分布式協(xié)調(diào)方式(distributed coordination function,DCF)[10],其中包含Basic機(jī)制和RTS/CTS機(jī)制。在Basic機(jī)制中,當(dāng)節(jié)點(diǎn)檢測(cè)到信道空閑時(shí)間長于分布式幀間間隙(DIFS)時(shí),節(jié)點(diǎn)將信道視為空閑,數(shù)據(jù)遲1個(gè)DIFS后立刻發(fā)送,如圖2所示。數(shù)據(jù)包傳輸完成,目的節(jié)點(diǎn)在正確接收數(shù)據(jù)后延遲SIFS時(shí)間后發(fā)送ACK幀,源節(jié)點(diǎn)接收到ACK后,此次傳輸完成。當(dāng)信道再次空閑持續(xù)長達(dá)DIFS之后,進(jìn)入下一次接入競(jìng)爭(zhēng)。
圖2 Basic機(jī)制
然而當(dāng)一次傳輸中同時(shí)有多個(gè)節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí),會(huì)發(fā)生沖突,使數(shù)據(jù)無法成功傳輸,浪費(fèi)信道資源。浪費(fèi)的時(shí)間是沖突節(jié)點(diǎn)中傳輸?shù)淖铋L數(shù)據(jù)的時(shí)間。
采用CSMA/CA協(xié)議(RTS/CTS機(jī)制),可減少信道資源浪費(fèi)。如圖3所示,在數(shù)據(jù)發(fā)送之前,通過發(fā)送RTS和CTS幀進(jìn)行數(shù)據(jù)傳輸?shù)恼?qǐng)求與確認(rèn)。目的節(jié)點(diǎn)接收到數(shù)據(jù)幀后,同樣通過ACK確認(rèn)此次傳輸完成。在發(fā)送RTS過程中,會(huì)發(fā)生多個(gè)節(jié)點(diǎn)發(fā)送沖突,造成信道資源的浪費(fèi),沖突持續(xù)時(shí)間為RTS傳輸時(shí)間加上1個(gè)DIFS時(shí)間。但RTS幀長度遠(yuǎn)小于數(shù)據(jù)幀長度,因此沖突時(shí)間遠(yuǎn)小于CSMA/CD機(jī)制中的沖突時(shí)間,可以有效減少信道資源浪費(fèi),因此被廣泛應(yīng)用于無線網(wǎng)絡(luò)中。
圖3 RTS/CTS機(jī)制
此外,當(dāng)網(wǎng)絡(luò)中的節(jié)點(diǎn)有數(shù)據(jù)要發(fā)送時(shí),在發(fā)送之前會(huì)執(zhí)行二進(jìn)制指數(shù)退避機(jī)制[10],在數(shù)據(jù)發(fā)送之前會(huì)選擇一定的退避窗口,當(dāng)信道空閑時(shí)執(zhí)行退避計(jì)數(shù)器減操作。若信道忙,則退避計(jì)數(shù)器凍結(jié),停止計(jì)數(shù)。當(dāng)退避計(jì)數(shù)器減至0且信道狀態(tài)空閑則發(fā)送數(shù)據(jù),否則繼續(xù)退避。若一次發(fā)送失敗,進(jìn)入下一次退避重傳,同時(shí)退避窗口翻倍,直至數(shù)據(jù)傳輸成功。若退避窗口達(dá)到最大時(shí)仍傳輸失敗,則放棄此次數(shù)據(jù)傳輸,進(jìn)行丟包處理。
對(duì)DCF協(xié)議性能的研究往往以Bianchi所提出的離散Markov模型為基礎(chǔ)[11]。該模型可以有效模擬DCF協(xié)議中退避過程。
本文采用NS3中的WiFi模塊設(shè)計(jì)MAC協(xié)議性能分析的仿真實(shí)驗(yàn)。在仿真實(shí)驗(yàn)中,需要賦予網(wǎng)絡(luò)中各節(jié)點(diǎn)WiFi設(shè)備的功能。節(jié)點(diǎn)在NS3中為實(shí)際通信設(shè)備的抽象,包括應(yīng)用程序、網(wǎng)絡(luò)設(shè)計(jì)及驅(qū)動(dòng)等一系列實(shí)際設(shè)備特性。圖4為NS3中WiFi設(shè)備的結(jié)構(gòu),各模塊含義為[12]:
圖4 NS3中WiFi設(shè)備結(jié)構(gòu)
Application:設(shè)備上所安裝的用戶應(yīng)用程序的抽象,即數(shù)據(jù)的產(chǎn)生程序;
WifiNetDevice:對(duì)實(shí)際設(shè)備中網(wǎng)絡(luò)設(shè)備的抽象,包含網(wǎng)卡硬件與驅(qū)動(dòng)程序;
MACHigh:WiFi設(shè)備高層MAC抽象,用于設(shè)置WiFi網(wǎng)絡(luò)設(shè)備類型(AP,Station,Adhoc);
DcaTxOp與MacRxMiddle:分別用于處理發(fā)送隊(duì)列與接收隊(duì)列中數(shù)據(jù)包發(fā)送與接收;
MacLow:涉及DCF中控制幀和數(shù)據(jù)幀的發(fā)送與接收;
DcfManager:DCF機(jī)制的具體實(shí)現(xiàn)及節(jié)點(diǎn)收發(fā)狀態(tài)監(jiān)聽管理;
WifiPhy:實(shí)際發(fā)送過程中物理層收發(fā)處理,包含物理層接收信號(hào)強(qiáng)度、SNR、誤碼率、發(fā)送功率等相關(guān)信息;
WifiChannel:仿真所用信道模型。
在NS3中實(shí)現(xiàn)WiFi網(wǎng)絡(luò)仿真場(chǎng)景的基本流程為:
(1) 創(chuàng)建節(jié)點(diǎn):為仿真網(wǎng)絡(luò)場(chǎng)景創(chuàng)建設(shè)備節(jié)點(diǎn);
(2) 創(chuàng)建Wifi類并設(shè)置協(xié)議標(biāo)準(zhǔn);
(3) 創(chuàng)建WifiMAC協(xié)議類并設(shè)定協(xié)議的類型與參數(shù);
(4) 創(chuàng)建WifiPhy類并設(shè)置相關(guān)參數(shù);
(5) 創(chuàng)建WifiNetDevice;
(6) 創(chuàng)建WifiChannel類并設(shè)置信道傳輸模型及相關(guān)參數(shù);
(7) 將不同的WifiMAC協(xié)議與WifiPhy類組合成WiFi類并封裝到WifiNetDevicel類中,將不同的WifiNetDevice分別安裝至不同的節(jié)點(diǎn)上;
(8) 將網(wǎng)絡(luò)中的所有節(jié)點(diǎn)的WifiPhy類中的信道設(shè)置成所生成的WifiChannel,以將所有節(jié)點(diǎn)放置在一個(gè)信道內(nèi)工作;
(9) 為每個(gè)節(jié)點(diǎn)分配網(wǎng)絡(luò)地址(IP地址);
(10) 為每個(gè)節(jié)點(diǎn)安裝應(yīng)用,包括應(yīng)用類型、應(yīng)用的目的節(jié)點(diǎn)和網(wǎng)絡(luò)接口。
完成上述操作,可以建立一個(gè)完整的WiFi網(wǎng)絡(luò)仿真場(chǎng)景應(yīng)用于教學(xué)實(shí)驗(yàn)中,使學(xué)生掌握硬件設(shè)備實(shí)現(xiàn)各功能的方法,并通過修改仿真參數(shù)獲得不同的仿真結(jié)果。因此,需要為仿真腳本添加參數(shù)入口、數(shù)據(jù)收集、結(jié)果輸出功能。
在NS3仿真中,通過添加“cmd.AddValue”代碼,并與命令行或“.sh”腳本聯(lián)合使用,可在不修改腳本的情況下進(jìn)行不同參數(shù)的仿真,例如:
CommandLine cmd;
cmd.AddValue (″nwifi″,″number of station″, nwifi);
cmd.Parse (argc, argv);
其中cmd.AddValue函數(shù)參數(shù)分別表示:傳遞變量的形式參數(shù)名、參數(shù)注釋、腳本中對(duì)應(yīng)的變量名。如上述腳本在執(zhí)行命令之后添加-nwifi=30,可將該次仿真中的nwifi變量值設(shè)置為30。
NS3是離散事件驅(qū)動(dòng)的模擬器,因此對(duì)仿真過程中的數(shù)據(jù)進(jìn)行收集是通過監(jiān)聽仿真過程中的離散事件來實(shí)現(xiàn)的,通過在仿真中為相應(yīng)的事件設(shè)置觸發(fā)回調(diào)函數(shù)來完成數(shù)據(jù)收集。如需要追蹤編號(hào)為0的節(jié)點(diǎn)上的MAC層接收到的總數(shù)據(jù)包大小,即可通過以下代碼實(shí)現(xiàn):
Config::Connect (″/NodeList/0/DeviceList/*/Mac/MacRx″, MakeCallback (&DevRxTrace))
將事件的觸發(fā)回調(diào)函數(shù)設(shè)置為DevRxTrace。編寫DevRxTrace函數(shù)如下:
void
DevRxTrace (std::string context, Ptr
{
mac_bytesTotal += p->GetSize ()
}
通過以上仿真設(shè)置,編號(hào)為0的節(jié)點(diǎn)每接收到一個(gè)數(shù)據(jù)包,總接收數(shù)據(jù)大小mac_bytesTotal加上該數(shù)據(jù)包大小,從而達(dá)到仿真信息跟蹤收集的目的。
在程序腳本最后,對(duì)仿真過程中收集到的相關(guān)信息作計(jì)算處理并打印或?qū)懭胂嚓P(guān)文件中即可。之后利用gnuplot軟件[13-14]對(duì)仿真結(jié)果繪制圖形即可完成仿真,可直觀查看到仿真結(jié)果。
本文根據(jù)Bianchi的研究分別進(jìn)行了系統(tǒng)平均吞吐量隨節(jié)點(diǎn)數(shù)、初始退避窗口大小、最大退避階數(shù)變化的性能仿真,并與理論分析結(jié)果做對(duì)比。為更好地對(duì)比Bianchi模型的理論結(jié)果,本文對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行歸一化處理。
圖5為DCF中不同機(jī)制與參數(shù)下系統(tǒng)平均吞吐量隨節(jié)點(diǎn)數(shù)變化的仿真及理論曲線,可以看出仿真實(shí)驗(yàn)所得結(jié)果較接近理論計(jì)算結(jié)果。
圖5 系統(tǒng)吞吐量與節(jié)點(diǎn)數(shù)關(guān)系的NS3仿真與Matlab數(shù)值計(jì)算比較
圖6為RTS/CTS模式下的平均系統(tǒng)吞吐量與初始退避窗口大小之間關(guān)系的NS3仿真圖和Matlab數(shù)值計(jì)算圖,設(shè)置最大退避階數(shù)為6,可見兩者貼合程度較高。
圖6 RTS/CTS模式下系統(tǒng)吞吐量與最小退避窗口關(guān)系的NS3仿真與Matlab數(shù)值計(jì)算比較
圖7為basic模式下的平均系統(tǒng)吞吐量與初始退避窗口之間關(guān)系的NS3仿真圖和Matlab數(shù)值計(jì)算圖,設(shè)置最大退避階數(shù)為6,可見兩者的貼合程度較高。
圖7 Basic模式下系統(tǒng)吞吐量與最小退避窗口關(guān)系的NS3仿真結(jié)果與Matlab數(shù)值計(jì)算結(jié)果
圖8為DCF中的平均系統(tǒng)吞吐量與最大退避階數(shù)之間關(guān)系的NS3仿真圖和Matlab數(shù)值計(jì)算圖,最小退避窗口設(shè)置為32,可見仿真結(jié)果較貼近于理論計(jì)算值。
圖8 系統(tǒng)吞吐量與最大退避階數(shù)關(guān)系的NS3仿真結(jié)果與Matlab數(shù)值計(jì)算結(jié)果
本文對(duì)在NS3中搭建WiFi網(wǎng)絡(luò)MAC協(xié)議仿真的過程進(jìn)行了詳細(xì)描述,具體描述仿真過程中對(duì)通信與網(wǎng)絡(luò)實(shí)現(xiàn)整體性搭建方法。實(shí)驗(yàn)仿真了IEEE 802.11標(biāo)準(zhǔn)中MAC層DCF機(jī)制,仿真結(jié)果與理論計(jì)算結(jié)果貼合度較高,實(shí)驗(yàn)設(shè)計(jì)成功??稍诖藢?shí)驗(yàn)的基礎(chǔ)上進(jìn)一步進(jìn)行無線網(wǎng)絡(luò)MAC協(xié)議的研究與教學(xué)工作,以及信息與通信工程的一系列課程群整體教學(xué)實(shí)驗(yàn)設(shè)計(jì)。