This document contains 5 network simulation programs written for the NS2 network simulator. Each program defines nodes, links between nodes, traffic sources like FTP and CBR, and runs a simulation to generate network traffic and output files for analysis. The programs implement and simulate different network scenarios like stop-and-wait transmission, multicasting, dynamic routing, and a local area network.
Download as DOCX, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
116 views
Exercises 1. Simple NS2 Program
This document contains 5 network simulation programs written for the NS2 network simulator. Each program defines nodes, links between nodes, traffic sources like FTP and CBR, and runs a simulation to generate network traffic and output files for analysis. The programs implement and simulate different network scenarios like stop-and-wait transmission, multicasting, dynamic routing, and a local area network.
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9
Exercises
1. Simple NS2 Program
#Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Green $ns color 2 Blue #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #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 } #Create 8 nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] set n6 [$ns node] set n7 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 0.5Mb $ns duplex-link $n1 $n2 2Mb $ns duplex-link $n2 $n3 1.7Mb $ns duplex-link $n3 $n4 2Mb $ns duplex-link $n4 $n5 1Mb $ns duplex-link $n4 $n6 1.7Mb $ns duplex-link $n5 $n7 2.2Mb $ns duplex-link $n6 $n7 2.7Mb
$ns queue-limit $n2 $n3 10 $ns queue-limit $n4 $n5 10 $ns queue-limit $n6 $n7 20 #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-down $ns duplex-link-op $n3 $n4 orient right-up $ns duplex-link-op $n4 $n5 orient right-up $ns duplex-link-op $n4 $n6 orient right-down $ns duplex-link-op $n5 $n7 orient right-down $ns duplex-link-op $n6 $n7 orient right-up #Monitor the queue for link (n2-n3). (for NAM) $ns duplex-link-op $n2 $n3 queuePos 0.5 $ns duplex-link-op $n4 $n5 queuePos 0.4 $ns duplex-link-op $n6 $n7 queuePos 0.2 #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 $n5 $sink $ns connect $tcp $sink $tcp set fid_ 1 #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 $n6 $null $ns connect $udp $null $udp set fid_ 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 0.5 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #Detach tcp and sink agents (not really necessary) $ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n5 $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 2. Stop and Wait NS2 Program set ns [new Simulator] set nf [open out.nam w] $ns namtrace-all $nf proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam & exit 0 } set n0 [$ns node] set n1 [$ns node]
$ns at 0.0 "$n0 label Sender"
$ns at 0.0 "$n1 label Receiver" $ns duplex-link $n0 $n1 1Mb 10ms DropTail $ns duplex-link-op $n0 $n1 orient right $ns queue-limit $n0 $n1 50 set tcp [new Agent/TCP] $tcp set window_ 1 $tcp set maxcwnd_ 1 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n1 $sink $ns connect $tcp $sink set ftp [new Application/FTP] $ftp attach-agent $tcp $ns add-agent-trace $tcp tcp $ns monitor-agent-trace $tcp $tcp tracevar cwnd_ $ns at 0.1 "$ftp start" $ns at 3.0 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n1 $sink" $ns at 3.5 "finish" $ns at 0.0 "$ns trace-annotate \"Stop and Wait with normal operation\"" $ns at 0.05 "$ns trace-annotate \"FTP starts at 0.1\"" $ns at 0.11 "$ns trace-annotate \"Send Packet_0\"" $ns at 0.35 "$ns trace-annotate \"Receive Ack_0\"" $ns at 0.56 "$ns trace-annotate \"Send Packet_1\"" $ns at 0.79 "$ns trace-annotate \"Receive Ack_1\"" $ns at 0.99 "$ns trace-annotate \"Send Packet_2\"" $ns at 1.23 "$ns trace-annotate \"Receive Ack_2 \"" $ns at 1.43 "$ns trace-annotate \"Send Packet_3\"" $ns at 1.67 "$ns trace-annotate \"Receive Ack_3\"" $ns at 1.88 "$ns trace-annotate \"Send Packet_4\"" $ns at 2.11 "$ns trace-annotate \"Receive Ack_4\"" $ns at 2.32 "$ns trace-annotate \"Send Packet_5\"" $ns at 2.55 "$ns trace-annotate \"Receive Ack_5 \"" $ns at 2.75 "$ns trace-annotate \"Send Packet_6\"" $ns at 2.99 "$ns trace-annotate \"Receive Ack_6\"" $ns at 3.1 "$ns trace-annotate \"FTP stops\"" $ns run
3. Multicasting NS2 Program
set ns [new Simulator -multicast on] set nf [open out.nam w] $ns namtrace-all $nf proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam & exit 0 } $ns color 1 red set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] $ns duplex-link $n0 $n1 1.5Mb 10ms DropTail $ns duplex-link $n1 $n2 1.5Mb 10ms DropTail $ns duplex-link $n1 $n3 1.5Mb 10ms DropTail $ns duplex-link-op $n0 $n1 orient right $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n1 $n3 orient right-down $ns duplex-link-op $n0 $n1 queuePos 0.5 set mproto DM set mrthandle [$ns mrtproto $mproto {}] set group0 [Node allocaddr] set group1 [Node allocaddr] set udp0 [new Agent/UDP] $ns attach-agent $n1 $udp0 $udp0 set dst_addr_ $group0 $udp0 set dst_port_ 0 set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp0 set udp1 [new Agent/UDP] $udp1 set dst_addr_ $group1
$udp1 set dst_port_ 0
$udp1 set class_ 1 $ns attach-agent $n3 $udp1 set cbr1 [new Application/Traffic/CBR] $cbr1 attach-agent $udp1 set rcvr [new Agent/LossMonitor] $ns attach-agent $n2 $rcvr $ns at 1.2 "$n2 join-group $rcvr $group1" $ns at 1.25 "$n2 leave-group $rcvr $group1" $ns at 1.3 "$n2 join-group $rcvr $group1" $ns at 1.35 "$n2 join-group $rcvr $group0" $ns at 1.0 "$cbr0 start" $ns at 1.1 "$cbr1 start" $ns at 2.0 "finish" $ns run 4. Dynamic Routing NS2 Program #Create a simulator object set ns [new Simulator] #Tell the simulator to use dynamic routing $ns rtproto DV #Open the nam trace file set nf [open out.nam w] $ns namtrace-all $nf #Define a 'finish' procedure proc finish {} { global ns nf $ns flush-trace #Close the trace file close $nf #Execute nam on the trace file exec nam out.nam & exit 0 } #Create seven nodes for {set i 0} {$i < 7} {incr i} {
set n($i) [$ns node]
} #Create links between the nodes for {set i 0} {$i < 7} {incr i} { $ns duplex-link $n($i) $n([expr ($i+1)%7]) 1Mb 10ms DropTail } #Create a UDP agent and attach it to node n(0) set udp0 [new Agent/UDP] $ns attach-agent $n(0) $udp0 # Create a CBR traffic source and attach it to udp0 set cbr0 [new Application/Traffic/CBR] $cbr0 set packetSize_ 500 $cbr0 set interval_ 0.005 $cbr0 attach-agent $udp0 #Create a Null agent (a traffic sink) and attach it to node n(3) set null0 [new Agent/Null] $ns attach-agent $n(3) $null0 #Connect the traffic source with the traffic sink $ns connect $udp0 $null0 #Schedule events for the CBR agent and the network dynamics $ns at 0.5 "$cbr0 start" $ns rtmodel-at 1.0 down $n(1) $n(2) $ns rtmodel-at 2.0 up $n(1) $n(2) $ns at 4.5 "$cbr0 stop" #Call the finish procedure after 5 seconds of simulation time $ns at 5.0 "finish" #Run the simulation $ns run 5. LAN NS2 Program 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 #Define a 'finish' procedure proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam & exit 0 } #Create seven nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] set n6 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 1Mb 10ms DropTail $ns duplex-link $n1 $n2 1Mb 10ms DropTail $ns simplex-link $n2 $n3 0.3Mb 100ms DropTail $ns simplex-link $n3 $n2 0.3Mb 100ms DropTail #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 set lan [$ns newLan "$n3 $n4 $n5 $n6" 0.5Mb 40ms LL Queue/DropTail MAC/802_3 Channel] #Setup a TCP connection set tcp [new Agent/TCP/Newreno] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink/DelAck] $ns attach-agent $n4 $sink $ns connect $tcp $sink $tcp set fid_ 1 $tcp set window_ 8000 $tcp set packet_size_ 552
#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 $n5 $null $ns connect $udp $null $udp set fid_ 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_ 0.1MB $cbr set random_ false $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 3.5 "$ftp stop" $ns at 4.0 "$cbr stop" $ns at 5.0 "finish" $ns run