NS2 using TCL programming.
Introduction
The network simulator is
discrete event packet level simulator.The network simulator covers a very large
number of application of different kind of protocols of different network types
consisting of different network elements and traffic models.Network simulator
is a package of tools that simulates behavior of networks such as creating
network topologies, log events that happen under any load,analyze the events
and understand the network.
Basics of
Tcl Programming (w.r.t. ns2)
Before we get into the
program we should consider the following things:
- Initialization and termination aspects of network simulator.
- Defining the network nodes,links,queues and topology as well.
- Defining the agents and their applications
- Network Animator(NAM)
- Tracing
Initialization
To start a new simulator we
write
1 set ns [new Simulator]
From the above command we get that a variable
ns is being initialized by using the set command. Here the code [new
Simulator] is a instantiation of the class Simulator which uses the reserved
word 'new'. So we can call
all the methods present inside the class simulator by using the variable ns.
Creating the output files
#To create the trace files
we write
set tracefile1 [open out.tr w]
$ns trace-all $tracefile1
#To create the nam files we write
set namfile1 [open out.nam w]
$ns namtrace-all $namfile
In the above we create a
output trace file out.tr and a nam visualization file out.nam. But in the Tcl
script they are not called by their names declared,while they are called by the
pointers initialized for them such as tracefile1 and namfile1 respectively.The
line which starts with '#' are commented.The next line opens the file 'out.tr'
which is used for writing is declared 'w'.The next line uses a simulator method
trace-all by which we will trace all the events in a particular format.
The termination program is
done by using a 'finish' procedure
# Defining the 'finish'
procedure'
proc finish {} {
global ns tracefile1 namfile1
$ns flush-trace
close $tracefile
close $namfile
exec nam out.nam &
exit 0
}
In the above the word
'proc' is used to declare a procedure called 'finish'.The word 'global' is used
to tell what variables are being used outside the procedure.
'flush-trace' is a
simulator method that dumps the traces on the respective files.the command
'close' is used to close the trace files and the command 'exec' is used to
execute the nam visualization.The command 'exit' closes the application and
returns 0 as zero(0) is default for clean exit.
In ns we end the program by
calling the 'finish' procedure
#end the program
$ns at 125.0 "finish"
Thus the entire operation
ends at 125 seconds.To begin the simulation we will use the command
#start the the simulation
process
$ns run
Defining nodes,links,queues and topology
Way to create a node:
set n0 [ns node]
In the above we created a
node that is pointed by a variable n0.While referring the node in the script we
use $n0. Similarly we create another node n2.Now we will set a link between the
two nodes.
$ns
duplex-link $n0 $n2 10Mb 10ms DropTail
So we are creating a
bi-directional link between n0 and n2 with a capacity of 10Mb/sec and a propagation
delay of 10ms.
In NS an output queue of a
node is implemented as a part of a link whose input is that node to handle the
overflow at the queue.But if the buffer capacity of the output queue is
exceeded then the last packet arrived is dropped and here we will use a
'DropTail' option.Many other options such as RED(Random Early Discard)
mechanism, FQ(Fair Queuing), DRR(Deficit Round Robin), SFQ(Stochastic Fair
Queuing) are available.
So now we will define the
buffer capacity of the queue related to the above link
#Set queue size of the link
$ns queue-limit $n0 $n2 20
so, if we summarize the
above three things we get
#create 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]
#create links between the nodes
$ns duplex-link $n0 $n2 10Mb 10ms DropTail
$ns duplex-link $n1 $n2 10Mb 10ms DropTail
$ns simplex-link $n2 $n3 0.3Mb 100ms DropTail
$ns simplex-link $n3 $n2 0.3Mb 100ms DropTail
$ns duplex-link $n0 $n2 0.5Mb 40ms DropTail
$ns duplex-link $n0 $n2 0.5Mb 40ms DropTail
#set queue-size of the link (n2-n3) to 20
$ns queue-limit $n2 $n3 20
Agents and applications
TCP
TCP is a dynamic reliable
congestion protocol which is used to provide reliable transport of packets from
one host to another host by sending acknowledgements on proper transfer or loss
of packets.Thus TCP requires bi-directional links in order for acknowledgements
to return to the source.
Now we will show how to set
up tcp connection between two nodes
#setting a tcp connection
set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n4 $sink
$ns connect $tcp $sink
$tcp set fid_1
$tcp set packetSize_552
The command 'set tcp [new
Agent/TCP]' gives a pointer called 'tcp' which indicates the tcp agent which is
a object of ns.Then the command '$ns attach-agent $n0 $tcp' defines the source
node of tcp connection. Next the command 'set sink [new Agent/TCPSink]' defines
the destination of tcp by a pointer called sink. The next command '$ns
attach-agent $n4 $sink' defines the destination node as n4.Next, the command
'$ns connect $tcp $sink' makes the TCP connection between the source and the
destination.i.e n0 and n4.When we have several flows such as TCP, UDP etc in a
network. So, to identify these flows we mark these flows by using the command
'$tcp set fid_1'. In the last line we set the packet size of tcp as 552 while
the default packet size of tcp is 1000.
FTP over TCP
File Transfer Protocol(FTP)
is a standard mechanism provided by the Internet for transferring files from
one host to another. Well this is the most common task expected from a
networking or a inter networking . FTP differs from other client server
applications in that it establishes between the client and the server. One
connection is used for data transfer and other one is used for providing
control information. FTP uses the services of the TCP. It needs two
connections. The well Known port 21 is used for control connections and the
other port 20 is used for data transfer.
Well here we will learn in
how to run a FTP connection over a TCP
#Initiating FTP over TCP
set ftp [new Application/FTP]
$ftp attach-agent $tcp
In above,the command 'set
ftp [new Application/FTP]' gives a pointer called 'ftp' which indicates the FTP
application.Next, we attach the ftp application with tcp agent as FTP uses the
services of TCP.
UDP
The User datagram Protocol
is one of the main protocols of the Internet protocol suite.UDP helps the host
to send send messages in the form of datagrams to another host which is present
in a Internet protocol network without any kind of requirement for channel
transmission setup. UDP provides a unreliable service and the datagrams may arrive
out of order,appear duplicated, or go missing without notice. UDP assumes that
error checking and correction is either not necessary or performed in the
application, avoiding the overhead of such processing at the network interface
level. Time-sensitive applications often use UDP because dropping packets is
preferable to waiting for delayed packets, which may not be an option in a
real-time system.
Now we will learn how to
create a UDP connection in network simulator.
# 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
Similarly,the command 'set
udp [new Agent/UDP]' gives a pointer called 'udp' which indicates the udp agent
which is a object of ns.Then the command '$ns attach-agent $n1 $udp' defines
the source node of udp connection. Next the command 'set null [new Agent/Null]'
defines the destination of udp by a pointer called null. The next command '$ns
attach-agent $n5 $null' defines the destination node as n5.Next, the command
'$ns connect $udp $null' makes the UDP connection between the source and the
destination.i.e n1 and n5.When we have several flows such as TCP,UDP etc in a
network. So, to identify these flows we mark these flows by using the command
'$udp set fid_2
Constant Bit Rate(CBR)
Constant Bit Rate (CBR) is
a term used in telecommunications, relating to the quality of service.When
referring to codecs, constant bit rate encoding means that the rate at which a
codec's output data should be consumed is constant. CBR is useful for streaming
multimedia content on limited capacity channels since it is the maximum bit
rate that matters, not the average, so CBR would be used to take advantage of
all of the capacity. CBR would not be the optimal choice for storage as it
would not allocate enough data for complex sections (resulting in degraded
quality) while wasting data on simple sections.
CBR over UDP Connection
#setup cbr over udp
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set packetSize_1000
$cbr set rate_0.01Mb
$cbr set random _false
In the above we define a
CBR connection over a UDP one. Well we have already defined the UDP source and
UDP agent as same as TCP. Instead of defining the rate we define the time
interval between the transmission of packets in the command '$cbr set
rate_0.01Mb'. Next, with the help of the command '$cbr set random _false' we
can set random noise in cbr traffic.we can keep the noise by setting it to
'false' or we can set the noise on by the command '$cbr set random _1'. We can
set by packet size by using the command '$cbr set packetSize_(packetsize).We
can set the packet size up to sum value in bytes.
Scheduling Events
In ns the tcl script
defines how to schedule the events or in other words at what time which event
will occur and stop. This can be done using the command
$ns at .
So here in our program we
will schedule the ftp and cbr.
# scheduling
the events
$ns at
0.1 "cbr start"
$ns at
1.0 "ftp start"
$ns at
124.0 "ftp stop"
$ns at
124.5 "cbr stop"
Network Animator(NAM)
When we will run the above
program in ns then we can can visualize the network in the NAM. But instead of
giving random positions to the nodes, we can give suitable initial positions to
the nodes and can form a suitable topology. So, in our program we can give
positions to the nodes in NAM in the following way
#Give position to the nodes
in NAM
$ns duplex-link-op $n0 $n2 orient-right-down
$ns duplex-link-op $n1 $n2 orient-right-up
$ns simplex-link-op $n2 $n3 orient-right
$ns simplex-link-op $n3 $n2 orient-left
$ns duplex-link-op $n3 $n4 orient-right-up
$ns duplex-link-op $n3 $n5 orient-right-down
We can also define the
color of cbr and tcp packets for identification in NAM.For this we use the
following command
#Marking the flows
$ns color1 Blue
$ns color2 Red
$ns color1 Blue
$ns color2 Red
To view the network
animator we need to type the command: nam
Comments
Post a Comment