martes, 16 de abril de 2013

Laboratorio: Monitoreo ns2

Para esta entrada se encargo monitoraer el desempeño de las transmisiones de una simulación en ns2/3, en mi caso ns2.

Lo que se midió en esta simulación fue el throughput que son la cantidad de bits que se transmiten exitosamente por segundo y la latencia que es la velocidad en que se propaga la señal, dependiendo del medio por el que viaja.

La simulación que se muestra a continuación, se intento reproducir un videostreaming, donde el transmisor esta emitiendo un "show" en vivo, y donde los paquetes viajan por UDP (ya que es la mejor para videoconferencias o cosas por el estilo), estos paquetes llegan al servidor y estas son enviadas a los routers de las personas que quieran verlo y asi hasta llegar a las computadoras de los usuarios.

Aquí el código:

set ns [new Simulator -multicast on]
set tf [open trace.tr w]
$ns trace-all $tf
#Abrimos los archivos para NAM
set nf [open out.nam w]
$ns namtrace-all $nf
#Creamos los nodos
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]
set n6 [$ns node]
set n7 [$ns node]
set n8 [$ns node]
#Creamos los enlaces entre los nodos
$ns duplex-link $n0 $n1 1.5mb 10ms DropTail
$ns duplex-link $n1 $n2 1.5Mb 10ms DropTail
$ns duplex-link $n1 $n3 1.5Mb 10ms DropTail
$ns duplex-link $n3 $n4 1.5Mb 10ms DropTail
$ns duplex-link $n3 $n5 1.5Mb 10ms DropTail
$ns duplex-link $n3 $n6 1.5Mb 10ms DropTail
$ns duplex-link $n2 $n7 1.5Mb 10ms DropTail
$ns duplex-link $n2 $n8 1.5Mb 10ms DropTail
#Acomodamos las figuras en NAM
$ns duplex-link-op $n0 $n1 orient down
$ns duplex-link-op $n1 $n2 orient down-right
$ns duplex-link-op $n1 $n3 orient down-left
$ns duplex-link-op $n3 $n4 orient down-left
$ns duplex-link-op $n3 $n5 orient down-right
$ns duplex-link-op $n3 $n6 orient down
$ns duplex-link-op $n2 $n7 orient down
$ns duplex-link-op $n2 $n8 orient down-right
#Establecemos la dispocision de la coneccion
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
$udp0 set fid_ 1
#Creacion de trafico CBR
set cbr1 [new Application/Traffic/CBR]
$cbr1 attach-agent $udp0
#Agente null
set null [new Agent/Null]
$ns attach-agent $n1 $null
$ns connect $udp0 $null
#Establecemos la dispocision de la coneccion
set udp1 [new Agent/UDP]
$ns attach-agent $n1 $udp1
$udp1 set fid_ 1
#Creacion de trafico CBR
set cbr2 [new Application/Traffic/CBR]
$cbr2 attach-agent $udp1
#Agente null
set null [new Agent/Null]
$ns attach-agent $n3 $null
$ns connect $udp1 $null
#Establecemos la dispocision de la coneccion
set udp2 [new Agent/UDP]
$ns attach-agent $n1 $udp2
$udp2 set fid_ 1
#Creacion de trafico CBR
set cbr3 [new Application/Traffic/CBR]
$cbr3 attach-agent $udp2
#Agente null
set null [new Agent/Null]
$ns attach-agent $n2 $null
$ns connect $udp2 $null
set udp3 [new Agent/UDP]
$ns attach-agent $n3 $udp3
$udp3 set fid_ 2
#Creacion de trafico CBR
set cbr4 [new Application/Traffic/CBR]
$cbr4 attach-agent $udp3
#Agente null
set null [new Agent/Null]
$ns attach-agent $n4 $null
$ns connect $udp3 $null
set udp4 [new Agent/UDP]
$ns attach-agent $n3 $udp4
$udp4 set fid_ 2
#Creacion de trafico CBR
set cbr5 [new Application/Traffic/CBR]
$cbr5 attach-agent $udp4
#Agente null
set null [new Agent/Null]
$ns attach-agent $n6 $null
$ns connect $udp4 $null
set udp5 [new Agent/UDP]
$ns attach-agent $n3 $udp5
$udp5 set fid_ 2
#Creacion de trafico CBR
set cbr6 [new Application/Traffic/CBR]
$cbr6 attach-agent $udp5
#Agente null
set null [new Agent/Null]
$ns attach-agent $n5 $null
$ns connect $udp5 $null
set udp6 [new Agent/UDP]
$ns attach-agent $n3 $udp6
$udp6 set fid_ 3
#Creacion de trafico CBR
set cbr7 [new Application/Traffic/CBR]
$cbr7 attach-agent $udp6
#Agente null
set null [new Agent/Null]
$ns attach-agent $n1 $null
$ns connect $udp6 $null
$ns at 0.1 "$cbr1 start"
$ns at 1.0 "$cbr1 stop"
$ns at 0.3 "$cbr2 start"
$ns at 0.3 "$cbr3 start"
$ns at 0.5 "$cbr4 start"
$ns at 0.5 "$cbr5 start"
$ns at 0.5 "$cbr6 start"
$ns at 0.5 "$cbr7 start"
$ns rtmodel-at 0.5 down $n2 $n8
$ns rtmodel-at 0.5 down $n2 $n7
$ns rtmodel-at 1.0 up $n2 $n8
$ns rtmodel-at 1.0 up $n2 $n7
$ns at 1.0 "$cbr2 stop"
$ns at 1.0 "$cbr3 stop"
$ns at 1.0 "$cbr4 stop"
$ns at 1.0 "$cbr5 stop"
$ns at 1.0 "$cbr6 stop"
$ns at 1.0 "$cbr7 stop"
$ns at 1.2 "finish"
#Definimos un procedimiento para "terminar"
proc finish {} {
global ns nf tf
$ns flush-trace
close $nf
close $tf
#ejecutamos NAM en los archivos Trace
exec nam out.nam &
exit 0
}
$ns color 1 red
$ns color 2 green
$ns color 3 blue
$ns color 4 green
$n1 color red
$n1 label "Servidor"
$n4 color green
$n4 label "Receptor 1"
$n5 color green
$n5 label "Receptor 2"
$n6 color green
$n6 label "Receptor 3"
$n7 color green
$n7 label "Receptor 4"
$n8 color green
$n8 label "Receptor 5"
$n0 color blue
$n0 label "Transmisor 1"
$n3 color purple
$n3 label "Router 1"
$n2 color purple
$n2 label "Router 2"
#Corremos la simulacion
$ns run
view raw topologia.tcl hosted with ❤ by GitHub


