劉 廣
【摘要】利用網(wǎng)絡(luò)仿真工具搭建仿真平臺,通過模擬環(huán)境下的實驗提高學(xué)生對計算機網(wǎng)絡(luò)知識的理解能力,充分培養(yǎng)學(xué)生的創(chuàng)新能力,將是高校計算機網(wǎng)絡(luò)教學(xué)的一種發(fā)展趨勢。文章通過分析網(wǎng)絡(luò)仿真工具NS2的特點、原理、工作流程,以及NS2在實驗教學(xué)中的具體實例,闡述了網(wǎng)絡(luò)仿真工具在教學(xué)中的應(yīng)用及其意義。
【關(guān)鍵詞】網(wǎng)絡(luò)仿真;NS2;計算機網(wǎng)絡(luò)教學(xué)
【中圖分類號】G420 【文獻標識碼】A 【論文編號】1009—8097(2009)10—0111—03
一 引言
在以信息化帶動工業(yè)化和工業(yè)化促進信息化的現(xiàn)代化發(fā)展進程中,計算機網(wǎng)絡(luò)扮演了越來越重要的角色。為了適應(yīng)信息社會對人才培養(yǎng)的需要,許多高校都開設(shè)了計算機網(wǎng)絡(luò)課程。但在一般的計算機網(wǎng)絡(luò)教學(xué)過程中,僅通過課堂學(xué)習(xí)或書本知識的學(xué)習(xí),學(xué)生對網(wǎng)絡(luò)知識的理解只能停留在比較抽象的認知層面。即使學(xué)生利用設(shè)備進行實際組網(wǎng)實驗,但由于硬件設(shè)備本身的具體特性,屏蔽了網(wǎng)絡(luò)的底層運作原理,這使得學(xué)生對網(wǎng)絡(luò)底層的具體運作依然無法深入的理解。對于這些問題,網(wǎng)絡(luò)仿真為我們提供了一個很好的解決思路。網(wǎng)絡(luò)仿真工具利用數(shù)學(xué)建模和統(tǒng)計分析的方法模擬網(wǎng)絡(luò)行為,它通過建立網(wǎng)絡(luò)設(shè)備、鏈路、協(xié)議和協(xié)議模型,并模擬網(wǎng)絡(luò)流量傳輸,從而驗證網(wǎng)絡(luò)協(xié)議的正確性或獲取網(wǎng)絡(luò)設(shè)計和優(yōu)化的性能數(shù)據(jù)。利用網(wǎng)絡(luò)仿真工具構(gòu)建仿真平臺,我們可以演示計算機網(wǎng)絡(luò)課程涉及到的原理、協(xié)議和算法等,讓學(xué)生可以深入到網(wǎng)絡(luò)技術(shù)的核心,這不僅可以充分調(diào)動學(xué)生的積極性,而且可以使學(xué)生加深對計算機網(wǎng)絡(luò)原理的理解程度。此外,通過使用網(wǎng)絡(luò)仿真平臺,我們可以進行大規(guī)模網(wǎng)絡(luò)模擬,從而使學(xué)生能夠有機會接觸和了解大規(guī)模網(wǎng)絡(luò)的運行。同時,通過仿真實驗對各種新老協(xié)議或算法進行比較學(xué)習(xí),可以讓學(xué)生對網(wǎng)絡(luò)協(xié)議或算法得到更深入的理解。
本文將詳細介紹開源的網(wǎng)絡(luò)仿真工具NS2的原理及其工作流程,并結(jié)合實例分析闡述如何在教學(xué)中使用NS2,以提高學(xué)生的學(xué)習(xí)積極性并使學(xué)生能對網(wǎng)絡(luò)的基本原理和運作有更深入的認識。
二 NS2簡介
自從仿真技術(shù)出現(xiàn)以來,各種網(wǎng)絡(luò)仿真工具被研發(fā)并廣泛的使用?,F(xiàn)有的網(wǎng)絡(luò)仿真工具中,有專門針對特定網(wǎng)絡(luò)環(huán)境的仿真工具、有專門測試網(wǎng)絡(luò)協(xié)議算法性能的仿真工具,也有囊括了現(xiàn)有常用的網(wǎng)絡(luò)協(xié)議的網(wǎng)絡(luò)仿真工具,如NS2、OPNET等。目前,使用較多的網(wǎng)絡(luò)仿真工具主要有NS2(Network Simulator Version 2)和 OPNET。OPNET屬于商業(yè)化軟件,由于其采購成本較高,在中國高校里較少使用。
NS2是一個開放源碼的多協(xié)議網(wǎng)絡(luò)模擬軟件,來源于1989年的Real Network Simulator項目,經(jīng)過多年的發(fā)展,于1995年得到施樂公司(Xerox)的支持,加入VINT項目。NS2一直以來都在吸收世界各地研究者的成果,包括UCB、CMU等大學(xué)和SUN等公司的無線網(wǎng)絡(luò)方面的代碼,因此NS2一直都在不斷的被更新和完善。
NS2是一個面向?qū)ο蟮?、離散事件驅(qū)動的網(wǎng)絡(luò)環(huán)境模擬工具,可以完整地模擬整個網(wǎng)絡(luò)環(huán)境。NS2使用一整套C++類庫實現(xiàn)了絕大多數(shù)常見的網(wǎng)絡(luò)協(xié)議以及鏈路層的模型,如:有線網(wǎng)絡(luò)或無線網(wǎng)絡(luò)的TCP、UDP、路由、多播等多種協(xié)議模型,利用這些類庫的實例就可以搭建起整個網(wǎng)絡(luò)的模型,而且包括詳盡的細節(jié)實現(xiàn)。
三 NS2的原理及工作流程
NS2使用了兩種編程語言,OTcl(具有面向?qū)ο筇匦缘腡cl腳本程序設(shè)計語言)和C++,NS2采用這兩種語言是因為仿真工具有兩方面的事情要做:一方面,具體協(xié)議的模擬和實現(xiàn),這需要一種能高效率的處理字節(jié)、報頭等信息的程序設(shè)計語言,即對運行速度非常重要,而運行模擬環(huán)境的時間、尋找和修復(fù)Bug的時間,以及重新編譯和運行的時間不是很重要,在這種情況下,C++語言是非常合適的;另一方面,許多網(wǎng)絡(luò)中的實驗或研究工作主要是圍繞著網(wǎng)絡(luò)組件和環(huán)境的具體參數(shù)的設(shè)置和改變而進行的,需要在短時間內(nèi)快速的開發(fā)或模擬出所需要的網(wǎng)絡(luò)環(huán)境,并且方便的修改和發(fā)現(xiàn),在這種情況下,網(wǎng)絡(luò)環(huán)境設(shè)置的時間就顯得重要了,而腳本語言在這方面有很大的優(yōu)勢,具有面向?qū)ο筇匦缘腡cl腳本語言可以充分的滿足此需求。
C++和OTcl兩種語言的對象和變量是通過TclCL關(guān)聯(lián)起來的,C++的類和對象為編譯類和編譯對象,相反地OTcl的類和對象為解釋類和解釋對象,TclCL是在OTcl基礎(chǔ)上的封裝。通過下面的NS2架構(gòu)圖來理解幾者之間的關(guān)系。
對NS2使用者來說,OTcl腳本語言用于實現(xiàn)網(wǎng)絡(luò)拓撲部分,OTcl是架構(gòu)在Tcl之上的面向?qū)ο蠛蟮难由?事件調(diào)度器和網(wǎng)絡(luò)組件這兩部分主要用C++編寫。C++在最底層則是表示NS2的核心主要就是C++。TclCL是連接OTcl和C++的橋梁,最后搭配用戶接口就構(gòu)成了NS2。
NS2的工作流程就是使用OTcl語言編寫腳本,模擬要解決問題的模型的處理過程,通過OTcl語言解釋器解釋執(zhí)行,使用NS2仿真庫進行編譯和仿真,輸出仿真結(jié)果,根據(jù)仿真的結(jié)果記錄,可進行相關(guān)內(nèi)容的分析,生成網(wǎng)絡(luò)拓撲圖或者得到數(shù)據(jù)的可視化圖表。對于特殊情況或研發(fā)的新協(xié)議,可以修改、編寫C++代碼,提供新的類庫以滿足試驗需要。NS2的工作流程如圖2。
四 NS2在實驗教學(xué)中的應(yīng)用
1 NS2在實驗教學(xué)中的應(yīng)用
本文以TCP擁塞控制的隨機及早檢測(Random Early Detection,RED)為例,利用仿真工具NS2進行建模,然后運行得出結(jié)果,對結(jié)果數(shù)據(jù)進行分析,并以圖形方式展示出來,從而讓學(xué)生能夠深入了解RED的運行機制以及其性能。
下面對RED做一個簡要的介紹,RED是隨機及早檢測算法,是一種擁塞避免機制,它在每個路由器上檢查自己的隊列,當它檢測到擁塞即將發(fā)生時,就通知源調(diào)整擁塞窗口。
實驗場景如下:構(gòu)建如圖3網(wǎng)絡(luò)拓撲,RED隊列位于路由器r1和r2之間的鏈路上,可以容納25個數(shù)據(jù)包,通過觀察RED隊列如何通過測量當前和平均隊列的動態(tài)長度,從而避免擁塞的出現(xiàn)。
實驗結(jié)束后,利用圖形工具XGraph對仿真產(chǎn)生的數(shù)據(jù)以圖形方式輸出,如圖4。其中紅線是隊列的瞬時長度,綠線是隊列的加權(quán)動態(tài)平均長度。通過試驗觀察,可以讓學(xué)生直觀深入的了解RED是如何工作的,即RED隊列瞬時長度隨著平均長度上下波動,產(chǎn)生這種效果是由于當隊列長度超過某個丟棄級別時,按照一定的丟棄概率將到達的分組丟棄,以避免擁塞出現(xiàn)。
2 利用NS2對改進的或自己新設(shè)計的協(xié)議進行驗證
在計算機網(wǎng)絡(luò)教學(xué)中,我們不僅要讓學(xué)生充分理解網(wǎng)絡(luò)的基本知識和運作原理,還應(yīng)該積極引導(dǎo)學(xué)生通過試驗對現(xiàn)有協(xié)議進行對比學(xué)習(xí),了解現(xiàn)有協(xié)議的優(yōu)缺點,盡可能的啟發(fā)學(xué)生去改進現(xiàn)有協(xié)議或提出新的協(xié)議,充分調(diào)動學(xué)生的創(chuàng)造性。
這里通過列舉一個簡單的實例,說明如何通過編碼在NS2中創(chuàng)建一個新的協(xié)議,并對新建協(xié)議進行驗證。
實驗場景如下:假設(shè)有一個通過UDP進行通訊的多媒體應(yīng)用程序,數(shù)據(jù)發(fā)送者和接受者可以通過自動協(xié)商工作在五種不同的編碼和傳輸速率刻度值上,而具體采用的刻度值通過網(wǎng)絡(luò)擁塞情況決定。五種刻度值設(shè)為:0-4,發(fā)送者開始以刻度值為0的速率工作,并且根據(jù)接收者返回的刻度值調(diào)整自己發(fā)送的速率。為了監(jiān)控網(wǎng)絡(luò)擁塞,設(shè)計一個簡單的周期發(fā)送的監(jiān)控數(shù)據(jù)報,在一個周期內(nèi),如果監(jiān)測數(shù)據(jù)包丟失了,則認為網(wǎng)絡(luò)出現(xiàn)擁塞,數(shù)據(jù)傳送雙方降低自己的刻度值,減慢編碼和傳輸速率,如果沒有監(jiān)控數(shù)據(jù)包丟失,則增加刻度值,加大編碼和傳輸速率。
在這個實驗場景中,UDP代理分發(fā)和傳送數(shù)據(jù)報,應(yīng)用層通訊需要的所有信息要求UDP代理作為一個數(shù)據(jù)流進行處理,而現(xiàn)有UDP代理分發(fā)的數(shù)據(jù)報里只有一個頭棧,因此需要更改現(xiàn)有的UDP代理,給它增加一個發(fā)送來自應(yīng)用層數(shù)據(jù)報的機制,并在IP報文頭沒用使用的字段里增設(shè)一個標記數(shù)據(jù)類型的標志。
根據(jù)實驗場景利用C++語言,編寫數(shù)據(jù)接收和數(shù)據(jù)發(fā)送類,并對現(xiàn)有的UDP代理根據(jù)實驗場景需求進行更改(由于篇幅問題,具體代碼略)。最后設(shè)計一個拓撲圖,對設(shè)計的利用UDP傳輸?shù)亩嗝襟w程序進行測試,拓撲見圖5。
五 結(jié)束語
通過上面的分析可以看出,利用網(wǎng)絡(luò)仿真工具不僅可以使學(xué)生通過實驗對計算機網(wǎng)絡(luò)知識和運作原理有更深入的理解,而且通過實驗的比較分析學(xué)習(xí)后,可以啟發(fā)學(xué)生,更好的培養(yǎng)學(xué)生的創(chuàng)新意識和創(chuàng)新能力,更好的滿足社會發(fā)展的需求。因此,把網(wǎng)絡(luò)仿真工具引入到高校計算機網(wǎng)絡(luò)教學(xué)中,充分地發(fā)揮網(wǎng)絡(luò)仿真工具在教學(xué)工作中的優(yōu)勢,將是高校計算機網(wǎng)絡(luò)教學(xué)的一種發(fā)展趨勢。
參考文獻
[1] Kevin Fall, Kannan Varadhan. The ns Manual[EB/OL].<http://www.isi.edu/nsnam/ns/ns-documentation.html, 2009-02-24.>
[2] Jae Chung, Mark Claypool.NS2 by Example[EB/OL].<http://nile.wpi.edu/NS/, 2009-03-16.>
[3] 于斌,孫斌,溫暖,等.NS2與網(wǎng)絡(luò)模擬[M].北京:人民郵電出版社,2007:35-43.
[4] 柯志亨.NS2教學(xué)手冊[EB/OL].<http://140.116.72.80/~smallko/ns2/ns2.htm, 2009-03-16.>
[5] 楊延雙,張建標,王全民.TCP/IP協(xié)議分析及應(yīng)用[M].北京:機械工業(yè)出版社,2007:23-31.