在孤独中享受寂寞,从寂寞中厮杀黎明!分享 http://blog.sciencenet.cn/u/duankesong 假如我不能,我一定要; 假如我一定要,我就一定能!

博文

网络仿真利器NS-2无师自通七天速成系列Ⅴ:数据的记录,演示,数据分析

已有 9968 次阅读 2010-4-7 21:17 |个人分类:网络仿真|系统分类:科研笔记| 网络仿真, 网络模拟, NS-2, NS2


1.     数据的记录
NS-2中主要有两种数据记录格式,一种是Trace格式,该对象详细记录了模拟的整个过程,第二种是Monitor,用来记录有用的数值。
Ø         Trace文件的建立:
$ns trace-all <tracefile> ;#记录整个模拟过程。
$ns trace-queue <n1> <n2> <optional:file>;#记录n1和n2之间的链路事件,<file>为可选项。
例如: set tracefile [open out.tr w]
       $ns trace-all $tracefile
     set tracefile [open out.tr w]
       $ns trace-queue $n1 $n2 $tracefile
注:在有线网络中,调用trace-queue方法之前,链路必须已经建立。
Ø         Trace文件的格式:
1
2
3
4
5
6
7
8
9
10
11
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.     From node  表示分组传送目的节点的id
5.     Pkt type    表示分组类型
6.     Pkt size    表示分组的大小
7.     Flags      表示标志项
8.     Fid        Flow id的标识符
9.     Src addr   表示源地址,格式为:node.port。node为分组发送节点的id,port代表发送分组节点的端口号。
10.  Dst addr 表示目的地址,格式为:node.port。node为分组接收节点的id,port代表接收分组节点的端口号。
11.  Seq num 分组的序列号
12. Pkt id    分组的唯一标识符。
部分trace文件内容如下:
- 4.004353 2 3 tcp 1040 ------- 1 0.0 3.0 216 946
r 4.005153 2 3 tcp 1040 ------- 1 0.0 3.0 213 939
+ 4.005153 3 2 ack 40 ------- 1 3.0 0.0 213 963
- 4.005153 3 2 ack 40 ------- 1 3.0 0.0 213 963
r 4.006141 3 2 ack 40 ------- 1 3.0 0.0 211 957
+ 4.006141 2 0 ack 40 ------- 1 3.0 0.0 211 957
- 4.006141 2 0 ack 40 ------- 1 3.0 0.0 211 957
 
Ø         Monitor文件
2.模拟结果的演示
Nam是用于动态演示NS-2模拟的过程,Gnuplot和Xgraph是用于绘制模拟曲线,Gawk则用于从trace文件中提取数据信息。
Nam是一个基于Tcl/Tk的动画程序,用来观察网络模拟的轨迹或者真是环境中生成的包的国际。Nam可以从namtrace文件中读取动画事件的命令,事件命令保存在文件中。Nam可以显示各种各样的网络对象,包括节点,链路(有线网络),数据流,无线网络中的电波信号,丢包等等。
Nam文件的产生。
$set nf [open out.nam w]
$ns nam trace-all $nf
网络拓扑布局的生成。
设置节点的固定布局
 
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n0 $n1 orient right-up
$ns duplex-link-op $n0 $n1 orient right
 
自动布局方法,适用于网络节点教多的情况。
x,y坐标方式布局,适用于无线环境的拓扑构造。
节点的显示属性
$node <attribute> <value>
$node coler red
$node shape hexagon
$node label “mytext”
$node label-color blue
$node label-at up
链路的显示属性
$ns duplex-link-op <attributr> <value>
设置数据流属性
$ns color $n blue
$agent set fie_ $n
 
