background of wireless communication student presentations and projects wireless communication...

54
Background of Wireless Communication Student Presentations and Projects Wireless Communication Technology Wireless Networking and Mobile IP Wireless Local Area Networks Wireless Communication : LAB 3 Introduction to NS2 Programming Introduction to NS2 Programming

Upload: conner-bayliss

Post on 14-Dec-2015

223 views

Category:

Documents


3 download

TRANSCRIPT

Background of Wireless Communication

Student Presentations and Projects

Wireless Communication Technology

Wireless Networking and Mobile IP

Wireless Local Area Networks

Wireless Communication : LAB 3

Introduction to NS2 ProgrammingIntroduction to NS2 Programming

Outline NS overview NS structure and basics Steps to create a typical NS script Summary: Generic Script Structure Vis Tools Useful pointers NS by Example (http://nile.wpi.edu/NS/) Where is documentation and Tutorials:

http://www.isi.edu/nsnam/ns/ns-documentation.html http://www.isi.edu/nsnam/ns/tutorial/

What is NS Discrete event simulator targeted for

networking research Discrete event simulation:

representing a system by a collection of states and a set of events that describe state changes.

Discrete-Event/Continuous-Time An event in NS

a packet ID that is unique for a packet with scheduled time and the pointer to an network object that handles the packet

What can ns simulate?

Topology: wired, wireless Queue Scheduling Algorithms: RED, DropTail, … Transport Protocols: TCP (all flavors), UDP, … Routing: Static and dynamic routing, MPLS, … Application: FTP, HTTP, Telnet, Traffic

generators, … Multicast Various error models for link failures Open source

NS Structure

NS is written in oTcl and C++; Efficiency and simplicity

oTcl is an extension to oTcl (object Tcl): Have to deal with objects

NS uses C++ for per-packet action e.g. scheduler, TCP implementation

oTcl for control Topology Network objects

User interface-Interactive Mode

adeel@laptop#> ./ns#> set ns [new Simulator]_o4#> $ns at 1 "puts \"Hello World!\""1#> $ns at 1.5 "exit"2#> $ns runHello World!

User interface-Batch Mode

simple.tcl set ns [new Simulator] $ns at 1 "puts \"Hello World!\""

$ns at 1.5 "exit"$ns run

adeel@laptop#> ns simple.tclHello World!

Basic 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]" } }}test

Basic oTcl Class vehicle vehicle instproc characterize{} { $self instvar NumberOfWheels_ puts "$NumberOfWheels_ -wheel vehicle is a vehicle“ } Class car -superclass vehicle car instproc characterize{} {

$self instvar NumberOfWheels_ puts "$NumberOfWheels_ -wheel vehicle is a car"

}set a [new vehicle]set b [new car]$a set NumberOfWheels_ 3$b set NumberOfWheels_ 4$a characterize$b characterize

Tcl/oTcl Common Problem

Generally useless debugging information:

no object(_o24 cmd line 1)

invoked from within“_o24 cmd drop-target { }”

invoked from within“catch “$self cmd $args” ret”

(procedure “_o24” line 2)

Fortunately, you do NOT need to be a Tcl expert for using NS

Structure of a typical ns script Creating event scheduler Opening trace files Creating topology Creating the transport layer

“connection” Creating application to generate

traffic Start and stop the traffic flows

Structure of a typical ns script Creating event scheduler Opening trace files Creating topology Creating the transport layer

“connection” Creating application to generate

traffic Start and stop the traffic flows

Create Event Scheduler

Create scheduler set ns [new Simulator]

Schedule event $ns at <time> <event>

<event> is any legitimate ns/tcl commands

Start scheduler $ns run

Structure of a typical ns script Creating event scheduler Opening trace files Creating topology Creating the transport layer

“connection” Creating application to generate

traffic Start and stop the traffic flows

Open trace files Ex.1

Trace packets on all links set fp [open test.out w] $ns trace-all $fp trace format:<event> <time> <from> <to> <pkt_type> <size> <flag><flow_id><src>

<dst><seq_no> <ack_seq_no>

r 1 0 2 tcp 1000 - - - - - - - - - - - - - - - - - 0 0.0 3.1 29 199

+ 1 0 2 tcp 1000 - - - - - - - - - - - - - - - - - 0 0.0 3.1 29 199

- 1 0 2 tcp 1000 - - - - - - - - - - - - - - - - - 0 0.0 3.1 29 199

d 1.00234 0 2 tcp 1000 - - - - - - - - - - - - 0 0.0 3.1 29 199

Open trace files Ex.2#Open the Trace file set tf [open out.tr w] $ns trace-all $tf

Create Topology

Create nodes set n0 [$ns node] set n1 [$ns node]

Create links and queues $ns <link-type> $n0de1 $node2 <bandwidth> <delay>

