网络模拟器NS-2及其应用分析

[日期:2008-06-24] 来源:  作者:周慧斌 周铁军 管贵 [字体:大 中 小]
0.1秒开始发送,在4.5秒结束,FTP是在1.0秒开始发送,在4.0秒结束。
图4 模拟场景

 

3.1  建立Otcl模拟代码文件

#创建一个模拟对象
set ns [new Simulator]
#为数据流定义不同的颜色,供NAM用
$ns color 1 Blue
$ns color 2 Red
#打开一个 NAM trace file
set nf [open out.nam w]
$ns namtrace-all $nf
#打开一个 trace file 记录数据包的传送过程
set nd [open out.tr w]
$ns trace-all $nd
#定义一个结束程序
proc finish {} {
        global ns nf nd
        $ns flush-trace
        #关闭 NAM trace file
        close $nf
        close $nd
        #以后台方式执行 NAM
        exec nam out.nam &
        exit 0
}
#创建四个节点
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
#把节点连接起来
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
#设定n2和n3之间最大队列长度为10
$ns queue-limit $n2 $n3 10
#设定节点的位置,供NAM用
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right
#设定n2-n3间的队列位置,供NAM用
$ns duplex-link-op $n2 $n3 queuePos 0.5
#建立一条TCP连接
set tcp [new Agent/TCP]
$tcp set class_ 2
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
$ns connect $tcp $sink
#在NAM中,TCP的连接以蓝色表示
$tcp set fid_ 1
#在TCP连接之上建立FTP 应用
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP
#建立一条UDP连接
set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
set null [new Agent/Null]
$ns attach-agent $n3 $null
$ns connect $udp $null
#在NAM中,UDP的连接以红色表示
$udp set fid_ 2
#在UDP连接之上建立CBR应用
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set type_ CBR
$cbr set packet_size_ 1000
$cbr set rate_ 1mb
$cbr set random_ false
# 设定FTP和CBR的开始和结束时间
$ns at 0.1 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$ftp stop"
$ns at 4.5 "$cbr stop"
#在5.0秒调用finish过程结束模拟
$ns at 5.0 "finish"
#执行模拟
$ns run
本例子在FedoraCore4,ns-2.29下测试通过,模拟结束后,产生两个文件,一个是out.nam,这是供NAM用的,用来可视化整个模拟过程;另一个是out.tr,记录了模拟过程中数据包传送中的所有事件,这是我们 分析 的重点。

3.2  利用awk提取out.tr文件中的数据

    awk是一种程序 语言,可以使用很短的代码轻易地完成对文本档案做修改、分析、提取和比较等处理。根据Trace文件格式,我们很容易写出测量CBR数据包端到端延迟时间的awk程序delay.awk:
#测量CBR数据包端到端延迟时间
BEGIN {
     highest_packet_id = 0;
}
{
   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 ( 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);
   }
}
    本例执行并把结果重定向到cbr_delay文件中:$awk –f delay.awk out.tr>cbr_delay

3.3 利用Xgraph绘出图形

    Xgraph是ns-allinone包中自带的一个小巧的绘图工具,它可以根据数据文件里的数据绘制出相应的图形。本例执行:$xgraph cbr_delay,结果如图5所示:
图5  cbr_delay图
    由图可以看出:在一刚开始的时候,由于只有CBR的数据包,所以端到端的延迟是固定的,但在1.0秒后,FTP数据包参与争夺 网络 资源,因此,端到端的延迟变得不固定,但等到FTP传输结束后,CBR数据包的端到端的延迟又变得固定了。

4  结论

    网络模拟日益成为分析、 研究 、设计和改善网络性能的强大工具,NS-2便是其中功能强大且可以免费得到的一种。本文详细讨论了NS-2的结构、功能及其使用 方法 ,并给出一个实例具体解释 NS-2的使用及使用相关工具对输出结果进行处理。总的来说,NS-2结构复杂,有一个相对陡峭的 学习 曲线,希望本文对学习NS-2能有所裨益。