您的位置:首页 > 其它

Reading Notes on NS2(10)

2009-11-18 16:36 387 查看
数据的记录与动画演示



在模拟过程中,数据跟踪和采集的方法有多种,大体可以分为两大类:

(1)模拟的执行过程中直接显示跟踪数据

(2)将采集到的数据直接存放到一个文件中,以便后期的处理和分析(常用)

在NS2中有两种主要不同的数据监视器对象

(1)Trace

该对象详细地记录了模拟的整个过程,包括每一个数据分组到达、离开链路或队列,以及分组被丢弃等信息,并存储于Trace文件中。

(2)Monitor

用来记录各种有用的数值,比如到达、离开链路或队列的数据分组数、字节数等。



[1] Trace的使用

Trace的功能是能够详细地记录模拟过程,同时,用户也可以根据自己的需要记录模拟过程中的任何一个细节。

注意:

(1)NS2提供了各种不同的Trace类型,且都继承于OTcl的Trace类,实现不同的功能。

(2)可以通过Tcl代码查看NS2支持的各种Trace类(P.66)

在Tcl中使用Trace,分为两种情况:

(1)记录整个模拟过程的事件,将所有模拟细节都记录下来。

(2)根据需要记录模拟过程中的某些细节,记录一部分事件。

NS2的Simulator类内部定义了各种过程来支持Trace的使用,具体如下:

(1) $ns trace-all <tracefile>

记录整个模拟过程,将模拟过程的所有数据写入Trace文件中,<tracefile>为Trace文件的文件句柄。

(2) $ns trace-queue <n1> <n2> <optional:file>

记录节点n1和n2间链路的事件,并将相关数据写入名为<file>的Trace文件中,其中<file>为可选项。

(3) $ns flush-trace

清空模拟过程中所有Trace对象的缓冲区。



[2] Trace文件格式

在模拟有线网络时,得到默认的Trace文件的每条记录包含了以下12项:

Event|Time|From node|To node|Pkt Type|Pkt size|Flags|Fid|Src addr|Dst addr|Seq num|Pkt id

(1)Event:发生事件的类型(四种)

+ :分组enqueue事件

- :分组dequeue事件

r :目的节点receive事件

d :队列drop事件

(2)Time:事件发生的时间

(3)From node:发送分组节点的id

(4)To node:接收分组节点的id

(5)Pkt Type:分组类型

(6)Pkt size:分组大小

(7)Flags:标志项

(8)Fid:流标识符

(9)Src addr:源地址,格式为node.port

(10)Dst addr:目的地址,格式为node.port

(11)Seq num:分组的序列号

(12)Pkt id:分组的唯一标识符



[3] Monitor的使用

在NS2中,监测有两种:

(1)队列监测(Queue Monitoring)

(2)流监测(Per-Flow Monitoring)

详见P.69



[4] 动画演示

NS2可以使用Nam工具对整个模拟过程进行动画演示。Nam是基于Tcl/TK的动画演示工具,用来把模拟的过程用可视化的方式呈现出来,从而可以让使用者用“看”的方式去了解封包传送是如何从源端送到接收端。

注意:

(1)使用Nam的第一步是产生一个Nam跟踪文件。

#打开一个Nam跟踪文件(如果不存在,则自动创建),并将该文件的句柄赋给变量
#Open the NAM trace file
set nf [open out.nam w]   
$ns namtrace-all $nf       ;#将所有与动画演示相关的数据存入跟踪文件中


(2)Nam提供3种通用的布局方法

方法1:

在有线网络中,用户可以通过链路的方位确定布局,链路的方位一般用链路和水平线之间的夹角来表示。

这种布局方式适用于小型和手工生成的拓扑。

#Give node position (for NAM)
#总共有8个方向
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right


方法2:

自动布局的方法。

这种方法适用于网络节点较多的情况。

方法3:

x、y坐标方式布局。

这种方式用来进行无线环境的拓扑构造。

(3)设置与节点相关的显示属性

$node <attribute> <value>
例如:
$node color red          ;#设定该节点的颜色为红色
$node shape hexagon      ;#设定该节点的形状为六边形
$node label "my text"    ;#设定节点标签
$node label-color blue   ;#设定标签字体颜色
$node label-at up        ;#设定标签的位置


(4)设置与链路相关的显示属性

$ns duplex-link-op <attribute> <value>
例如:
$ns duplex-link-op $n1 $n2 color green           ;#设定节点n1和n2之间链路的显示颜色
$ns duplex-link-op queuePos right                ;#设定监控队列的显示位置
$ns duplex-link-op $n1 $n2 label "my text"       ;#设定链路标签
$ns duplex-link-op $n1 $n2 label-color blue      ;#设定链路标签颜色
$ns duplex-link-op $n1 $n2 label-at down         ;#设定链路标签位置


(5)设置数据流的颜色

$ns color $n blue      ;#变量$n为颜色的标识
$agent set fid_ $n     ;#相应的流标记设定为$n
例如:
#Define different colors for data flows (for NAM)
$ns color 1 Blue
$ns color 2 Red

$tcp set fid_ 1
$udp set fid_ 2


(6)在脚本中运行Nam的方法

exec nam $namfile
例如:
#Execute NAM on the trace file
exec nam out.nam &




[5] 相关命令总结

$ns trace-all <tracefile>
$ns flush-trace
$ns trace-queue <n1> <n2> <optional:file>
$ns namtrace-all $namfile
$node <attribute> <value>
$ns duplex-link-op <attribute> <value>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: