版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Network Simulator 助教:趙俊民課程目的 學(xué)習(xí)和使用網(wǎng)絡(luò)模擬器NS,使大家對如何做網(wǎng)絡(luò)模擬有個基本認(rèn)識和了解 如何使用NS來發(fā)現(xiàn)和研究網(wǎng)絡(luò)中的一些問題 提高大家的編程能力和分析解決問題的能力網(wǎng)絡(luò)研究的方法分析(Analysis)構(gòu)建模型,數(shù)學(xué)分析如排隊論,圖論等實(shí)驗網(wǎng)絡(luò)實(shí)驗床(testbed)EmulationLab environment 模擬(Simulation)模擬工具,如NS,OpNet,QualNet等模擬能夠做什么? 對現(xiàn)有的協(xié)議或算法進(jìn)行研究,主要是它們的行為或性能進(jìn)行評價 對新提出的協(xié)議或算法進(jìn)行測試 對研究成果進(jìn)行對比評價,找出各種的優(yōu)點(diǎn)和不足模擬的優(yōu)點(diǎn)和缺
2、點(diǎn) 優(yōu)點(diǎn) 非常靈活,易于配置,并且成本比較低(不需要買設(shè)備) 可以研究大規(guī)模網(wǎng)絡(luò) 容易獲得研究成果 缺點(diǎn) 會忽略掉真實(shí)網(wǎng)絡(luò)中一些重要細(xì)節(jié) 對產(chǎn)生的結(jié)果要仔細(xì)驗證,有可能不適合于真實(shí)環(huán)境NS簡介 NS(Network Simulator)它是由LBNL ( Lawrence Berkeley National Laboratory ) 的網(wǎng)絡(luò)研究小組開發(fā)的模擬工具。 NS具有可擴(kuò)展、易配置、可編程等特點(diǎn)。 NS是面向?qū)ο蟮?,離散事件驅(qū)動的網(wǎng)絡(luò)環(huán)境模擬器,開發(fā)于UC Berkeley,它可以模擬各種IP網(wǎng)絡(luò)環(huán)境。 NS實(shí)現(xiàn)了對許多網(wǎng)絡(luò)協(xié)議的模擬,如TCP,UDP,和數(shù)據(jù)源發(fā)生器(traffic s
3、ource)如FTP,WWW,Telnet,Web,CBR和VBR等。NS簡介(續(xù)) NS-2由C+和Otcl(加上面向?qū)ο筇匦缘腡CL腳本程序設(shè)計語言,開發(fā)于MIT)兩種程序設(shè)計語言實(shí)現(xiàn)。 Ns前端運(yùn)行Otcl Otcl:運(yùn)行速度慢,容易修改 =場景配置 Ns 用C+實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧 C+:運(yùn)行速度快,不容易更改 = 協(xié)議棧實(shí)現(xiàn)NS的學(xué)習(xí)方法 掌握原理。NS離散事件模擬機(jī)制和分裂對象模型需要重點(diǎn)理解。 牢記節(jié)點(diǎn)結(jié)構(gòu)。節(jié)點(diǎn)(node)是網(wǎng)絡(luò)中最重要的組件,對有線和無線中節(jié)點(diǎn)結(jié)構(gòu)要非常清楚,明白數(shù)據(jù)包是如何在節(jié)點(diǎn)中流動的。 整體上把握NS。了解組件的基本功能,不要太注重細(xì)節(jié),當(dāng)需要時候再理解清楚。
4、 積極閱讀源代碼,采取的策略一般是整體到局部,從粗到細(xì)。 NS-2中用到的TCL很簡單,不需要專門學(xué)習(xí)NS的安裝Windows平臺Cygwin+Ns-2 Vmware虛擬機(jī)+linux+Ns-2Linux平臺注意:不同NS版本所能安裝的linux版本是不同的,要核查清楚。下面以版本2.31為例選擇安裝環(huán)境Fedora Core 5NS的安裝(續(xù)) 首先獲得NS安裝包,參考下載地址/nsnam/dist/ns-allinone-2.31.tar.gz 或其他網(wǎng)址 安裝文件 # cd 要安裝的目錄 #tar zxvf ns-allinone-2.31.tar.gz
5、 #cd ns-allinone-2.31 # ./install 配置環(huán)境變量 當(dāng)安裝完畢時,會顯示讓你如何配置!問題的解決 如果在安裝過程中遇到問題,可以到/nsnam/ns/ns-build.html Ns mailing list: 需要注意的是,在不同的系統(tǒng)下安裝出的問題會有所不同 在搜索NS-2目錄結(jié)構(gòu)NS2層次結(jié)構(gòu)NS命令的使用 當(dāng)安裝完畢后,在任何路徑下,直接鍵入ns 如果要運(yùn)行某個tcl程序(比如example.tcl,那么: ns example.tclTcl與Tk編程環(huán)境概述 Tcl與Tk是安裝在Unix/
6、Linux環(huán)境下的兩個包,它們一起構(gòu)成了一套開發(fā)系統(tǒng)應(yīng)用程序和圖形用戶界面接口(GUI)應(yīng)用程序的環(huán)境。 Tcl的全稱是Tool Command Language。 Tk是Tcl在X Window環(huán)境下的擴(kuò)展,它包含了Tcl的全部的C庫函數(shù),以及支持X Window的窗口、控件等C庫函數(shù),為用戶開發(fā)圖形用戶界面提供了方便。 Tcl是解釋執(zhí)行的腳本語言。它的實(shí)現(xiàn)依賴于Tcl內(nèi)部的C函數(shù)庫。添加新的C函數(shù)就可以擴(kuò)充Tcl的命令和功能,是擴(kuò)展性非常強(qiáng)的腳本程序設(shè)計語言。 Tcl解釋器把用戶輸入的命令和程序語句進(jìn)行初步分析,然后調(diào)用C函數(shù)庫里的相應(yīng)函數(shù)來執(zhí)行,輸出結(jié)果。 Tcl是無強(qiáng)制類型的腳本語言,
7、一切變量,不論整型,浮點(diǎn)型等,都以字符串的形式存儲。Tcl基礎(chǔ) 先看一個最簡單的例子:hello world#Define a process named helloworldproc helloworld puts Hello world!# Call the process helloworldHelloworldTcl基礎(chǔ)(cont.) # Writing a procedure called testproc test set a 43 set b 27 set c expr $a + $b set d expr expr $a - $b * $c for set k 0 $k 10
8、incr k # Calling the test procedure created abovetestTcl命令和語句的執(zhí)行過程 Tcl解釋器分為兩個主要模塊,Tcl的Parser和Tcl的executer。 Tcl的Parser要執(zhí)行的主要功能是:把輸入的命令或者語句切割成一個一個的字符串,并在一遍掃描的過程中進(jìn)行變量替換、命令結(jié)果替換和特殊字符替換。在切割過程中不對命令進(jìn)行任何語意理解。 Tcl命令的基本構(gòu)成是:命令名+參數(shù)+參數(shù)+ Tcl的executer的功能是:把Tcl的Parser處理過的命令或語句字符串向量進(jìn)行分析。由于字符串向量的第一個字符串元素是命令的名稱,那么execu
9、ter匹配Tcl中C庫函數(shù)的函數(shù)名,當(dāng)匹配到的時候,把全部參數(shù)傳遞給匹配到的C函數(shù)來執(zhí)行命令,然后返回結(jié)果。如果匹配不到則返回錯誤。 返回的結(jié)果都是字符串類型的,如果沒有實(shí)際意義的返回結(jié)果,則返回空的字符串。OTcl Tcl的面向?qū)ο髷U(kuò)展 Otcl是Tcl的面向?qū)ο螅∣bject Oriented)的擴(kuò)展,在Otcl中加入了類的概念。 對象是類的實(shí)例,它有自己的屬性(成員變量,InstVar)和自己的內(nèi)部操作(成員函數(shù),InstProc)。 對象具有繼承、封裝、多態(tài)性和動態(tài)綁定等性質(zhì)。 面向?qū)ο髾C(jī)制的加入使得原始的Tcl變得更加強(qiáng)大,更加方便使用。 雖然和C+中對象和類以及其他面向?qū)ο蟪绦蛟O(shè)計
10、語言中的概念相同,但是具體實(shí)現(xiàn)和語法卻存在很大的差別。OTcl Tcl的面向?qū)ο髷U(kuò)展# Create a class call mom and # add a member function call greetClass mommom instproc greet $self instvar age_ puts $age_ years old mom say: How are you doing?# Create a child class of mom called kid # and overide the member function greet“Class kid -supercl
11、ass momkid instproc greet $self instvar age_ puts $age_ years old kid say: Whats up, dude?# Create a mom and a kid object set each ageset a new mom$a set age_ 45set b new kid$b set age_ 15# Calling member function greet of each object$a greet$b greet學(xué)習(xí)TCL/OTCL參考資料 NS與網(wǎng)絡(luò)模擬第三章 http:/netmedia.gist.ac.k
12、r/dulee/tclns.html /pub/otcl/doc/tutorial.htmlNS模擬的例子 一個簡單的有線模擬場景 一個簡單的無線模擬場景場景中由兩個節(jié)點(diǎn)組成,一個節(jié)點(diǎn)向另一個節(jié)點(diǎn)發(fā)送ftp數(shù)據(jù)有線模擬場景示意圖n0n1sinkftptcp1.04.05.0secftp1mb,20ms一個簡單有線模擬腳本(1)#建立一個Simulator對象實(shí)例set ns new Simulator#打開一個out.tr的文件,用來記錄模擬過程的trace數(shù)據(jù)set tracefd open out.tr w$ns trace-all $tra
13、cefd#打開一個out.nam文件,用來記錄nam的trace數(shù)據(jù)set nf open out.nam w$ns namtrace-all $nf一個簡單有線模擬腳本(2)#建立一個名為finish的過程,關(guān)閉兩個trace文件,并執(zhí)行nam程序proc finish global ns nf tracefd $ns flush-trace close $nf close $tracefd exec nam out.nam & exit 0一個簡單有線模擬腳本(3)#新建兩個node(節(jié)點(diǎn)),并賦給n0和n1set n0 $ns nodeset n1 $ns node#在n0和n1建立一條
14、雙向的link(鏈路),該鏈路的帶寬為1Mb/s,延遲為10ms,隊列為DropTail$ns duplex-link $n0 $n1 1Mb 10ms DropTail#新建一個Tcp代理,并綁定到n0上set tcp new Agent/TCP$tcp set class_ 2$ns attach-agent $n0 $tcp一個簡單有線模擬腳本(4)#新建一個Tcpsink,并綁定到n1上set sink new Agent/TCPSink$ns attach-agent $n1 $sink#把tcp和sink兩個agent連接起來$ns connect $tcp $sink#新建一個f
15、tp業(yè)務(wù),并連接到tcp代理上set ftp new Application/FTP$ftp attach-agent $tcp$ftp set type_ FTP一個簡單有線模擬腳本(5)#告知Simulator對象在1.0時啟動ftp$ns at 1.0 $ftp start$ns at 4.0 $ftp stop“#告知Simulator對象在5.0調(diào)用finish過程$ns at 5.0 “finish“#開始模擬$ns run數(shù)據(jù)包通信圖NS網(wǎng)絡(luò)組件模型 網(wǎng)絡(luò)組件:構(gòu)成網(wǎng)絡(luò)的基本功能單位,包括簡單網(wǎng)絡(luò)組件和復(fù)合網(wǎng)絡(luò)組件,一般可以從真實(shí)網(wǎng)絡(luò)中找到對應(yīng)體,如一個節(jié)點(diǎn)對象可以對應(yīng)一個主機(jī)或
16、路由器,一個鏈路對象對應(yīng)兩個主機(jī)相連的媒介。 所有的基本網(wǎng)絡(luò)組件可以劃分為2類,分類器(Classifier)和連接器(Connector)。它們都是NsObject的直接子類,也是所有基本網(wǎng)絡(luò)組建的父類。 分類器(Classifier)的派生類組件對象包括地址分類器(AddrClassifier)和多播分類器(McastClassifier)等。 連接器(Connector)的派生類組件對象包括隊列(Queue),延遲(Delay),各種代理(Agent),和追蹤對象類(Trace)分類器 分類器(classifier)是Ns-2基本網(wǎng)絡(luò)組件的一個大類。它的基本派生類有地址分類器(AddrC
17、lassifier)和多播分類(McastClassifier)等。 拓?fù)浣Y(jié)點(diǎn)(Node)是由一個結(jié)點(diǎn)入口對象和若干個分類器(Classifier)組成的一個復(fù)合對象。單播節(jié)點(diǎn)(Node)有線Multicast節(jié)點(diǎn)結(jié)構(gòu)連接器(connector) 連接器Connector是Ns-2基本網(wǎng)絡(luò)組件中的另一個大類。它的基本派生類對象包括緩沖隊列(Queue)、延遲(Delay)、各種產(chǎn)生和處理數(shù)據(jù)包的代理(Agent)和對象的跟蹤器(Trace)。 拓?fù)浣Y(jié)點(diǎn)連接類(Link)是Ns-2中另一個主要的復(fù)合組件對象。一個結(jié)點(diǎn)和另一個結(jié)點(diǎn)之間的簡單連接(simplex-link)是單向的。一個最基本的簡單
18、連接由一個連接入口、包緩沖隊列、延遲處理對象、廢棄處理對象和時間處理對象(TTL)組成。 一個結(jié)點(diǎn)的輸出隊列,是通過和這個結(jié)點(diǎn)相連的Link中的緩沖隊列來實(shí)現(xiàn)的。單向鏈路示意圖拓?fù)浜唵芜B接Link一個簡單的拓?fù)浣Y(jié)構(gòu)中的2個結(jié)點(diǎn)之間的連接是單向的。通過Simulator對象中的dublex-link成員函數(shù)可以在兩個結(jié)點(diǎn)之間的2條互相的單向簡單連接。一個結(jié)點(diǎn)或交換設(shè)備在一個輸出路徑上的輸出隊列,是由在該路徑上的簡單連接(simplex-link)中的數(shù)據(jù)緩沖隊列來實(shí)現(xiàn)的。在Link中從數(shù)據(jù)緩沖隊列(queue)中被彈出(dequeue)的包被傳遞到延遲處理對象(Delay)中進(jìn)行延遲的模擬。在L
19、ink中從數(shù)據(jù)緩沖隊列(queue)中掉出(Dropped)的包,被送到廢棄處理對象(一個Null Agent)中被釋放。TTL對象計算包在Link中被處理時的相關(guān)的時間參數(shù)。加入Trace和Monitor的連接對象代理(Agent)類的種類和說明 代理網(wǎng)絡(luò)組件代表了在網(wǎng)絡(luò)層中數(shù)據(jù)包的產(chǎn)生地和運(yùn)輸源頭,同時也是各層網(wǎng)絡(luò)中各種協(xié)議的實(shí)現(xiàn)。 Agent/TCP Agent/TCP/Reno Agent/UDP Agent/Tcpsink Agent/NULL 包(Packet)類的結(jié)構(gòu)和說明 在Ns-2中,一個“包”是由一個報頭(Header)堆棧(Stack)和一個可選擇的數(shù)據(jù)空間構(gòu)成。 報頭的
20、格式,在模擬器對象(Simulator)創(chuàng)建的過程中創(chuàng)建好,同時,所有注冊過的報頭,比如一般的屬性說明、IP報頭,Tcp報頭,RTP報頭,都在包的報頭堆棧中存儲。 通過不同報頭在包的報頭堆棧中的偏移量(Offset),網(wǎng)絡(luò)組件可以根據(jù)需要,來訪問包中的不同報頭。這就符合上面的機(jī)制,在報頭格式創(chuàng)建的時候,無論這個注冊過的報頭是否需要,都被加到報頭堆棧中。 通常,一個包只含有報頭堆棧部分,而沒有數(shù)據(jù)空間。這是因為,在模擬的環(huán)境中,傳輸實(shí)際的數(shù)據(jù)是沒有意義的。包(Packet)類的結(jié)構(gòu)和說明應(yīng)用程序(application) 應(yīng)用程序?qū)邮墙⒃趥鬏敶砩系膽?yīng)用程序的模擬。 Ns-2中有兩種類型的“應(yīng)
21、用程序” 數(shù)據(jù)源發(fā)生器(Traffic Generator) Exponential On/Off Pareto On/Off CBR 模擬的應(yīng)用程序(Simulated applications) Application/FTP Application/Telnet一個無線仿真的例子(1) Scenario 2 mobile nodes moving within 500m x 500m flat topology using DSDV ad hoc routing protocol Random Waypoint mobility model TCP traffic一個無線模擬的例子(2)
22、# Define Global Variables# create simulatorset ns new Simulator # create flat topology in 500m x 500m areaset topo new Topography $topo load_flatgrid 500 500# Define wireless ns trace# ns traceset tracefd open out.tr w $ns trace-all $tracefdset namtrace open out.nam w $ns_ namtrace-all-wireless $nam
23、trace 500 500一個無線模擬的例子(3)#Create godset god create-god 2$ns at 900.00 “$god setdist 1 2 1”#Create wireless channelset thechan new Channel/WirelessChannelGOD (General Operations Director) Stores all-pairs Dijkstra shortest path lengths Allows comparison of path length with optimal Automatically gener
24、ated, contained in scenario file set god create-god $god set-dist 一個無線模擬的例子(4)# Define how a mobile node is configured$ns node-config -adhocRouting DSDV -llType LL -macType Mac/802_11 -ifqLen 50 -ifqType Queue/DropTail/PriQueue -antType Antenna/OmniAntenna -propType Propagation/TwoRayGround -phyType
25、 Phy/WirelessPhy -channel $thechan -topoInstance $topo-agentTrace ON -routerTrace OFF -macTrace OFF -movementTrace OFF一個無線模擬的例子(4)#Use “for” loop to create 2 nodesfor set i 0 $i 2 incr i set node($i) $ns node# disable random motion$node($i) random-motion 0一個無線模擬的例子(5)#Define node movement model#Mobi
26、le Movement Generator$node_(0) set X_ 10.0$node_(0) set Y_ 400.0$node_(0) set Z_ 0.0$node_(0) setdest 400.0 10.0 1.0#Random movement$node_(0) start一個無線模擬的例子(6)#Define traffic model(tcp)set tcp1 new Agent/TCP/Newrenoset sink1 new Agent/TCPSink$ns_ attach-agent $node_(0) $tcp1$ns_ attach-agent $node_(
27、2) $sink1$ns_ connect $tcp1 $sink1$tcp1 set fid_ 1set ftp1 new Application/FTP$ftp1 attach-agent $tcp1$ns_ at 10.0 $ftp1 start 一個無線模擬的例子(7)# Tell nodes when the simulation endsfor set i 0 $i 3 incr i $ns_ at 200.0 $node_($i) reset #Tell ns/nam the simulation stop time $ns_ at 200.0 “$ns_ nam-end-wir
28、eless 200.00”$ns_ at 200.00 “$ns_ halt”#Start your simulation $ns_ run數(shù)據(jù)流無線節(jié)點(diǎn)的結(jié)構(gòu)NodeARPPropagation and antenna models MobileNodeLLMACPHYLLCHANNELLLMACPHYClassifier: ForwardingAgent: Protocol EntityNode EntryLL: Link layer objectIFQ: Interface queueMAC: Mac objectPHY: Net interfaceprotocolagentroutin
29、gagentaddrclassifierportclassifier255IFQIFQdefaulttarget_Radio propagation/antenna modelsProp/ant無線節(jié)點(diǎn)組件 分類器 defaulttarget_ 指向路由代理對象 255 is the port id assigned for rtagent_ 路由代理 Ad hoc routing protocol, e.g., AODV, DSDV, DSR; or directed diffusion無線節(jié)點(diǎn)組件 Link Layer Same as LAN, but with a separate AR
30、P module Looks up IP-to-MAC mappings using ARP ARP Resolves IP address to hardware (MAC) address Broadcasts ARP query Interface queue (IFQ) Gives priority to routing protocol packets Has packet filtering (search and remove) capacity無線節(jié)點(diǎn)組件 MAC 802.11 IEEE RTS/CTS/DATA/ACK for unicast Sends DATA direc
31、tly for broadcast Network interface (PHY) Used by MobileNode to access channel Stamps outgoing packets with meta-data Interface with radio/antenna models無線節(jié)點(diǎn)組件 Radio Propagation Model Friss-space model: attenuation at near distance Two-ray ground reflection model: attenuation at far distance Shadowi
32、ng model: probabilistic Antenna Omni-directional, unity-gain無線Channel Duplicate packets to all mobile nodes attached to the channel except the sender It is the receivers responsibility to decide if it will accept the packet Collision is handled at individual receiver O(N2) computation!NS腳本的寫法Trace數(shù)據(jù)
33、分析 在上面的兩個腳本中,定義了兩個輸出文件,一是out.tr,一是out.nam。下面介紹這兩種輸出文件的作用及其格式,以及如何從他們中得到所想要的信息。Nam文件 如何打開nam文件set nam_file_var open out_nam_file w$ns namtrace-all $file_var 演示動畫命令 nam out_nam_file 用來動畫演示整個模擬過程,如數(shù)據(jù)包的發(fā)送,包的的丟棄Nam文件格式樣例.V -t * -v 1.0a5 -a 0A -t * -n 1 -p 0 -o 0 xffffffff -c 31 -a 1A -t * -h 1 -m 2147483
34、647 -s 0c -t * -i 1 -n Bluen -t * -a 0 -s 0 -S UP -v circle -c black -i blackn -t * -a 1 -s 1 -S UP -v circle -c black -i blackn -t * -a 2 -s 2 -S UP -v circle -c black -i blackl -t * -s 0 -d 1 -S UP -r 1700000 -D 0.02 -c black -o rightl -t * -s 2 -d 0 -S UP -r 2000000 -D 0.01 -c black -o rightq -t
35、* -s 1 -d 0 -a 0.5q -t * -s 0 -d 1 -a 0.5+ -t 0.5 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.0 0 - null- -t 0.5 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.0 0 - nullh -t 0.5 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.0 -1 - nullr -t 0.51016 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.
36、0 0 - null+ -t 0.51016 -s 0 -d 1 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.0 0 - null- -t 0.51016 -s 0 -d 1 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.0 0 - nullh -t 0.51016 -s 0 -d 1 -p tcp -e 40 -c 1 -i 0 -a 1 -x 2.0 1.0 -1 - nulltrace數(shù)據(jù)文件 用來記錄整個模擬過程中所發(fā)生的事件,每個包被發(fā)送,轉(zhuǎn)發(fā),接收的相關(guān)信息 打開數(shù)據(jù)Trace文件 set data_file_var ope
37、n out_data_file w$ns trace-all $data_file_var 在分析一個trace文件前,一定要注意trace格式,無線和有線的生成的trace文件格式是不同的!trace文件格式示例.+ 0.884 1 2 cbr 1000 - 2 1.0 3.1 98 98- 0.884 1 2 cbr 1000 - 2 1.0 3.1 98 98r 0.89 1 2 cbr 1000 - 2 1.0 3.1 97 97+ 0.89 2 3 cbr 1000 - 2 1.0 3.1 97 97- 0.89 2 3 cbr 1000 - 2 1.0 3.1 97 97r 0.8
38、90706 2 3 cbr 1000 - 2 1.0 3.1 94 94+ 0.892 1 2 cbr 1000 - 2 1.0 3.1 99 99- 0.892 1 2 cbr 1000 - 2 1.0 3.1 99 99r 0.898 1 2 cbr 1000 - 2 1.0 3.1 98 98+ 0.898 2 3 cbr 1000 - 2 1.0 3.1 98 98- 0.898 2 3 cbr 1000 - 2 1.0 3.1 98 98r 0.898706 2 3 cbr 1000 - 2 1.0 3.1 95 95.eventtimefromnodetonodepkttypepk
39、tsizeflagsfidsrcaddrdstaddrseqnumpktid有關(guān)trace格式的請參照 /nsnam/index.php/NS-2_Trace_Formats分析trace數(shù)據(jù)的工具 數(shù)據(jù)處理 使用Shell文本處理命令,如 cut, join, sed, grep等命令 腳本語言:awk,perl,python等 繪圖工具 gnuplot xgraph從Trace中能夠得到什么? 端到端的吞吐率:指一個s/d的吞吐率 端到端的延遲,指一個包從一個源發(fā)到目的地所需要的時間 丟包率 抖動,等等 如何從trace中獲得這些值,網(wǎng)上有許多現(xiàn)成的腳
40、本可以使用!主要學(xué)習(xí)資料 NS與網(wǎng)絡(luò)模擬 NS by example/NS/ ns_tutorial /nsnam/ns/tutorial/ 中文論壇-百思論壇 http:/ 分裂對象模型 C+ implement the simulation model Implement data path per packet processing, core of ns fast to run, detailed, complete control OTcl (Tcl script language with Object-orie
41、nted extensions developed at MIT ) Simulation scenario configurations Periodic or triggered action Manipulating existing C+ objects fast to write and change為什么要用兩種編程語言來實(shí)現(xiàn)NS? 模擬器有兩方面的事情需要做 一方面,具體協(xié)議的模擬和實(shí)現(xiàn):需要一種程序設(shè)計語言,它需要很有效率的處理字節(jié),報頭等信息,需要應(yīng)用合適的算法在大量的數(shù)據(jù)集合上進(jìn)行操作。為了實(shí)現(xiàn)這個任務(wù),程序內(nèi)部模塊的運(yùn)行速度是非常重要的,而運(yùn)行模擬環(huán)境的時間、尋找和修復(fù)b
42、ug的時間,重新編譯和運(yùn)行的時間(run-around time)就顯得不是很重要了。 另一方面,許多網(wǎng)絡(luò)中的研究工作都圍繞著網(wǎng)絡(luò)組件和環(huán)境的具體參數(shù)的設(shè)置和改變而進(jìn)行的,需要在短時間內(nèi)快速的開發(fā)和模擬出所需要的網(wǎng)絡(luò)環(huán)境,并且方便修改和發(fā)現(xiàn)、修復(fù)程序中的Bug。在這種任務(wù)中,run-around time就顯得很重要了,因為模擬環(huán)境的建立和參數(shù)信息的配置只需要運(yùn)行一次。為什么是C+和OTCL來實(shí)現(xiàn)? 為了滿足以上兩種不同任務(wù)的需要,NS的設(shè)計實(shí)現(xiàn)使用了兩種程序設(shè)計語言,C+和Otcl。 C+程序模塊的運(yùn)行速度非??欤菑?qiáng)制類型的程序設(shè)計語言(變量嚴(yán)格定義整型,浮點(diǎn)型和字符、字符串類型),容易實(shí)
43、現(xiàn)精確的、復(fù)雜的算法,但是修改和發(fā)現(xiàn)、修正bug所花費(fèi)的時間要長一些。該特性正好用于解決第一個方面的問題。 Otcl是腳本程序編寫語言,是無強(qiáng)制類型的,比較簡單,容易實(shí)現(xiàn)和修改,容易發(fā)現(xiàn)和修正bug,雖然它的運(yùn)行速度和C+的模塊相比要慢很多。該特性正好用于解決第二方面的問題。什么時候用C+,什么時候用Otcl? 下面情況用OTcl來實(shí)現(xiàn): 對模擬環(huán)境的配置、建立和在模擬中只運(yùn)行 一次的地方。如果可能,用Otcl腳本來隨意操作已經(jīng)存在的C+對象。 下面情況用C+來實(shí)現(xiàn): 如果你需要在模擬中對每一或大量數(shù)據(jù)包進(jìn)行處理。如果你想修改已存在的C+對象的屬性和功能。 注意并沒有嚴(yán)格的界限NS的用戶視圖N
44、S-2的C+和Otcl類對應(yīng)示意圖C+和Otcl類對應(yīng)關(guān)系C+和Otcl類對應(yīng)關(guān)系(cont.) NS構(gòu)件(獨(dú)立的功能單位)通常由相互關(guān)聯(lián)的兩個類來實(shí)現(xiàn),一個由C+類實(shí)現(xiàn),一個由Otcl類實(shí)現(xiàn);TclCL把這兩張語言中的對象和變量聯(lián)系起來,充當(dāng)“glue”的角色。 所有C+類(編譯類)都是從類TclObject一級級繼承出來的,而所有Otcl類(解釋類)都是從SplitObject一級級繼承出來的。 分裂對象模型中Otcl類稱為解釋類,把對應(yīng)的C+類稱為編譯類,這兩個類互為“影像類”;同樣地,稱Otcl對象為解釋對象,稱C+對象為編譯對象,這兩個對象互為“影像對象”。C+和Otcl類對應(yīng)關(guān)系(
45、cont.) NS每當(dāng)實(shí)例化一個構(gòu)件時,都會同時創(chuàng)建一個Otcl中的對象和一個對應(yīng)的C+對象,并且這兩個對象可以互操作。例如,在前面的例子中,通過 “new Agent/TCP” 創(chuàng)建了一個Otcl對象,也相應(yīng)地在C+中創(chuàng)建了一個tcp對象NS-2的總體體系結(jié)構(gòu)NS-2的類體系結(jié)構(gòu)(部分)NS-2的類基礎(chǔ)框架 Tcl類:C+代碼與Tcl代碼之間的接口 TclObject類:所有編譯對象的基類 TclClass類:定義了解釋類的類層次,并允許用戶實(shí)例化TclObject,與TclObject一一對應(yīng) TclCommand類:封裝了C+代碼和Tcl代碼相互調(diào)用命令的方法 EmbeddedTcl類:
46、封裝了裝載更高級別的內(nèi)置命令的方法 InstVar類:訪問C+成員變量,如Otcl變量方法 Tcl類簡介及功能實(shí)現(xiàn) 獲得Tcl解釋器的引用,來調(diào)用解釋器的功能。 用來調(diào)用Otcl命令函數(shù) 傳遞/獲得Otcl命令運(yùn)行的結(jié)果 報告錯誤/退出模擬器的運(yùn)行 在解釋器內(nèi)部的用來保存生成對象地址的哈西表 獲得Tcl解釋器的句柄,來對解釋器進(jìn)行直接訪問。用來調(diào)用Otcl命令函數(shù) 可以在獲得了Tcl解釋器的引用之后,通過這個引用來調(diào)用Otcl中的控制臺命令。 tcl.eval(char* s);執(zhí)行字符串s,并在tcl的結(jié)果變量中保存執(zhí)行結(jié)果。 tcl.evalc(char* s);首先把s存儲進(jìn)tcl中的命
47、令緩沖區(qū)中,然后再執(zhí)行該s命令,并且在結(jié)果變量中返回結(jié)果。 tcl.eval();執(zhí)行已經(jīng)存儲進(jìn)tcl命令緩沖區(qū)中的命令,并且在結(jié)果變量中返回結(jié)果。 tcl.evalf(const char* s,);該函數(shù)類似于c語言中的printf命令,可以進(jìn)行字符串的過濾,執(zhí)行同eval()。 tcl.buffer()返回tcl中的命令緩沖區(qū)。傳遞/獲得Otcl命令運(yùn)行的結(jié)果 當(dāng)Tcl解釋器執(zhí)行用戶指定的控制臺字符串命令之后,解釋器在自己內(nèi)部的結(jié)果字符串變量中保存命令的執(zhí)行結(jié)果。 可以通過tcl.result(const char* s);命令來修改命令執(zhí)行后的結(jié)果。 也可以通過tcl.result()
48、;命令來獲得命令執(zhí)行后的結(jié)果字符串。解釋器內(nèi)部的保存生成對象地址的哈西表 在Ns-2中的Tcl命令解釋器里保存了一個存儲對象地址的哈西表。 Ns-2為每一個在模擬過程中生成的TclObjet類及派生類的對象在該哈西表中保存了一個指針,方便訪問。 Tcl.enter(TclObjet* o);在哈西表中加入一個對象。 Tcl.lookup(char* s);在哈西表中查詢名字為s的對象并返回。 Tcl.remove(TclObjet* o);在哈西表中刪除該對象的地址。 TclObject類的功能和實(shí)現(xiàn) 創(chuàng)建/清除模擬器組件的對象。 實(shí)現(xiàn)從C+類成員變量到OTcl類成員變量的綁定(Binding
49、)。 實(shí)現(xiàn)變量的跟蹤(Tracing)。 實(shí)現(xiàn)從C+類的成員函數(shù)到Otcl類的成員函數(shù)之間的一一對應(yīng)(通過該類的command()函數(shù))。創(chuàng)建/清除模擬器組件的對象 在TclObject的對象名空間里獲取一個新創(chuàng)建對象的唯一的句柄。 執(zhí)行該新建對象的構(gòu)造函數(shù)。在此過程中,該對象的構(gòu)造函數(shù)會首先調(diào)用其基類的構(gòu)造函數(shù)。所有最終基類為TclObject的類的對象最終都會執(zhí)行TclObject類的構(gòu)造函數(shù),這個構(gòu)造函數(shù)創(chuàng)建一個內(nèi)部的C+對象(Shadow Object),完成變量綁定、成員函數(shù)和命令的對應(yīng)。 當(dāng)內(nèi)部的C+對象創(chuàng)建完畢后,ns調(diào)用所有派生類的構(gòu)造函數(shù),來進(jìn)一步完成變量的綁定和命令的對應(yīng),
50、完成對象的初始化工作。 當(dāng)對象創(chuàng)建完畢后,ns把對象的指針添加到TclObject類中的對象哈希表中。 把cmd函數(shù)設(shè)置為對應(yīng)的Otcl對象中的一個成員函數(shù)。從C+類成員變量到OTcl類成員變量的綁定 變量綁定的目的,是用戶通過修改和設(shè)置腳本中的Otcl對象中的成員變量時,該對象對應(yīng)的“影子”C+對象中的成員變量也相應(yīng)的變化,保持一直。變量綁定是TclObjet類中的成員函數(shù)。變量綁定在構(gòu)造函數(shù)中完成。 ASRMAgent:ASRMAgent() bind(“pdistance_”,&pdistance_); bind(“requestor_”,&requestor_); bind_time(“l(fā)astSent_”,&lastSessSent_”); bind_bw(“ctrlLimit_”,&ctrlBWLimit_); bind_bool(“running_”,&running_); 兩種對象成員函數(shù)之間的一一對應(yīng) 類似于變量綁定,Otcl對象中也要創(chuàng)建相應(yīng)的成員函數(shù),來達(dá)到調(diào)用對應(yīng)的C+對象中的成員函數(shù)的目的。 這種讓成員函數(shù)之間一一對應(yīng)的機(jī)制,是通過在該對象中的command()函數(shù)來實(shí)現(xiàn)的。由于command()是TclObjet的成員函數(shù),所以它的派生類每個對象都可以重寫該函數(shù)。 Int ASRMAgent:comm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版商務(wù)車租賃合同(含保險責(zé)任條款)
- 二零二五版合作開發(fā)房地產(chǎn)合同綠色建筑認(rèn)證3篇
- 2025年綠色建筑土石方工程承包合同樣本2篇
- 2025年度菜園大棚蔬菜種植與農(nóng)業(yè)科技研發(fā)合同3篇
- 2025版路燈設(shè)施安全檢查與應(yīng)急搶修服務(wù)合同4篇
- 二零二四年醫(yī)療耗材配件銷售代理合同樣本3篇
- 2025年度工業(yè)用地場地租賃及使用權(quán)轉(zhuǎn)讓合同3篇
- 2025年度車輛租賃與道路救援服務(wù)合同3篇
- 2025年新能源汽車專用車位租賃與充電服務(wù)合同2篇
- 2025年度房地產(chǎn)項目融資合同8篇
- 家庭年度盤點(diǎn)模板
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級認(rèn)證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國電子學(xué)會青少年軟件編程等級考試標(biāo)準(zhǔn)python三級練習(xí)
- 公益慈善機(jī)構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報告
- 飼料廠現(xiàn)場管理類隱患排查治理清單
- 【名著閱讀】《紅巖》30題(附答案解析)
- Starter Unit 2 同步練習(xí)人教版2024七年級英語上冊
- 分?jǐn)?shù)的加法、減法、乘法和除法運(yùn)算規(guī)律
- 2024年江蘇鑫財國有資產(chǎn)運(yùn)營有限公司招聘筆試沖刺題(帶答案解析)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
評論
0/150
提交評論