http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats
http://hi.baidu.com/wienerlee/blog/item/f5e49210a8edadfbc2ce7912.html
NS2 Notebook: How to Display RTS/CTS Packet Type in NS2 Trace Filens-2无线模拟Trace中的AGT, RTR, MAC含义
译注:本文描述的无线Trace格式已经有些陈旧,现在一般都是用新的无线Trace文件格式。
本文档介绍了NS2网络仿真器的多种Trace格式。这里的版本是基于NS2 2.1b9a的。
多种不同的Trace文件都含有一个字符或者缩写开始用来表明此行Trace的类型,后接着固定或者可变的Trace格式。下面的表格列出了固定和可变的Trace文件格式的不同:
常规的Trace格式
这里的信息来自于"ThensManual" "Trace and Monitoring Support: TraceFileFormat"一章中。这个格式用于普通的有线操作中。trace行将开始于四个可能字符中的一个。
表中列出的更多的无线记录信息没有在Abbreviation 栏中,因为信息直接加在了普通无线trace格式中。
Event事件
Abbreviation简写
Type类型
Value值
Normal Event
常规事件
r: Receive接收
d: Drop丢弃
e: Error错误
+: Enqueue入队
-: Dequeue出队
%g %d %d %s %d %s %d %d.%d %d.%d %d %d
double
Time 时间
int
Source Node 源节点
int
Destination Node 目的节点
string
Packet Name 报文名
int
Packet Size 报文大小
string
Flags 标志位
int
Flow ID 流标记ID
int
Source Address源地址
int
Source Port 源端口
int
Destination Address 目的地址
int
Destination Port 目的端口
int
Sequence Number 序列号
int
Unique Packet ID 唯一报文标志ID
标志位具体如下表(如果标志没有设置的话将使用“-”)。每行从左到右都占一位。可从ns/trace/trace.cc中看到。
Value值
Meaning含义
C
ECN-echo
P
pri_ (一般认为没用)
-A
Congestion Action
E
Congestion Experienced (CE)
F
Fast Start 快速启动
N
ECN-capable
SCTP-only
根据报文的不同类型,trace文件可能记录更多的信息:
Event事件
Type类型
Value值
TCP Trace
%d 0x%x %d %d
int
Ack Number
hexadecimal
Flags 标志位
int
Header Length 头长
int
Socket Address LengthSocket地址长度
卫星Satellite Trace
%.2f %.2f %.2f %.2f
double
Source Latitude 源纬度
double
Source Longitude 源经度
double
Destination Latitude 目的纬度
double
Destination Longitude 目的经度
无线Trace格式
本节中将包含多种无线的trace格式:
旧的无线trace格式
这里的信息来自于"ThensManual" "Mobile Networking in ns: Trace Support"的章节和"trace/cmu-trace.cc"文件。无线的trace文件开始于四个字符中的一个,随后是一种或者两种不同的格式,根据是否记录移动节点的X和Y坐标而不同。
NS2中trace的原理
NS2中trace的原理其实很简单,就是有包经过的时候发到trace模块中一份,或者干脆从trace穿过,然后trace读取包的信息,用sprintf打印包的详细信息。打印的细节可以在format函数中看到,具体地在trace.{h,cc};cmu-trace.{h,cc}以及ns-trace.tcl和ns-cmutrace.tcl文件中可以看到。如mobile- node节点中的组成如图。
AgentTraces are marked with AGT, //AGT 表示 agent,也就是业务层
RouterTrace with RTR and //RTR 表示 route,也就是路由层
MacTrace with MAC. //MAC 表示 mac, 也就是接入层
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)源节点到目的节点的跳数。
首先在脚本中加入 trace file的操作
运行脚本,得到一个 NAM trace file 作为NAM的输入,及一个 trace file called "out.tr"
the trace format
为了分析CBR traffic jitter at receiver node (n3) ,计算收到每个cbr包的时间间隔
提取r 开头的包含“2 3 cbr” 的行 ,取第2列(time)及第11列(seq num)
#jitter.sh
cat wiredout.tr| grep " 2 3 cbr " | grep ^r >rec.txt
awk '{print $2, $11}' rec.txt>rec1.txt
awk -f jitter.awk rec1.txt>jitter.txt
其中的jitter.awk为如下所示:
BEGIN {
#程序初始化
old_time=0;
old_seq_no=0;
i=0;
}
{
time = $1;
seq_no = $2;
#求出目前封包的序号和上次成功接收的序号差值
dif=seq_no-old_seq_no;
#处理第一个接收封包
if(dif==0)
dif=1;
#求出jitter
jitter[i]=(time-old_time)/dif;
seq[i]=seq_no;
i=i+1;
old_seq_no=seq_no;
old_time=time;
}
END {
for (j=1; j <i ;j++)
printf("%d \t %f \n",seq[j],jitter[j]);
}
把结果存入jitter.txt,用origin画图结果如下
jitter.sh中的一些符号解释
1、正则表达式参见http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^/d{5,12}$。
2、Piping Using | Notation
The |specifies that all stdout is to be typed as stdin into the next command
3、awk
http://www.gnu.org/software/gawk/manual/gawk.html