<queue-type>

<queue-type>: DropTail, RED, WFQ, SFQ, … <link-type>: duplex-link, simplex-link $ns duplex-link $n0 $n1 1Mb 10ms

DropTail

Create Flow: UDP

UDPCreate agents

- set udp [new Agent/UDP] - set null [new Agent/NULL]Attach to the nodes

- $ns attach-agent $n0 $udp- $ns attach-agent $n1 $null

Establish the “connection”- $ns connect $udp $null

Create Connection: TCP

TCPCreate agents

- set tcp [new Agent/TCP] - set tcpsink [new Agent/TCPSink]Attach to the nodes

- $ns attach-agent $n0 $tcp- $ns attach-agent $n1 $tcpsink

Establish the “connection”- $ns connect $tcp $tcpsink

Create Application

On Top of UDP: CBR set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp

On Top of TCP: FTP set ftp [new Application/FTP] $ftp attach-agent $tcp

Start & Stop the traffic

Schedule to start the traffic $ns at 0.0 “$cbr0 start”

Schedule to stop the traffic $ns at 5.0 “$cbr0 stop” $ns at 5.0 “finish”proc finish { } {

global ns fp$ns flush-trace; close $fp

exec …. &}

Summary: Generic Script Structure

set ns [new Simulator]set ns [new Simulator] # [Turn on tracing]# [Turn on tracing] # Create topology# Create topology # Setup packet loss, link dynamics# Setup packet loss, link dynamics # Create routing agents# Create routing agents # Create: # Create: # - multicast groups# - multicast groups # - protocol agents# - protocol agents # - application and/or setup traffic sources# - application and/or setup traffic sources # Post-processing procs# Post-processing procs # Start simulation# Start simulation

Example 1 - TCP

Simple scenario with TCP and UDP connections

n0TCP

n4UDP

n1 n2

n5UDPrecvr

n3TCPSink

1.5Mb10ms

5Mb2ms

5Mb 2ms

TCP : Step 1

Scheduler & tracing#Create schedulerSet ns [new Simulator]

#Turn on tracingset f [open out.tr w]$ns trace-all $fSet nf [open out.nam w]$ns namtrace-all $nf

TCP : Step 2

Create topology#create nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

TCP : Step 3

#create links$ns duplex-link $n0 $n1 5Mb 2ms DropTail$ns duplex-link $n1 $n2 1.5Mb 10ms

DropTail$ns duplex-link $n2 $n3 5Mb 2ms DropTail$ns queue-limit $n1 $n2 25$ns queue-limit $n2 $n1 25

TCP : Step 4

Create TCP agents set tcp [new Agent/TCP]set sink [new Agent/TCPSink]$ns attach-agent $n0 $tcp$ns attach-agent $n3 $sink$ns connect $tcp $sink

TCP : Step 5

Attach traffic

set ftp [new Application/FTP]$ftp attach-agent $tcp

#start application traffic$ns at 1.1 “$ftp start”

TCP : Step 6

End of simulation wrapper (as usual)$ns at 2.0 “finish”Proc finish {} {

global ns f nfclose $fclose $nfputs “Running nam…”exec nam out.nam &exit 0

}$ns run

Example 2

Example 2

#Create a simulator object set ns [new Simulator]

#Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red

#Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf

Example 2

#Define a 'finish' procedure proc finish {} { global ns nf $ns flush-trace #Close the NAM trace file close $nf #Execute NAM on the trace file exec nam out.nam & exit 0 }

Example 2

#Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node]

#Create links between the nodes $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail

#Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n2 $n3 10

Example 2

#Give node position (for NAM) $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right

#Monitor the queue for link (n2-n3). (for NAM) $ns duplex-link-op $n2 $n3 queuePos 0.5

#Setup a TCP connection set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1

Example 2

#Setup a FTP over TCP connection set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP

#Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2

Example 2

#Setup a CBR over UDP connection set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false

#Schedule events for the CBR and FTP agents $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop"

Example 2

#Detach tcp and sink agents (not really necessary)

$ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"

#Call the finish procedure after 5 seconds of simulation time

$ns at 5.0 "finish"

#Print CBR packet size and interval

puts "CBR packet size = [$cbr set packet_size_]"

puts "CBR interval = [$cbr set interval_]"

#Run the simulation

$ns run

Tracing

cat out.tr | grep " 2 3 cbr " | grep ^r | column 1 10 | awk '{dif = $2 - old2; if(dif==0) dif = 1; if(dif > 0) {printf("%d\t%f\n", $2, ($1 - old1) / dif); old1 = $1; old2 = $2}}' > jitter.txt

Viz Tools

Nam-1 (Network AniMator Version 1) Packet-level animation Well-supported by ns

