//Red
set ns [new Simulator]
#
####################################################################
# Open NAM trace
file
set nf [open out.nam w]
$ns namtrace-all $nf
#
####################################################################
# Open NS trace
file
set tf [open out.tr w]
$ns trace-all $tf
# ####################################################################
# Open TCP cndw
trace file
set windowVsTime [open win w]
#
####################################################################
# Open parameter
recording file
set param [open parameters w]
#
####################################################################
# Define a
'finish' procedure
proc finish {} {
global ns nf tf
$ns flush-trace
close $nf
close $tf
exec grep
"a" red-queue.tr > ave.tr
exec grep
"Q" red-queue.tr > cur.tr
exec nam out.nam &
exit 0
}
#
####################################################################
# Create
bottleneck and dest nodes
set n2 [$ns node]
set n3 [$ns node]
# ####################################################################
# Create RED
links between bottleneck nodes
$ns duplex-link $n2 $n3 0.7Mb 20ms RED
#
####################################################################
# Set simulation
parameters
set NumbSrc 3
set Duration 50
#
####################################################################
# Create $NumbSrc
source nodes
for {set j 1} {$j<=$NumbSrc} { incr j } {
set S($j) [$ns node]
}
#
####################################################################
# Create a random
generator for starting the ftp and
# for bottleneck
link delays
set rng [new RNG]
$rng seed 2
#
####################################################################
# parameters for
random variables for begenning of ftp connections
set RVstart [new RandomVariable/Uniform]
$RVstart set min_ 0
$RVstart set max_ 7
$RVstart use-rng $rng
#
####################################################################
# Define random
starting times for each connection
for {set i 1} {$i<=$NumbSrc} { incr i } {
set startT($i) [expr [$RVstart value]]
set dly($i) 1
puts $param "startT($i) $startT($i) sec"
}
#
####################################################################
# Create links
between source and bottleneck
for {set j 1} {$j<=$NumbSrc} { incr j } {
$ns duplex-link $S($j) $n2 10Mb $dly($j)ms
DropTail
$ns queue-limit $S($j) $n2 20
}
#
####################################################################
# Orient the
links
$ns duplex-link-op $n2 $n3 orient right
$ns duplex-link-op $S(1) $n2 orient
right-down
$ns duplex-link-op $S(2) $n2 orient right
$ns duplex-link-op $S(3) $n2 orient right-up
#
####################################################################
# Set Queue Size
of (bottleneck) link (n2-n3) to 100
$ns queue-limit $n2 $n3 100
#
####################################################################
# Create TCP
Sources
for {set j 1} {$j<=$NumbSrc} { incr j }
{
set tcp_src($j) [new Agent/TCP/Reno]
$tcp_src($j) set window_ 8000
}
#
####################################################################
# Color the
packets
$tcp_src(1) set fid_ 1
$ns color 1 red
$tcp_src(2) set fid_ 2
$ns color 2 yellow
$tcp_src(3) set fid_ 3
$ns color 3 blue
#
####################################################################
# Create TCP
Destinations
for {set j 1} {$j<=$NumbSrc} { incr j } {
set tcp_snk($j) [new Agent/TCPSink]
}
#
####################################################################
# Define
connections between TCP src's and sinks
for {set j 1} {$j<=$NumbSrc} { incr j } {
$ns attach-agent $S($j) $tcp_src($j)
$ns attach-agent $n3 $tcp_snk($j)
$ns
connect $tcp_src($j) $tcp_snk($j)
}
#
####################################################################
# Further
parametrisation of TCP sources
for {set j 1} {$j<=$NumbSrc} { incr j } {
$tcp_src($j) set packetSize_ 552
}
#
####################################################################
# Create FTP
sources
for {set j 1} {$j<=$NumbSrc} { incr j } {
set ftp($j) [$tcp_src($j) attach-source
FTP]
}
#
####################################################################
# Schedule events
for the FTP agents:
for {set i 1} {$i<=$NumbSrc} { incr i } {
$ns at $startT($i) "$ftp($i)
start"
$ns at $Duration "$ftp($i) stop"
}
#
####################################################################
#
plotWindow(tcpSource file k): Write CWND of k tcpSources in file
proc plotWindow {tcpSource file k} {
global ns NumbSrc
set time 0.03
set now [$ns now]
set cwnd [$tcpSource set cwnd_]
if {$k == 1} {
puts -nonewline $file "$now \t
$cwnd \t"
} else {
if {$k < $NumbSrc } {
puts -nonewline $file "$cwnd
\t"
}
}
if { $k == $NumbSrc } {
puts -nonewline $file "$cwnd
\n"
}
$ns at [expr $now+$time] "plotWindow
$tcpSource $file $k"
}
#
####################################################################
# Start
plotWindow() for all tcp sources
for {set j 1} {$j<=$NumbSrc} { incr j } {
$ns at 0.1 "plotWindow $tcp_src($j)
$windowVsTime $j"
}
#
####################################################################
# Monitor avg
queue length of RED link ($n2,$n3) in file "red-queue.tr"
set traceq [open red-queue.tr w]
set redq [[$ns link $n2 $n3] queue]
$redq trace curq_
$redq trace ave_
$redq attach $traceq
#
####################################################################
# Schedule
simulation end
$ns at [expr $Duration] "finish"
# ####################################################################
# run
$ns run
OUTPUT:
Acaesismulmu-Albuquerque Jennifer Yazzie https://wakelet.com/wake/4DtpfCRdSQvTG6ei0IdeS
ReplyDeletedibineca
paroKighe1991 Maria Spencer Any Video Converter
ReplyDeleteESET NOD32 Internet Security
Avid Pro Tools
hopsmatisapp