例如:$ns color 1 blue
$tcp set fid_ 1
$ns color 2 red
$udp set fid_ 2
nam的运行
在脚本中加入 exec nam $namfile
nam文件产生后,可在命令行下输入:nam out.nam运行。
关于nam的详细使用,可以参考NS手册中的说明,熟练掌握nam的使用,可以帮助读者更直观的分析模拟的过程,扑捉模拟时间发生的大致时间,从而加快对模拟结果的分析和处理。
3.Gnuplot 它是一个命令行驱动的,互动式函数和数据绘制程序,支持大多数的数学表达式和数学函数。
在命令行下输入:gnuplot
gnuplot>>plot sin(exp(x))
plot用来绘制二维图形,Splot用来绘制三维图形。
4.xgraph是集成在ns-allinone软件包中的一个绘图工具。
5.Gawk是GNU开发的AWK程序语言。用来分析模拟产生的trace文件。
gawk是一种程序语言,对于资料的处理具有很强的功能,可以使用很短的代码轻易地完成对文本档案做修改、分析、提取和比较等处理。在NS的模拟结果分析中,经常用到gawk来进行数据分析和统计等。命令如下:
gawk 'program' input-file1 input-file2 ...   程序代码较短
gawk -f program-file input-file1 input-file2...      程序较长
gawk程序是由很多的pattern和action所组成的:
pattern   {action}。
功能是针对文件的每一行搜寻指定的模式(pattern),当一行里有符合指定的模式时,gawk就会在此一行执行指定的动作(action)。
Gawk文件的读取,gawk在处理数据时是一个一个记录地处理,每个记录默认为一行。记录被分为多个区域(fields)在gawk程序中,“$1表示第一个栏位,”$2表示第二个栏位。依次类推,”$nf”表示最后一个栏位。
gawk文件的输出:
Print来输出
printf来精心控制输出。
6.用nam gawk gnuplot xgraph来对trace文件进行分析
源程序:example_1.tcl
该程序执行完后生成 out.nam和out.tr文件
1.nam动画演示
2.gawk脚本分析分析CBR业务丢包率,时延,FTP业务中的TCP序列号的变化过程。
丢包率(loss rate)是一个比率,gawk参看脚本 loss.awk
[loss.awk]
 
BEGIN {
num_pkts_sent =0;
num_pkts_rcvd =0;
}
{
action =$1;
time =$2;
from =$3;
to =$4;
type =$5;
pktsize=$6;
flow_id=$8;
src=$9;
dst = $10;
seq_no =$11;
packet_id =$12;
 
if(from=="1"&&action=="+"&&flow_id=="2")
num_pkts_sent++;
if(to=="3"&&flow_id=="2"&&action=="r")
num_pkts_rcvd++;
}
END {
printf("number of packets sent:%d lost: %dn",num_pkts_sent,num_pkts_sent-num_pkts_rcvd);
printf("the loss rate of packets is %fn",num_pkts_rcvd/num_pkts_sent);
}
 
 
执行 gawk –f loss.awk out.tr
显示如下:
 
3.业务时延,脚本参看 delay.awk
 
[loss.awk]
 
BEGIN {
largest_index =0;
}
{
action =$1;
time =$2;
from =$3;
to =$4;
type =$5;
pktsize=$6;
flow_id=$8;
src=$9;
dst = $10;
seq_no =$11;
packet_id =$12;
 
if(largest_index < seq_no)
largest_index = seq_no;
if(action=="+"&&from==1)start_time[seq_no]=time;
if(action=="r"&&to==3)end_time[seq_no]=time;
}
END {
printf("the largest_index is %dn",largest_index);
for(i =0;i<largest_index;i++)
printf("%d %f %fn",i,start_time[i],end_time[i]);
 
}
 
 
 
执行
   命令行下输入: gnuplot回车
再执行

图像中X轴代表包的序列号,Y轴代表发送或接受的时间。我们可以通过修改脚本,把CBR数据包的发送和接受记录输入到cbr_sent.txt和cbr_rcvd.tx中
通过输入 xgraph cbr_sent.txt cbr_rcvd.txt得到以下的图像。
3. ftp业务中tcp序列号的变化统计
先执行如下的命令:
gawk’($5==”tcp”&&$1==”+”&&$3==”0”) {print $2,$11}’out.tr>>tcp_seq_sent.txt
gawk’($5==”tcp”&&$1==”r”&&$4==”3”) {print $2,$11}’out.tr>>tcp_seq_rcvd.txt
然后执行 gnuplot
gnuplot>>plot “tcp_seq_sent.txt”using 2:1,”tcp_seq_rcvd.txt”using2:1
也可执行:
xgraph tcp_seq_rcvd.txt tcp_seq_sent.txt


https://blog.sciencenet.cn/blog-428172-309841.html

上一篇:网络仿真利器NS-2无师自通七天速成系列Ⅳ:NS-2网络控件及其使用方法
下一篇:附录4:诺基亚研究中心招聘实习生
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-15 13:18

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部