Professional Documents
Culture Documents
Zhibin WU
WINLAB, ECE Dept. Rutgers U.
zhibinwu@winlab.rutgers.edu
1
Goals
Understanding NS-2
Hands-on Experience with NS2
Ns-2 by Example
Write your own scripts
Extending NS2
Implementing new functionality
2
Schedule
Presentation (60 min)
Group Assignments (10 min)
Practices (1 Hr)
Q & A session (~15 min)
3
Talk Overview
What is ns-2? (the evolution)
Architecture
Basic Tcl/Otcl commands
Elements of an ns-2 simulation
Example
Online Resources & Documentation
4
What is ns?
A discrete event, packet-level simulator
Targeted at networking research
Supports the simulation of
intserv/diffserv, Multicast, Transport,
5
Status
ns-2
100K lines of C++
70K lines of OTcl
50K+ lines of test suite, examples, docs
Platforms
Most UNIX and UNIX-like systems (FreeBSD,
Linux, Sun Solaris)
Window 95/98/NT with Cygwin
(Emulation only for FreeBSD for now)
6
Remember!
A simulator model of a real-world system is
necessarily a simplification. For example, in
simulating TCP
No SYN/FIN
Equal size segments
No variable window advertisement
Bugs: “Users of ns are responsible for
verifying for themselves that their simulations
are not invalidated by bugs”.
7
Architecture: Object-Oriented
C++ for “data”
Per packet action
OTcl for control
Periodic or triggered action
Modularity (+), re-usability(+),
scalability(+)
Speed(-), memory(-)
8
OTcl and C++: The Duality
ns
9
Script in interactive mode
linux21% ns
% set ns [new Simulator]
_o3
% $ns at 1 “puts \“Hello World!\””
1
% $ns at 1.5 “exit”
2
% $ns run
Hello World!
linux21%
10
A script in batch mode
#simple.tcl
set ns [new Simulator]
$ns at 1 “puts \“Hello World!\””
$ns at 1.5 “exit”
$ns run
linux21% ns simple.tcl
Hello World!
linux21%
11
Basic Tcl
set a 43
set b 27
proc test { a b } {
set c [expr $a + $b]
set d [expr [expr $a - $b] * $c]
for {set k 0} {$k < 10} {incr k} {
if {$k < 5} {
puts “k < 5, pow = [expr pow($d, $k)]”
} else {
puts “k >= 5, mod = [expr $d % $k]”
}
}
}
test 43 27
12
Basic OTcl
Class Mom set mom [new Mom]
Mom instproc greet {} { $mom set age_ 45
$self instvar age_ set kid [new Kid]
puts “$age_ years old $kid set age_ 15
mom: How are you doing?”
}
$mom greet
Class Kid -superclass Mom $kid greet
Kid instproc greet {} {
$self instvar age_
puts “$age_ years old
kid: What’s up, dude?”
}
13
SIMULATE WIRED NETWORK
14
Elements of ns-2 Simulation
Create the event scheduler
[Turn on tracing]
Create network
Setup routing
Insert errors
Create transport connection
Create traffic
Transmit application-level data
15
Creating Event Scheduler
Create event scheduler
set ns [new Simulator]
Schedule events
$ns at <time> <event>
<event>: any legitimate ns/tcl commands
Start scheduler
$ns run
16
Tracing
Trace packets on all links
$ns trace-all [open test.out w]
<event> <time> <from> <to> <pkt> <size> -- <fid> <src> <dst> <seq> <attr>
+ 1 0 2 cbr 210 ------- 0 0.0 3.1 0 0
- 1 0 2 cbr 210 ------- 0 0.0 3.1 0 0
r 1.00234 0 2 cbr 210 ------- 0 0.0 3.1 0 0
18
Creating Network
Nodes
set n0 [$ns node]
set n1 [$ns node]
Links and queuing
$ns duplex-link $n0 $n1 <bandwidth>
<delay> <queue_type>
<queue_type>: DropTail, RED, CBQ, FQ,
SFQ, DRR
19
Creating Network: LAN
LAN
$ns make-lan <node_list> <bandwidth>
<delay> <ll_type> <ifq_type>
<mac_type> <channel_type>
<ll_type>: LL
<ifq_type>: Queue/DropTail,
<mac_type>: MAC/802_3
<channel_type>: Channel
20
Inserting Packet Errors
Creating Error Module
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]
Inserting Error Module
$ns lossmodel $loss_module $n0 $n1
21
Network Dynamics
Link failures
Hooks in routing module to reflect routing
changes
Four models
$ns rtmodel-at <time> up|down $n0 $n1
$ns rtmodel Trace <config_file> $n0 $n1
$ns rtmodel Exponential {<params>} $n0 $n1
$ns rtmodel Deterministic {<params>} $n0 $n1
Parameter list
[<start>] <up_interval> <down_interval> [<finish>]
22
Setup Routing
Unicast
$ns rtproto <type>
<type>: Static, Session, DV, cost, multi-path
Multicast
$ns multicast (right after [new Simulator])
or set ns [new Simulator –multicast on]
$ns mrtproto <type>
<type>: CtrMcast, DM, ST, BST (centralized,dense
mode, shared tree
23
Creating Connection: UDP
UDP
set udp [new Agent/UDP]
set null [new Agent/Null]
$ns attach-agent $n0 $udp
$ns attach-agent $n1 $null
$ns connect $udp $null
24
Creating Traffic: On Top of UDP
CBR
set src [new Application/Traffic/CBR]
Exponential or Pareto on-off
set src [new
Application/Traffic/Exponential]
set src [new Application/Traffic/Pareto]
25
Creating Connection: TCP
TCP
set tcp [new Agent/TCP]
set tcpsink [new Agent/TCPSink]
$ns attach-agent $n0 $tcp
$ns attach-agent $n1 $tcpsink
$ns connect $tcp $tcpsink
26
Creating Traffic: On Top of TCP
FTP
set ftp [new Application/FTP]
$ftp attach-agent $tcp
Telnet
set telnet [new Application/Telnet]
$telnet attach-agent $tcp
27
Creating Traffic: Trace Driven
Trace driven
set tfile [new Tracefile]
$tfile filename <file>
set src [new Application/Traffic/Trace]
$src attach-tracefile $tfile
<file>:
Binary format (native!)
inter-packet time (msec) and packet size (byte)
28
Application-Level Simulation
Features
Build on top of existing transport protocol
Transmit user data, e.g., HTTP header
Two different solutions
TCP: Application/TcpApp
UDP: Agent/Message
29
Script Structure for Wired Scenario
# parameters and options
set ns [new Simulator]
# [Turn on tracing]
# Create topology
# Setup packet loss, link dynamics
# Create routing agents
# Create:
# - protocol agents
# - application and/or setup traffic sources
# Post-processing procs
# Start simulation
30
SIMULATE WIRELESS NETWORK
31
Script Structure: Wireless
# parameters and options
set ns [new Simulator]
# [Turn on tracing]
# create MobileNode object (PHY to layer 3
configured)
# Create topology
# create mobility
# Create Layer 4 and above
# - UDP/TCP agents
# - application and/or setup traffic sources
# Post-processing procedures
# Start simulation
32
Example: Wireless Scenario
4x4 grid
11
240m
13 14
8 11
4 7
2 3
33
Example: Step 1
Define Parameters
set cbr_size 500
set cbr_interval 0.002
set num_row 4
set time_duration 100
34
Example: Step 2
Protocol Options
set val(chan) Channel/WirelessChannel ;# channel
type
set val(prop) Propagation/TwoRayGround ;# radio-
propagation model
set val(netif) Phy/WirelessPhy ;# network interface
type
set val(mac) Mac/802_11 ;# MAC type
set val(ifq) Queue/DropTail/PriQueue ;# interface
queue type
set val(ll) LL ;# link layer type
set val(ant) Antenna/OmniAntenna ;# antenna model
set val(ifqlen) 50 ;# max packet in ifq
set val(rp) DSDV ;# routing protocol
35
Example: Step 3
Scheduler, Trace, Topo, God
#
# Initialize ns
#
set ns_ [new Simulator]
set tracefd [open simple.tr w]
$ns_ trace-all $tracefd
36
Example: Step 4
Create Node Object with protocols
$ns_ node-config -adhocRouting $val(rp) -llType $val(ll) \
-macType $val(mac) -ifqType $val(ifq) \
-ifqLen $val(ifqlen) -antType $val(ant) \
-propType $val(prop) -phyType $val(netif) \
-channel $chan1 -topoInstance $topo \
-agentTrace ON -routerTrace OFF\
-macTrace ON \
-movementTrace OFF
37
Example: Step 5
Create Topology
set k 0;
while {$k < $num_row } {
for {set i 0} {$i < $num_row } {incr i} {
set m [expr $i+$k*$num_row];
$node_($m) set X_ [expr $i*240];
$node_($m) set Y_ [expr $k*240+20.0];
$node_($m) set Z_ 0.0
}
incr k;
};
38
Example: Step 6
Create Mobility
40
Example: Step 8
Define Traffic Scenario
for {set i 0} {$i < $num_row } {incr i} {
set cbr_($i) [new Application/Traffic/CBR]
$cbr_($i) set packetSize_ $cbr_size
$cbr_($i) set interval_ 0.5
$cbr_($i) attach-agent $udp_($i)
}
$ns_ at 11.0234 "$cbr_(0) start"
$ns_ at 10.4578 "$cbr_(1) start"
$ns_ at 12.7184 "$cbr_(2) start"
$ns_ at 12.2456 "$cbr_(3) start"
41
Example: Step 9
End-of-simulation wrapper (as usual)
# Tell nodes when the simulation ends
#
for {set i 0} {$i < [expr $num_row*$num_row] } {incr i} {
$ns_ at [expr $time_duration +10.0] "$node_($i) reset";
}
$ns_ at [expr $time_duration +10.0] "finish"
$ns_ at [expr $time_duration +10.01] "puts \"NS Exiting...\"; $ns_ halt"
proc finish {} {
global ns_ tracefd
$ns_ flush-trace
close $tracefd
}
42
Auxiliary Tools
setdest
used to generate the positions of nodes
and their moving speed and moving
directions.
setdest -v 1 -n 50 -p 0 -M 20 -t 900 -x 1500 -y
300
cbrgen.tcl
ns cbrgen.tcl [-type cbr|tcp] [-nn nodes] [-seed
seed] [-mc connections] [-rate rate]
Use “source <filename>.tcl” to add the
generated file to scipts
43
Resources
http://www.isi.edu/nsnam/ns
http://www.winlab.rutgers.edu/~zhibinwu
Tutorials:
Marc Greis’s Tutorial (
http://www.isi.edu/nsnam/ns/tutorial/index.html)
Ns by example (http://nile.wpi.edu/NS/)
Wireless Tutorial (
http://www.isi.edu/nsnam/ns/ns-tutorial/wireless.ppt )
44
Documentation
Tcl (Tool Command Language)
http://dev.scriptics.com/scripting
OTcl (MIT Object Tcl)
~otcl/doc/tutorial.html (in distribution)
ns manual
Included in distribution: ~ns/doc
http://www.isi.edu/~salehi/ns_doc.ps.gz
45
Advanced Topics
Trace analysis
Architecture of Mobilenode Object
Extending NS-2 with new protocols and
algorithms
More complex changes:
Hybrid Node
A node with multiple interfaces
46
Group Assignments
Download simple.tcl
http://www.winlab.rutgers.edu/~zhibinwu/simple.tcl
Modifications
Node-Configure changes
1000x1000 area
Random Node Mobility
47