金怡 孫志
海軍航空工程學院青島分院 山東 青島 266041
隨著網絡技術的日益普及,計算機網絡課程正逐漸成為高校計算機相關專業的一門專業基礎課,甚至一些非計算機專業也開設了網絡課程的選修課。然而計算機網絡課程的基本概念和原理涉及許多抽象的理論知識和大量的網絡協議,使許多初學者感到抽象難懂。在教學過程中,利用普通的演示型課件很難直觀、靈活、準確地表現網絡協議的工作過程。另一方面,網絡實驗中所涉及的硬件設備較為昂貴,很多院校受資金和網絡環境限制,難以在實驗室內構建滿足使用要求的實驗平臺,導致該課程基礎理論與實驗相脫節,學生普遍反映該課程枯燥,理解困難,學習興趣不高。解決此類問題的一個有效途徑是在課程的教學和實驗環節引入軟件模擬和仿真技術,不僅可以給從事網絡課程教學的教師提供有力的教學輔助工具,而且有助于增強學生對所學知識的感性認識,提高學習興趣和效率。
NS是Network Simulator的英文縮寫,即網絡模擬器,又稱為網絡仿真器,目前最新版本是2.34。最初為了研究大規模網絡的網絡協議交互行為,由UC Berkeley而開發,它為有線和無線網絡上的TCP、路由和多播等協議的仿真提供了強有力的支持。NS2是一個開源軟件,任何人可以獲得、使用和修改其源代碼,是目前網絡研究領域應用最廣泛的網絡仿真軟件之一。
NS2本質上是一個面向對象的離散事件模擬器,所有的仿真都是由離散事件驅動的。NS2使用分裂對象模型的開發機制,采用C++和OTcl兩種開發語言進行開發。它們之間采用TclCL進行自動連接和映射。仿真用戶只要通過簡單易用的Tcl/OTcl腳本編寫出仿真代碼,即可對仿真拓撲、節點、鏈路等各種部件和參數進行方便快速的配置。通過制定仿真場景和仿真進程,交換特定的分組來模擬真實網絡情況,并將執行情況記錄到日志文件中,以提供給仿真用戶進行分析解讀,獲取仿真結果。
使用NS2進行網絡仿真,仿真之前,首先應分析仿真過程涉及哪個層次。NS2仿真分2個層次,一個是基于OTcl編程的層次,利用NS已有的網絡元素即可實現仿真過程,無需對NS2本身進行任何修改,只要編寫一個OTcl腳本即可;另一個是基于C++和OTcl編程的層次,如果NS2中沒有所需的網絡元素,就需要首先對NS2進行擴展,添加所需要的網絡元素。這就需要利用前面所提到的分裂對象模型,添加新的C++和OTcl類,然后再編寫OTcl腳本。整個仿真過程如圖1所示。

圖1 利用NS進行網絡模擬的過程
NS2中提供了豐富的網絡構件,在計算機網絡課程中所涉及的各種網絡組件(如常見的各種節點、鏈路以及從數據鏈路層到應用層中的各種協議)在NS2中基本都可以找到,只需稍加修改即可滿足該課程教學中的需求。所以仿真過程比較簡單,無需對NS進行擴展,通常只需利用已有的構件編寫一個OTcl腳本即可。在實際教學過程中,NS2通常可以有如下幾種應用方式。
1)有些課程內容比較難以講述和理解,但是卻比較便于通過動畫等方式表示。這種情況下,需要認真分析教學過程中的困難所在,研究如何利用NS2能夠較為直觀地表現這一問題,以便于學習理解。例如在學習路由協議時,可通過NAM動畫,讓學生觀察當網絡拓撲發生變化時路由的變化情況。
2)綜合使用NS2提供的awk語言、gnuplot或Xgraph等工具對仿真過程產生的數據進行分析,將結果以圖表的形式向學生進行展示,使學生對問題能有一個直觀或者量化的認識。比如隨著網絡通信量的增加,可以方便地通過這一方式來分析網絡擁塞、丟包率、網絡吞吐量的變化情況,并將這些指標通過圖表進行對比分析。
3)對于有能力、有興趣的學生,可以引導進行NS2的學習和使用,以便能夠在學習的過程中自己動手對某些問題進行仿真分析。
本部分將通過一個實例來詳述NS2在實際教學過程中的應用。該實例將仿真動態路由協議RIP(Routing Information Protocols)的工作過程,當網絡拓撲發生變化時,所選路由的動態變化情況,并將這一仿真過程生成NAM動畫,以便能夠在課堂上進行演示。
NS2目前只有Unix和Linux版本,而多媒體教室中的計算機主要采用Windows操作系統。為了便于在課堂上對學生進行演示,通常可在Windows+Cygwin的環境下安裝NS2。Cygwin是一個著名的Windows環境下的Linux操作環境,在Windows操作系統中安裝好Cygwin后,即可以在該環境中安裝NS2。
RIP是目前使用較為廣泛的一種距離向量協議,RIP的度量基于跳數(hops count),每經過一臺路由器,路徑的跳數加1。跳數越多,路徑就越長,RIP算法會優先選擇跳數最少的路徑,而不考慮該鏈路的其他方面的因素,如帶寬、延時或費用等。RIP支持的最大跳數是15,跳數為16的網絡被認為不可達。該仿真過程就是為了在課堂上演示RIP協議在網絡拓撲發生變化時選擇最短路徑的過程。
在NS2中沒有直接提供RIP路由協議,但是RIP路由協議是基于距離向量的,所以在進行實驗時,可使用NS2中已實現的距離向量路由協議(DV)來模擬其工作過程。

