关于当前若干主流网络仿真软件的综述及实例应用分析

www.net130.com     日期:2006-9-4    浏览次数:
作者:周翔    出处:互联网

3. 实例分析

上一节简要介绍了5款网络仿真软件,其中比较常用的是OPNET Modeler和NS2,很多大学和科研单位大都采用这两种工具进行网络方面的研究和设计分析。这一节将通过一个实例来展示这两种网络仿真软件的特点,并对这两种软件进行比较分析。

在这个实例中,我们采用网络的拓扑结构如图1所示,图中有5个节点,其中0、1、2号节点是发送节点,4号节点是接收节点。下面是使用OPNET Modeler和NS2两种软件的仿真过程。

 


图1:仿真网络的拓扑结构

3.1 使用NS2进行网络仿真

在本节中,笔者将使用NS2对图1中的网络进行仿真。使用NS2进行网络仿真的第一步是编写OTCL脚本。在OTCL脚本文件(example_ns2.tcl)中,笔者首先定义了5个节点和连接这5个节点的4条边:

#定义5个节点
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
#定义4条边
$ns duplex-link $n0 $n3 1Mb 100ms DropTail
$ns duplex-link $n1 $n3 1Mb 100ms DropTail
$ns duplex-link $n2 $n3 1Mb 100ms DropTail
$ns duplex-link $n3 $n4 1Mb 100ms DropTail

要把节点n0、n1、n2定义为发送节点,即将Traffic Source(发送源)与节点n0、n1、n2相连,我们可以先定义下面的函数:

proc attach-expoo-traffic { node sink size burst idle rate } {
 #获得模拟器实例
 set ns [Simulator instance]

 #建立连接节点的UDP对象
 set source [new Agent/UDP]
 $ns attach-agent $node $source

 #建立traffic源的对象并设置traffic参数
 set traffic [new Application/Traffic/Exponential]
 $traffic set packetSize_ $size
 $traffic set burst_time_ $burst
 $traffic set idle_time_ $idle
 $traffic set rate_ $rate       
          $traffic attach-agent $source

 #建立发送者与接收者的关系
 $ns connect $source $sink
 return $traffic
}

上面的函数返回发送源的句柄,因此,我们可以使用下面的语句将3个发送源与n0、n1、n2相连:

set source0 [attach-expoo-traffic $n0 $sink0 200 2s 1s 100k]
set source1 [attach-expoo-traffic $n1 $sink1 200 2s 1s 200k]
set source2 [attach-expoo-traffic $n2 $sink2 200 2s 1s 300k]

由上面的代码我们可以看出,每个数据发送源的峰值发送速率分别为100kbit/s、200kbit/s和300kbit/s。而下面的代码用来定义接收器(n4与3个sink对象相关联):

set sink0 [new Agent/LossMonitor]
set sink1 [new Agent/LossMonitor]
set sink2 [new Agent/LossMonitor]
$ns attach-agent $n4 $sink0
$ns attach-agent $n4 $sink1
$ns attach-agent $n4 $sink2

同时,定义3个文件来保存每个接收器(sink)每秒接收到的数据量:

set f0 [open out0.tr w]
set f1 [open out1.tr w]
set f2 [open out2.tr w]

在脚本中,笔者定义了一个record函数来记录网络仿真时感兴趣的数据:

proc record {} {
        global sink0 sink1 sink2 f0 f1 f2
        #获得模拟器实例
        set ns [Simulator instance]
        #设置每0.5秒会调用本函数一次
        set time 0.5
        #记录有多少字节被接收节点接收?
        set bw0 [$sink0 set bytes_]
        set bw1 [$sink1 set bytes_]
        set bw2 [$sink2 set bytes_]
        #获得当前的时间
        set now [$ns now]
        #向文件中写入带宽(单位为MBit/s)
        puts $f0 "$now [expr $bw0/$time*8/1000000]"
        puts $f1 "$now [expr $bw1/$time*8/1000000]"
        puts $f2 "$now [expr $bw2/$time*8/1000000]"
        #将接收器接收到的字节重置为0
        $sink0 set bytes_ 0
        $sink1 set bytes_ 0
        $sink2 set bytes_ 0
        #重新调用record函数
        $ns at [expr $now+$time] "record"
}

