NS-2无线网络仿真用gawk分析trace文件

无线网络环境为2个节点,TCP协议,FTP数据流,AODV路由协议,NS-2仿真可以实现,现在想用gawk文件进行数据分析,得到丢包率以及吞吐量。但是程序不知道该怎么写,... 无线网络环境为2个节点,TCP协议,FTP数据流,AODV路由协议,NS-2仿真可以实现,现在想用gawk文件进行数据分析,得到丢包率以及吞吐量。但是程序不知道该怎么写,写出来的总是不对,想请假大家一下~
1)Trace文件各个字段赋值该怎么写?
2)然后就是得到丢包率以及吞吐量的那段程序该怎么写?
万分感谢!!!
展开
 我来答
378539367
2012-10-21 · TA获得超过113个赞
知道答主
回答量:43
采纳率:0%
帮助的人:36.8万
展开全部
1)字段赋值,有线的trace都是同一个格式的
无线的分新版本和旧版本的略有不同。我的是旧版本的。
下面这个是无线的
1 2 3 4 5:6 7 8 9 [10/11/12/13] 14:16 [ 17 -18 19 20]
s 3.000000000 _0_RTR --- 0 AODV 48 [0 0 0 0] ------- [0:255 -1:255 30 0]
s 10.00000000 _0_AGT --- 2 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0]
r 10.00000000 _0_RTR --- 2 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0]
s 12.50000000 _0_RTR --- 0 AODV 48 [0 0 0 0] ------- [0:255 -1:25530 0]

1-20 是对这个无线Trace的标注,每条记录共有20栏,下面对各栏表示的意义进行说明:
(1)事件类型:
s:分组的发送事件;
r:分组的接收事件;
d:分组的丢弃事件;
f:分组的转发事件;
(2)事件产生的时间。
(3)处理该事件的节点ID。
(4)Trace种类:
RTR:路由器Trace;
AGT:代理Trace;
MAC:MAC层Trace;
(5:6)分隔符。
(7)分组ID。
(8)分组类型。
(9)分组大小(字节)。
[10:13]有关MAC层的详细信息
(10)发送节点在无线信道上发送该分组所期望的时间值,用16进制表示。
(11)接收节点的MAC地址。
(12)发送节点的MAC地址。
(13)MAC层封装的分组类型。 0x800:IP分组,0x806:ARP分组
(14:16)分隔符。
(17)分组发送的源IP地址。节点号.端口号
(18)分组发送的目的IP地址。节点号.端口号
(19)分组的TTL值。
(20)源节点到目的节点的跳数。

2)测丢包率的
BEGIN {
highest_uid=0; #保存保存已处理的最大的uid
}
{
event = $1;
time = $2;
node = $3;

node_ = substr(node,2,1);
trace_type = $4;
flag = $5;
uid = $6;
pkt_type = $7;
pkt_size = $8;
send[uid]=0;recv[uid]=0;
if(event=="s" && node_==2 && trace_type="AGT" && pkt_type=="cbr")
sendx[uid] = 1;
if(event=="r" && node_==4 && trace_type="AGT" && pkt_type=="cbr")
recv[uid] = 1;
if(highest_uid < uid)
highest_uid = uid;
}
END {
id=1;
loss=0;
for(i=0;i<highest_uid;i++)
{
xx = sendx[i];
yy = recv[i];
if(xx==1 && yy==0)
loss++;
}
printf("allpacket: %d loss packet: %d\n",highest_uid,loss);
printf("%.6f\n",loss/highest_uid);
}
测吞吐量的
BEGIN {
init=0;
i=0;
}
{
#将out.tr文件的相应字段赋值给变量
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 (action=="r" && from==2 && to==3 && flow_id==2) {
pkt_byte_sum[i+1]=pkt_byte_sum[i]+pktsize;

if (init==0) {
start_time=time;
init=1;
}
end_time[i]=time;
i=i+1;
}
}
END {
#第一笔记录的Throughput设置为零, 以表示传输开始, 为了绘图的美观
printf("%.2f\t %.2f\n", end_time[0],0);

for (j=1; j<i; j++) {
#单位为 kbps
th=pkt_byte_sum[j]/(end_time[j] - start_time) *8/1000;
printf("%.2f\t%.2f\n", end_time[j], th);
}

#最后一笔记录的Throughput设置为零, 以表示传输结束, 为了绘图的美观
printf("%.2f\t%.2f\n", end_time[i-1],0);
}
PS:建议去看一下柯老师那本书,讲的很详细的,或者是黄化吉的NS网络模拟和协议仿真,里面都有教awk怎么写,也把trace格式讲的很详细
匿名用户
2012-10-09
展开全部
。。。。。。。。。。。。好高深
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式