NS2脚本trace可视化分析
2017年5月26日
通过NS2进行网络模拟,得到相应的科学结论,对于trace的分析是必不可少的过程。下面我简单的介绍对于trace的分析。
1、首先先准备好我们的NS2脚本

2、运行我们的tcl脚本
ns sample22.tcl得到nam文件和trace文件

其中trace文件的数据为:

分别表示:
事件 / 时间 / 节点 / 层次 / --- / 分组UID / 分组类型 /分组大小 / [MAC层信息] / ------- / [IP层信息]
1、事件
有4种类型:s,r,d,f,分别表示分组的发送,接收,丢弃,转发事件。
2、节点
表示事件发生的节点。
3、层次
表示事件发生的层次:有
AGT 业务层
RTR 路由层
MAC MAC层
4、MAC层信息
包含四项:a、发送节点在无线信道上发送该分组所期望的时间,16进制表示,单位为秒。
b、接收节点的MAC地址
c、发送节点的MAC地址
d、MAC层封装的分组类型,0x800表示IP分组,0x806表示ARP分组
5、IP层信息
包含四项:a、分送分组的源节点地址,格式为“节点号:端口号”
b、接收分组的目的节点地址,格式为“节点号:端口号”
c、分组的TTL值
d、源节点到目的节点的跳数
3、接下来创建delay.awk文件:
# 使用的是无线trace的旧格式 BEGIN { highest_packet_id = 0; } { action = $1; time = $2; packet_id = $6; type = $7; # 不考虑路由包,可以保证序号为0的cbr被统计到 if ( type != "AODV" ) { if ( packet_id > highest_packet_id ) highest_packet_id = packet_id; #记录封包的传送时间 if ( start_time[packet_id] == 0 ) start_time[packet_id] = time; #记录CBR 的接收时间 if ( type == "cbr" && action != "d" ) { if ( action == "r" ) end_time[packet_id] = time; } else { #把不符合条件的数据包的时间设为-1 end_time[packet_id] = -1; } } } END { #当资料列全部读取完后,开始计算有效封包的端点到端点延迟时间 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 < end ) printf("%f %f\n", start, packet_duration); } }

4、执行.awk文件
awk -f delay.awk out.tr
以上脚本的运行为:awk -f [脚本文件名].awk [trace文件] > [输出文件]
输出:将输出内容保存为delay.tr

5、运行gnuplot

得到数据图表:

附加脚本:
1.End-to-End Delay
BEGIN { highest_packet_id = 0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; if ( packet_id > highest_packet_id ) highest_packet_id = packet_id; if ( start_time[packet_id] == 0 ) start_time[packet_id] = time; if ( flow_id == 2 && action != "d" ) { if ( action == "r" ) { end_time[packet_id] = time; } }else{ end_time[packet_id] = -1; } } END { 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 < end ) printf("%f %f\n", start, packet_duration); } }
BEGIN { highest_packet_id = 0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; 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; } if ( flow_id == 2 && action != "d" ) { if ( action == "r" ) { end_time[packet_id] = time; } } else { end_time[packet_id] = -1; } } END { last_seqno = 0; last_delay = 0; seqno_diff = 0; 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 < end ) { 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; } } }
3.Loss
BEGIN { fsDrops = 0; numFs = 0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; src = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; if (node_1==1 && node_2==2 && action == "+") numFs++; if (flow_id==2 && action == "d") fsDrops++; } END { printf("number of packets sent:%d lost:%d\n", numFs, fsDrops); }
BEGIN { init=0; i=0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; src = $5; pktsize = $6; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; if(action=="r" && node_1==2 && node_2==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 { printf("%.2f\t%.2f\n", end_time[0], 0); for(j=1 ; j<i ; j++){ th = pkt_byte_sum[j] / (end_time[j] - start_time)*8/1000; printf("%.2f\t%.2f\n", end_time[j], th); } printf("%.2f\t%.2f\n", end_time[i-1], 0); }
(网上摘录如有异议可联系)

浙公网安备 33010602011771号