Como se puede apreciar dos de los receptores no pudieron ver u oír el vídeo ya que hubo problema con la conexión y por lo tanto no llegaron los paquetes.

Thrughput
Código:

BEGIN {
node = 1;
Tinicial = 0.0;
Tfinal = 0.0;
paquetes=0;
bytes=0;
}
{
Tfinal = $2;
if (tfinal - tinicial > 0.05) {
perdida = bytes_counter / (Tfinal-Tinicial);
perdida /= 1000000;
printf("%f %f\n", Tfinal, thru) > "archivo.dat";
Tinicial = $2;
}
if ($1=="r") {
bytes += $6;
paquetes++;
}
}
END {
print("LOL");
}
view raw perdida.awk hosted with ❤ by GitHub

Aquí el archivo creado con los resultados:

Aquí el resultado en forma de gráfica:
 
Como se puede apreciar la se transmitía cada vez mejor, aumentando poco a poco.

Latencia
Código:
Begin{
Tinicial = 0.0;
Tfinal = 0.0;
latencia = 0;
paquete = 0;
}
{
Tfinal = $2
latencia = Tfinal - Tinicial
Tinicial = Tfinal
paquete += 1;
if ($1 == "r"){
printf ("%f %f\n",paquete,latencia);
}
}
End {
print("LOL");
}
view raw latencia.awk hosted with ❤ by GitHub



Aquí una parte del resultado del código:

Aquí los resultados en gráfica:

Esto nos indica que la velocidad no siempre es la misma al entregar los paquetes.



Bibliografias:
http://nile.wpi.edu/NS/simple_ns.html

No hay comentarios:

Publicar un comentario