Bueno lo que hice al igual que mis compañeros (creo) fue que cuando la banda o en este caso es un buffer pues resetear toda la transmisión de paquetes y así de esta manera evitar que se tiren los paquetes por no tener cupo en el enlace.
En el código genero tráfico de manera exponencial y utilizó tres archivos distintos para tres ejemplos en este caso
Después para obtener cuánto se está consumiendo del enlace o el total de paquetes que ya hay en la cola se hace con la siguiente instrucción:
set bw0 [$sink0 set bytes_]
Código
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set ns [new Simulator] | |
set f0 [open f0.tr w] | |
set f1 [open f1.tr w] | |
set f2 [open f2.tr w] | |
set n0 [$ns node] | |
set n1 [$ns node] | |
set n2 [$ns node] | |
set n3 [$ns node] | |
set n4 [$ns node] | |
#Conexiones | |
ns duplex-link n0 $n3 1Mb 100ms DropTail | |
ns duplex-link n1 $n3 1Mb 100ms DropTail | |
ns duplex-link n2 $n3 1Mb 100ms DropTail | |
ns duplex-link n3 $n4 1Mb 100ms DropTail | |
proc finish {} { | |
global f0 f1 f2 | |
close $f0 | |
close $f1 | |
close $f2 | |
exec xgraph out0.tr out1.tr out2.tr -geometry 800x600 & | |
exit 0 | |
} | |
proc generador { node sink size burst idle rate } { | |
set ns [Simulator instance] | |
set source [new Agent/UDP] | |
ns attach-agent node $source | |
set traffic [new Application/Traffic/Exponential] | |
traffic set packetSize_ size | |
traffic set burst_time_ burst | |
traffic set idle_time_ idle | |
traffic set rate_ rate | |
traffic attach-agent source | |
ns connect source $sink | |
return $traffic | |
} | |
proc congestion {} { | |
global sink0 sink1 sink2 f0 f1 f2 | |
#Instancia del simulador | |
set ns [Simulator instance] | |
set time 0.5 | |
#Bytes recibidos | |
set bw0 [$sink0 set bytes_] | |
set bw1 [$sink1 set bytes_] | |
#Tiempo actual | |
set now [$ns now] | |
puts f0 "now [expr $bw0]" | |
puts f1 "now [expr $bw1]" | |
set band1 [expr $bw0] | |
set band2 [expr $bw1] | |
if {$band1>12} { | |
puts stdout "Hay congestion!!" | |
$sink0 set bytes_ 0 | |
} | |
if {$band1>12} { | |
puts stdout "Hay congestion!!" | |
$sink1 set bytes_ 0 | |
} | |
ns at [expr now+$time] "congestion" | |
} | |
set sink0 [new Agent/LossMonitor] | |
set sink1 [new Agent/LossMonitor] | |
set sink2 [new Agent/LossMonitor] | |
ns attach-agent n4 $sink0 | |
ns attach-agent n4 $sink1 | |
ns attach-agent n4 $sink2 | |
#Genera trafico | |
set source0 [generador n0 sink0 200 2s 1s 50k] | |
set source1 [generador n1 sink1 200 2s 1s 150k] | |
set source2 [generador n2 sink2 200 2s 1s 400k] | |
$ns at 0.0 "congestion" | |
#Inicio de origen de trafico | |
ns at 6.0 "source0 start" | |
ns at 6.0 "source1 start" | |
ns at 6.0 "source2 start" | |
ns at 30.0 "source0 stop" | |
ns at 30.0 "source1 stop" | |
ns at 30.0 "source2 stop" | |
$ns at 40.0 "finish" | |
$ns run |
Como se puede apreciar en la gráfica hay momentos donde se vuelve a realizar la transmisión (comienza desde 0), que es cuando hay congestión de tráfico.
No comments:
Post a Comment