摘要:利用NS2的動畫效果可以動態演示節點的收發包過程,不但可以幫助學生理解網絡協議,提高學生學習的興趣;而且利用NS2代碼開源的特點,還可以提高學生的編程能力。將NS2仿真工具引入到無線網絡實驗教學中,取得了較好的教學效果。
關鍵詞:無線網絡;實驗教學;NS2
作者簡介:雷宏江(1976-),男,陜西合陽人,重慶郵電大學通信與信息工程學院,講師;鮮永菊(1973-),女,四川南部人,重慶郵電大學通信與信息工程學院,副教授。(重慶 400065)
基金項目:本文系2010-2013年重慶郵電大學教改項目“通信網絡虛擬體驗系統建設與實驗課程開發”(項目編號:XJG1002)的研究成果。
中圖分類號:G642.423 文獻標識碼:A 文章編號:1007-0079(2012)31-0107-02
無線網絡技術[1]是當前計算機網絡中的最熱點的研究領域,也是一門理論性比較強的課程,在傳統的實驗室中開展實驗教學比較困難。現有的針對無線網絡的實驗設備,成本非常昂貴,而且代碼保密,學生很難深入理解網絡協議和算法。為此,我們將網絡仿真工具NS2引入無線網絡實驗教學中,利用NS2的動畫效果動態演示節點的收發包過程,不但可以幫助學生深刻理解網絡協議和算法,提高學生學習無線網絡的興趣,而且利用NS2代碼開源的特點,還可以使得學生深入到協議和算法的具體實踐中去,從而提高學生的編程能力,激發學生對無線網絡協議驗證、改進和開發的興趣。
一、NS2的介紹
網絡模擬是進行網絡技術研究的一種基本手段,是指采用軟件對網絡的協議、拓撲和性能進行模擬分析。網絡模擬可以在硬件條件不具備的情況下幫助科研人員快速學習、設計、分析和改進協議和算法。此外,網絡模擬還可以在不需要建立實際網絡系統的情況下比較、評估和驗證新舊協議和算法的性能。目前,常見的網絡仿真軟件主要有OPNET、SPD、Qualnet和NS2等。所有的仿真軟件都支持有大量的網絡協議,但是OPNET、SPD和Qualnet均為商業化產品,價格昂貴。而NS2屬于開源軟件,有著良好的開放性和可擴展性,因此在網絡模擬中使用最為廣泛。
NS[2]是由UC Berkeley大學開發的一種面向對象的網絡環境模擬器,來源于1989年的Real Network Simulator項目,目前最流行的是版本2,即NS2(Network Simulator 2)。經過全世界各地研究者多年來不斷的努力和完善,NS2已經成為一個涉及網絡各個方面的優秀的網絡模擬工具。NS2集成的大量無線網絡協議,以及其強大的二次開發能力使得NS2已經成為無線網絡學術研究最常用的仿真平臺。在教育方面,由于NS2可以直觀地展示網絡協議的行為,幫助學生了解各種因素對網絡性能帶來的影響以及其開源性,國外很多大學都將NS2作為網絡教學的工具。
二、NS2的優勢
NS2具有以下特點。[2-5]
1.離散事件驅動
NS2的核心部分是一個離散事件模擬引擎。在NS2中有一個“Scheduler”類,負責記錄當前時間,調度網絡時間隊列中的事件,并提供函數產生新事件,指定事件發生的時間。在NS2中,典型的事件包括分組到達、定時器超時等,模擬時鐘的推進由事件發生的時間量確定。模擬處理過程不直接對應實際時間。一個事件的處理可能又會產生后繼的時間。模擬器所做的就是不停地處理一個個事件,直到所有的事件都被處理完或者某一特定事件發生為止。
2.豐富的構件
NS2對網絡系統中常見的實體進行了建模,如節點、分組、鏈路、隊列、定時器等,并用對象來實現這些實體的特性和功能。同時NS2還提供了豐富的數學支持,如隨機數產生等,提供了方便的追蹤和監視方法。
3.高效的機制
NS2使用了分裂對象模型的開發機制,采用C++和OTCL兩種語言,它們之間采用TCLCL進行自動連接和映射。一方面,OTCL是一種解釋執行的不需要強制轉換類型的語言。用OTCL提供面向用戶的接口(進行模擬配置),可以在不必重新編譯的情況下快速修改網絡環境參數和模擬過程,提高模擬的效率。另一方面,C++是一種高效的編譯執行語言。在實現具體的通信協議時,需要高效地操作分組格式和實現通信算法。C++程序運行速度比較快,并且容易實現復雜的數據類型和復雜的算法,因此用C++來實現構件的功能,可使模擬過程的執行獲得較好的性能。此外,NS2代碼開源的特征,可以幫助學生將理論和具體的實現結合起來,從實現的角度來理解協議的原理,不但可以加深對協議本身的理解,而且可以品味編程的魅力,從而提高動手的能力和興趣。
4.強大的結果處理能力
NS2中,仿真結果一般放在兩種不同的文件中,第一種是Trace文件,該文件詳細記錄了模擬的整個過程,包括網絡中所有節點上每一個數據分組到達、離開鏈路或隊列,或者被丟棄分組的信息,對Trace文件進行詳細分析,就能得到所要的仿真結果(如吞吐量、時延等),最后可以利用繪圖工具(如MATLAB、origin等)將仿真結果轉換成直觀的圖表。第二種是NAM文件,用動畫的方式展示整個模擬過程中各個節點的動作,讓學生以“看”的方式去了解包是如何由源節點送到目的節點的。這是NS2在網絡教學中廣泛使用的重要基礎。
三、使用NS2進行模擬的過程[4]
使用NS2進行網絡仿真時,首先需要分析NS2中現有的協議模塊是否可以滿足仿真要求,如果可以,那么只需要編寫OTCL腳本和對Trace文件進行分析,而無需修改NS2中的協議(即不需要改寫任何C++代碼),這個屬于NS2仿真的基本層次;如果NS2中現有的協議模塊不能滿足仿真的需要(例如沒有需要仿真的協議或算法),那么需要對NS2進行擴展(要么基于NS2中現有的協議進行擴展,要么重新開發,都需要進行基于C++層次的編程),然后重新編譯NS2,然后再編寫OTCL腳本,最后分析Trace文件,直到獲得滿意的結果,這是用NS2進行仿真的高級層次。一般針對本科教學的定位是在基本層次,少數編程能力較強的本科同學可以達到高級層次;而針對研究生教學的定位是在第二層次。用NS2模擬的過程如圖1所示。
四、NS2在無線網絡中的教學范例[6]
在基于CSMA/CA的無線通信中,由于多徑傳播的原因,信號強度的減小按照距離的指數規律變化,只有在發射機一定半徑范圍內的節點才能偵聽到信道上的載波。這種依賴位置的載波偵聽會產生隱藏終端或暴露終端問題。如圖2所示,如果節點A正在給節點B發包,節點C不能偵聽到A的發送,錯誤的認為信道空閑,也給節點B發數據,于是在節點B處發生了碰撞。因此節點A和節點C互為隱藏終端。如果節點B給節點A發數據,這時,節點C想給節點D發數據,但是C偵聽到B的發送,認為信道忙而不發送。實際上,由于碰撞只會發生在接收端,即節點C的發送不會影響到A和B的通信。這時,節點B和C互為暴露終端。
使用RTS/CTS能有效避免無線通信中的碰撞問題。如圖2所示。源節點A發包之前,先發一個RTS包,通知源節點傳送范圍內的所有節點,如果目的節點B空閑,則響應一個CTS包,通知源節點A可以發包了,也通知自己的鄰節點(節點C知道了節點B要占用信號與節點A通信,于是不給節點B發包)。因此通過RTS/CTS,雖然不能完全解決隱藏終端問題,但是可以緩解。但是對于暴露終端,使用RTS/CTS,可能會使得發給節點B和發給節點C的包(如CTS或者ACK)發生碰撞,使得系統性能變差,即不能解決暴露終端問題。圖3為仿真截圖,圖4為每個節點的平均包投遞率。
五、存在的問題
第一,使用NS2最大的問題就是需要學生有一定的編程能力,但是,從實際的教學來看,部分編程能力較差的同學使用NS2有些吃力,但是經過同學們的努力之后,不但能提高編程動手能力,而且學習網絡的興趣也提高了。
第二,主要是TCL與C語言的交互機制TclTCL,同學們學起來比較費解。在未來的NS3中,模擬器全部是由C++編寫,僅僅帶有選擇性的Python語言綁定,這個問題可以得到解決。
第三,NS2是基于Linux平臺的仿真工具,需要使用者有一定的Linux基礎。
六、總結與展望
NS2作為一個非常優秀的仿真工具,一直廣泛應用在學術研究中。NS2中的動畫形象的展示了發包和丟包情景,引起了學生的極大興趣,取得了良好的教學效果。
參考文獻:
[1]汪濤.無線網絡技術導論[M].北京:清華大學出版社,2008.
[2]黃化吉,等.NS網絡模擬和協議仿真[M].北京:人民郵電出版社,2010.
[3]吉祖勤,等.NS2仿真技術在網絡實驗教學中的應用[J].實驗技術與管理,2011,(12).
[4]方路平,等.NS2網絡模擬基礎與應用[M].北京:國防工業出版社,2008.
[5]李大勇.NS2仿真軟件在無線網絡教學中的應用[J].微計算機信息,
2010,(19).
[6]柯志亨,等.NS2仿真實驗——多媒體和無線網絡通信[M].北京:電子工業出版社,2009.
(責任編輯:孫晴)