天天看點

NS2使用入門:NS by Example中文翻譯(1)

NS2使用手冊:NS by Example 中文翻譯

章節:Overview

NS是一個事件驅動網絡模拟器,由UC伯克利開發用來仿真多種IP網絡。它應用了網絡協定比如TCP和UPD,流量源操作比如FTP,Telnet,Web,CBR和VBR,路由器隊列管理結構比如Drop Tail,RED和CBQ,路由算法比如Dijkstra算法等等。NS也使用了多點傳送以及一些MAC層協定用來做LAN仿真。NS工程現在是VINT工程的一部分,開發工具進行仿真結果展示,分析和以NS格式轉換生成網絡拓撲。目前,NS2(version 2)用C++和OTCL編寫(MIT開發的面向對象的Tcl過程語言)。這篇文檔簡要的讨論了NS的基本結構,解釋了NS的細節(大部分以例子為主)。大部分圖檔用來描述NS基本結構和網絡元件基本來自 5th VINT/NS Simulator Tutorial/Workshop和NS Manual (正式稱作“NS文檔”),根據需要修改了一些。想知道NS的更多資訊和相關工具,請通路VINT project home page。

NS2使用入門:NS by Example中文翻譯(1)

圖一可以看到,在簡化的使用者眼中,NS是面向對象(OTcl)腳本解釋器,擁有仿真事件排程和網絡元件對象庫,和網絡設定(管道)子產品庫(實際上,管道子產品用來當做基本仿真對象的一個功能)從另個角度講,為了使用NS,你需要使用OTcl腳本程式設計。為了設定和運作一個仿真網絡,一個使用者應當寫一個OTcl腳本初始化一個事件排程器,使用網絡對象和庫中的管道功能設定網絡拓撲,并且通過事件排程器告訴流量源何時開始和結束發送包。“管道”名詞用來指網絡設定,因為設定一個網絡就是探索可能的資料路徑在網絡對象之中,通過設定一個對象的“鄰接”指針指向一個恰當對象的位址。當使用者想建立一個新網絡對象,他可以輕松地通過寫一個新對象或者從對象庫中建立一個複合物,并且探索對象的資料路徑。這可能聽起來是很複雜的工作,但是OTcl管道子產品實際上讓工作變得非常簡單,NS的強大之處就來自這個管道。

除了網絡對象,另一個NS的主要元件就是事件排程器。NS裡的一個事件就是一個唯一的ID包,包括排程時間和掌控事件的對象指針。在NS中,一個事件排程器跟蹤仿真時間和管理目前時間在事件排程隊列中的事件,通過引用适當的網絡元件,經常是釋出這些事件的元件,并且讓他們做一些适當的活動和事件指向的包進行溝通。網絡元件和另一個流過的包通信,其實這并不消耗實際仿真時間。所有的網絡元件需要花費一些仿真時間處理一個包(即需要一個延遲)使用事件排程器為這個包釋出一個事件并且在做任何處理此包的活動前等待此事件解除。舉個例子,一個網絡選擇元件(switch)仿真一個選擇過程,通過20ms的選擇延遲釋出一個包事件給排程器被選中,就像一個事件20ms以後到達一樣。排程器20ms後解除事件并把它給選擇元件,選擇元件會把包發送給一個合适的輸對外連結路元件。排程器另一個用處就是定時器。幾個例子,TCP需要一個定時器來跟蹤包發送的重傳時間是否到達。(相同的TCP包發送但不同的NS ID包)。定時器使用事件排程器像延遲一樣類似的用法。他們的唯一差別就是定時器測量一個時間值通過一個包溝通,并且一段時間後做一個有關那個包的适當動作,并不會仿真一個延遲。

NS并不僅僅用OTcl編寫也用C++。由于效率原因,NS分離了控制和資料的路徑使用。為了減少包和事件處理時間(不是仿真時間),資料路徑的事件排程器和基本網絡元件對象使用C++編寫及編譯的。這些編譯對象通過OTcl鍊路對OTcl解釋器是可用的,OTcl鍊路為每個C++對象建立了OTcl的比對對象并且使由C++特定的控制功能和配置變量就像對應的OTcl對象的成員函數和成員變量。通過這種方法,C++對象的控制和OTcl一緻。這也可能增加一個成員函數和變量給一個C++連結OTcl對象。C++對象不需要在仿真中控制或者内部被另一個對象使用時不必轉換成OTcl,同樣的,一個對象(不是資料路徑)能夠完全用OTcl使用。圖2展示了C++和OTcl的對象等級,一個圖中需要注意的地方是C++對象有一個OTcl連結程式形成了等級制度,會有一個OTcl對象和C++相似比對。

NS2使用入門:NS by Example中文翻譯(1)

圖三展示了NS的基本結構。這張圖檔中一個通用使用者(不是NS開發者)可以被認為站在左側底部的角落,在OTcl庫中使用仿真對象,用Tcl設計和運作仿真,事件排程器和大部分網絡元件均使用C++,并且通過OTcl連結器對于OTcl可用。所有東西在一塊創造了NS,一個使用網絡模拟器庫的面向對象的Tcl解釋器。

這個章節簡要的闡述了NS的通用結構和架構。這一點上,你可能奇怪如何獲得NS仿真結果,就像圖1所見,當一個仿真結束後,NS生成了一個或多個基于文本的輸出檔案,包含了詳細的仿真資料。如果在一個輸入Tcl腳本或者OTcl專門做。資料可以用來做仿真分析,(兩個仿真結果分析例子将在下個章節展示),或者作為一個圖仿真展示工具叫做(Network Animator,NAM)的輸入,也是VINT的一部分。NAM有一個良好的圖使用者接口,相當于一個CD播放器(播放,快進,倒退,暫停等等),并且有個播放速度控制器。甚至,它可以以圖的形式展示一些資訊比如吞吐量和每條鍊路的丢包數,雖然圖資訊不能用來做精準的仿真分析。