前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有线节点与无线节点的混合仿真模拟实验

有线节点与无线节点的混合仿真模拟实验

作者头像
Linux云计算网络
发布2018-01-10 18:29:25
7610
发布2018-01-10 18:29:25
举报
文章被收录于专栏:Linux云计算网络Linux云计算网络

Author: bakari  Date: 2011.11.23

很久之前自己写的一个NS2 的例子,(一个有线和无线相结合的例子,对于初学很有帮助)欢迎交流!

代码语言:js
复制
# Define options
set val(chan) Channel/WirelessChannel ;# 物理信道类型
set val(prop) Propagation/TwoRayGround ;# 设定无限传输模型
set val(netif) Phy/WirelessPhy ;# 网络接口类型
set val(mac) Mac/802_11 ;# MAC 层类型
set val(ifq) Queue/DropTail/PriQueue ;# 接口队列类型
set val(ll) LL ;# LLC 层类型
set val(ant) Antenna/OmniAntenna ;# 天线模型
set val(ifqlen) 50 ;# 网络接口队列的大小
set val(severnode) 1 ;# servre节点的数目
set val(nn) 10 ;# 移动节点的数目
set val(rp) DSDV ;# 设定无线路由协议
set val(x) 1000 ;# 设定拓扑范围
set val(y) 1000 ;# 设定拓扑范围
set val(stop) 31 ;#模拟的总时间
set AgentTrace ON
set RouterTrace ON
set MacTrace OFF
#设定模拟器类型
set ns [new Simulator]

#设定跟踪文件
set tracefd       [open simple.tr w]
$ns trace-all $tracefd
set namtrace      [open simwrls.nam w] 
$ns namtrace-all $namtrace
$ns namtrace-all-wireless $namtrace $val(x) $val(y)
#设定拓扑对象
set topo       [new Topography]
$topo load_flatgrid $val(x) $val(y)
set chan [new $val(chan)] 
#设定god对象
# 建立一个God对象。God对象主要用来对路由协议做性能评价,它存储了节点总数,
#节点间最短路径等信息。节点的MAC对象会调用God对象,因此即使不使用也仍然要建立此对象
create-god $val(nn)
#设定sever节点
set SerNode [$ns node]
$SerNode set X_ 500
$SerNode set Y_ 800
$SerNode set Z_ 0
#$ns initial_node_pos $SerNode 10
#设置移动节点的属性
$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) \
-channel $chan \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF \
-wiredRouting ON 
# !如果一个节点放在移动节点属性之前,它就成为了有线链路的节点,如果放在移动节点属性下边,它就成了无线节点。
 for {set i 1} {$i < $val(nn) } {incr i} {
  set node_($i) [$ns node] 
  #$ns initial_node_pos $node_($i) 10
 }
 #设定节点的初始位置
