如何解决NS2:数据包不会转发数据
我修改了 NS2 中的 M-DART tcl 文件以运行多通道而不是单通道。我已经分配了发送和接收节点,但数据包没有转发到目标节点。唯一的操作是发送、接收和丢弃数据包。这是我修改后的脚本:
###########################################
# Define Option
###########################################
set val(chan) Channel/WirelessChannel; #channel type
set val(ant) Antenna/OmniAntenna; #antenna type
set val(propagation) Shado; #propagation model
set val(netif) Phy/Wirelessphy; #network interface type
set val(ll) LL; #link layer type
set val(ifq) Queue/DropTail; #interface queue type
set val(ifqlen) 50; #max packet in ifq
set val(mac) Mac/802_11; #MAC type
set val(rp) MDART; #routing protocol
set val(n) 10 ; #node number
set val(density) 4096; #node density [node/km^2]
set val(end) 206.0; #simulation time [s]
set val(dataStart) 100.0; #data start time [s]
set val(dataStop) [expr $val(end) - 6.0]; #data stop time [s]
set val(seed) 1; #general pseudo-random sequence generator
set val(macFailed) true; #ATR protocol: ns2 MAC Failed callback
set val(etxMetric) true; #ATR protocol: ETX route metric
set val(throughput) 5.40; #CBR rate (<= 5.4Mb/s)
#########################################
# Channel Model
#########################################
#Setting antenna at center of node,1.5 meters above it
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
Antenna/OmniAntenna set Z_ 1.2
Antenna/OmniAntenna set Gt_ 1.0 ;#transmitter gain
Antenna/OmniAntenna set Gr_ 1.0 ;#receiver gain
Phy/Wirelessphy set L_ 1.0 ;#system loss factor
if {$val(propagation) == "TwoRay"} {
set val(prop) Propagation/TwoRayGround
set prop [new $val(prop)]
Phy/Wirelessphy set CPThresh_ 10.0 ;#capt. thresh. in Watt
Phy/Wirelessphy set CSThresh_ 1.559e-11 ;#carr. sens. thresh.
Phy/Wirelessphy set RXThresh_ 3.652e-10 ;#receive signal thresh
Phy/Wirelessphy set freq_ 2.4e9 ;#chan. freq. (Hz)
Phy/Wirelessphy set Pt_ 0.28 ;#trans. signal power (Watt)
}
if {$val(propagation) == "Shado"} {
set val(prop) Propagation/Shadowing
set prop [new $val(prop)]
$prop set pathlossExp_ 3.8 ;#path loss exponent
$prop set std_db_ 2.0 ;#shadowing deviation (dB)
$prop set seed_ 1 ;#RNG seed
$prop set dist0_ 1.0 ;#ref. distance (m)
$prop set CPThresh_ 10.0 ;#capt. thresh (Watt)
$prop set RXThresh_ 2.37e-13 ;#rec. sign. thresh
$prop set CSThresh_ [expr 2.37e-13 * 0.0427] ;#carr. sens. thresh
$prop set freq_ 2.4e9 ;#chann. freq (Hz)
Phy/Wirelessphy set Pt_ 0.28
}
#####################################################
# Topology DeFinition
#####################################################
#Scenario creation according to chosen node density
set val(dim) [expr $val(n) / $val(density)]
set val(x) [expr [expr sqrt($val(dim))] * 1000]
set val(y) [expr [expr sqrt($val(dim))] * 1000]
####################################################
# Pseudo-random sequence generator
####################################################
#General pseudo-random sequence geneator
set genSeed [new RNG]
$genSeed seed $val(seed)
set randomSeed [new RandomVariable/Uniform]
$randomSeed use-rng $genSeed
$randomSeed set min_ 1.0
$randomSeed set max_ 100.0
#mobility model: x node position [m]
set genNodeX [new RNG]
$genNodeX seed [expr [$randomSeed value]]
set randomNodeX [new RandomVariable/Uniform]
$randomNodeX use-rng $genNodeX
$randomNodeX set min_ 1.0
$randomNodeX set max_ [expr $val(x) - 1.0]
#mobility model: Y node position [m]
set posNodeY [new RNG]
$posNodeY seed [expr [$randomSeed value]]
set randomNodeY [new RandomVariable/Uniform]
$randomNodeY use-rng $posNodeY
$randomNodeY set min_ 1.0
$randomNodeY set max_ [expr $val(y) - 1.0]
#Data pattern: node
set genNode [new RNG]
$genNode seed [expr [$randomSeed value]]
set randomNode [new RandomVariable/Uniform]
$randomNode use-rng $genNode
$randomNode set min_ 0
$randomNode set max_ [expr $val(n) - 1]
################################
# General deFinition
################################
#Instantiate the simulator
set ns [new Simulator]
#Define topology
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
#create GOD
create-god $val(n)
##############################
# Trace file deFinition
##############################
;#create trace object for ns,nam,monitor and inspect
set tracefile [open ns.tr w] ;#Adding this
$ns trace-all $tracefile ;#adding this
;#new format for wireless traces
$ns use-newtrace
#set namTr [open nam.tr w]
#$ns namtrace-all-wireless $namTr $val(x) $val(y)
#set scenarioTr [open scenario.tr w]
#nam file creation
set namfile [open mdart.nam w]
$ns namtrace-all $namfile
$ns namtrace-all-wireless $namfile $val(x) $val(y)
#set chan [new $val(chan)];
#create channel
set chan_1_ [new $val(chan)]
set chan_2_ [new $val(chan)]
$prop topography $topo
#Global node setting
$ns node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propInstance $prop \
-phyType $val(netif) \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF \
-channel $chan_1_
################################
# Nodes deFinition
################################
;# Create the specified number of nodes [$val(n)] and "attach" them to the channel.
#for {set i 0} {$i < $val(n) } {incr i} {
# set node($i) [$ns node]
# $node($i) random-motion 0 ; #disabled random motion
#$ns initial_node_pos $n($i) 20 ;
#}
################################
# Node conode(figurationode(
################################
;#node initial coordinates
set node(0) [$ns node]
$node(0) random-motion 0
$node(0) set X_ 20.0
$node(0) set Y_ 65.0
$node(0) set Z_ 0.0
$ns initial_node_pos $node(0) 20
set node(1) [$ns node]
$node(1) random-motion 0
$node(1) set X_ 50.0
$node(1) set Y_ 10.0
$node(1) set Z_ 0.0
$ns initial_node_pos $node(1) 20
set node(2) [$ns node]
$node(2) random-motion 0
$node(2) set X_ 0.0
$node(2) set Y_ 0.0
$node(2) set Z_ 0.0
$ns initial_node_pos $node(2) 20
set node(3) [$ns node]
$node(3) random-motion 0
$node(3) set X_ 95.0
$node(3) set Y_ 35.0
$node(3) set Z_ 0.0
$ns initial_node_pos $node(3) 20
set node(4) [$ns node]
$node(4) random-motion 0
$node(4) set X_ 8.0
$node(4) set Y_ 50.0
$node(4) set Z_ 0.0
$ns initial_node_pos $node(4) 20
$ns node-config \
-channel $chan_2_
set node(5) [$ns node]
$node(5) random-motion 0
$node(5) set X_ 150.0
$node(5) set Y_ 165.0
$node(5) set Z_ 0.0
$ns initial_node_pos $node(5) 20
set node(6) [$ns node]
$node(6) random-motion 0
$node(6) set X_ 30.0
$node(6) set Y_ 70.0
$node(6) set Z_ 0.0
$ns initial_node_pos $node(6) 20
set node(7) [$ns node]
$node(7) random-motion 0
$node(7) set X_ 65.0
$node(7) set Y_ 114.0
$node(7) set Z_ 0.0
$ns initial_node_pos $node(7) 20
set node(8) [$ns node]
$node(8) random-motion 0
$node(8) set X_ 50.0
$node(8) set Y_ 165.0
$node(8) set Z_ 0.0
$ns initial_node_pos $node(8) 20
set node(9) [$ns node]
$node(9) random-motion 0
$node(9) set X_ 180.0
$node(9) set Y_ 100.0
$node(9) set Z_ 0.0
$ns initial_node_pos $node(9) 20
###################################
# Nodes placement
###################################
#parameters for trace Inspect
#puts $scenarioTr "# nodes: $val(n),max time: $val(end)"
#puts $scenarioTr "# nominal range: 250"
#for {set i 0} {$i < $val(n)} {incr i} {
# set X [expr [$randomNodeX value] ]
# $node($i) set X_ $X
# set Y [expr [$randomNodeY value] ]
# $node($i) set Y_ $Y
# $node($i) set Z_ 0.0
# $ns initial_node_pos $node($i) 20
# puts $scenarioTr "\$node_($i) set X_ $X"
# puts $scenarioTr "\$node_($i) set Y_ $Y"
# puts $scenarioTr "\$node_($i) set Z_ 0.0"
#}
###################################
# moving nodes
###################################
#$ns at 3.0 "$node(0) setdest 175.0 90.0 0.0"
#$ns at 3.0 "$node(6) setdest 52.0 12.0 0.0"
#############################
# Data load
#############################
set udp0 [new Agent/UDP]
$ns attach-agent $node(0) $udp0
set null0 [new Agent/Null]
$ns attach-agent $node(6) $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 1000
$cbr0 attach-agent $udp0
$cbr0 set rate_ [expr $val(throughput) / [expr $val(n) * sqrt($val(n))]]Mb
$ns at $val(dataStart) "$cbr0 start"
$ns at $val(dataStop) "$cbr0 stop"
###############################
# Routing model (for M-DART)
###############################
if {$val(rp) == "M-DART"} {
Agent/ATR set macFailed_ $val(macFailed)
Agent/ATR set etxMetric_ $val(etxMetric)
}
############################
# Tracing
############################
;#Simulation time print
proc timeTrace { tracePause} {
global ns
set Now [$ns Now]
$ns at [expr $Now + $tracePause] "timeTrace $tracePause"
puts "$Now simulation seconds"
}
$ns at 10.0 "timeTrace 10.0"
if {$val(rp) == "MDART"} {
for {set i 0} {$i < $val(n)} {incr i} {
# printing the routing table
$ns at [expr $val(end) - 1.0] "[$node($i) agent 255] routingTablePrint"
# printing the dht table
$ns at [expr $val(end) - 0.5] "[$node($i) agent 255] dhtTablePrint"
}
}
#########################
# Start and end
#########################
for {set i 0} {$i < $val(n) } {incr i} {
$ns at $val(end) "$node($i) reset";
}
$ns at $val(end) "fileTrace"
$ns at $val(end) "$ns halt"
proc fileTrace {} {
#global ns tracefile namTr
global ns tracefile scenarioTr
$ns flush-trace
close $tracefile ;#adding tis
#close $scenarioTr
#close $namTr
#exec nam nam.tr &
}
$ns run
这个只产生发送和丢弃的数据包。而这个:
###########################################
# Define Option
###########################################
set val(chan) Channel/WirelessChannel; #channel type
set val(ant) Antenna/OmniAntenna; #antenna type
set val(propagation) Shado; #propagation model
set val(netif) Phy/Wirelessphy; #network interface type
set val(ll) LL; #link layer type
set val(ifq) Queue/DropTail; #interface queue type
set val(ifqlen) 50; #max packet in ifq
set val(mac) Mac/802_11; #MAC type
set val(rp) MDART; #routing protocol
set val(n) 16 ; #node number
set val(density) 4096; #node density [node/km^2]
set val(end) 206.0; #simulation time [s]
set val(dataStart) 100.0; #data start time [s]
set val(dataStop) [expr $val(end) - 6.0]; #data stop time [s]
set val(seed) 1; #general pseudo-random sequence generator
set val(macFailed) true; #ATR protocol: ns2 MAC Failed callback
set val(etxMetric) true; #ATR protocol: ETX route metric
set val(throughput) 5.40; #CBR rate (<= 5.4Mb/s)
#########################################
# Channel Model
#########################################
#Setting antenna at center of node,monitor and inspect
set tracefile [open ns.tr w] ;#Adding this
$ns trace-all $tracefile ;#adding this
;#new format for wireless traces
$ns use-newtrace
set namTr [open nam.tr w]
$ns namtrace-all-wireless $namTr $val(x) $val(y)
set scenarioTr [open scenario.tr w]
#nam file creation
#set namfile [open mdart.nam w]
#$ns namtrace-all $namfile
#$ns namtrace-all-wireless $namfile $val(x) $val(y)
#set chan [new $val(chan)];
#create channel
set chan_1_ [new $val(chan)]
set chan_2_ [new $val(chan)]
$prop topography $topo
#Global node setting
$ns node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propInstance $prop \
-phyType $val(netif) \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF \
-channel $chan_1_
################################
# Nodes deFinition
################################
;# Create the specified number of nodes [$val(n)] and "attach" them to the channel.
#for {set i 0} {$i < $val(n) } {incr i} {
# set node($i) [$ns node]
# $node($i) random-motion 0 ; #disabled random motion
#$ns initial_node_pos $n($i) 20 ;
#}
################################
# Node conode(figurationode(
################################
;#node initial coordinates
set node(0) [$ns node]
$node(0) random-motion 0
$node(0) set X_ 20.0
$node(0) set Y_ 65.0
$node(0) set Z_ 0.0
$ns initial_node_pos $node(0) 20
set node(1) [$ns node]
$node(1) random-motion 0
$node(1) set X_ 50.0
$node(1) set Y_ 10.0
$node(1) set Z_ 0.0
$ns initial_node_pos $node(1) 20
set node(2) [$ns node]
$node(2) random-motion 0
$node(2) set X_ 0.0
$node(2) set Y_ 0.0
$node(2) set Z_ 0.0
$ns initial_node_pos $node(2) 20
set node(3) [$ns node]
$node(3) random-motion 0
$node(3) set X_ 95.0
$node(3) set Y_ 35.0
$node(3) set Z_ 0.0
$ns initial_node_pos $node(3) 20
set node(4) [$ns node]
$node(4) random-motion 0
$node(4) set X_ 8.0
$node(4) set Y_ 50.0
$node(4) set Z_ 0.0
$ns initial_node_pos $node(4) 20
set node(5) [$ns node]
$node(5) random-motion 0
$node(5) set X_ 65.0
$node(5) set Y_ 20.0
$node(5) set Z_ 0.0
$ns initial_node_pos $node(5) 20
set node(6) [$ns node]
$node(6) random-motion 0
$node(6) set X_ 146.0
$node(6) set Y_ 5.0
$node(6) set Z_ 0.0
$ns initial_node_pos $node(6) 20
set node(7) [$ns node]
$node(7) random-motion 0
$node(7) set X_ 20.0
$node(7) set Y_ 146.0
$node(7) set Z_ 0.0
$ns initial_node_pos $node(7) 20
$ns node-config \
-channel $chan_2_
set node(8) [$ns node]
$node(8) random-motion 0
$node(8) set X_ 70.0
$node(8) set Y_ 70.0
$node(8) set Z_ 0.0
$ns initial_node_pos $node(8) 20
set node(9) [$ns node]
$node(9) random-motion 0
$node(9) set X_ 130.0
$node(9) set Y_ 180.0
$node(9) set Z_ 0.0
$ns initial_node_pos $node(9) 20
set node(10) [$ns node]
$node(10) random-motion 0
$node(10) set X_ 160.0
$node(10) set Y_ 0.0
$node(10) set Z_ 0.0
$ns initial_node_pos $node(10) 20
set node(11) [$ns node]
$node(11) random-motion 0
$node(11) set X_ 150.0
$node(11) set Y_ 165.0
$node(11) set Z_ 0.0
$ns initial_node_pos $node(11) 20
set node(12) [$ns node]
$node(12) random-motion 0
$node(12) set X_ 110.0
$node(12) set Y_ 80.0
$node(12) set Z_ 0.0
$ns initial_node_pos $node(12) 20
set node(13) [$ns node]
$node(13) random-motion 0
$node(13) set X_ 65.0
$node(13) set Y_ 114.0
$node(13) set Z_ 0.0
$ns initial_node_pos $node(13) 20
set node(14) [$ns node]
$node(14) random-motion 0
$node(14) set X_ 50.0
$node(14) set Y_ 165.0
$node(14) set Z_ 0.0
$ns initial_node_pos $node(14) 20
set node(15) [$ns node]
$node(15) random-motion 0
$node(15) set X_ 180.0
$node(15) set Y_ 100.0
$node(15) set Z_ 0.0
$ns initial_node_pos $node(15) 20
###################################
# Nodes placement
###################################
#parameters for trace Inspect
puts $scenarioTr "# nodes: $val(n),max time: $val(end)"
puts $scenarioTr "# nominal range: 250"
for {set i 0} {$i < $val(n)} {incr i} {
set X [expr [$randomNodeX value] ]
$node($i) set X_ $X
set Y [expr [$randomNodeY value] ]
$node($i) set Y_ $Y
$node($i) set Z_ 0.0
$ns initial_node_pos $node($i) 20
puts $scenarioTr "\$node_($i) set X_ $X"
puts $scenarioTr "\$node_($i) set Y_ $Y"
puts $scenarioTr "\$node_($i) set Z_ 0.0"
}
###################################
# moving nodes
###################################
#$ns at 3.0 "$n1 setdest 62.0 55.0 25.0"
#$ns at 3.0 "$n7 setdest 52.0 12.0 5.0"
#############################
# Data load
#############################
for {set i 0} {$i < $val(n)} {incr i} {
set udp($i) [new Agent/UDP]
$ns attach-agent $node($i) $udp($i)
set dest [expr round([$randomNode value])]
while {$dest == $i} {
set dest [expr round([$randomNode value])]
}
set monitor($dest) [new Agent/LossMonitor]
$ns attach-agent $node($dest) $monitor($dest)
$ns connect $udp($i) $monitor($dest)
set cbr($i) [new Application/Traffic/CBR]
$cbr($i) attach-agent $udp($i)
$cbr($i) set packetSize_ 1000
$cbr($i) set random_ false
$cbr($i) set rate_ [expr $val(throughput) / [expr $val(n) * sqrt($val(n))]]Mb
$ns at [expr $val(dataStart) + [$randomSeed value]] "$cbr($i) start"
$ns at $val(dataStop) "$cbr($i) stop"
}
###################################
# Nodes mobility (data load)
###################################
#for {set i 0} {$i < $val(n)} {incr i} {
# set udp($i) [new Agent/UDP]
# $ns attach-agent $n0 $udp($i)
# set dest [expr round([$randomNode value])]
# while {$dest == $i} {
# set dest [expr round([$randomNode value])]
# }
# set monitor($dest) [new Agent/LossMonitor]
# $ns attach-agent $n($dest) $monitor($dest)
# $ns connect $udp1 $monitor($dest)
# set cbr($i) [new Application/Traffic/CBR]
# $cbr($i) attach-agent $udp($i)
# $cbr($i) set packetSize_ 1000
# $cbr($i) set random_ false
# $cbr($i) set rate_ [expr $val(throughput) / [expr $val(n) * sqrt($val(n))]]Mb
# $ns at [expr $val(dataStart) + [$randomSeed value]] "$cbr($i) start"
# $ns at $val(dataStop) "$cbr($i) stop"
#}
###############################
# Routing model (for M-DART)
###############################
if {$val(rp) == "M-DART"} {
Agent/ATR set macFailed_ $val(macFailed)
Agent/ATR set etxMetric_ $val(etxMetric)
}
############################
# Tracing
############################
;#Simulation time print
proc timeTrace { tracePause} {
global ns
set Now [$ns Now]
$ns at [expr $Now + $tracePause] "timeTrace $tracePause"
puts "$Now simulation seconds"
}
$ns at 10.0 "timeTrace 10.0"
if {$val(rp) == "MDART"} {
for {set i 0} {$i < $val(n)} {incr i} {
# printing the routing table
$ns at [expr $val(end) - 1.0] "[$node($i) agent 255] routingTablePrint"
# printing the dht table
$ns at [expr $val(end) - 0.5] "[$node($i) agent 255] dhtTablePrint"
}
}
#########################
# Start and end
#########################
for {set i 0} {$i < $val(n) } {incr i} {
$ns at $val(end) "$node($i) reset";
}
$ns at $val(end) "fileTrace"
$ns at $val(end) "$ns halt"
proc fileTrace {} {
global ns tracefile namTr
global ns tracefile scenarioTr
$ns flush-trace
close $tracefile ;#adding tis
close $scenarioTr
#close $namTr
#exec nam nam.tr &
}
$ns run
这个脚本产生发送、接收和丢弃但没有转发......这两个脚本之间的区别在于数据加载部分......谢谢:D
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。