微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NS2:数据包不会转发数据

如何解决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 举报,一经查实,本站将立刻删除。