ns-2与TCP拥塞模拟 之二 模拟输出的封包trace文件格式
脚本中的命令“$ns trace-all $nd”指定在out.tr文件中记录仿真过程中封包传送的所有事件。以下简要介绍out.tr文件中各列的含义,如下给出了一个out.tr文件中可能的7行数据。每一条记录都由12列数据组成,各列数据的含义如表8.1所示。
r 1.658 1 2 cbr 1000 ------- 2 1.0 3.1 193 318
+ 1.658 2 3 cbr 1000 ------- 2 1.0 3.1 193 318
d 1.658 2 3 cbr 1000 ------- 2 1.0 3.1 193 318
+ 1.66 1 2 cbr 1000 ------- 2 1.0 3.1 195 322
- 1.66 1 2 cbr 1000 ------- 2 1.0 3.1 195 322
- 1.660541 2 3 cbr 1000 ------- 2 1.0 3.1 179 279
r 1.661341 2 3 tcp 1040 ------- 1 0.0 3.0 55 272
文件out.tr各列数据含义
列 序 号 | 英文名字 | 说 明 | 备 注 |
1 | event | 事件发生的原因 | r:表示被某个节点接收;+:表示进入了队列;-:表示离开队列;d:表示数据包被丢弃 |
2 | time | 事件发生的时间 |
|
3 | from_node | 事件发生的开始节点 |
|
4 | to_node | 事件发生的结束节点 |
|
5 | pkt_type | 数据包的类型 |
|
6 | pkt_size | 数据包的大小,单位是字节 |
|
7 | flags | 标记标注 |
|
8 | fid | 数据包属于哪一个数据流 | 在Tcl脚本中定义,如$udp set fid_ 2 |
9 | src_addr | 来源端 | 格式为a.b,a代表节点编号,b表示端口号 |
10 | dst_addr | 目的端 | 格式为a.b,a代表节点编号,b表示端口号 |
11 | seq_num | 数据包的序号 | 表示的是网络层包的顺序号,需要注意的是,对于UDP应用来说是不需要顺序号的,但是ns-2依然维持这个顺序号是为了方便统计分析 |
12 | pkt_id | 数据包的id |
|
以示例中的第一条记录为例,意思是说有一个编号为318的数据包,对应的数据流id为2,包序号为193,长度为1000B,类型为CBR;该包从节点1的0号端口发出,由节点3的1号端口接收;在时间1.658s的时候,从节点1进入了节点2的队列中,包被接收。
理解各列数据的含义后,就可以使用awk等工具进一步加工数据了。如果想得到直观的显示,还可以使用gnuplot等工具绘图。例如,经过数据处理后,建立在UDP上的CBR发送的各数据包的传输时间,使用gnuplot可以作出所示的图,以直观显示效果。