分享

科学网-段克松的博客-网络仿真利器NS-2无师自通七天速成系列Ⅱ: NS-2实例编写

 小木鱼医盲 2010-06-11
网络仿真利器NS-2无师自通七天速成系列Ⅱ: NS-2实例编写
 安装NS-2后,就可以运行该软件了。NS-2有两种运行方式,第一种是“脚本方式”,假设这里有个已编好的文件example.tcl文件,通过在linux控制端输入 ns example.tcl就可以运行该脚本了。第二种方法就是“命令行方式”,通过在linux系统下输入ns进入NS-2模拟环境。然后输入各种指令交互的运行。

1.编写一个tcl脚本一般分为以下几个步骤:
1)        创建模拟器对象,用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。
2)        设置跟踪文件
3)        创建网络拓扑结构。
4)        配置节点属性。
5)        创建拓扑结构
6)        设置代理和应用层协议,并进行绑定。
7)        使用模拟器对象的at过程设置节点事件和时间的对应关系。
8)        使用模拟器对象的run过程开始模拟。
9)        结果分析。模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。

2,下边是一个实例。新建一个文件,保存为example.tcl
[Tcl Script]
# 产生一个仿真的对象
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
        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
 
#设定ns2到n3之间的Queue Size为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之间queue的变化,这是要给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"
 
#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)
$ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"
 
#在仿真环境中,5秒后去呼叫finish来结束仿真(这样要注意仿真环境中
#的5秒并不一定等于实际仿真的时间
$ns at 5.0 "finish"
 
#执行仿真
$ns run
 
3,实验结果与数据分析如下:
 
 
仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。这个档案对我们做效能分析很重要,所以要先对这个档案的格式做仔细的介绍。
 
+ 0.1   1 2 cbr 1000 ------- 2 1.0 3.1 0 0
- 0.1   1 2 cbr 1000 ------- 2 1.0 3.1 0 0
+ 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1
- 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1
r 0.114 1 2 cbr 1000 ------- 2 1.0 3.1 0 0
+ 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0
- 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0
+ 0.116 1 2 cbr 1000 ------- 2 1.0 3.1 2 2
- 0.116 1 2 cbr 1000 ------- 2 1.0 3.1 2 2
r   0.122 1 2 cbr 1000 ------- 2 1.0 3.1 1 1
+ 0.122 2 3 cbr 1000 ------- 2 1.0 3.1 1 1
.................................................................
 
每一笔记录的开始都是封包事件发生的原因,若是r则表示封包被某个节点所接收,若是+则表示进入了队列,若是-则表示离开队列,若是d则表示封包被队列所丢弃。接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从from node到to node);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是a.b,a代表节点编号,b表示埠号(port number);字段十一表示封包的序号;最后字段十二表示封包的id。以前面trace file的第一笔为例,意思就是说有一个封包pakcet id为0,资料流id为2,序号为0,长度为1000 bytes,型态为CBR,它是从来源端1.0要到目的地3.1,在时间0.1秒的时候,从节点1进入了节点2的队列中。
本文引用地址: http://www.sciencenet.cn/m/user_content.aspx?id=309836

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多