![NetworkSimulator_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/de223b3a-189f-48c5-8518-9cac4472b094/de223b3a-189f-48c5-8518-9cac4472b0941.gif)
![NetworkSimulator_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/de223b3a-189f-48c5-8518-9cac4472b094/de223b3a-189f-48c5-8518-9cac4472b0942.gif)
![NetworkSimulator_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/de223b3a-189f-48c5-8518-9cac4472b094/de223b3a-189f-48c5-8518-9cac4472b0943.gif)
![NetworkSimulator_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/de223b3a-189f-48c5-8518-9cac4472b094/de223b3a-189f-48c5-8518-9cac4472b0944.gif)
![NetworkSimulator_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/de223b3a-189f-48c5-8518-9cac4472b094/de223b3a-189f-48c5-8518-9cac4472b0945.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Network Simulator 助教:趙俊民課程目的 學習和使用網(wǎng)絡(luò)模擬器NS,使大家對如何做網(wǎng)絡(luò)模擬有個基本認識和了解 如何使用NS來發(fā)現(xiàn)和研究網(wǎng)絡(luò)中的一些問題 提高大家的編程能力和分析解決問題的能力網(wǎng)絡(luò)研究的方法分析(Analysis)構(gòu)建模型,數(shù)學分析如排隊論,圖論等實驗網(wǎng)絡(luò)實驗床(testbed)EmulationLab environment 模擬(Simulation)模擬工具,如NS,OpNet,QualNet等模擬能夠做什么? 對現(xiàn)有的協(xié)議或算法進行研究,主要是它們的行為或性能進行評價 對新提出的協(xié)議或算法進行測試 對研究成果進行對比評價,找出各種的優(yōu)點和不足模擬的優(yōu)點和缺
2、點 優(yōu)點 非常靈活,易于配置,并且成本比較低(不需要買設(shè)備) 可以研究大規(guī)模網(wǎng)絡(luò) 容易獲得研究成果 缺點 會忽略掉真實網(wǎng)絡(luò)中一些重要細節(jié) 對產(chǎn)生的結(jié)果要仔細驗證,有可能不適合于真實環(huán)境NS簡介 NS(Network Simulator)它是由LBNL ( Lawrence Berkeley National Laboratory ) 的網(wǎng)絡(luò)研究小組開發(fā)的模擬工具。 NS具有可擴展、易配置、可編程等特點。 NS是面向?qū)ο蟮?,離散事件驅(qū)動的網(wǎng)絡(luò)環(huán)境模擬器,開發(fā)于UC Berkeley,它可以模擬各種IP網(wǎng)絡(luò)環(huán)境。 NS實現(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è)計語言實現(xiàn)。 Ns前端運行Otcl Otcl:運行速度慢,容易修改 =場景配置 Ns 用C+實現(xiàn)網(wǎng)絡(luò)協(xié)議棧 C+:運行速度快,不容易更改 = 協(xié)議棧實現(xiàn)NS的學習方法 掌握原理。NS離散事件模擬機制和分裂對象模型需要重點理解。 牢記節(jié)點結(jié)構(gòu)。節(jié)點(node)是網(wǎng)絡(luò)中最重要的組件,對有線和無線中節(jié)點結(jié)構(gòu)要非常清楚,明白數(shù)據(jù)包是如何在節(jié)點中流動的。 整體上把握NS。了解組件的基本功能,不要太注重細節(jié),當需要時候再理解清楚。
4、 積極閱讀源代碼,采取的策略一般是整體到局部,從粗到細。 NS-2中用到的TCL很簡單,不需要專門學習NS的安裝Windows平臺Cygwin+Ns-2 Vmware虛擬機+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)境變量 當安裝完畢時,會顯示讓你如何配置!問題的解決 如果在安裝過程中遇到問題,可以到/nsnam/ns/ns-build.html Ns mailing list: 需要注意的是,在不同的系統(tǒng)下安裝出的問題會有所不同 在搜索NS-2目錄結(jié)構(gòu)NS2層次結(jié)構(gòu)NS命令的使用 當安裝完畢后,在任何路徑下,直接鍵入ns 如果要運行某個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)境下的擴展,它包含了Tcl的全部的C庫函數(shù),以及支持X Window的窗口、控件等C庫函數(shù),為用戶開發(fā)圖形用戶界面提供了方便。 Tcl是解釋執(zhí)行的腳本語言。它的實現(xiàn)依賴于Tcl內(nèi)部的C函數(shù)庫。添加新的C函數(shù)就可以擴充Tcl的命令和功能,是擴展性非常強的腳本程序設(shè)計語言。 Tcl解釋器把用戶輸入的命令和程序語句進行初步分析,然后調(diào)用C函數(shù)庫里的相應(yīng)函數(shù)來執(zhí)行,輸出結(jié)果。 Tcl是無強制類型的腳本語言,
7、一切變量,不論整型,浮點型等,都以字符串的形式存儲。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í)行的主要功能是:把輸入的命令或者語句切割成一個一個的字符串,并在一遍掃描的過程中進行變量替換、命令結(jié)果替換和特殊字符替換。在切割過程中不對命令進行任何語意理解。 Tcl命令的基本構(gòu)成是:命令名+參數(shù)+參數(shù)+ Tcl的executer的功能是:把Tcl的Parser處理過的命令或語句字符串向量進行分析。由于字符串向量的第一個字符串元素是命令的名稱,那么execu
9、ter匹配Tcl中C庫函數(shù)的函數(shù)名,當匹配到的時候,把全部參數(shù)傳遞給匹配到的C函數(shù)來執(zhí)行命令,然后返回結(jié)果。如果匹配不到則返回錯誤。 返回的結(jié)果都是字符串類型的,如果沒有實際意義的返回結(jié)果,則返回空的字符串。OTcl Tcl的面向?qū)ο髷U展 Otcl是Tcl的面向?qū)ο螅∣bject Oriented)的擴展,在Otcl中加入了類的概念。 對象是類的實例,它有自己的屬性(成員變量,InstVar)和自己的內(nèi)部操作(成員函數(shù),InstProc)。 對象具有繼承、封裝、多態(tài)性和動態(tài)綁定等性質(zhì)。 面向?qū)ο髾C制的加入使得原始的Tcl變得更加強大,更加方便使用。 雖然和C+中對象和類以及其他面向?qū)ο蟪绦蛟O(shè)計
10、語言中的概念相同,但是具體實現(xiàn)和語法卻存在很大的差別。OTcl Tcl的面向?qū)ο髷U展# 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學習TCL/OTCL參考資料 NS與網(wǎng)絡(luò)模擬第三章 http:/netmedia.gist.ac.k
12、r/dulee/tclns.html /pub/otcl/doc/tutorial.htmlNS模擬的例子 一個簡單的有線模擬場景 一個簡單的無線模擬場景場景中由兩個節(jié)點組成,一個節(jié)點向另一個節(jié)點發(fā)送ftp數(shù)據(jù)有線模擬場景示意圖n0n1sinkftptcp1.04.05.0secftp1mb,20ms一個簡單有線模擬腳本(1)#建立一個Simulator對象實例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é)點),并賦給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ò)組件和復合網(wǎng)絡(luò)組件,一般可以從真實網(wǎng)絡(luò)中找到對應(yīng)體,如一個節(jié)點對象可以對應(yīng)一個主機或
16、路由器,一個鏈路對象對應(yīng)兩個主機相連的媒介。 所有的基本網(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)等。 拓撲結(jié)點(Node)是由一個結(jié)點入口對象和若干個分類器(Classifier)組成的一個復合對象。單播節(jié)點(Node)有線Multicast節(jié)點結(jié)構(gòu)連接器(connector) 連接器Connector是Ns-2基本網(wǎng)絡(luò)組件中的另一個大類。它的基本派生類對象包括緩沖隊列(Queue)、延遲(Delay)、各種產(chǎn)生和處理數(shù)據(jù)包的代理(Agent)和對象的跟蹤器(Trace)。 拓撲結(jié)點連接類(Link)是Ns-2中另一個主要的復合組件對象。一個結(jié)點和另一個結(jié)點之間的簡單連接(simplex-link)是單向的。一個最基本的簡單
18、連接由一個連接入口、包緩沖隊列、延遲處理對象、廢棄處理對象和時間處理對象(TTL)組成。 一個結(jié)點的輸出隊列,是通過和這個結(jié)點相連的Link中的緩沖隊列來實現(xiàn)的。單向鏈路示意圖拓撲簡單連接Link一個簡單的拓撲結(jié)構(gòu)中的2個結(jié)點之間的連接是單向的。通過Simulator對象中的dublex-link成員函數(shù)可以在兩個結(jié)點之間的2條互相的單向簡單連接。一個結(jié)點或交換設(shè)備在一個輸出路徑上的輸出隊列,是由在該路徑上的簡單連接(simplex-link)中的數(shù)據(jù)緩沖隊列來實現(xiàn)的。在Link中從數(shù)據(jù)緩沖隊列(queue)中被彈出(dequeue)的包被傳遞到延遲處理對象(Delay)中進行延遲的模擬。在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)生地和運輸源頭,同時也是各層網(wǎng)絡(luò)中各種協(xié)議的實現(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ù)需要,來訪問包中的不同報頭。這就符合上面的機制,在報頭格式創(chuàng)建的時候,無論這個注冊過的報頭是否需要,都被加到報頭堆棧中。 通常,一個包只含有報頭堆棧部分,而沒有數(shù)據(jù)空間。這是因為,在模擬的環(huán)境中,傳輸實際的數(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é)點的結(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é)點組件 分類器 defaulttarget_ 指向路由代理對象 255 is the port id assigned for rtagent_ 路由代理 Ad hoc routing protocol, e.g., AODV, DSDV, DSR; or directed diffusion無線節(jié)點組件 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é)點組件 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é)點組件 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、本可以使用!主要學習資料 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為什么要用兩種編程語言來實現(xiàn)NS? 模擬器有兩方面的事情需要做 一方面,具體協(xié)議的模擬和實現(xiàn):需要一種程序設(shè)計語言,它需要很有效率的處理字節(jié),報頭等信息,需要應(yīng)用合適的算法在大量的數(shù)據(jù)集合上進行操作。為了實現(xiàn)這個任務(wù),程序內(nèi)部模塊的運行速度是非常重要的,而運行模擬環(huán)境的時間、尋找和修復b
42、ug的時間,重新編譯和運行的時間(run-around time)就顯得不是很重要了。 另一方面,許多網(wǎng)絡(luò)中的研究工作都圍繞著網(wǎng)絡(luò)組件和環(huán)境的具體參數(shù)的設(shè)置和改變而進行的,需要在短時間內(nèi)快速的開發(fā)和模擬出所需要的網(wǎng)絡(luò)環(huán)境,并且方便修改和發(fā)現(xiàn)、修復程序中的Bug。在這種任務(wù)中,run-around time就顯得很重要了,因為模擬環(huán)境的建立和參數(shù)信息的配置只需要運行一次。為什么是C+和OTCL來實現(xiàn)? 為了滿足以上兩種不同任務(wù)的需要,NS的設(shè)計實現(xiàn)使用了兩種程序設(shè)計語言,C+和Otcl。 C+程序模塊的運行速度非???,是強制類型的程序設(shè)計語言(變量嚴格定義整型,浮點型和字符、字符串類型),容易實
43、現(xiàn)精確的、復雜的算法,但是修改和發(fā)現(xiàn)、修正bug所花費的時間要長一些。該特性正好用于解決第一個方面的問題。 Otcl是腳本程序編寫語言,是無強制類型的,比較簡單,容易實現(xiàn)和修改,容易發(fā)現(xiàn)和修正bug,雖然它的運行速度和C+的模塊相比要慢很多。該特性正好用于解決第二方面的問題。什么時候用C+,什么時候用Otcl? 下面情況用OTcl來實現(xiàn): 對模擬環(huán)境的配置、建立和在模擬中只運行 一次的地方。如果可能,用Otcl腳本來隨意操作已經(jīng)存在的C+對象。 下面情況用C+來實現(xiàn): 如果你需要在模擬中對每一或大量數(shù)據(jù)包進行處理。如果你想修改已存在的C+對象的屬性和功能。 注意并沒有嚴格的界限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)件(獨立的功能單位)通常由相互關(guān)聯(lián)的兩個類來實現(xiàn),一個由C+類實現(xiàn),一個由Otcl類實現(xiàn);TclCL把這兩張語言中的對象和變量聯(lián)系起來,充當“glue”的角色。 所有C+類(編譯類)都是從類TclObject一級級繼承出來的,而所有Otcl類(解釋類)都是從SplitObject一級級繼承出來的。 分裂對象模型中Otcl類稱為解釋類,把對應(yīng)的C+類稱為編譯類,這兩個類互為“影像類”;同樣地,稱Otcl對象為解釋對象,稱C+對象為編譯對象,這兩個對象互為“影像對象”。C+和Otcl類對應(yīng)關(guān)系(
45、cont.) NS每當實例化一個構(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類:定義了解釋類的類層次,并允許用戶實例化TclObject,與TclObject一一對應(yīng) TclCommand類:封裝了C+代碼和Tcl代碼相互調(diào)用命令的方法 EmbeddedTcl類:
46、封裝了裝載更高級別的內(nèi)置命令的方法 InstVar類:訪問C+成員變量,如Otcl變量方法 Tcl類簡介及功能實現(xiàn) 獲得Tcl解釋器的引用,來調(diào)用解釋器的功能。 用來調(diào)用Otcl命令函數(shù) 傳遞/獲得Otcl命令運行的結(jié)果 報告錯誤/退出模擬器的運行 在解釋器內(nèi)部的用來保存生成對象地址的哈西表 獲得Tcl解釋器的句柄,來對解釋器進行直接訪問。用來調(diào)用Otcl命令函數(shù) 可以在獲得了Tcl解釋器的引用之后,通過這個引用來調(diào)用Otcl中的控制臺命令。 tcl.eval(char* s);執(zhí)行字符串s,并在tcl的結(jié)果變量中保存執(zhí)行結(jié)果。 tcl.evalc(char* s);首先把s存儲進tcl中的命
47、令緩沖區(qū)中,然后再執(zhí)行該s命令,并且在結(jié)果變量中返回結(jié)果。 tcl.eval();執(zhí)行已經(jīng)存儲進tcl命令緩沖區(qū)中的命令,并且在結(jié)果變量中返回結(jié)果。 tcl.evalf(const char* s,);該函數(shù)類似于c語言中的printf命令,可以進行字符串的過濾,執(zhí)行同eval()。 tcl.buffer()返回tcl中的命令緩沖區(qū)。傳遞/獲得Otcl命令運行的結(jié)果 當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類的功能和實現(xiàn) 創(chuàng)建/清除模擬器組件的對象。 實現(xiàn)從C+類成員變量到OTcl類成員變量的綁定(Binding
49、)。 實現(xiàn)變量的跟蹤(Tracing)。 實現(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)。 當內(nèi)部的C+對象創(chuàng)建完畢后,ns調(diào)用所有派生類的構(gòu)造函數(shù),來進一步完成變量的綁定和命令的對應(yīng),
50、完成對象的初始化工作。 當對象創(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ù),來達到調(diào)用對應(yīng)的C+對象中的成員函數(shù)的目的。 這種讓成員函數(shù)之間一一對應(yīng)的機制,是通過在該對象中的command()函數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國電子取證行業(yè)深度分析、投資前景、趨勢預(yù)測報告(智研咨詢)
- 2025年度綠色核桃產(chǎn)地直供采購合同范本
- 2025年度股權(quán)激勵實施居間服務(wù)合同
- 2025年度精密儀器用特種氣體定制供應(yīng)合同
- 2025年度城市更新改造項目合同公文模板工作樣本
- 2025年度無人機銷售及培訓中心開店合同
- 2025年度建筑鋼結(jié)構(gòu)承攬合同范本(鋼結(jié)構(gòu)工程環(huán)保驗收標準)
- 2025年合同能源管理平臺建設(shè)合同能源管理協(xié)議
- 2025-2030年投影儀租賃服務(wù)企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025年度家庭衛(wèi)生間防水防霉施工合同
- 《中國心血管健康與疾病報告2024》要點解讀
- 浙教版八年級下冊科學第一章 電和磁整章思維導圖
- (正式版)SH∕T 3541-2024 石油化工泵組施工及驗收規(guī)范
- 動物疫病傳染病防控培訓制度
- 美團代運營合同模板
- 初中英語七選五經(jīng)典5篇(附帶答案)
- 《電力工程電纜設(shè)計規(guī)范》高壓、超高壓電力電纜及 制造、使用和運行情況
- GB/T 43676-2024水冷預(yù)混低氮燃燒器通用技術(shù)要求
- 《預(yù)防脊柱側(cè)彎》課件
- 特種設(shè)備檢驗現(xiàn)場事故案例分析
- 2023-2024學年西安市高二數(shù)學第一學期期末考試卷附答案解析
評論
0/150
提交評論