martes, 30 de abril de 2013

Entrada # 5 - Materia

Redes de Telecomunicaciones

Control de Congestión con ns2

Código Utilizado

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
view raw Tarea5.tcl hosted with ❤ by GitHub
Graficas



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.

1 comentario:

  1. Hay un sólo mecanismo (el reseteo de contadores) sin explicación ninguna. El análisis no es comparativo. 2 pts.

    ResponderEliminar