在脚本的最后,笔者定义了finish函数来关闭文件和打开Xgraph观察运行结果:

proc finish {} {
        global f0 f1 f2
        #关闭输出文件
        close $f0
        close $f1
        close $f2
        #调用Xgraph显示网络仿真曲线
        exec xgraph out0.tr out1.tr out2.tr -geometry 800x400 &
        exit 0
}


在仿真网络运行时,我们可以设置一开始就调用record函数,并在运行后10秒时启动发送者发送数据,并在运行后50秒时停止发送数据,最后调用finish函数使用Xgraph显示运行结果(显示接收端的数据接收速度)。

图2是用Xgraph显示的网络仿真结果,从图中可以看出每个数据接收端的接收速率曲线(注意到3个数据接收端的峰值接收速率分别为100kbit/s、200kbit/s和300kbit/s),这与先前在脚本中定义的峰值发送速率相同。

 
图2:用Xgraph显示的NS2的仿真结果

3.2 使用Opnet进行网络仿真

在这一节中,笔者将使用Opnet Moderler 8.0对图1所示的网络进行仿真。对图1所示的简单网络结构,在Opnet Moderler中是不必要写脚本的。在绝大多数的仿真实验中,Opnet Moderler仅使用户通过其界面就可以完成。在本节的例子中,网络拓扑结构在Opnet Moderler中如图3所示。

在Opnet Moderler中,笔者使用了三个以太网工作站(ethernet_station_adv)来表示网络中的三个数据源节点n0、n1和n2,用两个交换机(ethernet4_switch_adv)来表示网络流量中转节点n3和n4,用三个以太网工作站(ethernet_station_adv)来表示网络中的三个数据接收器sink1、sink2和sink3。连接各个节点的链路为10BaseT。然后,因为要限制n0、n1和n2的输出流量之比为1:2:3,所以可以设置n0、n1和n2的发送分组的间隔分别为服从均值为6、3和2的指数分布。最后,可以设置网络模拟运行时间为1小时(60分钟),取10000个取样点,可得每个接收端(sink1、sink2和sink3)的负载(load)统计曲线如图4。

 
图3:使用Opnet Moderler对图1的网络进行仿真的界面


从图4中可以看出,sink1、sink2、sink3的负载曲线密度依次增大,负载的峰值和均值也依次增高。通过NS2和Opnet Modeler的仿真过程,说明了在链路服务速率足够大的情况下,每个数据源的输出速率与接收端的数据输入速率成近似的正比例关系。

 
图4:使用Opnet Modeler得到的每个sink的负载曲线

3.3 比较分析

通过对NS2和Opnet Modeler的操作和数据观察结果的对比,我们可以从软件功能和操作易用性两个方面对这两个软件进行分析。

在软件功能方面,Opnet Modeler做的比较完备,可以对分组的到达时间分布、分组长度分布,网络节点类型和链路类型等进行很详细的设置,而且可以通过不同厂家提供的网络设备和应用场景来设计自己的仿真环境,用户也可以方便的选择库中已有的网络拓扑结构。而NS2在这方面的选择不如Opnet Modeler丰富,只能根据实际仿真的环境通过脚本建立逻辑的网络结构,而查看结果需要其他软件的辅助。

在操作易用性方面,Opnet Modeler的优越性是毋庸置疑的,因为它可以使用比较少的操作就可以得到比较详尽和真实的仿真结果。而NS2则要通过编写脚本和C++代码来实现网络仿真,而且用这种方式建立复杂的网络结果则变的非常困难。

当然,NS2是自由软件,免费,这是与OPNET相比最大的优势,而且,作为用户,可以相对比较容易地对NS2进行功能扩展。

4. 总结

本文通过对5款当前主流网络仿真软件的简要分析,介绍了网络仿真的概念和当前网络仿真软件的技术特点和应用范围;并通过在NS2和Opnet Modeler对同一个网络结构进行仿真的过程给读者提供了网络仿真过程的感性认识。网络仿真提供了从设想到实现的桥梁,因此它是一个计算机网络设计与分析过程中的一个重要环节。

本新闻共2页,当前在第2页  1  2  

相关新闻
推荐文章