Xgraph Convert trace output into xgraph

format

NAM

Ns-nam Interface

Color Node manipulation Link manipulation Topology layout Protocol state Misc

Nam Interface: Color

Color mapping$ns color 40 red$ns color 40 red

$ns color 41 blue$ns color 41 blue

$ns color 42 chocolate$ns color 42 chocolate

Color flow id association$tcp0 set fid_ 40$tcp0 set fid_ 40 ;# red packets;# red packets

$tcp1 set fid_ 41$tcp1 set fid_ 41 ;# blue packets;# blue packets

Nam Interface: Nodes

Color$node color red$node color red

Shape (can’t be changed after sim starts)$node shape box$node shape box ;# circle, box, hexagon;# circle, box, hexagon

Marks (concentric “shapes”)$ns at 1.0 “$n0 add-mark m0 blue box”$ns at 1.0 “$n0 add-mark m0 blue box”$ns at 2.0 “$n0 delete-mark m0”$ns at 2.0 “$n0 delete-mark m0”

Label (single string)$ns at 1.1 “$n0 label \”web cache 0\””$ns at 1.1 “$n0 label \”web cache 0\””

Nam Interface: Links

Color$ns duplex-link-op $n0 $n1 color "green"$ns duplex-link-op $n0 $n1 color "green"

Label$ns duplex-link-op $n0 $n1 label "abced"$ns duplex-link-op $n0 $n1 label "abced"

Dynamics (automatically handled)$ns rtmodel Deterministic {2.0 0.9 0.1} $n0 $n1$ns rtmodel Deterministic {2.0 0.9 0.1} $n0 $n1

Asymmetric links not allowed

Nam Interface: Topo Layout “Manual” layout: specify

everything

$ns duplex-link-op $n(0) $n(1) orient right$ns duplex-link-op $n(0) $n(1) orient right

$ns duplex-link-op $n(1) $n(2) orient right-up$ns duplex-link-op $n(1) $n(2) orient right-up

$ns duplex-link-op $n(2) $n(3) orient down$ns duplex-link-op $n(2) $n(3) orient down

$ns duplex-link-op $n(3) $n(4) orient 60deg$ns duplex-link-op $n(3) $n(4) orient 60deg

If anything missing automatic layout

Nam Interface: Protocol State Monitor values of agent variables

$ns add-agent-trace $srm0 srm_agent0$ns add-agent-trace $srm0 srm_agent0

$ns monitor-agent-trace $srm0$ns monitor-agent-trace $srm0

$srm0 tracevar C1_$srm0 tracevar C1_

$srm0 tracevar C2_$srm0 tracevar C2_

# … …# … …

$ns delete-agent-trace $tcp1$ns delete-agent-trace $tcp1

Nam Interface: Misc

Annotation Add textual explanation to your sim

$ns at 3.5 "$ns trace-annotate \“packet drop\"“$ns at 3.5 "$ns trace-annotate \“packet drop\"“

Set animation rate

$ns at 0.0 "$ns set-animation-rate 0.1ms"$ns at 0.0 "$ns set-animation-rate 0.1ms"

Useful Pointers

Directory structure:/ns-2.../ contains C++ code

/ns-2.../tcl/lib/ contains oTcl source code /ns-2.../tcl/ex/ examples simulation scripts /ns-2.../tcl/test/ validation test scripts

RED Queue Monitor Example http://nile.wpi.edu/NS

Xgraph

Other Utilities in Ns

Nam editorAvailable as part of nam-1

Tcl debuggerFor source and documentation, seehttp://www.isi.edu/nsnam/ns/ns-

debugging.html Topology generator

http://www.isi.edu/nsnam/ns/ns-topogen.html Scenario generator

http://www.isi.edu/nsnam/ns/ns-scengeneration.html

Resources

Ns distribution download http://www.isi.edu/nsnam/ns/ns-build.html

Installation problems and bug-fix http://www.isi.edu/nsnam/ns/ns-

problems.html

Ns-users mailing list [email protected] See http://www.isi.edu/nsnam/ns/ns-

lists.html Archives from above URL

Resources (contd..)

Marc Greis’ tutorial http://www.isi.edu/nsnam/ns/tutorial

Ns-users archive Ns-manual

http://www.isi.edu/nsnam/ns/ns-documentation.html

Tcl (Tool Command Language) http://dev.scriptics.com/scripting Practical programming in Tcl and Tk, Brent

Welch Otcl (MIT Object Tcl)

~otcl/doc/tutorial.html (in distribution)

Resources (contd..)

NS Frequently Asked Questions: http://www.isi.edu/nsnam/ns/ns-faq.html

Lloyd Wood - introducing ns:http://www.ee.surrey.ac.uk/Personal/

L.Wood/ns/

QUESTIONS

???