E-mail:
针对NS2入门实例3的场景,我们利用awk 和 gnuplot工具做更加深入的分析,演示科学实验中对Trace文件做深入分析的一般方法!
关注点:
有线场景中,Trace文件的格式;(此处不细说,因为很多Tutorial中很详尽!哈哈!)
利用awk工具计算端到端延迟、抖动率、丢包率、吞吐量;
利用gnuplot的基本命令,并将awk工具的分析结果用曲线图绘制出来!
NS2入门实例3模拟后得到的out.tr文件此处不给出,请自行仿真获得!哈哈
第二篇: 抖动率的测量---实现的全过程!
测量抖动率: measure-jitter.awk文件
#测量CBR数据包Jitter的awk代码 #针对out.tr的分析 #jitter=((recvtime(j)-sendtime(j)) - (recvtime(i)-sendtime(i)))/(j-i), 其中 j>i BEGIN { #初始化, 设置变量以记录目前已处理数据包的最大ID号 highest_packet_id=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; #记录目前已处理数据包的最大ID号 if (packet_id>highest_packet_id) highest_packet_id=packet_id; #记录数据包的发送的时间 if (start_time[packet_id]==0){
pkt_seqno[packet_id] = seq_no; start_time[packet_id]=time; } #记录 CBR (其flow_id=2, 与具体情况有关哦!) 的接收时间 if (flow_id==2 && action!="d") { if (action=="r") { end_time[packet_id]=time; } }else { #把不是CBR数据包或者被DROP掉的CBR数据包的接收时间设置为 -1; end_time[packet_id]=-1; } } END { #初始化Jitter计算所需的变量 last_seqno=0; last_delay=0; seqno_diff=0; # 当out.tr中数据行全部读取完后,开始计算有效数据包的端到端的时间延迟 for ( packet_id=0; packet_id <= highest_packet_id; packet_id++) { start=start_time[packet_id]; end=end_time[packet_id]; packet_duration=end-start; #显然,只把接收时间晚于发送时间的记录列出来哦! if (start #得到了delay 值(packet_duration) 后计算jitter seqno_diff=pkt_seqno[packet_id]-last_seqno; delay_diff=packet_duration-last_delay; if(seqno_diff==0) { jitter=0; } else { jitter=delay_diff/seqno_diff; } printf("%f %f\n", start, jitter); #更新变量,方便循环中的下一次计算 last_seqno=pkt_seqno[packet_id]; last_delay=packet_duration; } } } |
(同上一篇一致的操作命令!)
获得的图示结果为: (此场景下,jitter 值恒为 0!)
E-mail:
阅读(1866) | 评论(0) | 转发(0) |