Today I was asking in how to monitor TCP connections on NS-2. Then I decided to blog about the topic.
First you need a TCP agent and maybe with a FTP or some sort of application (I suppose that you already have some nodes):
#Setup a TCP connection set tcp1 [new Agent/TCP]
$tcp1 set class_ 2
#Attach tcp to node n0 $ns attach-agent $n0
$tcp1 set sink [new Agent/TCPSink]
#Attach a sink to node
n1 $ns attach-agent $n1 $sink $ns connect $tcp1 $sink
$tcp1 set fid_ 1
#Setup a FTP over TCP connection
set ftp0 [new Application/FTP]
#Link tcp agent with FTP application
$ftp0 attach-agent
$tcp1 $ftp0 set type_ FTP
Now, create a procedure to print some TCP information
proc update_tcpinfo {} {
global ns file_out time_step
set now [$ns now]
set window [$tcp set cwnd_]
set avgwind [$tcp set awnd_]
set rtt [$tcp set rtt_]
set acks [$tcp set ack_]
Then you have window, avgwind, rtt and acks that you can print out to screen or to a file (an output file or may be the tracefile, I would recommend a separate trace file).
puts $file_out "$now $window $avgwind $rtt $acks"
And call the procedure every time_step
$ns at [expr $now + $time_step] "update_tcpinfo" }
To declare your outfile just do it as the trace and nam files are normally initiated:
#Open flow file set file_out [open flow_trace.txt w]
And do not forget to close it:
#Define a 'finish' procedure
proc finish {} {
global ns nf tf file_out
$ns flush-trace
#Close the NAM trace file
close $nf
#Close the Trace file
close $tf
#Close outputs file
close $file_out
#Execute NAM on the trace file, uncomment the next line to exec NAM automatically
#exec nam out.nam & exit 0
}
Call the procedure and run the simulation
$ns at 0.5 "updatetcpinfo" #Call the finish procedure after 5 seconds of simulation time $ns at 5 "finish" #Run the simulation $ns run
This is only pseudo code and it could have some errors. I prepared a working file that can be found here:
Monday, 8 September 2008
TCP monitoring in NS
Posted by Arturo Servin at 08:55 2 comments
Labels: network, network simulation, ns-2, tcp
Subscribe to:
Posts (Atom)