NS2一些安装和使用的问题

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文件记述一下。

action

time

from node

to node

traffic type

packet size

packet flags

flow id

src_node .port

dst_node .port

SN

id

+/-/r/d

0.1

1

2

cbr

1000

-------

2

1.0

3.1

0

0

具体的更多定义,可以参照: 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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值