网络仿真器NS-2之使用手册_第1页
网络仿真器NS-2之使用手册_第2页
网络仿真器NS-2之使用手册_第3页
网络仿真器NS-2之使用手册_第4页
网络仿真器NS-2之使用手册_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络仿真器NS-2之使用手册(草稿)目录安装手册.0109. 使用需求.01. 在Windows Me/2000安装方式.01. 补充.08. 参考网址.09使用手册.1018附录一、Output File Format.1925. NAM各字段格式及范例.19. NEW TRACE FILE格式.23附录二、TCL语法整理2633 安装手册 一、使用需求: 计算机外设设备:n CPU:600MHz以上。n 内存:256M以上。n 硬盘容量:40GB以上。宽带网络:NS2各组件需要快速的联机网络下载,各组件的档案总共数百Mega Bytes。 Visual C+ 6.0。二、在WINDOW M

2、E/2000的安装方式:1.在DOS环境下c:programMicrosoft studioVC98bin执行vcvars32.bat的批次档,藉以设定Visual C+的路径以及环境变量;并且可以手动编辑autoexec.bat中路径或环境变量。以下为一Autoexec.bat的范例,仅供参考,并不硬性规定需如此设定:echo offvcvars32.batset PATH=%PATH%;c:netsimtclset PATH=%PATH%;c:netsimtkset PATH=%PATH%;c:netsimotclset PATH=%PATH%;c:netsimtclclset PATH=

3、%PATH%;c:netsimns2set PATH=%PATH%;c:progra1tclecho on2.新增一个NetSim的资料夹在C:里面。或是新增在你想放置的磁盘中。3.DOWNLOAD NS2的个别组件:a. TCL(Tool Command Language),an open source scripting language。b. TK:(Tool Kit),A GUI extension for TCL。c. OTCL:对象导向的Tcl/Tk延伸。d. TCLCL:Tcl/C+ interface。e. ns-2.1b7 or higher(在此列举2.1b8的版本)。4.

4、解压缩以上所DOWNLOAD的档案到C:NetSim的数据夹中,解压缩之后在NetSim数据夹中应该是图一这种情况。图一 5.安装 tcl and tk:第一步就是complie tcl:在tcl目录按下dir/w指令就可以看到跟图二类似的目录:图二在tcl中最需要注意的莫过于他的子数据夹win,而最重要的就是他里面一个叫makefile.vc的资料夹,在makefile.vc中需要修改一些设定如图三反白处:图三最主要修改的地方是:倒数二、三行的地方,在c:progra1micro3vc98这一行中,需注意的是micro3,需依照使用者所安装目录顺序所决定。在此,因为Microsoft Vis

5、ual Studio安装的顺序在Microsoft FrontPage and Microsoft Office之后,所以这里才需改为micro3。6.接下来就是compile,在c:netsimtclwin下执行下列的指令:nmake i f makefile.vcnmake:执行Visual C+指令的compiler。-i:忽略错误现象且持续执行。-f:使用下列的档案去compile。7.接下来在tk部分则是跟tcl是一样的步骤,记得要到跟图四一样的位置去更改有关路径的部分:图四8.安装otcl/tclcl:如前面安装tcl and tk一样,适当的修改makefile.vc的档案,就能

6、判定之前tcl and tk的路径是否正确。图五就是tcl and tk的一部份:图五修改完毕之后,在c:netsimotcl下执行nmake i f pile完之后,在otcl的目录底下就可以看到像图六一样的档案内容:图六(在这里NetSim数据夹是建立在D磁盘中)9.下一步是compile tclcl,有点不一样的步骤是在d:netsimtclcl confmakefile.win要如图七般在反白处更改路径:图七另一个需要注意的是,在反白处的下三行,若放置netsim数据夹的路径与其不同,则需改为使用者自行设置的路径。如图八:图八确认一下tcl and tk的

