NS2的安装 在ubuntu 10.04下因为tclcl与gcc 4.4版本不太兼容,需要更改部分configure的设置,在转载的帖子里已有说明。 nam的拓扑布局 nam的动画演示其实做的比较粗糙,拓扑的布局有三种方法: 1.根据链路位置进行布局,适合小型拓扑。 $ns duplex-link-op $clicke $clicks orient right 链路创建顺序应该与想要的拓扑结构相符,以上例来说orient right指的是链路的布局方向从左向右,那么创建的时候就应该按照链路位置,从左往右依次进行。链路的长短与节点的大小和时延的大小相关。 在无线网络的仿真中,节点的大小和位置可自定义,使用 $ns initial_node_pos $node size 但是该命令的前提是$node节点以及其位置已被定义。目前尚未找点可以在LAN中设定节点大小的命令。 2.nam自动布局 不需设定链路位置,nam自动进行迭代计算并布局。相对比较复杂。具体见NS手册45.6. 3.使用坐标 适合于无线节点布局,在仿真过程中,节点位置可变。 更多无线节点相关设定参照这里: http://apps.hi.baidu.com/share/detail/5675589 , hi.baidu.com/04105209/blog/item/987e652f441a0d351f308946.html LAN设置: 1.配置
acer@whuab ~/ns-allinone-2.31/ns-2.31/tcl/ex/csu/080210
$ ns ex-lan.tcl warning: no class variable LanRouter::debug_ see tcl-object.tcl in tclcl for info about this warning.
解决方法:在ns-default.tcl中加入
LanRouter set debug_ false
重新编译
2.命令 $ns make-lan "$eastc $eastc0 $clicke" 100Mb 10ms LL Queue/DropTail Mac/802_3 Trace file 格式与分析 1.格式 Trace 文件是.tr文件,与.nam文件不同,nam文件比较复杂是用来重建过程动画使用,而tr文件仅包含了报文的转发信息,适合用于对网络流量进行分析。 tr的文件格式对于不同网络有少许不同,这里仅仅对通用的LAN的tr文件记述一下。
具体的更多定义,可以参照: nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats
2.分析 网络性能分析有两种方法,一种是在tcl文件里使用proc record{},每隔一段时间收集整理数据,Marc的tutorial里VIII用的是这种方法,这个对于初学者相对 有难度。 另一种方法是用awk分析生成tr文件,这里主要集中探讨下第二种方法。主要的内容转载自: blog.csdn.net/beijibingshan/archive/2007/06/14/1653007.aspx
自己改写的分析delay的awk script
分析throughput的script
用gdb调试ns2
中间犯了不少错误,走了些弯路,这里记一下,希望对后来的人有帮助。
1. 如果用的Ubuntu,gdb一般是是默认安装了的,如果没有可以sudo apt-get install gdb来安装
2.ns2默认是不支持gdb调试的,需要改一下make文件来添加gdb的支持,需要改的有两个地方:
① 修改Makefile.in:加上-g3选项
.cc.o: @rm -f $@ $(CPP) -g3 -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc .c.o: @rm -f $@ $(CC) -g3 -c $(CFLAGS) $(INCLUDES) -o $@ $*.c
② 修改Makefile(没有任何后缀的)将里面
CCOPT = -Wall #如果是ns-allinone-2.29,这里是CCOPT = STATIC = LDFLAGS = $(STATIC) LDOUT = -o $(BLANK) 改变为(添加 -g 选项,其他不动): CCOPT = -Wall -g (就改这一个地方) STATIC = LDFLAGS = $(STATIC) LDOUT = -o $(BLANK) ③ 在ns-allinone-2.29/ns-2.29目录下重新编译 注意:以下步骤一个都不能少 Make clean Make depend Make
④GDB commands
进入ns-2.34目录
$gdb ns //开始NS的调试
GDB的很多命令是可以使用首字母来简写的,如果没有其他的重复命令的话
$gdb b filename.cc:123 //b是break,设置断点命令的简写,在文件的123行设置一个断点
$gdb r xxx.tcl //运行.tcl文件,仿真运行后,会在断点处停止
关于设置断点还有不同的方法
$gdb break func //在func函数的入口处设置断点
$gdb info break //查看断点信息
print a //查看变量的值
遇到断点,程序会暂停,如果想继续运行程序
next //单步运行程序
continue//运行程序至下一个断点
设置观察点
watch <expr>
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。
rwatch <expr> 当表达式(变量)expr被读时,停住程序。 awatch <expr> 当表达式(变量)的值被读或被写时,停住程序。 info watchpoints 列出当前所设置了的所有观察点。
catch <event>
当event发生时,停住程序。event可以是下面的内容:
throw 一个C++抛出的异常。(throw为关键字)
catch 一个C++捕捉到的异常。(catch为关键字) exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用) fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用) vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用) load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用) unload 或 unload <libname> 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用) tcatch <event> 只设置一次捕捉点,当程序停住以後,应点被自动删除。 清除所有的已定义的断点 clear clear <function> clear <filename:function> 清除所有设置在函数上的停止点。 clear <linenum> clear <filename:linenum> 清除所有设置在指定行上的停止点。 delete [breakpoints] [range...] 删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。 range 表示断点号的范围(如:3-7)。其简写命令为d。 |