Network Simulation and Testing
Polly Huang EE NTU
ns-2 Tutorial
Tutorial Overview
• Welcome
• Gratitude
• Audience background
– object-oriented programming? – tcl? – use ns-2 before?Tutorial Intensity
• Intended audience
– try to cover a wide range
– researchers, developers, educators
• Cover
– both API & internal
Schedule: 1
stWeek
2.20-3.10 overview/intro/essential/getting started 3.30-4.20 tcl/otcl/ns-2 fundamentals
4.30-5.20 examples - TCP, RED, multicast, web, wireless
Schedule: 2
ndWeek
2.20-3.10 lab 1 setup/running examples 3.30-4.20 lab 2 tcl/otcl exercises
Schedule: 3
rdWeek
2.20-3.10 wired internal 3.30-4.20 wireless internal
4.30-5.20 extending ns-2/making changes/case studies
Schedule: 4
thWeek
2.20-3.10 lab 4 intermediate ns-2 exercise 3.30-4.20 lab 5 getting data you want
Outline: Today
• Introduction
– the project, the software, the philosophy – software architecture
– installation and getting started
• tcl/otcl/ns-2 fundamentals
– programming tcl/otcl
The VINT Project
• Virtual InterNet Testbed
– a common platform for network research
– focus on multi-protocol interactions and scale – http://www.isi.edu/nsnam/vint/index.html
• Follow-up projects
Multi-state collaboration
• USC/ISI
• ACIRI
• UC Berkeley
• CMU
VINT People
• Project leads and co-PIs
– Lee Breslau (AT&T Labs-Research) – Deborah Estrin (UCLA)
– Kevin Fall (INTEL Research) – Sally Floyd (AT&T/ACIRI) – Mark Handley (AT&T/ACIRI) – John Heidemann (USC/ISI)
Project Goal
• To support
collaborative
simulation effort
– promote sharing
• incorporate recent simulation models
– increase confidence in results
• establish regression test suite
ns-2
• Discrete event simulator
• Packet level
• Link layer and up
• Wired and wireless
Development Status
• Columbia NEST
• UCB REAL
• ns-1
• ns-2 (as of 2001…)
– 100K lines of C++ codeUsage and Releases
• Users from approximately
– 600+ institutes – 50+ countries
• Releases
– periodic official releases
– nightly snapshots (probably compiles and works, but buyers beware)
Platforms
• Most UNIX and UNIX-like systems
FreeBSD or *BSD Linux
Sun Solaris HP, SGI
First Words of Caution
• While we have considerable confidence in
ns, ns is
not a polished
and finished
product, but the result of an ongoing effort
of research and development. In particular,
bugs in the software are still being
Second Words of Caution
• Users of ns are responsible for verifying for
themselves that their simulations are not
invalidated by
bugs
. We are working to
help the users with this by significantly
expanding and automating the validation
tests and demos.
Third Words of Caution
• Similarly, users are responsible for
verifying for themselves that their
simulations are not invalidated because the
model
implemented in the simulator is not
the model that they were expecting. The
ongoing ns Notes and Documentation
Tutorial Goals
• Caution to be taken
• Existing capability
• Design and implementation
• Extendibility
Outline: Today
• Introduction
– the project, the software, the philosophy
– software architecture
– installation and getting started
• tcl/otcl/ns-2 fundamentals
– programming tcl/otcl
Object-Oriented
+ Reusability
+ Maintainability
– Careful planning ahead
– Performance
C++ and otcl Separation
• C++ for data
– per packet action
• otcl for control
– periodic or triggered action
+ Compromize between composibility and
speed
otcl and C++: The Duality
C++
tcl Interpreter With Extents
• otcl: object-oriented support • tclcl: C++ and otcl linkage
tcl otcl tclcl ns-2 Event Scheduler N etw or k C om po ne nt
Installation
• Getting the pieces
– (tcl/tk8.4.5), otcl, tclcl, ns-2, (and nam-1)
• http://www.isi.edu/nsnam/ns/
• [email protected]
Hello World - Interactive Mode
swallow 71% ns
% set ns [new Simulator]
_o3
% $ns at 1 “puts \“Hello World!\””
1
% $ns at 1.5 “exit”
2
Hello World - Passive Mode
simple.tcl
set ns [new Simulator]
$ns at 1 “puts \“Hello World!\”” $ns at 1.5 “exit”
$ns run
Outline: Today
• Introduction
– the project, the software, the philosophy – software architecture
– installation and getting started
• tcl/otcl/ns-2 fundamentals
– programming tcl/otcl
Fundamentals
• tcl
• otcl
– ftp://ftp.tns.lcs.mit.edu/pub/otcl/doc/tutorial.html• ns-2
– http://www.isi.edu/nsnam/ns/ns_doc.ps.gz – http://www.isi.edu/nsnam/ns/ns_doc.pdfBasic tcl
proc test {} { set a 43 set b 27
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]”
Basic otcl
Class mom
mom instproc init {age} { $self instvar age_ set age_ $age
}
mom instproc greet {} { $self instvar age_
Class kid -superclass mom
kid instproc greet {} { $self instvar age_
puts “$age_ years old kid:
What’s up, dude?” }
set a [new mom 45] set b [new kid 15]
Basic ns-2
• Creating the event scheduler
• [Tracing]
• Creating network
• Computing routes
• Creating connection
• Creating traffic
Creating Event Scheduler
• Create scheduler
– set ns [new Simulator]
• Schedule event
– $ns at <time> <event>
Tracing
• Trace packets on all links
– $ns trace-all [open test.out w]
<event> <time> <from> <to> <pkt> <size>--<flowid> <src> <dst> <seqno> <aseqno> + 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
• Trace packets on all links in nam-1 format
Creating Network
• Nodes
– set n0 [$ns node] – set n1 [$ns node]
• Links & Queuing
– $ns duplex-link $n0 $n1 <bandwidth> <delay> <queue_type>
Tracing Specific links
• $ns trace-queue $n0 $n1
Creating Network: LAN
• LAN
– $ns make-lan <node_list> <bandwidth>
<delay> <ll_type> <ifq_type> <mac_type> <channel_type>
– <ll_type>: LL
Computing routes
• Unicast
– $ns rtproto <type>
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
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
Creating Traffic: On Top of TCP
• FTP
– set ftp [new Application/FTP] – $ftp attach-agent $tcp
– $ns at <time> “$ftp start”
• Telnet
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]
Creating Traffic: Trace Driven
• Trace driven
– set tfile [new Tracefile] – $tfile filename <file>
– set src [new Application/Traffic/Trace] – $src attach-tracefile $tfile
Inserting 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]
Network Dynamics
• Link failures
– route changes reflected automatically – can emulate node failure
Four Models
• $ns rtmodel-at <time> <up|down> $n0 $n1
• $ns rtmodel Trace <config_file> $n0 $n1
• $ns rtmodel <model> <params> $n0 $n1
• <model>: Deterministic, Exponential
• <params>: [<start>] <up_interval>
<down_interval> [<finish>]
Outlines
• Essentials
• Getting Started
• Fundamental tcl, otcl and ns-2
Case Studies
• TCP (tcp.tcl)
• Web (web.tcl & dumbbell.tcl)
• Queuing - RED (red.tcl)
Visualization Tools
• nam-1 (Network AniMator Version 1)
• xgraph
Basic ns-2: Special Topics
• multicast support
• application-level support
• wireless support
Multicast - 5 components
• enable multicast capability
• configure multicast routing
• create a multicast group/sender
• create a multicast receiver
Enabling multicast capability
• set ns [new Simulator -multicast on]
• or $ns multicast (right after [new
Configuring multicast routing
• $ns mrtproto <type>
Creating a multicast group
• set udp [new Agent/UDP]
• $ns attach-agent $n0 $udp
• set group [Node allocaddr]
• $udp set dst_addr_ $group
Creating a multicast receiver
• set rcvr [new Agent/NULL]
• $ns attach-agent $n1 $rcvr
• $ns at <time> “$n1 join-group $rcvr
$group”
Attaching a traffic source
• set cbr [new Application/Traffic/CBR]
• $cbr attach-agent $udp
Application - 2 components
• two-way TCP
Application: Two-way TCP
• FullTcp connection
– set tcp1 [new Agent/TCP/FullTcp] – set tcp2 [new Agent/TCP/FullTcp] – $ns attach-agent $n1 $tcp1
– $ns attach-agent $n2 $tcp2 – $ns connect $tcp1 $tcp2
Application: TcpApp
• User data transfer
– set app1 [new Application/TcpApp $tcp1] – set app2 [new Application/TcpApp $tcp2] – $app1 connect $app2
– $ns at 1.0 “$app1 send <data_byte> \”<ns-2 command>\””
Wireless - 5 components
• setup
• node configuration
– layer 3-2, layer 1, tracing, energy
• node coordinates
• node movements
• nam tracing
Setup
• set ns [new Simulator]
• set topo [new Topography]
Node Configuration: Layer 3-2
• $ns node-config
– adhocRouting <adhoc routing type> – llType LL
– ifqType Queue/DropTail/PriQueue – ifqLen <queue length>
– macType Mac/802_11
Node Configuring: Layer 1
• $ns node-config– phyType Phy/WirelessPhy
– antType Antenna/OmniAntenna – propType <propagation model>
– channelType Channel/WirelessChannel – topoInstance $topo
Node Configuration: Tracing
• $ns node-config
– agentTrace <ON or OFF> – routerTrace <ON or OFF> – macTrace <ON or OFF>
Node Configuration: Energy
• $ns node-config
– energyModel EnergyModel – initialEnergy <total energy> – txPower <energy to transmit> – rxPower <energy to receive>
Creating Nodes
Node Coordinates
• $mnode set X_ <x>
• $mnode set Y_ <y>
• $mnode set Z_ 0
Node Movement
• Disable random motion
– $mnode random-motion 0
• Specified
– $ns at 1.0 “$mnode setdest <x> <y> <speed>”
• Random
Tracing
• at the beginning
– $ns namtrace-all-wireless [open test.nam w] <length> <width>
• initialize nodes
Case Studies
• multicast (mcast.tcl)
Basic ns-2: Not Covered
• mobile IP
• satellite
• DiffServ
• emulation
Next Week
• Bring your laptop
• Local FreeBSD
– Xwindows and network