7、版本是否正确,版本的问题牵扯到所需Load的档案的名称,因此务必要确认。如图九:图九紧接着需要再确认tcl、tk、otcl、tclcl的数据夹是否设定妥当,必须和在Netsim目录底下的各个tcl、tk、otcl、tclcl的目录完全相同才可以,否则会有找不到路径及档案的错误出现。设定如图十:图十回到tclcl的目录,执行nmake i f makefile.vc,执行完后,在tclcl目录下的数据应该跟图十一类似才是正确的:图十一在做下一个步骤之前,以下两项作业必须已经完成好了:tcl and tk 已经安装在适当的program file 目录下。otcl and tclcl 已经comp

8、iler完成。10.compiling NS:确认已经把tcl, tk, otcl, tclcl的数据夹在路径环境变量中(PATH environment variable)已经设定好了,comfiguration for NS跟tclcl的大部分都相同,需要修改的configuration的档案是在/conf中的makefile.win,如图十二:图十二以下做法皆跟tclcl的步骤一样: 确认 Visual C+的路径是否正确:MSVCDIR = c:progra1micros3VC98。 需要特别注意local directory 是否正确:LOCAL_SRC = d:NetSim。 确认

9、一下tcl and tk的版本是否正确。 再确认tcl, tk, otcl, and tclcl的数据夹是否设定妥当。 回到NS的目录并且compile,执行nmake i f makefile.vc。如果执行顺利,NS的compile就完成了。三、补充:在做任何一次nmake之前,假如在此次compiler之前已经有compiler的记录时,则需先执行过”nmake I f makefile.vc clean”的动作,将先前compiler过的程序清除,才能够让此次的compiler能够顺利的进行,否则它会先去判断是否有make过所产生的档案或目录,如果存在,则当做已经make成功而不会重新

10、的make过。如果遇见无法nmake clean的问题,则看它所出现的某些档案或目录太长或者无法清除,用手动的方式将其清除再重新执行”nmake I F makefile.vc”的指令,到目前为止,只发现在ns-2.1bX的目录中会有此问题存在,原因是因为ns在compiler时会产生很多*.o的Object档,而因为太多而无法使用nmake I f makefile.vc clean的指令来清除,需要手动下“del *.o”并且将gen目录给全部清除,因为在nmake clean时,遇见了错误讯息后便无法继续remove gen的动作,所以也需手动来清除。四、参考网址:若有其它的疑问,可以至

11、以下网址查询。 /nsnam/ns /magico/nsFiles/InstallNS1.html /nsnam/ns/ns-tests.html /man/ 使用手册 1.先Implement一个使用者想要模拟的protocol into NS2。这里将介绍李志平学长使用C+撰写的protocol。2.用名为LeeAgent的class去implement 学长的 protocol,在这个class中一开始需要宣告nod

12、e的主要routing table、备份routing table和处理packets的函式,这样在NS2的环境中,每个node都会有LeeAgent的所宣告的环境。以下就是部分的header file:class LeeAgent : public Agent friend class MyHelloTimer;public:LeeAgent(nsaddr_t id);void recv(Packet* p, Handler*);void rt_ll_failed(Packet* p);void lee_failed(Packet* p );void purge();void dump();

13、protected:int command(int argc, const char*const* argv);void addnb(nsaddr_t nid);int findnb(nsaddr_t nid);void delnb(nsaddr_t nid);void checknb();void CheckMainRoute( nsaddr_t nid );void rt_resolve(Packet* p);void recovery( nsaddr_t sid, nsaddr_t did );void retransmit( nsaddr_t did, nsaddr_t nid );v

14、oid forward(Packet *p, nsaddr_t nexthop, double delay);void recvLEE(Packet* p);void recvMQRY(Packet* p);void recvMRPY(Packet* p);void recvMFQ(Packet* p);void recvBQRY(Packet* p);void recvBRPY(Packet* p);void recvHELLO(Packet* p);void recvFQ(Packet* p);void recvUPD(Packet* p);void recvFW(Packet* p);v

