计算机网络实验四(ns2实验)
- 实验目的
掌握NS2网络模拟器的部署、配置和使用方法;掌握利用NS2进行网络仿真的方法。具备利用NS2进行网络场景构建和协议仿真分析的基本能力。重点:网络场景构建。难点:不同场景下的协议仿真与性能分析。
- 实验内容
在linux系统下部署、安装和配置NS2网络模拟器;了解其功能模块及配套工具的使用,掌握利用NS2进行网络仿真,构建两种不同类型网络仿真场景并进行结果分析。
- 实验原理:
NS2的核心部分是一个离散事件模拟引擎,该引擎包含一个Scheduler类,用于记录当前系统时间、调度网络队列中的事件,并调用其他函数产生新的事件,同时指定新事件的时间。NS2使用C++和OTcl进行组合编程。其中,底层的实体类用C++语言实现,以提高执行效率;同时有一个与之对应的OTcl类,用于配置对象、组合对象、描述模拟过程并调用NS2完成模拟过程。这种将NS2中一个构件用两个不同语言的类来实现的方式被称为分裂对象模型,通过TclCl机制来实现。NS2可以应用于多种网络协议的模拟和验证,如AODV(Ad hoc On-demand Distance Vector Routing)按需路由协议。在AODV模拟中,NS2可以模拟节点的移动性、路由发现过程、路由维护过程等,并收集相关的网络性能指标进行分析。NS2的工作实验原理主要基于离散事件模拟引擎和分裂对象模型,通过C++和OTcl的组合编程实现对网络实体的模拟和模拟过程的描述。NS2具有广泛的应用领域和强大的功能,是研究和验证网络协议的重要工具之一。
- 实验条件:
硬件:一台计算机
软件:Linux操作系统、NS2工具包
- 实验过程
- NS2仿真示例——nam方式
代码:
set ns [new Simulator]/建立对象
$ns color 1 Blue /设定颜色
$ns color 2 Red
set nf [open out.nam w] /打开跟踪文件
$ns namtrace-all $nf
proc finish {} { /定义结束过程
global ns nf
$ns flush-trace
close $nf
exec nam out.nam &
exit 0
}
set ns0 [$ns node]
set ns1 [$ns node]
set ns2 [$ns node]
set ns3 [$ns node]
$ns duplex-link $ns0 $ns2 1Mb 10ms DropTail
$ns duplex-link $ns1 $ns2 1Mb 10ms DropTail
$ns duplex-link $ns3 $ns2 1Mb 10ms DropTail
$ns duplex-link-op $ns0 $ns2 orient right-down
$ns duplex-link-op $ns1 $ns2 orient right-up
$ns duplex-link-op $ns2 $ns3 orient right
$ns duplex-link-op $ns2 $ns3 queuePos 0.5
set udp0 [new Agent/UDP] /建立代码
$udp0 set class_ 1
$ns attach-agent $ns0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set udp1 [new Agent/UDP]
$udp1 set class_ 2
$ns attach-agent $ns1 $udp1
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize_ 500
$cbr1 set interval_ 0.005
$cbr1 attach-agent $udp1
set null0 [new Agent/Null] /建立代理NULL
$ns attach-agent $ns3 $null0
$ns connect $udp0 $null0
$ns connect $udp1 $null0
$ns at 0.5 "$cbr0 start" /传送数据
$ns at 1.0 "$cbr1 start"
$ns at 4.0 "$cbr1 stop"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish" /调用结束过程
$ns run/仿真
运行结果:
从n0开始传送数据。

从n1开始传送数据

采用FIFO机制丢包,丢弃n0发送数据包。

- NS2仿真示例——Xgraph方式
代码:
set ns [new Simulator]
set f0 [open out0.tr w]
set f1 [open out1.tr w]
set f2 [open out2.tr w]
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
$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
proc finish {} {
global f0 f1 f2
close $f0
close $f1
close $f2
exec xgraph out0.tr out1.tr out2.tr -geometry 800x400 &
exit 0
}
proc attach-expoo-traffic { node sink size burst idle rate } {
set ns [Simulator instance]
set source [new Agent/UDP]
$ns attach-agent $node $source
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 set rate_ $rate
$traffic attach-agent $source
$ns connect $source $sink
return $traffic
}
proc record {} {
global sink0 sink1 sink2 f0 f1 f2
set ns [Simulator instance]
set time 0.5
set bw0 [$sink0 set bytes_]
set bw1 [$sink1 set bytes_]
set bw2 [$sink2 set bytes_]
set now [$ns now]
puts $f0 "$now [expr $bw0/$time*8/1000000]"
puts $f1 "$now [expr $bw1/$time*8/1000000]"
puts $f2 "$now [expr $bw2/$time*8/1000000]"
$sink0 set bytes_ 0
$sink1 set bytes_ 0
$sink2 set bytes_ 0
$ns at [expr $now + $time] "record"
}
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
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]
$ns at 0.0 "record"
$ns at 10.0 "$source0 start"
$ns at 10.0 "$source1 start"
$ns at 10.0 "$source2 start"
$ns at 50.0 "$source0 stop"
$ns at 50.0 "$source1 stop"
$ns at 50.0 "$source2 stop"
$ns at 60.0 "finish"
$ns run
运行结果:

三条数据流的峰值分别为0.1Mbit/s,0.2Mbit/s,0.3Mbit/s
- 实验收获
了解了ns2的基本原理,对ns2的使用更加熟练,掌握如何利用NS2进行网络仿真,学习到ns2功能模块和一些配套工具的使用。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)