📄 nsscript5.htm
字号:
</PRE></CODE></TD></TR></TBODY></TABLE>This sets up a TCP connection betwen the
two nodes with a TCP source on node0. </P>
<P>Then we need to define stop time when the simulation ends and tell
mobilenodes to reset which actually resets thier internal network components,
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>#
# Tell nodes when the simulation ends
#
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at 150.0 "$node_($i) reset";
}
$ns_ at 150.0001 "stop"
$ns_ at 150.0002 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {
global ns_ tracefd
close $tracefd
}
</PRE></CODE></TD></TR></TBODY></TABLE>At time 150.0s, the simulation shall
stop. The nodes are reset at that time and the "$ns_ halt" is called at
150.0002s, a little later after resetting the nodes. The procedure stop{} is
called to flush out traces and close the trace file. </P>
<P>And finally the command to start the simulation,
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>puts "Starting Simulation..."
$ns_ run
</PRE></CODE></TD></TR></TBODY></TABLE></P>
<P>Save the file simple-wireless.tcl. In order to download a copy of the file
click <A
href="http://www.isi.edu/nsnam/ns/tutorial/examples/simple-wireless.tcl">here</A>.
Next run the simulation in the usual way (type at prompt: "ns
simple-wireless.tcl" ) </P>
<P>At the end of the simulation run, trace-output file simple.tr is created. As
we have turned on the AgentTrace and RouterTrace we see DSDV routing messages
and TCP pkts being received and sent by Router and Agent objects in node _0_ and
_1_. Note that all wireless traces starts with WL in their first field. See
Chapter 15 of <A href="http://www.isi.edu/nsnam/ns/ns-documentation.html">ns
documentation</A> for details on wireless trace. We see TCP flow starting at
10.0s from node0. Initially both the nodes are far apart and thus TCP pkts are
dropped by node0 as it cannot hear from node1. Around 81.0s the routing info
begins to be exchanged between both the nodes and around 100.0s we see the first
TCP pkt being received by the Agent at node1 which then sends an ACK back to
node0 and the TCP connection is setup. However as node1 starts to move away from
node0, the connection breaks down again around time 116.0s. Pkts start getting
dropped as the nodes move away from one another. </P><A name=second></A>
<P><STRONG>IX.2. Using node-movement/traffic-pattern files and other features in
wireless simulations </STRONG><BR></P>
<P>As an extension to the previous <A
href="http://www.isi.edu/nsnam/ns/tutorial/nsscript5.html#first">sub-section</A>,
we are going to simulate a simple multihop wireless scenario consisting of 3
mobilenodes here. As before, the mobilenodes move within the boundaries of a
defined topology. However the node movements for this example shall be read from
a node-movement file called scen-3-test. scen-3-test defines random node
movements for the 3 mobilenodes within a topology of 670mX670m. This file is
available as a part of the ns distribution and can be found, along with other
node-movement files, under directory ~ns/tcl/mobility/scene. Random node
movement files like scen-3-test can be generated using CMU's node-movement
generator "setdest". Details on generation of node movement files are covered in
<A href="http://www.isi.edu/nsnam/ns/tutorial/nsscript7.html#second">section
XI.2</A> of this tutorial. </P>
<P>In addition to node-movements, traffic flows that are setup between the
mobilenodes, are also read from a traffic-pattern file called cbr-3-test.
cbr-3-test is also available under ~ns/tcl/mobility/scene. Random CBR and TCP
flows are setup between the 3 mobilenodes and data packets are sent, forwarded
or received by nodes within hearing range of one another. See cbr-3-test to find
out more about the traffic flows that are setup. These traffic-pattern files can
also be generated using CMU's TCP/CBR traffic generator script. More about this
is discussed in <A
href="http://www.isi.edu/nsnam/ns/tutorial/nsscript7.html#first">section
XI.1</A> of this tutorial. </P>
<P>We shall make changes to the script, <A
href="http://www.isi.edu/nsnam/ns/tutorial/examples/simple-wireless.tcl">simple-wireless.tcl</A>,
we had created in <A
href="http://www.isi.edu/nsnam/ns/tutorial/nsscript5.html#first">section
IX.1.</A> and shall call the resulting file wireless1.tcl. For a copy of
wireless1.tcl download from <A
href="http://www.isi.edu/nsnam/ns/tutorial/examples/wireless1.tcl">here</A>. In
addition to the variables (LL, MAC, antenna etc) that were declared at the
beginning of the script, we now define some more parameters like the
connection-pattern and node-movement file, x and y values for the topology
boundary, a seed value for the random-number generator, time for the simulation
to stop, for convinience. They are listed as follows:
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>set val(chan) Channel/WirelessChannel
set val(prop) Propagation/TwoRayGround
set val(netif) Phy/WirelessPhy
set val(mac) Mac/802_11
set val(ifq) Queue/DropTail/PriQueue
set val(ll) LL
set val(ant) Antenna/OmniAntenna
set val(x) 670 ;# X dimension of the topography
set val(y) 670 ;# Y dimension of the topography
set val(ifqlen) 50 ;# max packet in ifq
set val(seed) 0.0
set val(adhocRouting) DSR
set val(nn) 3 ;# how many nodes are simulated
set val(cp) "../mobility/scene/cbr-3-test"
set val(sc) "../mobility/scene/scen-3-test"
set val(stop) 2000.0 ;# simulation time
</PRE></CODE></TD></TR></TBODY></TABLE>Number of mobilenodes is changed to 3;
Also we use DSR (dynamic source routing) as the adhoc routing protocol inplace
of DSDV (Destination sequence distance vector); </P>
<P>After creation of ns_, the simulator instance, open a file (wireless1-out.tr)
for wireless traces. Also we are going to set up nam traces.
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>set tracefd [open wireless1-out.tr w] ;# for wireless traces
$ns_ trace-all $tracefd
set namtrace [open wireless1-out.nam w] ;# for nam tracing
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
</PRE></CODE></TD></TR></TBODY></TABLE></P>
<P>
<P>Next (after creation of mobilenodes) source node-movement and connection
pattern files that were defined earlier as val(sc) and val(cp) respectively.
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>#
# Define node movement model
#
puts "Loading connection pattern..."
source $val(cp)
#
# Define traffic model
#
puts "Loading scenario file..."
source $val(sc)
</PRE></CODE></TD></TR></TBODY></TABLE></P>
<P>In node-movement file scen-3-test, we see node-movement commands like
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>$ns_ at 50.000000000000 "$node_(2) setdest 369.463244915743 \
170.519203111152 3.371785899154"
</PRE></CODE></TD></TR></TBODY></TABLE>This, as described in earlier
sub-section, means at time 50s, node2 starts to move towards destination
(368.4,170.5) at a speed of 3.37m/s. We also see other lines like
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>$god_ set-dist 1 2 2
</PRE></CODE></TD></TR></TBODY></TABLE>These are command lines used to load the
god object with the shortest hop information. It means the shortest path between
node 1 and 2 is 2 hops. By providing this information, the calculation of
shortest distance between nodes by the god object during simulation runs, which
can be quite time-consuming, is prevented.
<P>The setdest program (see <A
href="http://www.isi.edu/nsnam/ns/tutorial/nsscript7.html#second">section
XI.2</A>) generates movement pattern files using the random waypoint algorithm.
The node-movement files generated using setdest (like scen-3-test) already
include lines like above to load the god object with the appropriate information
at the appropriate time. </P>
<P>A program called calcdest (~ns/indep-utilities/cmu-scen-gen/setdest/calcdest)
can be used to annotate movement pattern files generated by other means with the
lines of god information. calcdest makes several assumptions about the format of
the lines in the input movement pattern file which will cause it to fail if the
file is not formatted properly. If calcdest rejects a movement pattern file you
have created, the easiest way to format it properly is often to load it into
ad-hockey and then save it out again. If ad-hockey can read your input
correctly, its output will be properly formatted for calcdest. </P>
<P>Both setdest and calcdest calculate the shortest number of hops between nodes
based on the nominal radio range, ignoring any effects that might be introduced
by the propagation model in an actual simulation. The nominal range is either
provided as an argument to the programs, or extracted from the header in
node-movement pattern files. </P>
<P>The path length information provided to god was used by CMU's Monarch Project
to analyze the path length optimality of ad hoc network routing protocols, and
so was printed out as part of the CMUTrace output for each packet. </P>
<P>Other uses that CMU has found for the information are:
<LI>Characterizing the rate of topology change in a movement pattern.
<LI>Identifying the frequency and size of partitions.
<LI>Experimenting with the behavior of the routing protocols if the god
information is used to provide them with ``perfect'' neighbor information at
zero cost.
<P></P>
<P></P>
<P>Next add the following lines for providing initial position of nodes in nam.
However note that only node movements can currently be seen in nam . Dumping of
traffic data and thus visualization of data pkt movements in nam for wireless
scenarios is still not supported (future work).
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE># Define node initial position in nam
for {set i 0} {$i < $val(nn)} {incr i} {
# 20 defines the node size in nam, must adjust it according to your
# scenario size.
# The function must be called after mobility model is defined
$ns_ initial_node_pos $node_($i) 20
}
</PRE></CODE></TD></TR></TBODY></TABLE></P>
<P>Next add informative headers for the CMUTrace file, just before the line "ns_
run" :
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>puts $tracefd "M 0.0 nn $val(nn) x $val(x) y $val(y) rp $val(adhocRouting)"
puts $tracefd "M 0.0 sc $val(sc) cp $val(cp) seed $val(seed)"
puts $tracefd "M 0.0 prop $val(prop) ant $val(ant)"
</PRE></CODE></TD></TR></TBODY></TABLE>The rest of the script remains unchanged.
</P>
<P>Save the file wireless1.tcl. Make sure the connection-pattern and
node-movement files exist under the directories as declared above. <BR>Run the
script by typing at the prompt:
<TABLE cellPadding=5 bgColor=#eeeeee>
<TBODY>
<TR>
<TD><CODE><PRE>ns wireless1.tcl
</PRE></CODE></TD></TR></TBODY></TABLE>On completion of the run, CMUTrace output
file "wireless1-out.tr" and nam output file "wireless1-out.nam" are created.
Running wireless1-out.nam we see the three mobilenodes moving in nam window.
However as mentioned earlier no traffic flow can be seen (not supported as yet).
For a variety of coarse and fine grained trace outputs turn on/off AgentTrace,
RouteTrace, MacTrace and movementTrace as shown earlier in the script. From the
CMUTrace output we find nodes 0 and 2 are out of range and so cannot hear one
another. Node1 is in range with nodes 0 and 2 and can communicate with both of
them. Thus all pkts destined for nodes 0 and 2 are routed through node 1. For
details on CMUTraces see chapter 15 of <A
href="http://www.isi.edu/nsnam/ns/ns-documentation.html">ns documentation</A>.
</P>
<HR>
<P>[<A href="http://www.isi.edu/nsnam/ns/tutorial/nsscript4.html">Previous
section</A>] [<A href="http://www.isi.edu/nsnam/ns/tutorial/nsscript6.html">Next
section</A>] [<A href="http://www.isi.edu/nsnam/ns/tutorial/nsindex.html">Back
to the index</A>] </P>
<P>VINT <BR>
<ADDRESS><A href="mailto:ns-users@isi.edu">ns-users@isi.edu</A></ADDRESS>
<P></P></LI></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -