ns的使用_第1頁
已閱讀1頁,還剩115頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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,

2、QualNet等,模擬能夠做什么?,對現(xiàn)有的協(xié)議或算法進行研究,主要是它們的行為或性能進行評價對新提出的協(xié)議或算法進行測試對研究成果進行對比評價,找出各種的優(yōu)點和不足,模擬的優(yōu)點和缺點,優(yōu)點非常靈活,易于配置,并且成本比較低(不需要買設(shè)備)可以研究大規(guī)模網(wǎng)絡(luò)容易獲得研究成果缺點會忽略掉真實網(wǎng)絡(luò)中一些重要細節(jié)對產(chǎn)生的結(jié)果要仔細驗證,有可能不適合于真實環(huán)境,NS簡介,NS(Network Simulator)它是由LBNL

3、( Lawrence Berkeley National Laboratory ) 的網(wǎng)絡(luò)研究小組開發(fā)的模擬工具。NS具有可擴展、易配置、可編程等特點。NS是面向?qū)ο蟮模x散事件驅(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 source)如FTP,WWW,Telnet,Web,CBR和VBR等。,NS簡介(續(xù)),NS

4、-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ù)

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 或其他網(wǎng)址安裝文件# 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目錄結(jié)構(gòu),NS2層次結(jié)構(gòu),NS命令的使用,當安裝完畢后,在任何路徑下,直接鍵入ns如果要運行某個tcl程序(比如example.tcl,那么: ns example.tcl,T

8、cl與Tk編程環(huán)境概述,Tcl與Tk是安裝在Unix/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ù)

9、庫。添加新的C函數(shù)就可以擴充Tcl的命令和功能,是擴展性非常強的腳本程序設(shè)計語言。Tcl解釋器把用戶輸入的命令和程序語句進行初步分析,然后調(diào)用C函數(shù)庫里的相應(yīng)函數(shù)來執(zhí)行,輸出結(jié)果。Tcl是無強制類型的腳本語言,一切變量,不論整型,浮點型等,都以字符串的形式存儲。,Tcl基礎(chǔ),先看一個最簡單的例子:hello world#Define a process named "helloworld"proc hello

10、world {} { puts "Hello world!!!"}# Call the process helloworldHelloworld,Tcl基礎(chǔ)(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、者語句切割成一個一個的字符串,并在一遍掃描的過程中進行變量替換、命令結(jié)果替換和特殊字符替換。在切割過程中不對命令進行任何語意理解。Tcl命令的基本構(gòu)成是:命令名+參數(shù)+參數(shù)+…………Tcl的executer的功能是:把Tcl的Parser處理過的命令或語句字符串向量進行分析。由于字符串向量的第一個字符串元素是命令的名稱,那么executer匹配Tcl中C庫函數(shù)的函數(shù)名,當匹配到的時候,把全部參數(shù)傳遞給匹配到的C函數(shù)來執(zhí)行命令,然后返

13、回結(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變得更

14、加強大,更加方便使用。雖然和C++中對象和類以及其他面向?qū)ο蟪绦蛟O(shè)計語言中的概念相同,但是具體實現(xiàn)和語法卻存在很大的差別。,OTcl —— Tcl的面向?qū)ο髷U展,# 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與網(wǎng)絡(luò)模擬—第三章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的過程,關(guān)閉兩個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è)務(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"$

23、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ò)組件,一般可以從真實網(wǎng)絡(luò)中找到對應(yīng)體,如一個節(jié)點對象可以對應(yīng)一個主機或路由器,一個鏈路對象對應(yīng)兩個主機相連的媒介。所有的基本網(wǎng)絡(luò)組件可以劃分為2類,分類器(Class

24、ifier)和連接器(Connector)。它們都是NsObject的直接子類,也是所有基本網(wǎng)絡(luò)組建的父類。分類器(Classifier)的派生類組件對象包括地址分類器(AddrClassifier)和多播分類器(McastClassifier)等。連接器(Connector)的派生類組件對象包括隊列(Queue),延遲(Delay),各種代理(Agent),和追蹤對象類(Trace),分類器,分類器(classifier)是Ns-

25、2基本網(wǎng)絡(luò)組件的一個大類。它的基本派生類有地址分類器(AddrClassifier)和多播分類(McastClassifier)等。拓撲結(jié)點(Node)是由一個結(jié)點入口對象和若干個分類器(Classifier)組成的一個復(fù)合對象。,單播節(jié)點(Node),有線Multicast節(jié)點結(jié)構(gòu),連接器(connector),連接器——Connector是Ns-2基本網(wǎng)絡(luò)組件中的另一個大類。它的基本派生類對象包括緩沖隊列(Queue)、延遲(De

26、lay)、各種產(chǎn)生和處理數(shù)據(jù)包的代理(Agent)和對象的跟蹤器(Trace)。拓撲結(jié)點連接類(Link)是Ns-2中另一個主要的復(fù)合組件對象。一個結(jié)點和另一個結(jié)點之間的簡單連接(simplex-link)是單向的。一個最基本的簡單連接由一個連接入口、包緩沖隊列、延遲處理對象、廢棄處理對象和時間處理對象(TTL)組成。一個結(jié)點的輸出隊列,是通過和這個結(jié)點相連的Link中的緩沖隊列來實現(xiàn)的。,單向鏈路示意圖,拓撲簡單連接——Link,

