0% found this document useful (0 votes)
52 views43 pages

Overview of NS-2 Network Simulator

The document provides an overview of the Network Simulator 2 (NS-2). It describes NS-2 as a discrete event simulator used to model networking protocols at the packet level. It discusses NS-2's architecture which uses C++ for object creation and OTcl as a front-end to setup simulations. The document also outlines NS-2's hierarchy, components like nodes and links, and provides an example code to generate a simple network topology and generate TCP traffic between nodes.

Uploaded by

thamizmani
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
52 views43 pages

Overview of NS-2 Network Simulator

The document provides an overview of the Network Simulator 2 (NS-2). It describes NS-2 as a discrete event simulator used to model networking protocols at the packet level. It discusses NS-2's architecture which uses C++ for object creation and OTcl as a front-end to setup simulations. The document also outlines NS-2's hierarchy, components like nodes and links, and provides an example code to generate a simple network topology and generate TCP traffic between nodes.

Uploaded by

thamizmani
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd

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

You might also like