logo资料库

NS2 TCL脚本实例.docx

第1页 / 共39页
第2页 / 共39页
第3页 / 共39页
第4页 / 共39页
第5页 / 共39页
第6页 / 共39页
第7页 / 共39页
第8页 / 共39页
资料共39页,剩余部分请下载后查看
NS2 入门实例 1---有线网络,两节点(UDP 连接,CBR 应用) 实例 1: # 场景描述: # 两个节点 n0 和 n1 ,之间有一条 UDP 连接, # 设置 CBR 应用,用作数据流发生器 # 模拟时间 5s #建立一个 Simulator 对象, 并赋值给 ns, 用作模拟过程的时间调度 set ns [new Simulator] #设置 trace 文件和 Nam 文件, trace 记录整个模拟过程的记录, #Nam 用于 Nam 的动画显示 set tracefd [open example1.tr w] $ns trace-all $tracefd set namtracefd [open example1.nam w] $ns namtrace-all $namtracefd #定义结束过程, 将事件写入 trace, 并关闭相关文件, 最后启动 Nam 进行动 画显示 proc finish {} { global ns tracefd namtracefd $ns flush-trace close $tracefd close $namtracefd exec nam example1.nam & exit 0 } #创建两个节点 n0 和 n1 set n0 [$ns node] set n1 [$ns node] #添加一条双向的连接, 传输速率: 1Mb, 时延: 10ms, #队列管理方式: DropTail(丢弃尾部!) $ns duplex-link $n0 $n1 1Mb 10ms DropTail #创建 UDP Agent 发送端, 并与 n0 节点关联 set udp0 [new Agent/UDP] $ns attach-agent $n0 $udp0 #创建 Null, 作为 UDP 的接收端,与 n1 关联 #Null:只接受, 不回复 ACK (与 TCP 和 TCPSink 的区别) set null0 [new Agent/Null]
$ns attach-agent $n1 $null0 #连接 UDP 和 NULL,形成一条有开始和结束的数据通路 $ns connect $udp0 $null0 #添加 CBR 应用,绑定到 UDP Agent 上, 并设置发包属性 #CBR: 是一个流量发生器 set cbr0 [new Application/Traffic/CBR] $cbr0 set packetSize_ 500 $cbr0 set interval_ 0.005 $cbr0 attach-agent $udp0 #设置 CBR 的起停, 使整个模拟过程开始 $ns at 0.5 "$cbr0 start" $ns at 4.5 "$cbr0 stop" $ns at 5.0 "finish" $ns run 运行结果:(节点 0 和 1 之间有 UDP 连接,运行 CBR 应用。)
NS2 入门实例 2---无线网络,两节点(TCP 连接,FTP 应用) Channel/WirelessChannel Propagation/TwoRayGround ;# radio-propagation model Phy/WirelessPhy Mac/802_11 #场景描述: #无线网络中,两个节点 node_(0) 和 node_(1), TCP+FTP, 并且设置了节点的移动 #====================================================== ===================== # 无线节点的参数设置 #====================================================== ===================== set val(chan) set val(prop) set val(netif) set val(mac) set val(ifq) set val(ll) set val(ant) set val(ifqlen) set val(nn) set val(rp) set val(x) set val(y) #====================================================== ====================== Antenna/OmniAntenna 50 2 AODV 500 500 ;# X dimension of the topography ;# Y dimension of the topography Queue/DropTail/PriQueue LL ;# link layer type ;# interface queue type ;# network interface type ;# MAC type ;# channel type ;# antenna model ;# max packet in ifq ;# number of mobilenodes ;# routing protocol # 创建 Simulator 对象,用于模拟过程的事件调度 set ns [new Simulator] #设置相关记录文件 set tracefd [open example2.tr w] $ns trace-all $tracefd set namtracefd [open example2.nam w] # 注意: 与有线场景的命令有差别哦! $ns namtrace-all-wireless $namtracefd $val(x) $val(y) # 设置模拟结束时的操作, 将记录写入文件,并关闭文件, 最后启动 NAM 进行动画显示 proc finish {} { global ns tracefd namtracefd $ns flush-trace close $tracefd close $namtracefd
exec nam example2.nam & exit 0 } # 建立一个 Topography 对象,该对象保证移动节点会在拓扑边界范围内运动 set topo [new Topography] # 500 X 500 的边界 $topo load_flatgrid $val(x) $val(y) # God 对象主要用来对路由协议做性能评价, # 它存储了: 节点的总数、各个节点间最短路径表等信息, 这些信息通常在模拟开始之前就计算好了! # 节点的 MAC 对象会调用 God 对象, (初学者没必要关心!) create-god $val(nn) $ns node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace OFF # 创建两个节点,存储在数组 Node 中, for {set i 0} {$i < $val(nn) } {incr i} { set node_($i) [$ns node] $node_($i) random-motion 0 ;# disable random motion } #设置节点的物理位置,一般第三位 Z_=0.0, 模拟过程实际上是在而为平面上的场景 $node_(0) set X_ 5.0 $node_(0) set Y_ 2.0 $node_(0) set Z_ 0.0 $node_(1) set X_ 390.0 $node_(1) set Y_ 385.0 $node_(1) set Z_ 0.0
#设置节点的移动, setdest 20.0 18.0 1.0: 向(20.0,18.0)位置以 1.0m/s 的速度移动! $ns at 1.0 "$node_(0) setdest 20.0 18.0 1.0" $ns at 5.0 "$node_(1) setdest 25.0 20.0 15.0" $ns at 100.0 "$node_(1) setdest 490.0 480.0 15.0" # 创建 TCP,及 TCP 对应的 TCPSink,并连接起来,最后在 TCP 连接上添加 FTP 应用 set tcp [new Agent/TCP] $tcp set class_ 2 set sink [new Agent/TCPSink] $ns attach-agent $node_(0) $tcp $ns attach-agent $node_(1) $sink $ns connect $tcp $sink set ftp [new Application/FTP] $ftp attach-agent $tcp #设置 FTP 数据流的开始时间 $ns at 1.0 "$ftp start" #模拟结束前调用各节点的 reset 函数, 无线场景中,一般照写就可! for {set i 0} {$i < $val(nn) } {incr i} { $ns at 150.0 "$node_($i) reset"; } $ns at 150.0 "finish" $ns run 运行结果: 请调整 NAM 右上角的时间按钮,可清洗地观察到 CP 慢启动过程哦!
NS2 入门实例 3---有线观察排队和丢包,三节点 (FTP/TCP+CBR/UDP) 实例 3: # 场景描述: # 主要用于观察数据包在节点 Agent 上的排队和丢包情况 # 有线场景,四个节点,FTT+TCP 用蓝色表示, CBR+UDP 用红色表示 set ns [new Simulator] #设置颜色 $ns color 1 Blue $ns color 2 Red set tracefd [open out.tr w] $ns trace-all $tracefd set namtracefd [open out.nam w] $ns namtrace-all $namtracefd proc finish {} { global ns tracefd namtracefd $ns flush-trace close $tracefd close $namtracefd 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 10ms DropTail $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 $ns duplex-link-op $n2 $n3 queuePos 0.5 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 $tcp set fid_ 1 set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 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 $ns at 0.5 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #一下这一行可有可无! $ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink" $ns at 5.0 "finish" #会在命令窗口中输出, 因为默认的 stdout 是命令窗口啊! puts "CBR packet size=[$cbr set packet_size_]" puts "CBR interval=[$cbr set interval_]" $ns run 运行结果: 只有 CBR 运行时:
分享到:
收藏