孫彥景, 陳 巖, 蘆楠楠, 李 松, 王艷芬, 張曉光
(中國礦業大學 信息與控制工程學院, 江蘇 徐州 221116)
無線通信與網絡發展的趨勢是從通信到上層應用網絡的高度融合。傳統的通信與網絡割裂式實驗教學導致學生系統認知不強、所學知識零散,不利于培養學生系統性與工程性思維。因此,有必要改變分別開設實驗課程和設計實驗的模式,圍繞通信系統與計算機網絡系統構建科學、系統且相對獨立的系統性教學實驗體系,構建起從底層通信到高層網絡系統逐步遞增模式的全過程系統實驗教學環節,增強專業實驗的連續性,提升實驗教學質量,使得信息與通信工程相關實驗教學符合“新工科”教學發展理念。
本文以無線通信網絡協議設計仿真實驗為例,利用NS3(Network Simulator 3)軟件,針對無線局域網IEEE 802.11標準中的MAC協議進行了物理層到應用層的整體性仿真實驗設計。該實驗可用于無線通信及網絡的相關研究和教學,并可進一步開展無線局域網絡MAC協議的相關研究和信息與通信工程的一系列課程實驗教學。
NS3是一個離散事件驅動的網絡模擬工具,是一種較新的開源仿真軟件,可以對網絡中物理層到應用層的所有研究進行仿真,因而成為研究網絡的有效實驗工具[1-4]。該軟件應用于實驗教學中,可以有效構建專業課程群整體連續性實驗,培養學生系統性與工程性認知[5]。
圖1為NS3仿真實驗的基本流程[7],若現有模塊無法滿足仿真需要,應添加修改模塊并重新編譯。

圖1 NS3網絡仿真實驗基本流程
根據仿真需要創建的腳本主要包括4部分內容:
(1) 網絡仿真場景及相關參數;
(2) 事件跟蹤函數,用于統計仿真實驗數據;
(3) 仿真參數傳遞入口,用于每次仿真向仿真腳本傳遞參數值,避免仿真腳本頻繁修改;
(4) 信息結果處理程序,用于處理事件跟蹤函數統計的仿真數據,并輸出當次實驗結果。
為方便仿真不同參數下的網絡性能,需要借助Linux腳本語言,在不同參數下自動執行仿真腳本,并將仿真輸出結果輸出至文件中。仿真結束后,利用腳本語言處理仿真輸出文件,輸出最終仿真結果。如果需要進一步修改實驗,可以按照上述步驟重復進行。
一種新的無線通信技術的應用,需要與之相配套的網絡協議的支持;針對特定的應用場景,也需要特定的組網方式來保證系統的有效性與可靠性[8]。因此,對現代通信系統網絡的研究不僅是物理層點對點通信技術,網絡協議與資源分配也是重點研究方向。在無線網絡中,媒體接入控制(medium access control,MAC)層作為物理層的上一層,直接關系到通信信道的使用與分配問題。此外,MAC層向上層網絡傳輸正確接收到的數據包,是通信與網絡結合的關鍵。因此,在無線網絡的研究中,MAC層協議的設計與改進成為一個主要的研究方向。尤其是針對新的網絡應用場景與異構網絡融合的研究,原有的理論研究結果無法得到有效驗證。與新興技術同步進行的MAC協議設計研究在初始階段難以在硬件設備上實驗驗證[9],因此,軟件仿真成為一種有效的研究和實驗方式。
在現有的IEEE802.11無線局域網絡中,MAC協議為分布式協調方式(distributed coordination function,DCF)[10],其中包含Basic機制和RTS/CTS機制。在Basic機制中,當節點檢測到信道空閑時間長于分布式幀間間隙(DIFS)時,節點將信道視為空閑,數據遲1個DIFS后立刻發送,如圖2所示。數據包傳輸完成,目的節點在正確接收數據后延遲SIFS時間后發送ACK幀,源節點接收到ACK后,此次傳輸完成。當信道再次空閑持續長達DIFS之后,進入下一次接入競爭。

圖2 Basic機制
然而當一次傳輸中同時有多個節點發送數據時,會發生沖突,使數據無法成功傳輸,浪費信道資源。浪費的時間是沖突節點中傳輸的最長數據的時間。
采用CSMA/CA協議(RTS/CTS機制),可減少信道資源浪費。如圖3所示,在數據發送之前,通過發送RTS和CTS幀進行數據傳輸的請求與確認。目的節點接收到數據幀后,同樣通過ACK確認此次傳輸完成。在發送RTS過程中,會發生多個節點發送沖突,造成信道資源的浪費,沖突持續時間為RTS傳輸時間加上1個DIFS時間。但RTS幀長度遠小于數據幀長度,因此沖突時間遠小于CSMA/CD機制中的沖突時間,可以有效減少信道資源浪費,因此被廣泛應用于無線網絡中。

圖3 RTS/CTS機制
此外,當網絡中的節點有數據要發送時,在發送之前會執行二進制指數退避機制[10],在數據發送之前會選擇一定的退避窗口,當信道空閑時執行退避計數器減操作。若信道忙,則退避計數器凍結,停止計數。當退避計數器減至0且信道狀態空閑則發送數據,否則繼續退避。若一次發送失敗,進入下一次退避重傳,同時退避窗口翻倍,直至數據傳輸成功。若退避窗口達到最大時仍傳輸失敗,則放棄此次數據傳輸,進行丟包處理。
對DCF協議性能的研究往往以Bianchi所提出的離散Markov模型為基礎[11]。該模型可以有效模擬DCF協議中退避過程。
本文采用NS3中的WiFi模塊設計MAC協議性能分析的仿真實驗。在仿真實驗中,需要賦予網絡中各節點WiFi設備的功能。節點在NS3中為實際通信設備的抽象,包括應用程序、網絡設計及驅動等一系列實際設備特性。圖4為NS3中WiFi設備的結構,各模塊含義為[12]:

