陳顯濤 金偉祖 于志安
摘要:隨著網(wǎng)絡的發(fā)展, 網(wǎng)絡研究與實驗也變得越來越復雜,但高校開展新穎網(wǎng)絡實驗卻舉步艱難,特別是針對某些需要大量物理設備才能順利進行的實驗,因為許多普通高校無法提供足夠的硬件資源。因此,網(wǎng)絡虛擬實驗的實現(xiàn)就十分必要。當前,網(wǎng)絡仿真實驗以及網(wǎng)絡仿真軟件已有一定的發(fā)展基礎,但在線可視化的虛擬網(wǎng)絡平臺上依舊是一塊空缺。 本文采用Linux下流行的LAMP架構(gòu),使用HTML5、JavaScript、 Django和NS3等技術(shù),開發(fā)了基于NS3的虛擬網(wǎng)絡實驗室構(gòu)建及其在線可視化。
關鍵詞:NS3;Python;Django;JavaScript;HTML5
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2014)01-0020-04
作為培養(yǎng)和提高學生動手實踐能力、觀察能力、分析問題和解決問題能力等方面有著先天優(yōu)勢的實驗教學是高校教育改革的關鍵問題之一[1]。目前,我國傳統(tǒng)實驗教學環(huán)節(jié)不足、實驗資源投資不足,嚴重制約著實驗教學的發(fā)展,虛擬實驗可以有效解決解決上述問題,虛擬實驗的建設有利于降低實驗室建設成本,緩解財政壓力給實驗教學帶來的不利影響,有利于培養(yǎng)學生實驗操作能力[2]。因此,虛擬實驗教學環(huán)境的研究已經(jīng)成為當前教育研究的新熱點,究其緣由主要是信息技術(shù)的蓬勃發(fā)展已經(jīng)使部分虛擬實驗環(huán)境的設計與開發(fā)成為現(xiàn)實,使各類虛擬實驗室建設成為可能[3]。如今網(wǎng)絡仿真實驗以及網(wǎng)絡仿真軟件已有一定的發(fā)展基礎,但在線可視化的網(wǎng)絡仿真平臺上依舊是一塊空缺。
1 系統(tǒng)設計
1.1 體系架構(gòu)
本虛擬實驗室在總體設計上,共分為四層架構(gòu),結(jié)構(gòu)如圖1所示。
1) 前端網(wǎng)頁顯示層,它定義了與頁面中UI組件相關聯(lián)的屬性和處理邏輯,使用了HTML和JavaScript技術(shù),通過網(wǎng)頁來顯示虛擬實驗結(jié)果。
2) 服務層,提供頁面處理服務,選用了Apache作為網(wǎng)站的服務器,Apache服務器具有安全性高和跨平臺性等特點。
3) 控制層,它控制著各個頁面的跳轉(zhuǎn)以及頁面間數(shù)據(jù)流的處理,并負責調(diào)用與NS3程序相關的模塊。選用了Django網(wǎng)絡開發(fā)框架,來負責頁面數(shù)據(jù)處理和傳遞的控制。Django遵循MVC設計,強調(diào)代碼復用,多個組件可以很方便的以“插件”形式服務于整個框架。除此以外,Django還有許多功能強大的第三方插件可使用。Django通過Apache HTTP 服務器的中mod_python來實現(xiàn)和Apache服務器的交互。
4) 邏輯業(yè)務層,它負責執(zhí)行虛擬網(wǎng)絡程序,并將仿真結(jié)果由返回給網(wǎng)頁顯示。采用了NS3程序。NS3程序通過Libpcap來返回PCAP包[4]。Libpcap是Unix/Linux平臺下的網(wǎng)絡數(shù)據(jù)包捕獲函數(shù)包,大多數(shù)的網(wǎng)絡監(jiān)控軟件都以它為基礎,在捕獲數(shù)據(jù)包之后,Libpcap并非直接返還,而是添加部分信息,組裝成PCAP數(shù)據(jù)包之后返還。
1.2 可視化技術(shù)
顯示層的可視化技術(shù)采用了Web技術(shù),在瀏覽器中由用HTML顯示實驗結(jié)果,并通過JavaScript處理一些業(yè)務邏輯和判斷邏輯。
HTML超文本標記語言,是一種用于描述網(wǎng)頁文檔的標記語言,是一種規(guī)范,一種標準,通過各種不同的標簽來告訴瀏覽器如何顯示網(wǎng)頁中的各個部分,有三個主要優(yōu)勢:簡易型、可拓展性和平臺無關性[5]。
JavaScript是一種面向?qū)ο蟮膭討B(tài)類型腳本語言,常用來給HTML網(wǎng)頁添加動態(tài)功能,響應用戶操作,可以處理一些簡單的業(yè)務邏輯和判斷邏輯[5]。JavaScript也是一種具有相對安全性的腳本語言,其無法修改客戶端瀏覽器內(nèi)存范圍之外數(shù)據(jù)。JavaScript內(nèi)置的支持類, 有利于解決虛擬網(wǎng)絡實驗中的復雜數(shù)據(jù)結(jié)構(gòu),有利于提高代碼的可讀性,降低代碼編寫難度。
JavaScript對事件的支持可以豐富客戶端功能[6]。例如在用戶輸入IP地址時,限制用戶輸入0-9以外的字符,通過抓取onkeyup事件,對其進行相應的處理即可實現(xiàn)。
虛擬網(wǎng)絡實驗對路由器、主機有任意拖拽的需求,該文采用HTML5新添的canvas標簽來實現(xiàn)這一功能。
Canvas標簽是HTML5中新添加的特性,它可以定義圖形、繪制圖片和其他圖像。Canvas標簽只是圖形容器,必須使用腳本來繪制圖形[7]。如下,通過canvas來繪制一個紅色矩形。
Canvas控件加上JavaScript中的事件,可以迅速準確的對用戶的操作做出反應,并直接在瀏覽器中進行顯示,這兩者的組合使得虛擬網(wǎng)絡實驗的可視化功能可以得到更好的體驗。
2 PCAP包解析算法
PCAP包是NS3程序執(zhí)行時所生成的數(shù)據(jù)包,包含了一個節(jié)點所發(fā)出和收到的所有IP數(shù)據(jù)包[8]。因此對于PCAP包的解析就顯得十分重要,PCAP包的解析工作是由Django完成,Django將NS3程序執(zhí)行完所給的結(jié)果即PCAP包地址作為參數(shù),調(diào)用編寫的動態(tài)鏈接庫。
解析PCAP包需要使用C++編寫的動態(tài)鏈接庫,因為PCAP包擁有固定的文件格式,并且為二進制文件。在C++中,讀文件函數(shù)fread可以按照參數(shù)中所給的數(shù)據(jù)結(jié)構(gòu),一次性讀取數(shù)據(jù)結(jié)構(gòu)長度的byte,按照數(shù)據(jù)結(jié)構(gòu)的定義,將其轉(zhuǎn)換為數(shù)據(jù)結(jié)構(gòu)中的對應的成員變量,。因此,該文使用fread函數(shù)處理擁有固定格式的PCAP包。PCAP包解析流程如圖2所示。
在PCAP解析中,有兩個主要問題:第一,不同的數(shù)據(jù)鏈路層協(xié)議的幀頭不同,需要事先判斷PCAP包是哪種數(shù)據(jù)鏈路層協(xié)議;第二,在判斷完數(shù)據(jù)鏈路層協(xié)議之后, 還要對網(wǎng)絡層協(xié)議進行判斷。該文采用如下解決方法:
1) 使用PCAP文件頭中的linktype變量來判斷該PCAP包數(shù)據(jù)鏈路層協(xié)議類型。
2) 用數(shù)據(jù)幀幀頭中的FrameType來判斷屬于何種網(wǎng)絡層協(xié)議。
3 虛擬實驗平臺構(gòu)建
本文采用了在Linux下流行的LAMP架構(gòu),網(wǎng)頁部分即可視化部分使用HTML和JavaScript技術(shù)開發(fā),后臺邏輯處理使用Python模式C++開發(fā)。
3.1網(wǎng)絡拓撲結(jié)構(gòu)處理模塊
網(wǎng)絡實驗需要的設備有路由器和主機(統(tǒng)稱為節(jié)點)。因此,網(wǎng)絡拓撲結(jié)構(gòu)模塊主要包括添加節(jié)點功能、刪除節(jié)點功能、節(jié)點位置移動功能、設備IP地址配置實現(xiàn)和建立網(wǎng)絡連接功能實現(xiàn)。網(wǎng)絡拓撲結(jié)構(gòu)模塊如圖3所示。
用戶需要自行決定實驗中路由器的數(shù)量,可以動態(tài)的對路由器進行添加和刪除。對于主機可以進行動態(tài)添加,但是上限為兩臺主機,主機和路由器的添加實現(xiàn)功能類似。路由被刪除后,它所連接的網(wǎng)段也應相應的被刪除。動態(tài)路由配置實驗中,可以對路由和主機進行自由的拖拽,使路由與主機的布局可由用戶靈活的進行控制,以更好的體現(xiàn)網(wǎng)絡拓撲結(jié)構(gòu)。網(wǎng)絡拓撲結(jié)構(gòu)模塊效果如圖4所示。
3.2虛擬網(wǎng)絡實驗運行模塊
3.2.1配置數(shù)據(jù)提交功能
動態(tài)路由配置實驗中,設備的數(shù)量可以無限的動態(tài)添加,路由器中路由表的項數(shù)也可以有無限多條。在用戶全部配置完成后,數(shù)據(jù)量將會變得比較龐大和復雜,因此需要一種合適的數(shù)據(jù)標準來對這些數(shù)據(jù)進行有效的傳輸。
本文采用JSON數(shù)據(jù)交換格式。JSON是一種輕量級的數(shù)據(jù)交換格式,是基于JavaScript的一個子集[9]。JSON采用完全獨立于語言的文本格式,既易于閱讀和編寫,也易于機器解析和生成。JSON擁有兩種數(shù)據(jù)結(jié)構(gòu),簡單說就是JavaScript中的對象和數(shù)組,使用這兩種結(jié)構(gòu)可以表示各種復雜的結(jié)構(gòu)。
使用JSON只需在網(wǎng)頁端進行JSON字符串的組裝,并且一些簡單對象可以直接使用JavaScript庫自帶的JSON.stringify()函數(shù)轉(zhuǎn)換成JSON字符串。在Django后臺,無需再對字符串進行解析,直接使用Django自帶的simplejson庫,將JSON字符串變?yōu)樽值鋵ο蟆?/p>
在編碼時,該文采用每個對象自行生成獨自的JSON字符串,再對其進行組合形成最終的JSON字符串的方法,從而降低出錯率。JSON字符串轉(zhuǎn)換如圖5所示。
3.2.2虛擬實驗運行功能
動態(tài)路由配置實驗,由網(wǎng)頁進行實驗結(jié)果顯示,依靠NS3模擬實驗過程。實驗運行流程如圖6所示。
NS3程序調(diào)用python的ctypes庫,ctypes能夠提供和C語言兼容的數(shù)據(jù)類型,可以很方便地調(diào)用C編譯的靜態(tài)庫和動態(tài)庫中的函數(shù)[10]。由于python的數(shù)據(jù)類型與C中的數(shù)據(jù)類型并不完全相同,因此ctypes庫負責進行數(shù)據(jù)類型轉(zhuǎn)換。
4 結(jié)束語
本課題以在Linux操作系統(tǒng)下較為流行的LAMP架構(gòu)進行開發(fā),即Linux、Apache、Mysql、Python四者的組合,再輔以NS3網(wǎng)絡仿真軟件,組成了一個完整的網(wǎng)絡虛擬實驗室系統(tǒng),實現(xiàn)了虛擬實驗室的網(wǎng)頁可視化。由于本次網(wǎng)絡虛擬實驗室中實現(xiàn)的實驗數(shù)量較少,對于各種實驗的支持不夠豐富,無法讓學生能夠進行各種虛擬實驗。為此,在接下里的工作中,需要實現(xiàn)更多的實驗項目來豐富虛擬實驗室。
參考文獻:
[1] 王艷麗,陰國富.計算機網(wǎng)絡工程實驗優(yōu)化探索[J].現(xiàn)代電子技術(shù),2008,(13):132-136.
[2] 衷宗福,夏索霞.網(wǎng)絡實驗室的規(guī)劃與設計[J].南京工程學院學報:自然科學版,2004,2(1):42-44.
[3] 董付國,原達.NS-2仿真技術(shù)在計算機網(wǎng)絡實驗教學中的應用與研究[J].計算機教育,2005,(10):5l-53.
[4] 徐雷鳴,龐博,趙耀.NS與網(wǎng)絡模擬[M].北京:人民郵電出版社,2003.
[5] 劉西杰,柳林.HTML,CSS,JavaScript網(wǎng)頁制作從入門到精通[M].北京:人民郵電出版社,2013.
[6] 王萍萍,趙俊莉,孫強.JavaScript基礎與實踐教程[M].北京:電子工業(yè)出版社,2007.
[7] (美)基瑞著,愛飛翔譯. HTML5 Canvas核心技術(shù):圖形、動畫與游戲開發(fā)[M].北京:機械工業(yè)出版社,2013.
[8] 于斌,孫斌.NS2與網(wǎng)絡模擬[M].北京:人民郵電出版社,2007.
[9] 胡雯.利用JSON實現(xiàn)Ajax中數(shù)據(jù)傳遞[J].科技信息,2009,(15):20-23.
[10] 王林濤,張新有.NS在計算機網(wǎng)絡教學中的應用[J].實驗科學與技術(shù).2008,6(4):48-50.