15、oid recvCLR(Packet* p);void sendMQRY(nsaddr_t sid, nsaddr_t did);void sendMRPY(nsaddr_t sid, nsaddr_t did, nsaddr_t xid, int htd_);void sendMFQ(nsaddr_t sid, nsaddr_t did);void sendBQRY(nsaddr_t sid, nsaddr_t did, int myhtd, int k);void sendBRPY(nsaddr_t sid, nsaddr_t did, int hop,int shtd,int desth

16、td,nsaddr_t nexthop_);void sendHELLO();void sendFQ(nsaddr_t nid);void sendFW(nsaddr_t sid, nsaddr_t did, int shtd);void sendUPD(nsaddr_t sid, nsaddr_t did, nsaddr_t xid, int htd_, int status);void sendCLR(nsaddr_t sid, nsaddr_t did, nsaddr_t xid, int shtd_, int dhtd_ );virtual void reset();void trac

17、e(char* fmt, .);inline int initialized() return 1 & target_;Trace*logtarget; / trace log target rtqueue rqueue; / wait for route queue intNBN; / neighbor numberlnlist*nblist; / neighbor listMyHelloTimerhtimer; / hello message timerPriQueue*ifqueue; / ?MainTable MRTable; / main route tableBackupTable

18、BRTable; / backup route tableLeeRqTable request_table; / request temp tableunsigned int seq; / seq #nsaddr_t myaddr; / node iddoublepretime; / pre-transmition timebool ifhello;其中有几个NS2会用到的函式。第一个是”recv”函式,当NS2中node接收到一个routing packet,node会呼叫routing agent 的”recv”函式去接收packet。第二个是”command”,这个函式是TCL comm

19、and line呼叫使用的,我们可以在TCL script中启动一个hello timer或是给一个像interface queue 的class。3.另外,在学长的构思中还需要两个class,一个是NS2的header manager,在这个class中可以去定义packet header 的名字,packet的大小,和结合packet header的offset。另一个就是结合TCL跟我们的agent,我们必须在NS2中定义名为”Agent/Lee”的agent和”create”的函式,当我们在TCL中产生一个对象”Agent/Lee”时,”create”函式就会被呼叫。下列就是一个例子:

20、int Lpacket:offset_; static class LEEHeaderClass : public PacketHeaderClass public: LEEHeaderClass() : PacketHeaderClass(PacketHeader/LEE, LPKTLEN) bind_offset(&Lpacket:offset_); class_rtProtoLee_hdr;static class LeeAgentclass : public TclClass public:LeeAgentclass() : TclClass(Agent/LEE) TclObject*

