周德榮,夏 齡,舒 濤, 田關偉
(四川民族學院 網絡信息中心,四川 康定 626001)
計算機網絡課程作為高校計算機類專業和電氣信息類專業的核心課程之一,涉及大量的概念、原理以及各種協議和算法,這些內容大多抽象、晦澀,單純通過理論教學難以讓學生理解和掌握。實踐教學是使學生學好計算機網絡基本原理和技術的有效方法[1-2]。
目前,網絡實驗室主要有2類:一類是由傳統的計算機機房改建而成,實驗設備主要由終端計算機和軟件構成,側重網絡基礎應用技術訓練,主要開設Web、DNS、FTP,DHCP等常規網絡服務及應用的實驗;另一類是專門的網絡實驗室[3],實驗設備有交換機、路由器、服務器、終端機等,主要完成交換機配置、路由器配置、NAT轉換,網絡互聯等實驗,偏重組網技術實驗。2類實驗室均存在以下不足:
(1) 投入經費大、維護困難;
(2) 對網絡協議及算法的學習輔助力度不夠;
(3) 實驗室設施、設備不能及時更新,不能適應最新網絡知識的學習和實踐能力培養的要求;
(4) 實驗室位置固定,不利于學生課后做實驗。
針對以上問題,本文提出采用虛擬機軟件和NS2仿真軟件構建網絡協議仿真實驗平臺,并將其運用于計算機網絡的實踐教學。
利用虛擬機軟件,可以在一臺物理計算機上虛擬出若干臺獨立的邏輯計算機(即虛擬機)[4]。虛擬機是一種嚴密隔離的軟件容器,它可以運行操作系統和應用程序,完全類似物理計算機。VMware虛擬機具有以下特點:
(1) 兼容性好:虛擬機與所有標準的X86操作系統、應用程序、設備驅動程序完全兼容,支持多種操作系統,如Windows、Linux、FreeBSD、NetWare等;
(2) 隔離性好:虛擬機共享一臺物理計算機資源,但彼此完全隔離,如果一臺虛擬機崩潰,其他虛擬機完全不受影響,在安全性方面有一定優勢;
(3) 可移動性好:虛擬機實質上是一個軟件容器,它將虛擬硬件資源、操作系統及所有應用程序封裝在一個軟件包內,由物理硬盤上的配置文件(*.vmx)、磁盤文件(*.vmdk)、CMOS配置信息(*.nvram)、日志文件(*.log)和*.vmx.lck(啟動時生成)等5個文件組成,具備很強的可移動性和易管理性;
(4) 系統安裝簡便、克隆快捷:VMware虛擬機虛擬出來的硬件具有固定型號,與物理計算機無關,安裝速度快,且不易產生設備兼容問題;通過已建立的虛擬機可快速產生新的虛擬機。
NS2是加州大學伯克利分校開發的離散事件驅動的網絡模擬器[6]。NS2免費使用、開放源碼、支持眾多協議,并且提供豐富的測試腳本,具有良好的擴展性和廣泛網絡用戶支持等特點,已成為最流行的網絡仿真軟件。NS2包含仿真事件調度器、網絡組件對象庫以及網絡構建模型庫等。事件調度器計算仿真時間,激活事件隊列中的當前事件,執行一些相關的事件;網絡組件通過傳遞分組來相互通信,所有需要花費仿真時間來處理分組的網絡組件都要使用事件調度器。
NS2中常用的網絡構件有節點、鏈路、代理、應用、隊列、跟蹤對象等。節點主要用于模擬實際網絡上的主機、交換機、路由器等網絡設備,節點可配置節點類型、節點地址類型、路由算法等屬性;鏈路是將節點連接起來的一條通路,通過鏈路中的隊列和延時實現實際網絡中的包緩沖和傳輸延時;代理可以用來模擬傳輸層的TCP、UDP協議,也可用來模擬網絡業務流量,如CBR、VBR等;應用對象用來模擬各種應用層對象,如FTP、HTTP等;跟蹤對象用于記錄并存儲NS2中的模擬結果,可配置需要跟蹤的一些參數,將其寫入跟蹤日志文件。
NS2由OTCL和C++兩種編程語言實現[7],所有的構件已編寫成相應的C++類和OTCL對象。C++類對象是算法和協議的具體實現;OTCL對象是用戶接口對象,用于編寫模擬腳本,主要是建立OTCL對象、設置屬性,通過事件調度器調度網絡模擬事件的發生。針對實際要求,采用構件對象配置研究項目的網絡系統模型進行仿真模擬。
采用NS2進行網絡模擬的基本過程如圖1所示。網絡仿真實驗涉及2個層次:基于OTCL編程的層次、C++和OTCL編程的層次。前者利用NS2現有網絡組件編寫OTCL腳本實現仿真,不需要擴展網絡組件;后者是對第一個層次的擴展,向NS2中添加所需的新的C++和OTCL類,編寫新的OTCL腳本來實現仿真模擬操作。

