1、NS网络模拟和协议仿真源代码第4章例1#建立一个模拟set ns new Simulator#定义不同数据流的颜色(NAM显示时用到)$ns color 1 Blue$ns color 2 Red#开启Trace跟踪和NAM跟踪set tracefd open wired.tr w$ns trace-all $tracefdset nf open wired.nam w$ns namtrace-all $nf#定义结束进程proc finish global ns tracefd nf $ns flush-trace close $tracefd close $nf exit 0#定义节点se
2、t n0 $ns nodeset n1 $ns nodeset n2 $ns nodeset n3 $ns nodeset n4 $ns nodeset n5 $ns node#$n5 color black$n5 color red#定义节点间的链路$ns duplex-link $n0 $n1 2Mb 10ms DropTail$ns duplex-link $n1 $n2 2Mb 10ms DropTail$ns duplex-link $n1 $n4 2Mb 20ms DropTail$ns duplex-link $n3 $n4 2Mb 10ms DropTail$ns duplex
3、-link $n4 $n5 2Mb 10ms DropTail#定义链路的队列长度$ns queue-limit $n1 $n4 10#指定节点间的相互位置(NAM显示用到)$ns duplex-link-op $n0 $n1 orient right-down$ns duplex-link-op $n2 $n1 orient right-up$ns duplex-link-op $n1 $n4 orient right$ns duplex-link-op $n3 $n4 orient left-down$ns duplex-link-op $n5 $n4 orient left-up#监视链
4、路的队列$ns duplex-link-op $n1 $n4 queuePos 0.5#建立一个TCP连接set tcp new Agent/TCP $tcp set class_ 2$ns attach-agent $n0 $tcpset sink new Agent/TCPSink$ns attach-agent $n5 $sink$ns connect $tcp $sink$tcp set fid_ 1#在TCP连接上建立FTP流set ftp new Application/FTP$ftp attach-agent $tcp$ftp set type_ FTP#建立一个UDP代理set
5、 udp new Agent/UDP ;#建立一个数据发送代理$ns attach-agent $n2 $udp ;#将数据发送代理绑定到发送节点set null new Agent/Null ;#建立一个数据接收代理$ns attach-agent $n3 $null ;#将数据接收代理绑定到接收节点$ns connect $udp $null ;#连接两个代理(也就决定了数据包的发送和接收节点)$udp set fid_ 2#在UDP代理上建立CBR流set cbr new Application/Traffic/CBR$cbr attach-agent $udp$cbr set type
6、_ 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 9.0 $ftp stop$ns at 9.5 $cbr stop$ns at 9.5 $ns detach-agent $n0 $tcp; $ns detach-agent $n5 $sink#仿真结束时调用结束进程$ns at 10.0 finish#打印CBR数据包的大小和间隔puts CBR packet_size_ = $cbr
7、set packet_size_puts CBR interval = $cbr set interval_#执行模拟$ns run例2#简单无线网络模型模拟#无线节点参数set val(chan) Channel/WirelessChannel ;# channel type 信道类型:无线信道set val(prop) Propagation/TwoRayGround ;# radio-propagation model 信道模型:TwoRayGroundset val(netif) Phy/WirelessPhy ;# network interface type 无线物理层set va
8、l(mac) Mac/802_11 ;# MAC type MAC层协议set val(ifq) Queue/DropTail/PriQueue ;# interface queue typeset val(ll) LL ;# link layer type set val(ant) Antenna/OmniAntenna ;# antenna modelset val(ifqlen) 50 ;# max packet in ifqset val(rp) AODV ;# 路由协议set val(x) 600 ;# 拓扑长度set val(y) 200 ;# 拓扑宽度set val(stop)
9、10.0 ;# time of simulation end# 建立一个simulator实例set ns new Simulator#$ns use-newtrace#开启Trace跟踪和NAM跟踪set tracefd open wireless.tr wset namtrace open wireless.nam w$ns trace-all $tracefd$ns namtrace-all-wireless $namtrace $val(x) $val(y)#建立topology对象set topo new Topography$topo load_flatgrid $val(x) $
10、val(y)#创建godcreate-god 3set chan_1_ new $val(chan)#配置无线节点(包括使用何种路由协议,何种mac协议,无线信道的模型等等)$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_1_ -topoInstance $topo
11、 -agentTrace ON -routerTrace ON -macTrace ON -movementTrace OFF #建立无线节点并设置节点的位置(节点位置决定了拓扑结构)set n(0) $ns node #$n(0) shape hexagon#$n(0) label n0#$n(0) label-color Red$n(0) random-motion 0$n(0) set X_ 100.0$n(0) set Y_ 100.0$n(0) set Z_ 0.0$ns initial_node_pos $n(0) 20set n(1) $ns node$n(1) random-m
12、otion 0$n(1) set X_ 300.0$n(1) set Y_ 100.0$n(1) set Z_ 0.0$ns initial_node_pos $n(1) 20set n(2) $ns node$n(2) random-motion 0$n(2) set X_ 500.0$n(2) set Y_ 100.0$n(2) set Z_ 0.0$ns initial_node_pos $n(2) 20 #建立一个UDP代理set udp0 new Agent/UDP ;#建立一个数据发送代理$ns attach-agent $n(0) $udp0 ;#将数据发送代理绑定到发送节点se
13、t null0 new Agent/Null ;#建立一个数据接收代理$ns attach-agent $n(2) $null0 ;#将数据接收代理绑定到接收节点$ns connect $udp0 $null0 ;#连接两个代理(也就决定了数据包的发送和接收节点) #在UDP代理上建立CBR流set cbr new Application/Traffic/CBR $cbr attach-agent $udp0 # 仿真结束时重置节点for set i 0 $i 3 incr i $ns at 10.0 $n($i) reset;#启动和结束流代理$ns at 0.5 $cbr start$ns
14、 at 9.5 $cbr stop#定义结束进程proc finish global ns tracefd namtrace $ns flush-trace close $tracefd close $namtrace exit 0#仿真结束时调用结束进程$ns at $val(stop) finish$ns at $val(stop) puts NS EXISTING.; $ns haltputs Start Simulation.# run the simulation$ns run例3#有线无线网络混合模拟#无线节点参数set val(chan) Channel/WirelessChan
15、nel ;# channel type 信道类型:无线信道set val(prop) Propagation/TwoRayGround ;# radio-propagation model 信道模型:TwoRayGroundset val(netif) Phy/WirelessPhy ;# network interface type 无线物理层set val(mac) Mac/802_11 ;# MAC type MAC层协议set val(ifq) Queue/DropTail/PriQueue ;# interface queue typeset val(ll) LL ;# link l
16、ayer type set val(ant) Antenna/OmniAntenna ;# antenna modelset val(ifqlen) 50 ;# max packet in ifqset val(rp) DSDV ;#路由协议set val(nn) 4 ;#节点数目set val(x) 600 ;set val(y) 600 ;set val(stop) 10.0 ;# time of simulation end# 建立一个simulator实例set ns new Simulator#设定分层路由地址$ns node-config -addressType hierarch
17、icalAddrParams set domain_num_ 2 ;# 2个网络lappend cluster_num 1 1 ;# 每个网络一个子网AddrParams set cluster_num_ $cluster_numlappend eilastlevel 1 3 ;# 2个子网的节点数目为1和3AddrParams set nodes_num_ $eilastlevelputs Configuration of hierarchical addressing done#$ns use-newtrace#设置traceset tracefd open wired_wireless2
18、.tr wset namtrace open wired_wireless2.nam w$ns trace-all $tracefd$ns namtrace-all-wireless $namtrace $val(x) $val(y)#建立topology对象set topo new Topography$topo load_flatgrid $val(x) $val(y) #创建godcreate-god $val(nn)set sinkNode $ns node 0.0.0$sinkNode set X_ 500$sinkNode set Y_ 300$sinkNode set Z_ 0$
19、ns initial_node_pos $sinkNode 60set chan_1_ new $val(chan)#无线节点配置$ns node-config -wiredRouting ON -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_1_ -topoInstance $topo -age
20、ntTrace ON -routerTrace ON -macTrace ON -movementTrace OFF #新建BS节点set bs(0) $ns node 1.0.0$bs(0) random-motion 0 #节点标签与初始位置设定$bs(0) set X_ 200.0$bs(0) set Y_ 300.0$bs(0) set Z_ 0.0$ns initial_node_pos $bs(0) 60#定义节点间的链路$ns duplex-link $sinkNode $bs(0) 10Mb 1ms DropTail$ns duplex-link-op $sinkNode $b
21、s(0) orient left#定义链路的队列长度#$ns queue-limit $bs(0) $sinkNode 10#监视链路的队列#$ns duplex-link-op $bs(0) $sinkNode queuePos 0.5$ns node-config -wiredRouting OFF -macType Mac/802_11 #新建SS节点set ss(0) $ns node 1.0.1$ss(0) base-station AddrParams addr2id $bs(0) node-addr$ss(0) set X_ 50.0$ss(0) set Y_ 450.0$ss(
22、0) set Z_ 0.0$ns initial_node_pos $ss(0) 60set ss(1) $ns node 1.0.2$ss(1) base-station AddrParams addr2id $bs(0) node-addr$ss(1) set X_ 50.0$ss(1) set Y_ 150.0$ss(1) set Z_ 0.0$ns initial_node_pos $ss(1) 60set udp0 new Agent/UDP$ns attach-agent $ss(0) $udp0set null0 new Agent/Null$ns attach-agent $s
23、inkNode $null0$ns connect $udp0 $null0set ugs0 new Application/Traffic/UGS$ugs0 attach-agent $udp0set udp1 new Agent/UDP$ns attach-agent $sinkNode $udp1set null1 new Agent/Null$ns attach-agent $ss(1) $null1$ns connect $udp1 $null1set ugs1 new Application/Traffic/UGS$ugs1 attach-agent $udp1$ns at 0.5
24、 $ugs0 start$ns at 1.0 $ugs1 start$ns at 9.0 $ugs1 stop$ns at 9.5 $ugs0 stopproc finish global ns tracefd namtrace $ns flush-trace close $tracefd close $namtrace exit 0#事件安排$ns at $val(stop) finish$ns at $val(stop) puts NS EXISTING.; $ns haltputs Start Simulation.# run the simulation$ns run第10章delay
25、.awkBEGIN highest_uid=0; event = $1; time = $2; node = $3; len = length(node); if(len = 3) node_ = substr(node,2,1); trace_type = $4; flag = $5; uid = $6; pkt_type = $7; pkt_size = $8; else from_node = $3; to_node =$4; pkt_type = $5; pkt_size = $6; flag = $7; uid = $12; if(len=3) if(event=s & node_=
26、2 & trace_type=AGT & pkt_type=cbr) start_timeuid = time; else if(event=r & to_node=0 & pkt_type=cbr) end_timeuid = time; if(highest_uid uid) highest_uid = uid;END id=1; k=0; total_delay=0; avg_delay=0; for(i=0; i 0) total_delay=total_delay+delay; k+; avg_delay=total_delay/k; printf(%f %.9fn,rate,avg
27、_delay);get_perform#!/bin/shi=1while $i -le 300 ; do ns w_w.tcl $i gawk f delay.awk rate=$i wired_wireless.tr delay gawk f loss.awk rate=$i wired_wireless.tr loss_rate gawk -f throughtput.awk rate=$i wired_wireless.tr throughtput if $i -le 225 ; then i=$($i+20) elif $i -le 250 ; then i=$($i+5) else
28、i=$($i+2) fidoneexit 0jitter.awkBEGIN highest_uid=0; event = $1; time = $2; node = $3; len = length(node); if(len = 3) node_ = substr(node,2,1); trace_type = $4; flag = $5; uid = $7; pkt_type = $8; pkt_size = $9; else from_node = $3; to_node =$4; pkt_type = $5; pkt_size = $6; flag = $7; uid = $12; if(len=3) if(event=s & node_=2 & trace_type=AGT & pkt_type=cbr) start_timeuid = time; else if(event=r & to_node=0 & pkt_type=cbr) end_timeuid = time; if(highest_uid uid) highest_uid = uid;EN