版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Network Simulator,助教:趙俊民,課程目的,學習和使用網絡模擬器NS,使大家對如何做網絡模擬有個基本認識和了解如何使用NS來發(fā)現(xiàn)和研究網絡中的一些問題提高大家的編程能力和分析解決問題的能力,網絡研究的方法,分析(Analysis)構建模型,數(shù)學分析如排隊論,圖論等實驗網絡實驗床(testbed)EmulationLab environment 模擬(Simulation)模擬工具,如NS,OpNet,
2、QualNet等,模擬能夠做什么?,對現(xiàn)有的協(xié)議或算法進行研究,主要是它們的行為或性能進行評價對新提出的協(xié)議或算法進行測試對研究成果進行對比評價,找出各種的優(yōu)點和不足,模擬的優(yōu)點和缺點,優(yōu)點非常靈活,易于配置,并且成本比較低(不需要買設備)可以研究大規(guī)模網絡容易獲得研究成果缺點會忽略掉真實網絡中一些重要細節(jié)對產生的結果要仔細驗證,有可能不適合于真實環(huán)境,NS簡介,NS(Network Simulator)它是由LBNL
3、( Lawrence Berkeley National Laboratory ) 的網絡研究小組開發(fā)的模擬工具。NS具有可擴展、易配置、可編程等特點。NS是面向對象的,離散事件驅動的網絡環(huán)境模擬器,開發(fā)于UC Berkeley,它可以模擬各種IP網絡環(huán)境。NS實現(xiàn)了對許多網絡協(xié)議的模擬,如TCP,UDP,和數(shù)據(jù)源發(fā)生器(traffic source)如FTP,WWW,Telnet,Web,CBR和VBR等。,NS簡介(續(xù)),NS
4、-2由C++和Otcl(加上面向對象特性的TCL腳本程序設計語言,開發(fā)于MIT)兩種程序設計語言實現(xiàn)。Ns前端運行Otcl Otcl:運行速度慢,容易修改 =>場景配置Ns 用C++實現(xiàn)網絡協(xié)議棧C++:運行速度快,不容易更改 => 協(xié)議棧實現(xiàn),NS的學習方法,掌握原理。NS離散事件模擬機制和分裂對象模型需要重點理解。牢記節(jié)點結構。節(jié)點(node)是網絡中最重要的組件,對有線和無線中節(jié)點結構要非常清楚,明白數(shù)據(jù)
5、包是如何在節(jié)點中流動的。整體上把握NS。了解組件的基本功能,不要太注重細節(jié),當需要時候再理解清楚。積極閱讀源代碼,采取的策略一般是整體到局部,從粗到細。NS-2中用到的TCL很簡單,不需要專門學習,NS的安裝,Windows平臺Cygwin+Ns-2 Vmware虛擬機+linux+Ns-2Linux平臺注意:不同NS版本所能安裝的linux版本是不同的,要核查清楚。下面以版本2.31為例選擇安裝環(huán)境Fedora Co
6、re 5,NS的安裝(續(xù)),首先獲得NS安裝包,參考下載地址http://www.isi.edu/nsnam/dist/ns-allinone-2.31.tar.gz 或其他網址安裝文件# cd 要安裝的目錄#tar zxvf ns-allinone-2.31.tar.gz#cd ns-allinone-2.31# ./install配置環(huán)境變量 當安裝完畢時,會顯示讓你如何配置!,問題的解決,如果在安裝過程中遇到
7、問題,可以到http://www.isi.edu/nsnam/ns/ns-build.htmlNs mailing list: ns-users@isi.edu需要注意的是,在不同的系統(tǒng)下安裝出的問題會有所不同在www.google.com搜索,NS-2目錄結構,NS2層次結構,NS命令的使用,當安裝完畢后,在任何路徑下,直接鍵入ns如果要運行某個tcl程序(比如example.tcl,那么: ns example.tcl,T
8、cl與Tk編程環(huán)境概述,Tcl與Tk是安裝在Unix/Linux環(huán)境下的兩個包,它們一起構成了一套開發(fā)系統(tǒng)應用程序和圖形用戶界面接口(GUI)應用程序的環(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內部的C函數(shù)
9、庫。添加新的C函數(shù)就可以擴充Tcl的命令和功能,是擴展性非常強的腳本程序設計語言。Tcl解釋器把用戶輸入的命令和程序語句進行初步分析,然后調用C函數(shù)庫里的相應函數(shù)來執(zhí)行,輸出結果。Tcl是無強制類型的腳本語言,一切變量,不論整型,浮點型等,都以字符串的形式存儲。,Tcl基礎,先看一個最簡單的例子:hello world#Define a process named "helloworld"proc hello
10、world {} { puts "Hello world!!!"}# Call the process helloworldHelloworld,Tcl基礎(cont.),# Writing a procedure called "test"proc test {} { set a 43 set b 27 set c [expr $a + $b] set
11、 d [expr [expr $a - $b] * $c] for {set k 0} {$k < 10} {incr k} {…………}}# Calling the "test" procedure created abovetest,Tcl命令和語句的執(zhí)行過程,Tcl解釋器分為兩個主要模塊,Tcl的Parser和Tcl的executer。Tcl的Parser要執(zhí)行的主要功能是:把輸入的命令或
12、者語句切割成一個一個的字符串,并在一遍掃描的過程中進行變量替換、命令結果替換和特殊字符替換。在切割過程中不對命令進行任何語意理解。Tcl命令的基本構成是:命令名+參數(shù)+參數(shù)+…………Tcl的executer的功能是:把Tcl的Parser處理過的命令或語句字符串向量進行分析。由于字符串向量的第一個字符串元素是命令的名稱,那么executer匹配Tcl中C庫函數(shù)的函數(shù)名,當匹配到的時候,把全部參數(shù)傳遞給匹配到的C函數(shù)來執(zhí)行命令,然后返
13、回結果。如果匹配不到則返回錯誤。返回的結果都是字符串類型的,如果沒有實際意義的返回結果,則返回空的字符串。,OTcl —— Tcl的面向對象擴展,Otcl是Tcl的面向對象(Object Oriented)的擴展,在Otcl中加入了類的概念。對象是類的實例,它有自己的屬性(成員變量,InstVar)和自己的內部操作(成員函數(shù),InstProc)。對象具有繼承、封裝、多態(tài)性和動態(tài)綁定等性質。面向對象機制的加入使得原始的Tcl變得更
14、加強大,更加方便使用。雖然和C++中對象和類以及其他面向對象程序設計語言中的概念相同,但是具體實現(xiàn)和語法卻存在很大的差別。,OTcl —— Tcl的面向對象擴展,# Create a class call "mom" and # add a member function call "greet"Class mommom instproc greet {} { $self inst
15、var 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 -superclass mom,k
16、id instproc greet {} { $self instvar age_ puts "$age_ years old kid say: What's up, dude?"}# Create a mom and a kid object set each ageset a [new mom]$a set age_ 45set b [new kid]$b set ag
17、e_ 15# Calling member function "greet" of each object$a greet$b greet,學習TCL/OTCL參考資料,NS與網絡模擬—第三章http://netmedia.gist.ac.kr/~dulee/tclns.htmlftp://ftp.tns.lcs.mit.edu/pub/otcl/doc/tutorial.html,NS模擬的例子,一個簡單
18、的有線模擬場景一個簡單的無線模擬場景場景中由兩個節(jié)點組成,一個節(jié)點向另一個節(jié)點發(fā)送ftp數(shù)據(jù),有線模擬—場景示意圖,,n0,n1,sink,,,1.0,4.0,,5.0,sec,ftp,,1mb,20ms,一個簡單有線模擬腳本(1),#建立一個Simulator對象實例set ns [new Simulator]#打開一個out.tr的文件,用來記錄模擬過程的trace數(shù)據(jù)set tracefd [open out.tr w
19、]$ns trace-all $tracefd#打開一個out.nam文件,用來記錄nam的trace數(shù)據(jù)set nf [open out.nam w]$ns namtrace-all $nf,一個簡單有線模擬腳本(2),#建立一個名為finish的過程,關閉兩個trace文件,并執(zhí)行nam程序proc finish {} { global ns nf tracefd $ns flush
20、-trace close $nf close $tracefd exec nam out.nam & exit 0},一個簡單有線模擬腳本(3),#新建兩個node(節(jié)點),并賦給n0和n1set n0 [$ns node]set n1 [$ns node]#在n0和n1建立一條雙向的link(鏈路),該鏈路的帶寬為1Mb/s,延遲為10ms,隊列為Drop
21、Tail$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 $
22、sink#把tcp和sink兩個agent連接起來$ns connect $tcp $sink#新建一個ftp業(yè)務,并連接到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"$
23、ns at 4.0 "$ftp stop“#告知Simulator對象在5.0調用finish過程$ns at 5.0 “finish“#開始模擬$ns run,數(shù)據(jù)包通信圖,NS網絡組件模型,網絡組件:構成網絡的基本功能單位,包括簡單網絡組件和復合網絡組件,一般可以從真實網絡中找到對應體,如一個節(jié)點對象可以對應一個主機或路由器,一個鏈路對象對應兩個主機相連的媒介。所有的基本網絡組件可以劃分為2類,分類器(Class
24、ifier)和連接器(Connector)。它們都是NsObject的直接子類,也是所有基本網絡組建的父類。分類器(Classifier)的派生類組件對象包括地址分類器(AddrClassifier)和多播分類器(McastClassifier)等。連接器(Connector)的派生類組件對象包括隊列(Queue),延遲(Delay),各種代理(Agent),和追蹤對象類(Trace),分類器,分類器(classifier)是Ns-
25、2基本網絡組件的一個大類。它的基本派生類有地址分類器(AddrClassifier)和多播分類(McastClassifier)等。拓撲結點(Node)是由一個結點入口對象和若干個分類器(Classifier)組成的一個復合對象。,單播節(jié)點(Node),有線Multicast節(jié)點結構,連接器(connector),連接器——Connector是Ns-2基本網絡組件中的另一個大類。它的基本派生類對象包括緩沖隊列(Queue)、延遲(De
26、lay)、各種產生和處理數(shù)據(jù)包的代理(Agent)和對象的跟蹤器(Trace)。拓撲結點連接類(Link)是Ns-2中另一個主要的復合組件對象。一個結點和另一個結點之間的簡單連接(simplex-link)是單向的。一個最基本的簡單連接由一個連接入口、包緩沖隊列、延遲處理對象、廢棄處理對象和時間處理對象(TTL)組成。一個結點的輸出隊列,是通過和這個結點相連的Link中的緩沖隊列來實現(xiàn)的。,單向鏈路示意圖,拓撲簡單連接——Link,
27、一個簡單的拓撲結構中的2個結點之間的連接是單向的。通過Simulator對象中的dublex-link成員函數(shù)可以在兩個結點之間的2條互相的單向簡單連接。一個結點或交換設備在一個輸出路徑上的輸出隊列,是由在該路徑上的簡單連接(simplex-link)中的數(shù)據(jù)緩沖隊列來實現(xiàn)的。在Link中從數(shù)據(jù)緩沖隊列(queue)中被彈出(dequeue)的包被傳遞到延遲處理對象(Delay)中進行延遲的模擬。在Link中從數(shù)據(jù)緩沖隊列(qu
28、eue)中掉出(Dropped)的包,被送到廢棄處理對象(一個Null Agent)中被釋放。TTL對象計算包在Link中被處理時的相關的時間參數(shù)。,加入Trace和Monitor的連接對象,代理(Agent)類的種類和說明,代理網絡組件代表了在網絡層中數(shù)據(jù)包的產生地和運輸源頭,同時也是各層網絡中各種協(xié)議的實現(xiàn)。Agent/TCPAgent/TCP/Reno Agent/UDPAgent/TcpsinkAgent/NULL
29、…,包(Packet)類的結構和說明,在Ns-2中,一個“包”是由一個報頭(Header)堆棧(Stack)和一個可選擇的數(shù)據(jù)空間構成。報頭的格式,在模擬器對象(Simulator)創(chuàng)建的過程中創(chuàng)建好,同時,所有注冊過的報頭,比如一般的屬性說明、IP報頭,Tcp報頭,RTP報頭,都在包的報頭堆棧中存儲。通過不同報頭在包的報頭堆棧中的偏移量(Offset),網絡組件可以根據(jù)需要,來訪問包中的不同報頭。這就符合上面的機制,在報頭格式創(chuàng)建
30、的時候,無論這個注冊過的報頭是否需要,都被加到報頭堆棧中。通常,一個包只含有報頭堆棧部分,而沒有數(shù)據(jù)空間。這是因為,在模擬的環(huán)境中,傳輸實際的數(shù)據(jù)是沒有意義的。,包(Packet)類的結構和說明,應用程序(application),應用程序層是建立在傳輸代理上的應用程序的模擬。Ns-2中有兩種類型的“應用程序”數(shù)據(jù)源發(fā)生器(Traffic Generator)Exponential On/OffPareto On/OffCB
31、R模擬的應用程序(Simulated applications)Application/FTPApplication/Telnet,一個無線仿真的例子(1),Scenario2 mobile nodesmoving within 500m x 500m flat topologyusing DSDV ad hoc routing protocolRandom Waypoint mobility modelTCP traf
32、fic,一個無線模擬的例子(2),# 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 trac
33、eset tracefd [open out.tr w] $ns trace-all $tracefdset namtrace [open out.nam w] $ns_ namtrace-all-wireless $namtrace 500 500,一個無線模擬的例子(3),#Create godset god [create-god 2]$ns at 900.00 “$god setdist 1 2 1”#Creat
34、e wireless channelset thechan [new Channel/WirelessChannel,GOD (General Operations Director),Stores all-pairs Dijkstra shortest path lengthsAllows comparison of path length with optimalAutomatically generated, contain
35、ed in scenario fileset 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/
36、DropTail/PriQueue \ -antType Antenna/OmniAntenna \,-propType Propagation/TwoRayGround \-phyType Phy/WirelessPhy \-channel $thechan \-topoInstance $topo-agentTrace ON \-routerTrace OFF \-macTrace O
37、FF \-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 m
38、ovement model#Mobile 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 tcp
39、1 [new Agent/TCP/Newreno]set sink1 [new Agent/TCPSink]$ns_ attach-agent $node_(0) $tcp1$ns_ attach-agent $node_(2) $sink1$ns_ connect $tcp1 $sink1$tcp1 set fid_ 1set ftp1 [new Application/FTP]$ftp1 attach-agent $t
40、cp1$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 $
41、ns_ at 200.0 “$ns_ nam-end-wireless 200.00”$ns_ at 200.00 “$ns_ halt”#Start your simulation $ns_ run,數(shù)據(jù)流,無線節(jié)點的結構,,Node,ARP,Propagation and antenna models,,MobileNode,LL,MAC,PHY,LL,CHANNEL,,,LL,MAC,PHY,,,,pr
42、otocolagent,routingagent,addrclassifier,portclassifier,255,IFQ,IFQ,,defaulttarget_,,,,,,Radio propagation/antenna models,Prop/ant,無線節(jié)點組件,分類器defaulttarget_ 指向路由代理對象255 is the port id assigned for rtagent_路由代理Ad h
43、oc routing protocol, e.g., AODV, DSDV, DSR; or directed diffusion,無線節(jié)點組件,Link LayerSame as LAN, but with a separate ARP moduleLooks up IP-to-MAC mappings using ARPARPResolves IP address to hardware (MAC) addressBroa
44、dcasts ARP queryInterface queue (IFQ)Gives priority to routing protocol packetsHas packet filtering (search and remove) capacity,無線節(jié)點組件,MAC802.11IEEE RTS/CTS/DATA/ACK for unicastSends DATA directly for broadcastNe
45、twork interface (PHY)Used by MobileNode to access channelStamps outgoing packets with meta-dataInterface with radio/antenna models,無線節(jié)點組件,Radio Propagation ModelFriss-space model: attenuation at near distanceTwo-ray
46、 ground reflection model: attenuation at far distanceShadowing model: probabilisticAntennaOmni-directional, unity-gain,無線Channel,Duplicate packets to all mobile nodes attached to the channel except the senderIt is th
47、e receiver’s responsibility to decide if it will accept the packetCollision is handled at individual receiverO(N2) computation!,NS腳本的寫法,Trace數(shù)據(jù)分析,在上面的兩個腳本中,定義了兩個輸出文件,一是out.tr,一是out.nam。下面介紹這兩種輸出文件的作用及其格式,以及如何從他們中得到所想要的
48、信息。,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 0xffffffff -c 31 -a 1A -t
49、 * -h 1 -m 2147483647 -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
50、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 * -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 ------- nul
51、l}- -t 0.5 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x {2.0 1.0 0 ------- null}h -t 0.5 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x {2.0 1.0 -1 ------- null}r -t 0.51016 -s 2 -d 0 -p tcp -e 40 -c 1 -i 0 -a 1 -x {2.0 1.0 0 -
52、------ 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 ------- null}h -t 0.51016 -s 0 -d 1 -p tcp -e 40 -c 1 -i 0 -a
53、1 -x {2.0 1.0 -1 ------- null},trace數(shù)據(jù)文件,用來記錄整個模擬過程中所發(fā)生的事件,每個包被發(fā)送,轉發(fā),接收的相關信息打開數(shù)據(jù)Trace文件 set data_file_var [open out_data_file w]$ns trace-all $data_file_var在分析一個trace文件前,一定要注意trace格式,無線和有線的生成的trace文件格式是不同的!,trace
54、文件格式示例,….+ 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
55、 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.890706 2 3 cbr 1000 ------- 2 1.0 3.1 94 94+ 0.892 1 2 cbr 1000 -------
56、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-
57、 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….,,1,2,3,4,5,6,7,8,9,10,11,12,有關trace格式的請參照,http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Form
58、ats,分析trace數(shù)據(jù)的工具,數(shù)據(jù)處理使用Shell文本處理命令,如 cut, join, sed, grep等命令腳本語言:awk,perl,python等繪圖工具 gnuplot xgraph,從Trace中能夠得到什么?,端到端的吞吐率:指一個s/d的吞吐率端到端的延遲,指一個包從一個源發(fā)到目的地所需要的時間丟包率抖動,等等如何從trace中獲得這些值,網上有許多現(xiàn)成的腳本可以使用!,主要學習資料
59、,NS與網絡模擬NS by examplehttp://nile.wpi.edu/NS/ns_tutorial http://www.isi.edu/nsnam/ns/tutorial/中文論壇-百思論壇 http://www.baisi.net/forum-440-1.html,第二講,NS體系結構(重點理解),分裂對象模型C++ implement the simulation modelImplement
60、 data pathper packet processing, core of nsfast to run, detailed, complete controlOTcl (Tcl script language with Object-oriented extensions developed at MIT ) Simulation scenario configurationsPeriodic or triggered
61、actionManipulating existing C++ objectsfast to write and change,為什么要用兩種編程語言來實現(xiàn)NS?,模擬器有兩方面的事情需要做一方面,具體協(xié)議的模擬和實現(xiàn):需要一種程序設計語言,它需要很有效率的處理字節(jié),報頭等信息,需要應用合適的算法在大量的數(shù)據(jù)集合上進行操作。為了實現(xiàn)這個任務,程序內部模塊的運行速度是非常重要的,而運行模擬環(huán)境的時間、尋找和修復bug的時間,重新編譯
62、和運行的時間(run-around time)就顯得不是很重要了。另一方面,許多網絡中的研究工作都圍繞著網絡組件和環(huán)境的具體參數(shù)的設置和改變而進行的,需要在短時間內快速的開發(fā)和模擬出所需要的網絡環(huán)境,并且方便修改和發(fā)現(xiàn)、修復程序中的Bug。在這種任務中,run-around time就顯得很重要了,因為模擬環(huán)境的建立和參數(shù)信息的配置只需要運行一次。,為什么是C++和OTCL來實現(xiàn)?,為了滿足以上兩種不同任務的需要,NS的設計實現(xiàn)使用了
63、兩種程序設計語言,C++和Otcl。C++程序模塊的運行速度非常快,是強制類型的程序設計語言(變量嚴格定義整型,浮點型和字符、字符串類型),容易實現(xiàn)精確的、復雜的算法,但是修改和發(fā)現(xiàn)、修正bug所花費的時間要長一些。該特性正好用于解決第一個方面的問題。Otcl是腳本程序編寫語言,是無強制類型的,比較簡單,容易實現(xiàn)和修改,容易發(fā)現(xiàn)和修正bug,雖然它的運行速度和C++的模塊相比要慢很多。該特性正好用于解決第二方面的問題。,什么時候用C
64、++,什么時候用Otcl?,下面情況用OTcl來實現(xiàn): 對模擬環(huán)境的配置、建立和在模擬中只運行 一次的地方。如果可能,用Otcl腳本來隨意操作已經存在的C++對象。下面情況用C++來實現(xiàn): 如果你需要在模擬中對每一或大量數(shù)據(jù)包進行處理。如果你想修改已存在的C++對象的屬性和功能。注意并沒有嚴格的界限,NS的用戶視圖,NS-2的C++和Otcl類對應示意圖,C++和Otcl類對應關系,C++和Otcl類對應關系(c
65、ont.),NS構件(獨立的功能單位)通常由相互關聯(lián)的兩個類來實現(xiàn),一個由C++類實現(xiàn),一個由Otcl類實現(xiàn);TclCL把這兩張語言中的對象和變量聯(lián)系起來,充當“glue”的角色。所有C++類(編譯類)都是從類TclObject一級級繼承出來的,而所有Otcl類(解釋類)都是從SplitObject一級級繼承出來的。 分裂對象模型中Otcl類稱為解釋類,把對應的C++類稱為編譯類,這兩個類互為“影像類”;同樣地,稱Otcl對象為解釋
66、對象,稱C++對象為編譯對象,這兩個對象互為“影像對象”。,C++和Otcl類對應關系(cont.),NS每當實例化一個構件時,都會同時創(chuàng)建一個Otcl中的對象和一個對應的C++對象,并且這兩個對象可以互操作。例如,在前面的例子中,通過 “new Agent/TCP” 創(chuàng)建了一個Otcl對象,也相應地在C++中創(chuàng)建了一個tcp對象,NS-2的總體體系結構,NS-2的類體系結構(部分),NS-2的類基礎框架,Tcl類:C++代碼與Tcl代
67、碼之間的接口TclObject類:所有編譯對象的基類TclClass類:定義了解釋類的類層次,并允許用戶實例化TclObject,與TclObject一一對應TclCommand類:封裝了C++代碼和Tcl代碼相互調用命令的方法EmbeddedTcl類:封裝了裝載更高級別的內置命令的方法InstVar類:訪問C++成員變量,如Otcl變量方法,Tcl類簡介及功能實現(xiàn),獲得Tcl解釋器的引用,來調用解釋器的功能。用來調用Otc
68、l命令函數(shù)傳遞/獲得Otcl命令運行的結果報告錯誤/退出模擬器的運行在解釋器內部的用來保存生成對象地址的哈西表獲得Tcl解釋器的句柄,來對解釋器進行直接訪問。,用來調用Otcl命令函數(shù),可以在獲得了Tcl解釋器的引用之后,通過這個引用來調用Otcl中的控制臺命令。tcl.eval(char* s);執(zhí)行字符串s,并在tcl的結果變量中保存執(zhí)行結果。tcl.evalc(char* s);首先把s存儲進tcl中的命令緩沖區(qū)中,然
69、后再執(zhí)行該s命令,并且在結果變量中返回結果。tcl.eval();執(zhí)行已經存儲進tcl命令緩沖區(qū)中的命令,并且在結果變量中返回結果。tcl.evalf(const char* s,…);該函數(shù)類似于c語言中的printf命令,可以進行字符串的過濾,執(zhí)行同eval()。tcl.buffer()返回tcl中的命令緩沖區(qū)。,傳遞/獲得Otcl命令運行的結果,當Tcl解釋器執(zhí)行用戶指定的控制臺字符串命令之后,解釋器在自己內部的結果字符串變
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ns1024g使用手冊
- 圍術期安全使用ns郭曲練
- 靜態(tài)平均功率Ns Ns.doc
- 寨卡病毒NS3、NS4A、NS5蛋白對小鼠神經發(fā)育的影響.pdf
- ns腫瘤、感染
- NS.docx
- 電梯多媒體系統(tǒng)管理軟件使用手冊_ns
- NS.docx
- 本科ns影像學
- ns-v1700
- 【ns eyes】簡介目錄
- ns摸型的低密度極限
- 丙型肝炎病毒NS3結合蛋白和NS3反式激活新靶基因NS3TP6的研究.pdf
- 新型HCV NS3-NS4A蛋白酶抑制劑的設計與合成.pdf
- 基于NS的BGP協(xié)議仿真研究.pdf
- 基于NS的實時仿真平臺.pdf
- 基于NS的藍牙仿真工具的研究.pdf
- 基于ns-2的tcp的模擬研究
- ns并發(fā)靜脈血栓的診治策略
- 水稻條紋病毒NS2、NS3蛋白與寄主間的互作.pdf
評論
0/150
提交評論