$node_(1) set X_ 100
$node_(1) set Y_ 300
$node_(1) set Z_ 0
$node_(2) set X_ 500
$node_(2) set Y_ 300
$node_(2) set Z_ 0
#$node_(3) set X_ 120
#$node_(3) set Y_ 80
#$node_(3) set Z_ 0
$node_(4) set X_ 900
$node_(4) set Y_ 300
$node_(4) set Z_ 0
$node_(5) set X_ 200
$node_(5) set Y_ 100
$node_(5) set Z_ 0
$node_(6) set X_ 100
$node_(6) set Y_ 100
$node_(6) set Z_ 0
$node_(7) set X_ 800
$node_(7) set Y_ 100
$node_(7) set Z_ 0
$node_(8) set X_ 300
$node_(8) set Y_ 300
$node_(8) set Z_ 0
$node_(9) set X_ 700
$node_(9) set Y_ 300
$node_(9) set Z_ 0
#设定有线链路的带宽,时延,队列类型
$ns duplex-link $SerNode $node_(1) 2Mb 150ms DropTail
$ns duplex-link $SerNode $node_(2) 2Mb 150ms DropTail
$ns duplex-link $SerNode $node_(4) 2Mb 150ms DropTail
$ns duplex-link $SerNode $node_(8) 2Mb 150ms DropTail
$ns duplex-link $SerNode $node_(9) 2Mb 150ms DropTail
#设定链路队列大小
$ns queue-limit $SerNode $node_(1) 20
$ns queue-limit $SerNode $node_(2) 20
$ns queue-limit $SerNode $node_(4) 20
$ns queue-limit $SerNode $node_(8) 20
$ns queue-limit $SerNode $node_(9) 20
#监测节点间的队列
#数据包进入队列的方位设置,此表示数据包从上到下进入队列
$ns duplex-link-op $SerNode $node_(1) queuePos 0.5
$ns duplex-link-op $SerNode $node_(2) queuePos 0.5
$ns duplex-link-op $SerNode $node_(4) queuePos 0.5
$ns duplex-link-op $SerNode $node_(8) queuePos 0.5
$ns duplex-link-op $SerNode $node_(9) queuePos 0.5
#建立tcp连接
set tcp0 [new Agent/TCP]
$ns color 1 Yellow
$tcp0 set class_ 1
$ns attach-agent $SerNode $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $node_(1) $sink0
$ns connect $tcp0 $sink0
set tcp1 [new Agent/TCP]
$ns color 1 Yellow
$tcp1 set class_ 1
$ns attach-agent $SerNode $tcp1
set sink1 [new Agent/TCPSink]
$ns attach-agent $node_(2) $sink1
$ns connect $tcp1 $sink1
set tcp2 [new Agent/TCP]
$ns color 1 Yellow
$tcp2 set class_ 1
$ns attach-agent $SerNode $tcp2
set sink2 [new Agent/TCPSink]
$ns attach-agent $node_(4) $sink2
$ns connect $tcp2 $sink2
set tcp3 [new Agent/TCP]
$ns color 1 Yellow
$tcp3 set class_ 1
$ns attach-agent $SerNode $tcp3
set sink3 [new Agent/TCPSink]
$ns attach-agent $node_(8) $sink3
$ns connect $tcp3 $sink3
set tcp4 [new Agent/TCP]
$ns color 1 Yellow
$tcp4 set class_ 1
$ns attach-agent $SerNode $tcp4
set sink4 [new Agent/TCPSink]
$ns attach-agent $node_(9) $sink4
$ns connect $tcp4 $sink4
#设定ftp应用程序
set ftp0 [new Application/FTP]
$ftp0 attach-agent $tcp0
set ftp1 [new Application/FTP]
$ftp1 attach-agent $tcp1
set ftp2 [new Application/FTP]
$ftp2 attach-agent $tcp2
set ftp3 [new Application/FTP]
$ftp3 attach-agent $tcp3
set ftp4 [new Application/FTP]
$ftp4 attach-agent $tcp4
#建立udp连接
set udp0 [new Agent/UDP]
$ns set color 2 Red
$udp0 set class_ 2
$ns attach-agent $node_(2) $udp0
set null0 [new Agent/Null]
$ns attach-agent $node_(5) $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize0 100
$cbr0 set rate0 2Mb
$cbr0 attach-agent $udp0
set udp1 [new Agent/UDP]
$ns set color 2 Red
$udp1 set class_ 2
$ns attach-agent $node_(1) $udp1
set null1 [new Agent/Null]
$ns attach-agent $node_(6) $null1
$ns connect $udp1 $null1
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize1 100
$cbr1 set rate1 2Mb
$cbr1 attach-agent $udp1
set udp2 [new Agent/UDP]
$ns set color 2 Red
$udp2 set class_ 2
$ns attach-agent $node_(9) $udp2
set null2 [new Agent/Null]
$ns attach-agent $node_(7) $null2
$ns connect $udp2 $null2
set cbr2 [new Application/Traffic/CBR]
$cbr2 set packetSize2 100
$cbr2 set rate2 2Mb
$cbr2 attach-agent $udp2
#模拟节点的运动位置和速度
$ns at 1.0 "$node_(5) setdest 850.0 100.0 50.0"
$ns at 2.5 "$node_(6) setdest 900.0 100.0 80.0"
$ns at 13.0 "$node_(7) setdest 500.0 100.0 30.0" 
#时间调度器设置流量发生时间
$ns at 1.0 "$ftp0 start"
$ns at 30.5 "$ftp0 stop"
$ns at 1.0 "$ftp1 start"
$ns at 30.5 "$ftp1 stop"
$ns at 1.0 "$ftp2 start"
$ns at 30.5 "$ftp2 stop"
$ns at 1.0 "$ftp3 start"
$ns at 30.5 "$ftp3 stop"
$ns at 1.0 "$ftp4 start"
$ns at 30.5 "$ftp4 stop"
$ns at 1.0 "$cbr0 start"
$ns at 16.2 "$cbr0 stop"
$ns at 2.0 "$cbr1 start"
$ns at 13.0 "$cbr1 stop"
$ns at 13.0 "$cbr2 start"
$ns at 24.0 "$cbr2 stop"
#结束nam和simulator
$ns at $val(stop) "stop"
$ns at $val(stop) "puts \"end simulator\"; $ns halt"
proc stop {} {
global ns tracefd namtrace
$ns flush-trace
close $tracefd
close $namtrace
exec nam simwrls.nam &
exit 0
}
#开始模拟
$ns run

有图有真相:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档