圖1 NS2模擬仿真的基本過程
網絡協議仿真實驗平臺是通過一系列的軟件實現的(見圖2)。平臺基于X86硬件平臺構建,采用主流的Windows操作系統,虛擬機軟件采用VMware Workstation 9.0,仿真軟件采用NS2-allinone-2.34。由于NS2必須運行于UNIX/Linux平臺,因而虛擬機中網絡仿真平臺操作系統采用Ubuntu10.04。

圖2 網絡協議仿真平臺的層次結構
網絡協議仿真實驗平臺構建過程如下:
(1) 在Windows平臺上安裝虛擬機軟件VMware Workstation 9.0,進行簡單配置,確保虛擬機和物理機間能正常通信;
(2) 在VMware Workstation 9.0中建立虛擬機,安裝Ubuntu10.04操作系統,配置網絡,系統環境中安裝gcc,make 和Nam相關庫文件,如libxmu-dev;
(3) 進入Ubuntu10.04操作系統,下載仿真軟件NS2-allinone-2.34.tar.gz,解壓執行NS2-allinone-2.34/ns-2.34/./install進行安裝,配置系統環境變量;
(4) 測試安裝成功與否,若成功,則對虛擬機進行備份,方便實驗環境遷移,或在進行實驗前對虛擬機建立快照,防止進行網絡協議仿真時破壞實驗環境。
暴露節點問題是指當一個節點要發送數據給另一個節點時,因偵聽到鄰近節點正在發送數據而推遲自身發送數據,因而產生不必要的延時,影響節點的數據傳送[8]。如圖3所示,有4個節點S0、S1、R0、R1,其中R0、R1都不在對方的傳送范圍內,而S0、S1均在彼此的傳送范圍內。當S0正傳送數據給R0時,S1卻不能將數據傳送給R1,因為S1會檢測到S0正在發送數據,如果其他也發送數據的話,就會影響S0的數據發送。但事實上,S1是可以正確無誤地將數據發給R1的,因為R1并不在S0的傳送范圍內。

