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