21、 create(int argc, const char*const* argv) assert(argc = 5);return (new LeeAgent(nsaddr_t) atoi(argv4); class_rtProtoLee;定义control packet的fields在Lpacket.h中,如下列所示:struct Lpacket u_int8_t type_;nsaddr_t sid_;nsaddr_t did_;unsigned int seq_;int count_;int count2_;static int offset_; / required by Packet

22、HeaderManagerinline static int& offset() return offset_; inline static Lpacket* access(const Packet* p) return (Lpacket*) p-access(offset_);4.当完成了以上所描述的,就会有了以下几个档案,说明如下:Lee.cc and Lee.h代表了LeeAgent的行为;Leerqtable.cc and Leerqtable.h是表示主要和备份routing table的函式,Lpacket.h定义了control packet header。为了能在NS2中正确的

23、执行学长的protocol,还需要在NS2中修改一些档案。5.为了让NS能够承认我们的control packet,有一些参数需要加在NS的C+档案中,这些档案在NetSim/ns2。Packet.h:这个档案中已经有其它packet headers定义在NS2中,我们需要在档案中增加自己的control packet header的名字,一个地方是enum packet_t ,另一个是class p_info,如下:enum packet_t PT_LEE, 在这里增加使用者的protocol header typePT_NTYPE / This MUST be the LAST onecl

24、ass p_info public:p_info() name_PT_LEE = LEE; 增加使用者的packet header namename_PT_NTYPE= undefined; CMU-Trace.cc and CMU-Trace.h:为了让学长的Protocol也可以在NS2使用trace对象,我们需要修改两个档案,以下是在CMU-Trace.h中修改的部分:class CMUTrace : public Trace private: void format_aodv(Packet *p, int offset);void format_lee(Packet *p, int o

25、ffset); 增加这一行;以下是CMU-Trace.cc修改的地方:#include include our protocol control packet header filevoid CMUTrace:format(Packet* p, const char *why) switch(ch-ptype() default: switch(ch-ptype() case PT_LEE: 增加这三行 format_lee(p, offset); break; default: fprintf(stderr, %s - invalid packet type (%s).n, _PRETTY_

26、FUNCTION_, packet_(ch-ptype(); exit(1); void CMUTrace:format_lee(Packet *p, int offset) 增加这个函式struct Lpacket *lh = LPACKET(p); if (newtrace_) sprintf(wrk_ + offset, -P lee -Pt 0x%x -Ps %d -Pd %d -Pq %d -Pc %d -Pc CLEAR ,lh-type_, lh-sid_, lh-did_, lh-seq_, lh-count_); else sprintf(wrk_ + of

27、fset, 0x%x %d %d %d %d (CLEAR), lh-type_, lh-sid_, lh-did_, lh-seq_, lh-count_); 6.在执行NS2之前,可以先在TCL中设定一个方便的环境去产生一个简单TCL script file去执行模拟。这些档案放在NetSimns2TclLib里。7.我们需要先修改ns-lib.tcl的档案以方便可以在我们protocol中设定一简单的无线模拟环境。首先我们可以在ns-lib.tcl中找到这一行:Simulator instproc create-wireless-node args 接下来我们可以找到其它protocol

28、的设定指令,如TORA、AODV、DSR、DSDV,在此可以如下列般增加使用者的protocol:LEE set ragent $self create-lee-agent $node 第一行中的”Lee”是定义使用者的routing agent,接下来还要定义其它的函式”create-lee-agent”在这个档案里。其它protocol也可以以此为例。Simulator instproc create-lee-agent node set ragent new Agent/LEE $node id;# create a new routing agent $node set ragent_

29、 $ragent;# attach routing agent to node $self at 0.0 $ragent start ;# start BEACON/HELLO Messages return $ragent第二行中的class”Agent/LEE”定义在Lee.cc里。现在可以用”node-config”的command简单地在routing protocol里去设定一个node。8.增加protocol 的名字在Ns-Packet.tcl中,将会使PacketHeaderManager结合使用者的packet header,名字跟我们在PacketHeaderClass中定

30、义的一样:foreach prot LEE add-packet-header $prot 9.修改Ns-Mobilenode.tcl的档案去结合interface queue到使用者的agent,所以我们在add-target的函式中增加下列的指令:set leeonly string first LEE $agent info class if $leeonly != -1 $agent if-queue $self set ifq_(0) ;# ifq between LL and MAC 10.下一步必须compile学长的Lee.cc、Leerqtable.cc和其它我们在NS2中有

31、修改过的档案。先修改在NetSimns2里的Makefile.vc,在OBJ_CC最后面增加学长的Lee.o and Leerqtable.o,如下所示:OBJ_CC = rtmodule.o classifier-hier.o addr-params.o lee.o leerttable.o we add here$(OBJ_STL)接下来就可以执行nmake i f makefile.vc来compile使用者的protocol,每次只要有修改C+或TCL的档案,就必须重新compile过ns2。如安装手册的补充说明。11.由于NS2所支持产生topology不适合我们的需求,所以学长设计

32、了一个TCL script file去产生topology,另一个script file去设定node random出来的环境Pattern,第三个script file去产生random的通讯,RGT.tcl就是组织了这三个files。当使用RGT.tcl去产生pattern时,需要设定一些参数如下:ParameterDescriptionval(nn)Node number opt(x)The range of x axis of node (meter)opt(y)The range of y axis of node (meter)val(mc)The connection numbe

33、r of this simulationval(st)The time of this simulation (s)val(pt)The pause time of nodes (s) val(ms)The maximal speed of nodes (meter/s)val(ss)The minimal speed of nodes (meter/s)filenameThe file name of the tracefile12.当完成上述所描写的程序后,就可以开始产生pattern,在DOS环境下NetSimns2输入”ns rgt.tcl test”,假设没有导向到另一个file,则

34、环境设定值会显示在DOS窗口上。接着可以输入”ns test”开始模拟。13.如果没有错误讯息产生,NS2就会产生两种形式tracefile.,一种是network animation,另一种就是packet trace file。当模拟结束,就会存在一个test.nam的档案,使用者可以使用Network AniMation(NAM)去开启,开启模拟的结果就会像图一所呈现的一样:图一NAM在窗口中显示出network topology的改变以及packet transmission传送的方向,窗口下面则是时间滚动条,显示目前仿真时间位置,窗口上面则是一些控制平台,如stop、 backwar

35、d 、quickly backward、 forward、 quickly forward。窗口右上角则是用来调整速度的滚动条(micro second per step)。不过NAM在Win95/98有bug,当使用者按下图一的左上backward的按钮就会当掉,这样就只能按CTRL+C才能结束程序。假如不能在NAM窗口上看到nodes,则必须要使用者的script file中加入下列几行:for set i 0 $i Enter queue:在src_addr到dst_addr之间packet进入了队列。- = Leave queue:在src_addr到dst_addr之间packet离

36、开了队列。d = Drop:在src_addr到dst_addr之间从队列或连结中丢弃(drop)packet,在这里的丢弃并不会区分是从队列或连结中丢弃。这是决定于丢弃时间。h = Hop:在连结(link)中从src_addr传送packet到dst_addr并且转送(forward)next_hop到它的dsr_addr。r = Receive:packet传送完成而且目的端开始接收。以下是其它的flags:-a packet的属性,目前使用的如color id。-c 交谈(conversation)的id或者是在期间中流动的id(flow-id)。-d 目的端node。-e packe

37、t的大小(in bytes)。-i 在交谈中的packet id。-p 描述看到的packet形式的名字。-s 发源端node。-t 事件发生的时间。-x 从ns-traces中取得,代表着原始端node、目的端node、port addresses、sequence number、flags(if any)和message的种类。e.x = -x 0.1 -2147483648.0 -1 - SRM_SESS 意思是从node0(port 1)送一个SRM message出去。Node state在nam trace formating中定义node state的格式如下:n -t -a -

38、s -S -v -c -i -on代表node state。Flags -t指的是时间,-a和-s代表node address和id。-S代表node state transition。可能的数值有:UP,DOWN 指的是node的复得和失败。COLOR 指的是node的颜色转换。假如COLOR已经给了,-c 则被认为是一个新的颜色值。而flag -o就是在backtraving的时候可以回复node的旧颜色。DLABEL 意指加标签到node。-l -L。Shape说明node的状态。而node颜色的标签则经由 -i flag来指定。Node MarkingNode marks会着色在nod

39、e的中心圆。可以用以下的式子产生:m -t -n -s -c -h -o 用以下的式子删除:m -t -n -s -x一旦产生,node mark不能改变它的shape。shape的可能形式为圆、正方形、六角形。e.x = m -t 4 -s 0 -n m1 -c blue -h circle 意思是node0在时间4.0的时候用蓝色的圆mark起来。Link/Queue Statenam trace中link和queue states的用法如下:l -t -s -d -s -c -o orientation-r -D q -t -s -d -a 上面所指的和是相同的属性(且是相同的格式),f

40、lag -o 代表连结的方位。flag -r和-D代表bandwidth(in Mb)和delay(in ms)。e.x for a link trace:l -t * -s 0 -d 1 -s UP -r 1500000 -D 0.01 -c black -o righte.x for a queue trace:q -t * -s 0 -d 1 -a 0.5flag -a表示the line of the queue的方位(介于queue line和水平线的角度),上例中的0.5指的就是queue line的角度90度。Agent TracingAgent trace可以假设为protoc

41、ol state。agent event有一个唯一鉴识的名字。agent是用把名字放在正方形中的形式表示出来。agent event以以下的格式建构出来的:a -t -n -s 在ns中,agent可能会跟node不连结,而agent在nam中可能被破坏:a -t -n -s -x以下是nam trace在时间0产生一个名叫srm(5)跟node5有关联的agent:a -t 0.00000000000000000 -s 5 -n srm(5)Variable Tracing设想state variables跟protocol agent有关,这里使用feature trace event。每

42、一个feature需要跟一个agent有关联。所以当agent产生之后feature就可以在任何时间内增加或修改。产生feature的trace line如下:f -t -s -a -T -n -v -o flag l 代表一个list,v代表一简单的变量,s代表一停止时间,u代表一up-counting的定时器,d代表一down-counting的定时器。只有v是在ns中可以implemented。flag -v 代表变量的新值。Variable values 是遵守TCL字符串引用的惯例的简单ASCII字符串,list values则遵守TCL list的惯例,定时器的值则是ASCII的数

43、字,flag -o 代表variable先前的值。e.x for a simple feature event:codef -t 0.00000000000000000 -s 1 -n C1_ -a srm(1) -v 2.25000 -T v删除feature可以使用:f -t -a -n -o -XMiscellaneous Trace EventsAnnotation event type v,一般的annotation如下:v -t 特别的tcl function sim_annotation in nam的例子如下:v -t 4 sim_annotation 4 3 node 0 a

44、dded one mark中间插入node 0 added one mark在Nams annotation上。补充:ColorNAM允许用整数当color names。packet的flow id用符合的颜色去着packet的色:c -t -i -n color name必须是X11中的color database中所有的。Version以下是定义nam version:V -t -v -a 一般而言,在tracefile中只有一个version,而且是位在file的第一行。Hierarchy(等级制度)Hierarchy address information的定义如下:A -t -n -

45、o -c -a -h -m -s Flag -n 代表hierarchy的全部等级数,1表示flat addressing,2表示一个2-level hierarchy etc。Flag -o 表示addressing所使用的全部bits数,flag -h 表示address hierarchy的level,flag -m 和-s 则是address mask和在address hierarchy给定level的bit shift。e.x for 3 level hierarchy:A -t * -n 3 -p 0 -o 0xffffffff -c 31 -a 1A -t * -h 1 -m

46、1023 -s 22A -t * -h 2 -m 2047 -s 11A -t * -h 3 -m 2047 -s 0以上的nam trace formats可以在下面几个file中找到:ns/trace.cc、ns/trace.h、ns/tcl/lib/ns-namsupp.tclNew Trace File 的格式:$ns use-newtrace:目前这道指令的new trace support只有在无线模拟中才可以,未来应该可以扩展到ns其余的功能上。 以下是new trace format的例子:s -t 0.267662078 -Hs 0 -Hd -1 -Ni 5.00 -Ny 2

47、.00 -Nz 0.00 Ne -1.000000 -N1 RTR -Nw - -Ma 0 -Md 0 -Ms 0 -Mt 0 -Is 0.255 -Id -1.255 It message -I1 32 -If 0 -Ii 0 -Iv 32s -t 1.511681090 -Hs 1 -Hd -1 -Ni 1 -Nx 390.00 -Ny 385.00 -Nz 0.00 Ne -1.000000 -N1 RTR -Nw - -Ma 0 -Md 0 -Ms 0 -Mt 0 -Is 1.255 Id -1.255 It message -I1 32 -If 0 -Ii 1 -Iv 32s -t

48、10.000000000 -Hs 0 -Hd -2 -Ni 0 -Nx 5.00 -Ny 2.00 -Nz 0.00 Ne -1.000000 -N1 AGT -Nw - -Ma 0 -Md 0 -Ms 0 -Mt 0 -Is 0.0 -Id 1.0 -It tcp -I1 1000 If2 -Ii 2 -Iv 32 -Pn tcp -Ps 0 -Pa 0 -Pf 0 -Po 0r -t 10.000000000 -Hs 0 -Hd -2 -Ni 0 -Nx 5.00 -Ny 2.00 -Nz 0.00 Ne -1.000000 -N1 RTR -Nw - -Ma 0 -Md 0 -Ms 0 -Mt 0 -Is 0.0 -Id 1.0 -It tcp -I1 1000 -If2 -Ii 2 -Iv 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论