圖3 暴露節點問題示意圖
為了解決暴露節點問題,802.11 DCF協議采用RTS/CTS機制[9]。當一個節點偵聽到鄰近節點發出的RTS,但沒有偵聽到相對應CTS時,判定自身是一個暴露節點,所以允許傳送數據到其他鄰近節點。這個節點可以成功送出RTS,但相應的CTS不一定能被成功收到。當S1收到S0發出的RTS,但未能收到對應CTS時,S1可推測自己是暴露節點,則可同時發送數據。此時,雖然S1發出的數據不會沖突,但其他節點發給S1的數據(CTS/ACK)卻可能與S0發出的數據沖突,影響傳輸質量。
本實驗的任務是觀察RTS/CTS機制對暴露節點問題的影響。無線網絡暴露節點問題與傳輸距離有關,NS2提供TwoRayGround、FreeSpace和Shadowing 3種無線傳輸模型預測接收端所收到的信號強度,以此判斷傳輸數據能否成功被接收。本實驗采用TwoRayGround模型,它主要考慮發送端到接收端直線距離的路徑損耗和地面反射因素,模型[10]為:
其中:P為接收端的接收信號強度,Pt為傳送功率,Gt為傳送端天線增益,Gr為接收端天線增益,ht為傳送天線高度,hr為接收天線高度,d為傳送端到接收端的直線距離。
仿真拓撲如圖3所示。建立500 m×500 m的正方形區域仿真環境,S0、S1、R0、R1各節點之間的距離為100 m,節點之間的偵聽范圍為150 m,分組有效傳送距離為120 m,節點S0和R0之間建立一條udp連接,節點S0在1.5~15.0 s之間采用1 Mbit/s的速率向R0發送分組大小為1 000 Byte的CBR流,節點S1在10.0~30 s之間采用1 Mbit/s的速率向R1發送分組大小為1 000 Byte的CBR流。采用TwoRayGround模型,分組傳送距離為120 m,使用NS2提供的threshold工具[11],計算得到傳送功率為0.281838,發送頻率為9.14e+8,發送端天線高度為1.5,接收端天線高度為1.5,發送端天線增益為1,接收端增益為1,要設定RxThresh_為6.88081e-9。
默認情況下,NS2所有的無線傳輸都使用了RTS/CTS機制[12],通過在模擬腳本文件中設置RTSThreshold_的值來決定是否使用RTS/CTS機制。當設置Mac/802_11 set RTSThreshold_為3 000時,不使用RTS/CTS機制;當Mac/802_11 set RTSThreshold_為0時,使用RTS/CTS機制。通過修改此值,分別執行模擬并保存發送記錄和接收記錄文件,從各結點的發送記錄文件和接收記錄文件得知,當未使用RTS/CTS時,結點S0送出1 688個封包,結點S1送出1 626個封包,但結點R0只收到891個從S0送出的封包,結點R1只收到819個從S1送出的封包。當使用RTS/CTS時,結點S0送出1 688個封包,結點S1送出1 626個封包,但結點R0收到756個從S0送出的封包,結點R1收到758個從S1送出的封包。
同時,針對仿真結果trace文件,編寫awk數據分析腳本,測得2種情況下S0→R0和S1→R1之間的吞吐量如圖4、圖5所示。可以發現,在1.5~10 s時,由于只有S0向R0發送CBR流,所以S0→R0之間的流量比較穩定。10 s之后,由于S1向R1發送CBR流,發生暴露節點問題,網絡流量下降,而17 s之后,S0停止發送CBR流,暴露節點問題消失,S1→R1之間的吞吐量逐漸穩定。可以看出,圖5與圖4比較沒有明顯改善,這說明使用RTS/CTS并不能有效地解決暴露節點問題。

圖4 未采用RTS/CTS機制的暴露節點現象

圖5 采用RTS/CTS機制的暴露節點現象
利用NS2網絡協議虛擬仿真平臺,能完成網絡課程教學過程中的算法模擬,或通過對C++代碼的修改,自由實現協議或者算法仿真,通過觀察實驗結果能直接驗證方案的可行性和優劣。本文構建的基于虛擬機技術的NS2網絡協議仿真平臺,簡化了實驗環境的建立過程,平臺具有可移動性、易用性和較強的實用性,對計算機網絡教學及協議研究有一定促進作用。
[1] 林元乖.創新型計算機網絡實驗教學研究[J].實驗技術與管理,2010,27(12):173-176.
[2] 晏弼成,何曼娜,蔡文輝.網絡實驗教學模式改革的研究與實踐[J].實驗室研究與探索,2007,26(9):93-95.
[3] 歐陽星明,姚小龍,謝欣榮.網絡虛擬實驗室的設計與實現[J].計算機工程,2004(2):185-186.
[4] 沈敏虎,查德平,劉百祥,等.虛擬機網絡部署與管理研究[J].實驗技術與管理,2011,28(5):311-313.
[5] 方路平,劉世華,陳盼.NS-2網絡模擬基礎與應用[M].北京:國防工業出版社,2008.
[6] 徐雷鳴,龐博,趙耀.NS與網絡模擬[M].北京:人民郵電出版社,2003.
[7] 劉乃安.無線局域網原理、技術與應用[M].西安:西安電了科技大學出版社,2004.
[8] 謝希仁.計算機網絡[M].4版.北京:電子工業出版社,2004.
[9] 柯志亨,程榮祥,鄧德雋.NS2仿真實驗:多媒體和無線網絡通信[M].北京:電子工業出版社,2009.
[10] 蔡群英,黃鎮建.基于NS2的無線網絡隱藏節點問題仿真實驗[J].實驗室研究與探索,2009,28(11):74-76.
[11] 李波,杜德慧,李飛.無線網絡站點隱藏問題在NS2下的模擬和分析[J].微計算機信息,2006,7(3):122-125.