NS-2 Tutorial (For CMPE 252 A)

advertisement
NS Tutorial
(For CMPE 252 A)
By Duy Nguyen
10/25/2012
What is NS-2?
• A discrete event simulator targeted at
networking research
• Written in C++ and OTcl(OO of Tcl)
• OTcl usage:
– Configuration and setup
– Manipulating existing C++ objects
• C++ usage:
– Anything that requires processing each packet of a
flow
– Change behavior of existing C++ class
Getting NS-2
• Go to http://www.isi.edu/nsnam/ns/
• Download an ns-allinone package
• $ tar –zxf ns-allinone-2.34.tar.gz
• $ cd ns-allinone-2.34 && ./install
• Follow the instructions for setting up the environments:
setenv LD_LIBRARY_PATH /cse/grads/duy/ns-allinone2.34/otcl-1.13:/cse/grads/duy/ns-allinone-2.34/lib
setenv TCL_LIBRARY /cse/grads/duy/ns-allinone2.34/tcl8.4.18/library
• $ cd ns-2.34; ./validate
NS-2 initialization
# create simulator
set ns [new Simulator]
# Open trace file
set tracefile [open out.tr w]
$ns trace-all $tracefile
# Open trace file
$set namefile [open out.nam w]
$ns nametrace-all $namefile
# define a finish procedure
proc finish {} {
global ns tracefile namefile
$ns flush-trace
close $tracefile
close $namfile
exec nam out.nam &
exit 0
}
# calling finish procedure at 125
$ns at 125.0 “finish”
# Run simulation
$ns run
NS-2 Create Nodes and Links
# Create nodes
set n0 [$ns node]
set n1 [$ns node]
#available queues: RED, FQ, DRR, SFO,CBQ.
$ns duplex-link $n0 $n1 10Mb 10ms DropTail
#a unidirectional link
$ns simplex-link $n0 $n1 10Mb 10m
# Set queue size limit on the link to 50
$ns queue-limit $n0 $n2 50
NS-2 Agents and Applications
# Set up a TCP connection for node 0
setup tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
# Create a sink agent for node 1
set sink [new Agent/TCPSink]
$ns attach-agent $ns1 $sink
#Now connect them
$ns connect $tcp $sink
# Set packet size
$ns set packetSize_ 512
# Set FTP over TCP connection
# FTP uses TCP/IP
set ftp [new Application/FTP]
$ftp attach-agent $tcp
# Setting up UDP connection
set udp [new Agent/UDP]
$ns attach-agent $n0 $udp
set null [new Agent/Null]
$ns attach-agent $n1 $null
$ns connect $udp $null
# Set up CBR over UDP connection
Set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set rate_ .01Mb
# introduce noise
$cbr set random_ true
# interval between transmission of packets
$cbr interval_ .005
# set packet Size
$cbr set packetSize_ 512
Scheduling Events
# Format
$ns at <time> <event>
# Examples
$ns at 1.0 “$cbr start”
$ns at 3.0 “$ftp start”
$ns at 95.0 “$cbr stop”
$ns at 100.0 “$ftp stop”
#a unidirectional link
$ns simplex-link $n0 $n1 10Mb 10m
Trace File
# Format
<event> <time> <from> <to> <pktype> <size>
------<fid> <src> <dest> <seq> <pktid>
#Please see
http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats
+
r
+
+
+
r
r
+
r
+
+
r
+
r
+
+
-
0.987333 3 5 cbr 1000 ------- 2 1.0 5.0 28
0.987333 3 5 cbr 1000 ------- 2 1.0 5.0 28
0.989 1 2 cbr 1000 ------- 2 1.0 5.0 49 49
0.989 2 3 cbr 1000 ------- 2 1.0 5.0 49 49
0.992857 1 2 cbr 1000 ------- 2 1.0 5.0 50
0.992857 1 2 cbr 1000 ------- 2 1.0 5.0 50
0.994 2 3 cbr 1000 ------- 2 1.0 5.0 33 33
1 0 2 tcp 40 ------- 1 0.0 4.0 0 51
1 0 2 tcp 40 ------- 1 0.0 4.0 0 51
1.006667 3 5 cbr 1000 ------- 2 1.0 5.0 27
1.006857 1 2 cbr 1000 ------- 2 1.0 5.0 50
1.006857 2 3 cbr 1000 ------- 2 1.0 5.0 50
1.01016 0 2 tcp 40 ------- 1 0.0 4.0 0 51
1.01016 2 3 tcp 40 ------- 1 0.0 4.0 0 51
1.010714 1 2 cbr 1000 ------- 2 1.0 5.0 51
1.010714 1 2 cbr 1000 ------- 2 1.0 5.0 51
1.014 2 3 cbr 1000 ------- 2 1.0 5.0 29 29
1.014 3 5 cbr 1000 ------- 2 1.0 5.0 29 29
1.014 3 5 cbr 1000 ------- 2 1.0 5.0 29 29
1.020667 2 3 cbr 1000 ------- 2 1.0 5.0 34
1.024714 1 2 cbr 1000 ------- 2 1.0 5.0 51
1.024714 2 3 cbr 1000 ------- 2 1.0 5.0 51
1.028571 1 2 cbr 1000 ------- 2 1.0 5.0 52
1.028571 1 2 cbr 1000 ------- 2 1.0 5.0 52
28
28
50
50
27
50
50
52
52
34
52
52
53
53
Comments on the tracefile
• There are current old and new trace format, select one
which is most suitable.
• Need to write your own script for processing data from
the trace file i.e. throughput, delay etc
• Awk, perl, grep are some of the tools
• Need to specify how the throughput and delay are
obtained. For example:
– Throughput is the number of successful packets received
multiply by the packet length and divided by the total simulation
time
– Delay is difference between the time a packet arrives at the
queue and the time a packet gets transmitted successfully
Plotting graphs
• Matlab, Xgraph, and many other tools
• I personally use an awk script to extract
throughput, delay, etc information and use
Microsoft Excel to graph them.
Wireless Simulation
set
set
set
set
set
set
set
set
set
set
set
set
opt(chan)
opt(prop)
opt(netif)
opt(mac)
opt(ifq)
opt(ll)
opt(ant)
opt(ifqlen)
opt(nn)
opt(flow)
opt(row)
opt(column)
#set opt(adhocRouting)
set
set
set
set
set
set
set
opt(adhocRouting)
opt(cp) ""
opt(sc) ""
opt(x)
400
opt(y)
400
opt(seed)
0
opt(stop)
50
Channel/WirelessChannel;
Propagation/TwoRayGround;
Phy/WirelessPhy;
Mac/802_11;
Queue/DropTail/PriQueue;
LL
;#link layer
Antenna/OmniAntenna;
50
;# queue length
36
;# number of nodes
3
6
;#for grid
6
DSDV
;# routing protocol
DumbAgent ;# disable routing
;# connection pattern
;# node movement
;# x coordinate of topology
;# y coordinate of topology
;# seed for random number gen
;# time to stop simulation
# Create topography object
set topo
[new Topography]
# define topology
$topo load_flatgrid $opt(x) $opt(y)
# configure for base-station node
$ns_ node-config -adhocRouting $opt(adhocRouting)
-llType $opt(ll)
-macType $opt(mac)
-ifqType $opt(ifq)
-ifqLen $opt(ifqlen)
-antType $opt(ant)
-propType $opt(prop)
-phyType $opt(netif)
-channelType $opt(chan)
-topoInstance $topo
-agentTrace ON
-routerTrace OFF
-macTrace ON
-movementTrace OFF
# create God for monitoring all nodes
create-god [expr $opt(nn)]
# Creating mobile nodes
for {set j 0} {$j < $opt(nn)} {incr j} {
set node_($j) [$ns_ node]
}
# define node’s fixed position
for {set j 0} {$j <
for {set i 0} {$i
$node_([expr $j
$node_([expr $j
$node_([expr $j
}
}
$opt(row)} {incr j} {
< $opt(column)} {incr
* $opt(column) + $i])
* $opt(column) + $i])
* $opt(column) + $i])
i} {
set X_ [expr $i * 10]
set Y_ [expr $j * 10]
set Z_ 0
# setting up connection
for {set k 1} {$k <= $opt(flow)} {incr k} {
set udp_($k) [new Agent/UDP]
$ns_ attach-agent $node_([expr $l + 0]) $udp_($k)
set null_($k) [new Agent/Null]
$ns_ attach-agent $node_([expr $l + 1]) $null_($k)
set cbr_($k) [new Application/Traffic/CBR]
$cbr_($k) set packetSize_ $pktsize
$cbr_($k) set interval_ $inter
$cbr_($k) set random_ 1
$cbr_($k) attach-agent $udp_($k)
$ns_ connect $udp_($k) $null_($k)
$ns_ at 9.8 "$cbr_($k) start"
$ns_ at 30.0 "$cbr_($k) stop"
set l
}
[expr $l + 2]
# Tell all nodes when the simulation ends
for {set i 0} {$i < $opt(nn) } {incr i} {
$ns_ at $opt(stop).0 "$node_($i) reset";
}
$ns_ at $opt(stop).0004 "stop"
$ns_ at $opt(stop).0005 "puts \"NS EXITING...\" ; $ns_
halt"
Generating traffic-connection
# Available in
~ns/indep-utils/cmu-scen-gen
#
Format
ns cbrgen.tcl [-type cbr|tcp] [-nn nodes] [-seed seed]
[-mc connections] [-rate rate]
# CBR 20 nodes, max 8 connections, seed value 1.0 and a
rate of 4.0, output to cbr-20-test
ns cbrgen.tcl -type cbr -nn 20 -seed 1.0 -mc 8 -rate 4.0
> cbr-20-test
Generating node-movement file
# Available in
~ns/indep-utils/cmu-scen-gen/setdest and consists of
setdest{.cc,.h} and Makefile
# Format
./setdest [-n num_of_nodes] [-p pausetime] [-s maxspeed]
[-t simtime] [-x maxx] [-y maxy] > [outdir/movementfile]
# 20 nodes, maximum speed of 10.0m/s, an average pause
between movement being 2s.
./setdest -n 20 -p 2.0 -s 10.0 -t 200 -x 500 -y 500 >
scen-20-test
#Specify traffic-connection and node-movement in script
set opt(cp)
"tcl/mobility/scene/cbr-20-test"
set opt(sc)
"tcl/mobility/scene/scen-20-test"
New protocols
• See Chapter 3.1-3.3 of NS Manual for better
understanding of C++ and Otcl
• Linkage between the C++ code and Tcl code(if
you modify an already existing protocol, no
need)
• Add new protocols
Make changes to makefile(.cc) or ~ns/tcl/lib/nslib.tcl(.tcl)
$make clean && ./configure --enable-debug &&
make
Other features
• Emulation (nice complement with your
simulation)
• NS-Click (Modular router)
• Sensor-nets
• Satellite
• …
More Help
• Use Nam visual tool to aid in visualizing the
networks (not really essential)
• Check out other tutorials in reference section
• Sign up for NS user mailing list
– http://www.isi.edu/nsnam/ns/ns-lists.html
• Documentation(most comprehensive source):
– http://www.isi.edu/nsnam/ns/ns-documentation.html
• Very detailed tutorial:
http://www.springer.com/engineering/signals/boo
k/978-0-387-71759-3
References
• NS-2 page-- http://www.isi.edu/nsnam/ns/
• Detailed NS-2 tutorial--http://wwwsop.inria.fr/members/Eitan.Altman/COURS
-NS/n3.pdf
• Marc Greis’ tutorial
http://www.isi.edu/nsnam/ns/tutorial/index.
html
• NS-2 by examples-http://nile.wpi.edu/NS/E
NS-3
• An open source project building a new
network simulator to replace ns-2
ns-3 is a new simulator, without
backward compatibility
Similarities to ns-2:
• C++ software core
• GNU GPLv2 licensing
• ported ns-2 models: random variables, error models,
OLSR, Calendar Queue scheduler, (more planned)
Differences:
• Python scripting (or C++ programs) replaces OTcl
• most of the core rewritten
• also based on the yans and GTNetS simulators
• new animators, configuration tools, etc. are in work
ns-3 follows a Linux architecture
• Linux corollaries
class
Ipv4Protocol
class
NetDevice
– each NetDevice is modelled
like struct net_device
– each layer-3 protocol has a
struct in_device
component for each
NetDevice
– this interface (transmit side)
is aligned with Linux
dev_queue_xmit()
– on receive side, demux is
modelled after Linux protocol
handlers
Software Integration
Do not reimplement models and tools for which
open-source implementations abound
• ns-3 conforms to standard input/output formats
so that other tools can be reused.
– e.g., pcap trace output, ns-2 mobility scripts
• ns-3 is adding support for running
implementation code
– Network Simulation Cradle integration has met with
success: Linux TCP code
– ns-3 “process” API
Instructions
• Go to http://www.nsnam.org/ and download
current ns-3
• $ wget https://www.nsnam.org/release/nsallinone-3.15.tar.bz2
• ./build.py --enable-examples --enable-tests
– This script will build everything
• Also: ./waf clean; ./waf -d optimized --enableexamples --enable-tests configure; ./waf
– Replace ‘optimized’ with ‘debug’ for enabling debug
messages
Sample
• Browse examples for sample scenarios. Try simpleglobal-routing
• // n0
• // \ 5 Mb/s, 2ms
• //
\
1.5Mb/s, 10ms
• //
n2 -------------------------n3
• //
/
• // / 5 Mb/s, 2ms
• // n1
• CBR/UDP flows from n0 to n3, and from n3 to n1
• FTP/TCP flow from n0 to n3, starting at time 1.2 to time
1.35 sec.
• UDP packet size of 210 bytes, with per-packet interval
0.00375 sec.
Sample
• To run: ./waf --run simple-global-routing
• Output: pcap files and trace .tr files
• To view pcap files:
– tcpdump -nn -tt -r filename.pcap
Sample
• duy@ddn:~/ns-allinone-3.15/ns-3.15$ tcpdump -nn -tt -r simpleglobal-routing-1-1.pcap
• reading from file simple-global-routing-1-1.pcap, link-type PPP
(PPP)
• 1.124900 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.134043 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.143186 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.152329 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.161472 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.170615 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.179757 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.188900 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
• 1.198043 IP 10.1.3.1.49153 > 10.1.2.1.9: UDP, length 512
Final comments
• Since ns-3 is a new network simulator, it
does not have as many network models as
ns-2.
• For wireless simulations: use ns-3
– Wireless Routing, Rate Adaptation
• For wired simulations: use ns-2
– Distance Vector (RIP): routing/rtProtoDV.cc
– Link State: linkstate/
References
• NS-3 page-- http://www.nsnam.org/
• Detailed NS-2 tutorial--http://wwwsop.inria.fr/members/Eitan.Altman/COURSNS/n3.pdf
• Slides from Tom Henderson’s talk UW-EE
• Documentationhttp://www.nsnam.org/documenta
tion/
• Tutorial:
http://www.nsnam.org/docs/release/3.15/tutorial/
singlehtml/index.html
• Contact: Duy Nguyen duy att soe.ucsc.edu
Qualnet RIP Tutorials links
http://www.cs.binghamton.edu/~vinkolar/qualnet/QualNetTutorial.pdf
http://www.cs.binghamton.edu/~vinkolar/qualnet/qualnet-tut1.pdf
http://www.cs.binghamton.edu/~vinkolar/qualnet/qualnet-tut2.pdf
Download