ns-2 Tutorial (1)
Multimedia Networking Group,
The Department of Computer Science, UVA
Jianping Wang
Jianping Wang, 2004 cs757 1
• Objectives of this week
• What is ns -2?
• Working with ns -2
• Tutorial exercise
• ns-2 internals
• Extending ns -2
Partly adopted from Nicolas’ slides.
Jianping Wang, 2004 cs757 2
1
• Get some exposure to one of the most useful tools in networking research and development.
• Understand and work with a popular network simulator.
• Get a better understanding of the networking dynamics.
• “Smooth the learning curve ”.
Jianping Wang, 2004 cs757 3
• ns -2 stands for Network Simulator version 2.
• ns -2:
• Is a discrete event simulator for networking research
• Work at packet level.
• Provide substantial support to simulate bunch of protocols like TCP, UDP, FTP, HTTP and DSR.
• Simulate wired and wireless network.
• Is primarily Unix based.
• Use TCL as its scripting language.
• ns -2 is a standard experiment environment in research community.
Jianping Wang, 2004 cs757 4
2
Event
Scheduler tclcl otcl ns-2 tcl8.0
You are here.
• otcl: Object-oriented support
• tclcl: C++ and otcl linkage
• Discrete event scheduler
• Data network (the Internet) components
Jianping Wang, 2004 cs757 5
Simulation
Scenario
1 2
Tcl Script
C++
Implementation
Jianping Wang, 2004 set ns_ [new Simulator] set node_(0) [$ns_ node] set node_(1) [$ns_ node] class MobileNode : public Node
{ friend class PositionHandler ; public:
MobileNode();
•
•
} cs757 6
3
• C++: Detailed protocol simulations require systems programming language
– byte manipulation, packet processing, algorithm implementation
– Run time speed is important
– Turn around time (run simulation, find bug, fix bug, recompile, re-run) is slower
• Tcl: Simulation of slightly varying parameters or configurations
– quickly exploring a number of scenarios
– iteration time (change the model and re -run) is more important
Jianping Wang, 2004 cs757 7
• OPNET (http://www.opnet.com)
• Leading Commercial Software
• Support Windows and Unix
• Graphical Interface
• Not free
• GloMoSim (http://pcl.cs.ucla.edu/projects/glomosim)
• Simulation enviroment for wireless network
• Scalable to support thousands of nodes
• Using layered approach to build different simulation layers
• Free for educational users
• More Resources
• http://www.icir.org/models/simulators.html
Jianping Wang, 2004 cs757 8
4
Jianping Wang, 2004 cs757 9
• Download software package from: http://www.isi.edu/nsnam/ns /
- Easy installation way: all at once
• The latest version is 2.27 released at Jan 18, 2004. It contains:
- Tk release 8.4.5
- Tk release 8.4.5
- Otcl release 1.8
- TclCL release 1.15
- Ns release 2.27
- Nam release 1.10
- Xgraph version 12
- CWeb version 3.4g
- SGB version 1.0
- Gt-itm gt-itm and sgb2ns 1.1
- Zlib version 1.1.4
• Works on Unix and cygwin for windows 9x/2000/xp.
Jianping Wang, 2004 cs757 10
5
Jianping Wang, 2004 cs757
[jwang@iodine jwang]$ ns
% set ns [new Simulator]
_o4
% $ns at 1 “puts \“Hello World!\””
1
% $ns at 1.5 “exit”
2
% $ns run
Hello World!
[jwang@iodine jwang]$
Jianping Wang, 2004 cs757 12
11
6
simple.tcl: set ns [new Simulator]
$ns at 1 “puts \“Hello World!\””
$ns at 1.5 “exit”
$ns run
[jwang@iodine jwang]$ ns simple.tcl
Hello World!
[jwang@iodine jwang]$
Jianping Wang, 2004 cs757 13
}
proc test {} { set a 43 set b 27 set c [ expr $a + $b]
; a = 43
; b = 27
; c = a + b set d [ expr [ expr $a - $b] * $c] ; d = (a – b) * c for { set k 0} {$k < 10} { incr k} { ; for (k=0; k<10; k++) puts “k = $k”
}
Jianping Wang, 2004 cs757 14
7
}
Class mom mom instproc greet {} {
$ self instvar age_ puts “$age_ years old mom:
How are you doing?” set a [ new mom]
$a set age_ 45 set b [ new kid]
$b set age_ 15
Class kid superclass mom kid instproc greet {} {
$ self instvar age_ puts “$age_ years old kid:
What’s up, dude?”
}
Jianping Wang, 2004 cs757
$a greet
$b greet
15
• Create a new simulator object
• [Turn on tracing]
– [Open your own trace files]
• Create network (physical layer)
• Create link and queue (data-link layer)
• Define routing protocol
• Create transport connection (transport layer)
• Create traffic (application layer)
• Insert errors
Jianping Wang, 2004 cs757 16
8
• Create simulator instance set ns [new Simulator]
- Usually the first non-comment statement in ns-
2 script
- Initialize the packet format
- Create a scheduler (default is a calendar scheduler)
- Create a “null agent”
Jianping Wang, 2004 cs757 17
• Open file for NS tracing set f [open out.tr w]
$ns trace-all $f
• Open file for nam tracing set nf [open out.nam w]
$ns namtrace-all $nf
• Open your own trace file set my_f [open my_out.tr w] puts $my_f “[$ns now] [expr $x(1) + $y(1)]”
Jianping Wang, 2004 cs757 18
9
• Network topology
Jianping Wang, 2004 cs757
• Creating nodes set node_(h1) [$ns node] set node_(h2) [$ns node] set node_(r1) [$ns node] set node_(r2) [$ns node] set node_(h3) [$ns node] set node_(h4) [$ns node]
Jianping Wang, 2004 cs757 20
19
10
• Creating Link and Queue
$ns duplex-link $node_(h1) $node_(r1)
10Mb 2ms DropTail
$ns duplex-link $node_(h2) $node_(r2)
10Mb 3ms DropTail
$ns duplex-link $node_(r1) $node_(r2)
1.5Mb 20ms DropTail
$ns queue-limit $node_(r1) $node_(r2) 50
……
Jianping Wang, 2004 cs757 21
set tcp0 [$ns create-connection TCP/Reno
$node_(h1) TCPSink/DelAck $node_(h4) 0]
Jianping Wang, 2004 cs757 22
11
• Attaching FTP traffic on the top of TCP set ftp0 [$tcp0 attach-app FTP]
Jianping Wang, 2004 cs757
set loss_module [new ErrorModel ]
$loss_module set rate_ 0.01
$loss_module unit pkt
$loss_module ranvar [new
RandomVariable/Uniform]
$loss_module drop -target [new Agent/Null]
$ns lossmodel $loss_module $n0 $n1
Jianping Wang, 2004 cs757 24
23
12
Jianping Wang, 2004 cs757
• Schedule an event to start traffic at time 1.0
$ns at 1.0 "$ftp0 start“
• Schedule an event to stop ns at time 17.0
$ns at 17.0 "$ftp0 stop“
• Start ns
$ns run
- last statement
• Stop ns exit 0
Jianping Wang, 2004 cs757 26
25
13
• Replay events from a nam trace file
• The nam trace file can be huge when simulation time is long or events happen intensively. Be careful!
• Run nam:
– $nam –a nam_trace_file.nam
– In ns-2 script:
Proc finish{} {
…… exec nam –a nam_trace_file.nam & exit cs757 27
Jianping Wang, 2004 cs757 28
14
• Create your own output files
• Collect statistical data synchronized.
• Run xgraph:
– $xgraph out0.tr, out1.tr –geometry 800x400
– In ns-2 script:
Proc finish{} {
…… exec xgraph out0.tr, out1.tr out2.tr –geometry
800x400 & exit
}
Jianping Wang, 2004 cs757 29
Jianping Wang, 2004 cs757 30
15
• http://www.isi.edu/nsnam/ns homepage
- the official ns
• http://www.isi.edu/nsnam/ns/ns-documentation.html
- ns manual
• http://jan.netcomp.monash.edu.au/ProgrammingUnix
/tcl/tcl_tut.html
- Tcl tutorial
• http://bmrc.berkeley.edu/research/cmt/cmtdoc/otcl/ oTcl tutorial
Jianping Wang, 2004 cs757 31
16