在該仿真實例中定義一個由9個結點組成的網絡,通信業務的源節點為n3,目的節點為n8。從0.5秒開始,由n3向n8發送恒定比特流(CBR),所選的最短路由是n3-n2-n0-n4-n8;從1.0秒開始,n2到n0的通路中斷,經過路由表的更新,n3將以新的路由n3-n2-n1-n0-n4-n8向n8發送恒定比特流;從1.5秒開始,n4到n8的通路中斷,n3將以新的路由n3-n2-n1-n0-n4-n7-n8向n8發送恒定比特流;從2.0秒開始,n4到n7的通路中斷,n3將以新的路由n3-n2-n1-n0-n4-n5-n7-n8向n8發送恒定比特流;從2.5秒開始,n4到n5的通路中斷,經過路由表的更新,n3無法與n8建立新路由;從3.0秒開始,n4-n5,n4-n7和n4-n8三條通路同時恢復,路由表更新后,n3將沿n3-n2-n1-n0-n4-n8與n8連通;從3.5秒開始,n2-n0通路恢復,路由表更新后,n3將沿n3-n2-n0-n4-n8與n8連通;在4.0秒CBR終止,在4.5秒時事件結束。
本仿真程序的主要源代碼如框1所示。
代碼運行結束后,將結果記錄在trace文件中,并可生成NAM動畫,將這一過程演示給學生。當網絡拓撲發生變化時,RIP協議將動態選擇一條跳數最少的路徑作為最佳路徑。如圖2所示,仿真程序在1.2秒時,n2到n0的通路由于網絡故障中斷,從圖中經過路由表的更新后,n3以新的路由向n8發送數據流。

圖2 仿真程序NAM動畫在1.2秒時的狀態
圖3表示仿真程序在2.3秒的狀態,n2到n0、n4到n8、n4到n7的通路均由于網絡故障中斷,經過路由表的更新,n3以新的路由向n8發送數據流。

圖3 仿真程序NAM動畫在2.3秒時的狀態

圖4 仿真程序NAM動畫在3.8秒時的狀態
圖4表示仿真程序在3.8秒的狀態,所有鏈路故障均恢復,經過路由表的更新,n3以新的路由向n8發送數據流。
在網絡課程教學過程中使用網絡仿真軟件NS2,一方面可以有效地克服課程枯燥抽象、難以理解的困難,加深學生對網絡原理和各種協議的認識和理解,另外還可以讓學生更加輕松、深入地學習該門課程,提高學生的學習興趣。如若能夠在課程的某些實驗環節中也適當地引入該軟件,讓學生自己動手編寫仿真代碼,完成仿真過程,必定能夠進一步提高學生的自主學習和研究能力,收到更好的學習效果。
[1]Fall K, Varadhan K. The NS Manual[EB/OL].http://www.isi.edu/nsnam/ns/ns-documentation.html
[2]謝希仁.計算機網絡[M].5版.北京:電子工業出版社,2008:263
[3]徐雷鳴,龐博,趙耀.NS與網絡模擬[M].北京:人民郵電出版社,2003:1
[4]陳晶,滕麗敏.基于NS2仿真的網絡課程教學方案設計[J].聊城大學學報:自然科學版,2007(20):100-102
[5]姜恩華.基于NS2的計算機網絡課程輔助教學研究[J].淮北煤炭師范學院學報:自然科學版,2007(28):84-88