圖4 NS3中WiFi設備結構
Application:設備上所安裝的用戶應用程序的抽象,即數據的產生程序;
WifiNetDevice:對實際設備中網絡設備的抽象,包含網卡硬件與驅動程序;
MACHigh:WiFi設備高層MAC抽象,用于設置WiFi網絡設備類型(AP,Station,Adhoc);
DcaTxOp與MacRxMiddle:分別用于處理發送隊列與接收隊列中數據包發送與接收;
MacLow:涉及DCF中控制幀和數據幀的發送與接收;
DcfManager:DCF機制的具體實現及節點收發狀態監聽管理;
WifiPhy:實際發送過程中物理層收發處理,包含物理層接收信號強度、SNR、誤碼率、發送功率等相關信息;
WifiChannel:仿真所用信道模型。
在NS3中實現WiFi網絡仿真場景的基本流程為:
(1) 創建節點:為仿真網絡場景創建設備節點;
(2) 創建Wifi類并設置協議標準;
(3) 創建WifiMAC協議類并設定協議的類型與參數;
(4) 創建WifiPhy類并設置相關參數;
(5) 創建WifiNetDevice;
(6) 創建WifiChannel類并設置信道傳輸模型及相關參數;
(7) 將不同的WifiMAC協議與WifiPhy類組合成WiFi類并封裝到WifiNetDevicel類中,將不同的WifiNetDevice分別安裝至不同的節點上;
(8) 將網絡中的所有節點的WifiPhy類中的信道設置成所生成的WifiChannel,以將所有節點放置在一個信道內工作;
(9) 為每個節點分配網絡地址(IP地址);
(10) 為每個節點安裝應用,包括應用類型、應用的目的節點和網絡接口。
完成上述操作,可以建立一個完整的WiFi網絡仿真場景應用于教學實驗中,使學生掌握硬件設備實現各功能的方法,并通過修改仿真參數獲得不同的仿真結果。因此,需要為仿真腳本添加參數入口、數據收集、結果輸出功能。
在NS3仿真中,通過添加“cmd.AddValue”代碼,并與命令行或“.sh”腳本聯合使用,可在不修改腳本的情況下進行不同參數的仿真,例如:
CommandLine cmd;
cmd.AddValue (″nwifi″,″number of station″, nwifi);
cmd.Parse (argc, argv);
其中cmd.AddValue函數參數分別表示:傳遞變量的形式參數名、參數注釋、腳本中對應的變量名。如上述腳本在執行命令之后添加-nwifi=30,可將該次仿真中的nwifi變量值設置為30。
NS3是離散事件驅動的模擬器,因此對仿真過程中的數據進行收集是通過監聽仿真過程中的離散事件來實現的,通過在仿真中為相應的事件設置觸發回調函數來完成數據收集。如需要追蹤編號為0的節點上的MAC層接收到的總數據包大小,即可通過以下代碼實現:
Config::Connect (″/NodeList/0/DeviceList/*/Mac/MacRx″, MakeCallback (&DevRxTrace))
將事件的觸發回調函數設置為DevRxTrace。編寫DevRxTrace函數如下:
void
DevRxTrace (std::string context, Ptr
{
mac_bytesTotal += p->GetSize ()
}
通過以上仿真設置,編號為0的節點每接收到一個數據包,總接收數據大小mac_bytesTotal加上該數據包大小,從而達到仿真信息跟蹤收集的目的。
在程序腳本最后,對仿真過程中收集到的相關信息作計算處理并打印或寫入相關文件中即可。之后利用gnuplot軟件[13-14]對仿真結果繪制圖形即可完成仿真,可直觀查看到仿真結果。
本文根據Bianchi的研究分別進行了系統平均吞吐量隨節點數、初始退避窗口大小、最大退避階數變化的性能仿真,并與理論分析結果做對比。為更好地對比Bianchi模型的理論結果,本文對實驗結果進行歸一化處理。
圖5為DCF中不同機制與參數下系統平均吞吐量隨節點數變化的仿真及理論曲線,可以看出仿真實驗所得結果較接近理論計算結果。

圖5 系統吞吐量與節點數關系的NS3仿真與Matlab數值計算比較
圖6為RTS/CTS模式下的平均系統吞吐量與初始退避窗口大小之間關系的NS3仿真圖和Matlab數值計算圖,設置最大退避階數為6,可見兩者貼合程度較高。

圖6 RTS/CTS模式下系統吞吐量與最小退避窗口關系的NS3仿真與Matlab數值計算比較
圖7為basic模式下的平均系統吞吐量與初始退避窗口之間關系的NS3仿真圖和Matlab數值計算圖,設置最大退避階數為6,可見兩者的貼合程度較高。

圖7 Basic模式下系統吞吐量與最小退避窗口關系的NS3仿真結果與Matlab數值計算結果
圖8為DCF中的平均系統吞吐量與最大退避階數之間關系的NS3仿真圖和Matlab數值計算圖,最小退避窗口設置為32,可見仿真結果較貼近于理論計算值。

圖8 系統吞吐量與最大退避階數關系的NS3仿真結果與Matlab數值計算結果
本文對在NS3中搭建WiFi網絡MAC協議仿真的過程進行了詳細描述,具體描述仿真過程中對通信與網絡實現整體性搭建方法。實驗仿真了IEEE 802.11標準中MAC層DCF機制,仿真結果與理論計算結果貼合度較高,實驗設計成功。可在此實驗的基礎上進一步進行無線網絡MAC協議的研究與教學工作,以及信息與通信工程的一系列課程群整體教學實驗設計。