Redes de Telecomunicaciones
Control de Congestión con ns2
Código Utilizado
This file contains hidden or 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
puts "Ejecutando el Simulador" | |
#Creando el simulador | |
set ns [new Simulator] | |
set sal1 [open sal1.tr w] | |
set sal2 [open sal2.tr w] | |
set n0 [$ns node] | |
set n1 [$ns node] | |
set n2 [$ns node] | |
set n3 [$ns node] | |
$ns duplex-link $n0 $n2 2Mb 100ms DropTail | |
$ns duplex-link $n1 $n2 2Mb 100ms DropTail | |
$ns duplex-link $n2 $n3 1Mb 200ms DropTail | |
#Procedure "finish" | |
proc finish {} { | |
global sal1 sal2 | |
close $sal1 | |
close $sal2 | |
exec xgraph sal1.tr sal2.tr -geometry 800x400 & | |
exit 0 | |
} | |
#Se crea una funcion la cuál regresa el trafico del nodo y el sink que esta conectado asi como otras variables | |
proc proctrafico { nodo sink tamano burst idle laten } { | |
#Obtener la instancia del simulador | |
set ns [Simulator instance] | |
set source [new Agent/UDP] | |
$ns attach-agent $nodo $source | |
set trafico [new Application/Traffic/Exponential] | |
$trafico set packetSise_ $tamano | |
$trafico set burst_time_ $burst | |
$trafico set idle_time_ $idle | |
$trafico set rate_ $laten | |
$trafico attach-agent $source | |
$ns connect $source $sink | |
return $trafico | |
} | |
proc monitoreo {} { | |
global sinks1 sinks2 sal1 sal2 | |
set ns [Simulator instance] | |
set time 0.5 | |
set OK [$sinks1 set bytes_] | |
set Lost [$sinks2 set nlost_] | |
set var1 [expr $OK/$time*8/1000000] | |
#Tiempo actual del simulador | |
set tactual [$ns now] | |
puts $sal1 "$tactual $OK" | |
puts $sal2 "$tactual $Lost" | |
puts "Bytes $var1" | |
#Si se va a sobrepasar el ancho de banda seteamos la cantidad de datos a enviar | |
if {$var1>1} { | |
$sinks1 set bytes_ 0 | |
} | |
if {$var1<0.5} { | |
$sinks2 set packetSise 100 | |
} | |
#Se vuelve a llamar al proceso 0.5s despues de la ejecucion que acaba de terminar | |
$ns at [expr $tactual+$time] "monitoreo" | |
} | |
set sinks1 [new Agent/LossMonitor] | |
set sinks2 [new Agent/LossMonitor] | |
$ns attach-agent $n3 $sinks1 | |
$ns attach-agent $n3 $sinks2 | |
set source1 [proctrafico $n0 $sinks1 200 2s 1s 100k] | |
set source2 [proctrafico $n1 $sinks2 200 2s 1s 100k] | |
$ns at 0.0 "monitoreo" | |
$ns at 1.0 "$source1 start" | |
$ns at 1.0 "$source2 start" | |
$ns at 8.0 "$source1 stop" | |
$ns at 8.0 "$source2 stop" | |
$ns at 9.0 "finish" | |
$ns run |
En la gráfica siguiente la franja roja son la cantidad de paquetes enviados y la línea verde es la cantidad de paquetes perdidos.
Como ven no existe perdida de paquetes.
Hay un sólo mecanismo (el reseteo de contadores) sin explicación ninguna. El análisis no es comparativo. 2 pts.
ResponderEliminar