27、一個簡單的拓撲結(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)中進行延遲的模擬。在Link中從數(shù)據(jù)緩沖隊列(qu

28、eue)中掉出(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/TCPAgent/TCP/Reno Agent/UDPAgent/TcpsinkAgent/NULL

29、…,包(Packet)類的結(jié)構(gòu)和說明,在Ns-2中,一個“包”是由一個報頭(Header)堆棧(Stack)和一個可選擇的數(shù)據(jù)空間構(gòu)成。報頭的格式,在模擬器對象(Simulator)創(chuàng)建的過程中創(chuàng)建好,同時,所有注冊過的報頭,比如一般的屬性說明、IP報頭,Tcp報頭,RTP報頭,都在包的報頭堆棧中存儲。通過不同報頭在包的報頭堆棧中的偏移量(Offset),網(wǎng)絡(luò)組件可以根據(jù)需要,來訪問包中的不同報頭。這就符合上面的機制,在報頭格式創(chuàng)建

30、的時候,無論這個注冊過的報頭是否需要,都被加到報頭堆棧中。通常,一個包只含有報頭堆棧部分,而沒有數(shù)據(jù)空間。這是因為,在模擬的環(huán)境中,傳輸實際的數(shù)據(jù)是沒有意義的。,包(Packet)類的結(jié)構(gòu)和說明,應(yīng)用程序(application),應(yīng)用程序?qū)邮墙⒃趥鬏敶砩系膽?yīng)用程序的模擬。Ns-2中有兩種類型的“應(yīng)用程序”數(shù)據(jù)源發(fā)生器(Traffic Generator)Exponential On/OffPareto On/OffCB

31、R模擬的應(yīng)用程序(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é)點的結(jié)構(gòu),,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ā)送,轉(zhuǎn)發(fā),接收的相關(guān)信息打開數(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,有關(guān)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中獲得這些值,網(wǎng)上有許多現(xiàn)成的腳本可以使用!,主要學習資料

59、,NS與網(wǎng)絡(luò)模擬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體系結(jié)構(gòu)(重點理解),分裂對象模型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):需要一種程序設(shè)計語言,它需要很有效率的處理字節(jié),報頭等信息,需要應(yīng)用合適的算法在大量的數(shù)據(jù)集合上進行操作。為了實現(xiàn)這個任務(wù),程序內(nèi)部模塊的運行速度是非常重要的,而運行模擬環(huán)境的時間、尋找和修復(fù)bug的時間,重新編譯

62、和運行的時間(run-around time)就顯得不是很重要了。另一方面,許多網(wǎng)絡(luò)中的研究工作都圍繞著網(wǎng)絡(luò)組件和環(huán)境的具體參數(shù)的設(shè)置和改變而進行的,需要在短時間內(nèi)快速的開發(fā)和模擬出所需要的網(wǎng)絡(luò)環(huán)境,并且方便修改和發(fā)現(xiàn)、修復(fù)程序中的Bug。在這種任務(wù)中,run-around time就顯得很重要了,因為模擬環(huán)境的建立和參數(shù)信息的配置只需要運行一次。,為什么是C++和OTCL來實現(xiàn)?,為了滿足以上兩種不同任務(wù)的需要,NS的設(shè)計實現(xiàn)使用了

63、兩種程序設(shè)計語言,C++和Otcl。C++程序模塊的運行速度非??欤菑娭祁愋偷某绦蛟O(shè)計語言(變量嚴格定義整型,浮點型和字符、字符串類型),容易實現(xiàn)精確的、復(fù)雜的算法,但是修改和發(fā)現(xiàn)、修正bug所花費的時間要長一些。該特性正好用于解決第一個方面的問題。Otcl是腳本程序編寫語言,是無強制類型的,比較簡單,容易實現(xiàn)和修改,容易發(fā)現(xiàn)和修正bug,雖然它的運行速度和C++的模塊相比要慢很多。該特性正好用于解決第二方面的問題。,什么時候用C

64、++,什么時候用Otcl?,下面情況用OTcl來實現(xiàn): 對模擬環(huán)境的配置、建立和在模擬中只運行 一次的地方。如果可能,用Otcl腳本來隨意操作已經(jīng)存在的C++對象。下面情況用C++來實現(xiàn): 如果你需要在模擬中對每一或大量數(shù)據(jù)包進行處理。如果你想修改已存在的C++對象的屬性和功能。注意并沒有嚴格的界限,NS的用戶視圖,NS-2的C++和Otcl類對應(yīng)示意圖,C++和Otcl類對應(yīng)關(guān)系,C++和Otcl類對應(yīng)關(guān)系(c

65、ont.),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對象為解釋

66、對象,稱C++對象為編譯對象,這兩個對象互為“影像對象”。,C++和Otcl類對應(yīng)關(guān)系(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代

67、碼之間的接口TclObject類:所有編譯對象的基類TclClass類:定義了解釋類的類層次,并允許用戶實例化TclObject,與TclObject一一對應(yīng)TclCommand類:封裝了C++代碼和Tcl代碼相互調(diào)用命令的方法EmbeddedTcl類:封裝了裝載更高級別的內(nèi)置命令的方法InstVar類:訪問C++成員變量,如Otcl變量方法,Tcl類簡介及功能實現(xiàn),獲得Tcl解釋器的引用,來調(diào)用解釋器的功能。用來調(diào)用Otc

68、l命令函數(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中的命令緩沖區(qū)中,然

69、后再執(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é)果字符串變

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論