Network Simulator (NS-2)
Agenda
Overview of NS-2
History
Platforms Supported
Discrete Event Simulator
NS-2 Environment
NS-2 Hierarchy
NS-2 Architecture
Node Architecture
Multicast Node Architecture
Packet Structure
Links
Traffic Flow
Example
Overview of NS-2
Discrete Event Simulator
Packet level
Modeling Network protocols
Collection of Various protocols at multiple layers
TCP(reno, tahoe, vegas, sack)
MAC(802.11, 802.3, TDMA)
Ad-hoc Routing (DSDV, DSR, AODV, TORA)
Sensor Network (diffusion, gaf)
Multicast protocols, Satellite protocols, and many others
Overview of NS-2
Maintained through VINT project
NS2 :collaborative simulation environment
Freely
distributed and open source
Supports NT research and education
Protocol design , traffic analysis etc.
Provides
common reference
History
1995 : Developed by LBL through support
of DARPA
1996: NS was extended and distributed
by VINT project
1997: Satellite models added @ UCB
1999: Wireless models added @ CMU
incorporation of emulation
Platforms supported
Most
UNIX and UNIX-like systems
FreeBSD
Linux
Solaris
Windows
98/2000/2003/XP
Cygwin
required
Some work , some doesnt
6
NS-2 : Components
NS Simulator
NAM Network AniMator
visual demonstration of NS output
Preprocessing
Handwritten
TCL or
Topology generator
Post analysis
Trace
analysis using Perl/TCL/AWK/MATLAB
Users Perspective
From the users perspective, NS2 is an OTcl
interpreter that takes an OTcl script as input
and produces a trace file as output.
Discrete event simulator
ns-2 is an discrete event driven simulation
Physical activities are translated to events
Events are queued and processed in the order of their
scheduled occurrences
Time progresses as the events are processed
Time: 1.5 sec
1
Time: 2.0 sec
Time: 1.7 sec
2
Time: 1.8 sec
Discrete Event Scheduler
time_, uid_, next_, handler_
head_ ->
head_ ->
handler_ -> handle()
insert
time_, uid_, next_, handler_
Event Scheduler
10
Event Scheduler
Non-Real time schedulers
Implementations
: List , Heap , Calender
Calender is default
Real time schedulers
Used
for emulation for direct interaction with real NT.
Basic use of an event scheduler:
schedule
simulation events, such as when to start an
FTP application, when to finish a simulation, or for
simulation scenario generation prior to a simulation
run.
11
NS-2 Environment
Simulation
Scenario
set ns_ [new Simulator]
Tcl Script
set node_(0) [$ns_ node]
set node_(1) [$ns_ node]
C++
Implementation
class MobileNode : public Node
{
friend class PositionHandler;
public:
MobileNode();
}
12
tcl Interpreter With Extents
Event
Scheduler
otcl
tcl8.0
Network
Component
tclcl
ns-2
otcl: Object-oriented support
tclcl: C++ and otcl linkage
Discrete event scheduler
Data network components
13
NS-2 Hierarchy
T c lO b je c t
N S O je c t
C la s s if e r
C o n n e c to r
A d d r
D e la y
R e p lic a t o r
A g e n t
M C a s t
A p p l ic a t i o n
M P a th
Q u e u e
H a sh
T ra c e
14
NS-2 Hierarchy
A gent
U D P
TC P
D SD V
R eno
R BP
AO D V
TO RA
D SR
A p p l ic a t i o n
Q ueue
T e ln e t
T ra c e
V egas
T r a f f ic
D r o p t a il
R BP
S a ck1
N ew R eno
Tap
E x p o n e n t ia l
P a r e to
S in k
C BR
F u llT C P
T ra c e
SR M
FTP
RED
E nq
FQ
SFQ
D R R
D eq
D ro p
C BQ
A d a p tiv e
15
NS-2 Directory Structure
sim
tcl8.0
tk8.0
otcl
Tcl
ns-2
tcl code
nam-1
C++ code
...
tcl
example
ex
test
validation test
lib
...
tcl code core
16
Node Architecture
Node
Classifier
Node entry point
Addr
Classifier
Local
Agent
Agent
Agent
Port
Classifiers: packet demultiplexers.
Link
Link
Agents are either protocol endpoints or related
objects that generate/fill-in packet fields.
Link
17
Multicast Node architecture
18
Structure
PacketsPacket
(events)
packet
Size
determined
at
simulation
config time
next_
accessdata( )
bits( )
- packet size
Size
determined at
compile time
Size
determined at
compile time
Size
determined at
compile time
Size
determined at
compile time
cmn header
tcp header
- timestamp
- type
- UID
- interface label
ip header
trace header
19
Links
Links: keeps track of from and to node objects.
blocked
Link
entry
point
Enq Trace
Queue
Deq Trace
Drop head
Drp Trace
Delay
TTL
Rcv Trace
20
N1
N2
Node
Node
Application
Classifier
Port
Local
Agent
Classifier
Classifier
Classifier
Local
Port
Agent
Application
Addr
Addr
Link
Enq Trace
Queue
Link
Drop head
Deq Trace
Delay
TTL
Rcv Trace
Drp Trace
21
NS-2 : C++ / OTCL
NS-2 Code contains two sets of
languages, namely C++ and OTcl.
C++ is used for the creation of objects
because of speed and efficiency.
OTcl is used as a front-end to setup the
simulator, configure objects and
schedule events because of its ease of
use.
22
Why two languages? (Tcl & C++)
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
23
Tcl or C++?
Tcl
Simple
Configuration, Setup, Scenario
If its something that can be done without
modifying existing Tcl module.
C++
Anything
that requires processing each
packet
Needs to change behavior of existing
module
24
TclObject
C++ class
OTcl class
Shadowing
hierarchy
hierarchy
TclObject()
Agent
Agent()
Agent/DSDV
DSDVAgent()
Agent/DSDV OTcl
shadow object
Agent/DSDV C++
object
25
Object Correspondence
Agent/DSDV
Constructor
Agent
Constructor
TclObject
Constructor
Invoke parent
Invoke parent
Create C++
init complete
init complete
OTcl shadow
TCL
C++
TclObject()
Constructor
Agent()
Constructor
AgentDSDV()
Constructor
Do nothing,
Invoke parent
Invoke parent
return
bind and
return
bind and
return
26
NS-2 Directory Structure
sim
tcl8.0
tk8.0
otcl
Tcl
ns-2
tcl code
nam-1
C++ code
...
tcl
example
ex
test
validation test
lib
...
tcl code core
27
Making Changes in C++ Space
Existing code
recompile
Addition
change
Makefile and recompile
28
Making Changes in otcl Space
Existing code
recompile
source
Addition
source
change
Makefile (NS_TCL_LIB), tcl/[Link] (source) and recompile
29
Installation
Unix variants
Download
NS-allinone-2.27 package
Contains
TCL/TK 8.4.5
oTCL 1.8
Tclcl 1.15
Ns2
Nam -1
30
Installation
After successful downloading and unzipping
install allinone package , install NS by
install by calling ~/ns-allinone-2.27/install
After successful installation , Validate the
scripts by running ./validate in ~/ns-allinone2.27/ns-2.27/
Its now all set to work with NS
31
Code for simple topology
Creating a Simulator Object
set
ns [new Simulator]
Setting up files for trace & NAM
set
trace_nam [open [Link] w]
set trace_all [open [Link] w]
Tracing files using their commands
$ns
namtrace-all $trace_nam
$ns trace-all $trace_all
32
Code for simple topology
Closing trace file and starting NAM
proc
finish { } {
global ns trace_nam trace_all
$ns flush-trace
close $trace_nam
close $trace_all
exec nam [Link] &
exit 0 }
33
Code for simple topology
Creating LINK & NODE topology
Creating
NODES
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set r1 [$ns node]
set r2 [$ns node]
34
Code for simple topology
Creating LINKS
$ns duplex-link $N1 $R1 2Mb 5ms DropTail
set DuplexLink0 [$ns link $N1 $R1]
$ns duplex-link $N2 $R1 2Mb 5ms DropTail
set DuplexLink1 [$ns link $N2 $R1]
$ns duplex-link $R1 $R2 1Mb 10ms DropTail
set DuplexLink2 [$ns link $R1 $R2]
$ns duplex-link $R2 $N3 2Mb 5ms DropTail
set DuplexLink3 [$ns link $R2 $N3]
$ns duplex-link $R2 $N4 2Mb 5ms DropTail
set DuplexLink4 [$ns link $R2 $N4]
35
Code for simple topology
Orientation of links
$ns duplex-link-op $N1 $R1 orient rightdown
$ns duplex-link-op $N2 $R1 orient right-up
$ns duplex-link-op $R1 $R2 orient right
$ns duplex-link-op $R2 $N3 orient right-up
$ns duplex-link-op $R2 $N4 orient right-down
36
Final topology Generated
37
Traffic topology aimed at
38
Generating Traffic
Attaching AGENT TCP to NODE 1
set TCP1 [new Agent/TCP]
$ns attach-agent $N1 $TCP1
Attaching AGENT TCP to NODE 2
set TCP2 [new Agent/TCP]
$ns attach-agent $N2 $TCP2
Attaching AGENT TCP to NODE 3
set TCP3 [new Agent/TCPSink]
$ns attach-agent $N2 $TCP3
Attaching AGENT TCP to NODE 4
set TCP4 [new Agent/TCPSink]
$ns attach-agent $N2 $TCP4
39
Generating Traffic
Attaching Application (FTP)
set
FTP0 [new Application/FTP]
set FTP1 [new Application/FTP]
$FTP0 attach-agent $TCP0
$FTP1 attach-agent $TCP1
40
Setting simulation times
$ns at 0.5 "$FTP0 start"
$ns at 0.5 "$FTP1 start"
$ns at 10.0 "$FTP0 stop"
$ns at 10.0 "$FTP1 stop
$ns at 10.0 finish
Making NS run
$ns
run
41
42
43