Simulador NS/2 Eloy Espozo Espinoza
Introducción ●
● ●
●
NS/2 es un simulador discreto por orientado a eventos Simula a nivel de paquete Orientado a objetos, escrito en C++, con un intérprete Otcl como interfaz Soporte para –
Intserv/diffserv, multicast, transporte, aplicaciones, wireless
¿Por qué simular? ●
Predicción del rendimiento de la red – – –
● ● ●
Necesidades de usuarios Necesidades de aplicaciones Localización de cuellos de botella en redes
Planificación de capacidades Seguimiento del rendimiento de la red Investigación
Simulación de redes ●
Ventajas – – – –
●
Entorno controlado Manipulación de todo Resultados reproducibles Herramientas experimentales
Desventajas – – –
No hay pruebas de corrección Búsqueda exhaustiva Toma tiempo
Ventajas de NS/2 ● ●
●
●
Software libre Flexible y va de acuerdo al estado del arte Contiene amplias clases de protocolos Internet incluyendo multicasting, SRM, RTP, ATM y redes inalámbricas Ampliamente usado
Desventajas de NS/2 ● ● ●
Poca documentación API incompleta Calidad “alpha”
¿Por qué dos lenguajes? ●
Otcl – –
●
Para configuración Manipulación de objetos C++ existentes
C++ – –
Si se requiere procesamiento de cada paquete de cada flujo Si se quiere cambiar el comportamiento de una clase C++ existente
Componentes de NS/2
Script Simulación
NAM – Network Animator
Xgraph – Gnuplot
Modelando el mundo real ●
● ●
●
El simulador mantiene una lista de eventos Se procesa la lista de eventos Cada evento sucede en un determinado instantes de tiempo virtual La ejecución de un evento consume tiempo real pero no se refleja en el tiempo virtual
Modelando el mundo real
Creando la topología ●
Nodos – –
●
set n0 [$ns node] set n1 [$ns node]
Enlaces y colas – – –
$ns simplex-link $n0 $n1 <delay> $ns duplex-link $n0 $n1 <delay> : DropTail, RED, CBQ, FQ, SFQ, DRR
Creando la topología ●
LAN –
– – – –
$ns make-lan <node_list> <delay> <mac_type> : LL : Queue/DropTail, <mac_type>: MAC/802_3 : Channel
Creando la topología ●
Creando módulos de Error – – – – –
●
set loss_module [new ErrorModel] $loss_module set rate_ 0.01 $loss_module unit pkt $loss_module ranvar [new RandomVariable/Uniform] $loss_module drop-target [new Agent/Null]
Insertando módulos de Error –
$ns lossmodel $loss_module $n0 $n1
Creando la topología ●
Falla en los enlaces –
●
Modificaciones en el módulo de enrutamiento para reflejar cambios de enrutamiento
Cuatro modelos $ns $ns $ns $ns
●
rtmodel-at up|down $n0 $n1 rtmodel Trace $n0 $n1 rtmodel Exponential {<params>} $n0 $n1 rtmodel Deterministic {<params>} $n0 $n1
Lista de Parámetros [<start>] <down_interval> []
Creando la topología ●
Unicast – –
●
$ns rtproto : Static, Session, DV, cost, multi-path
Multicast –
$ns multicast (después de [new Simulator]) ●
– –
o set ns [new Simulator –multicast on]
$ns mrtproto : CtrMcast, DM, ST, BST (centralizado,dense mode, shared tree
Definiendo Agentes ●
UDP – – – – –
set udp [new Agent/UDP] set null [new Agent/Null] $ns attach-agent $n0 $udp $ns attach-agent $n1 $null $ns connect $udp $null
Definiendo Agentes ●
TCP – – – – –
set tcp [new Agent/TCP] set tcpsink [new Agent/TCPSink] $ns attach-agent $n0 $tcp $ns attach-agent $n1 $tcpsink $ns connect $tcp $tcpsink
Definiendo el tráfico ●
CBR –
●
set src [new Application/Traffic/CBR]
Exponencial o Pareto – –
set src [new Application/Traffic/Exponential] set src [new Application/Traffic/Pareto]
Definiendo el tráfico ●
FTP – –
●
set ftp [new Application/FTP] $ftp attach-agent $tcp
Telnet – –
set telnet [new Application/Telnet] $telnet attach-agent $tcp
Simulación de aplicaciones ●
Características – –
●
Construcción sobre un protocolo de transporte existente Transmisión de data de usuario, ej., Cabeceras HTTP
Dos soluciones diferentes – –
TCP: Application/TcpApp UDP: Agent/Message
Programando los eventos ●
Programando el inicio del tráfico –
●
$ns at 0.0 “$cbr0 start”
Programando el fin del tráfico – –
$ns at 5.0 “$cbr0 stop” $ns at 5.0 “finish”
Procedimiento de postsimulación proc finish { } { global ns fd $ns flush-trace close $fd exec …. & }
La traza
Analizando la traza ●
●
●
●
La traza refleja todos los eventos de la simulación Permite observar el resultado de determinados factores en la simulación El archivo de la traza sigue un formato común Se debe prestar atención a los campos de la traza
Ejemplo 1 ● ● ●
● ●
● ●
set ns [new Simulator] $ns color 1 Blue $ns color 2 Red set nf [open out.nam w] $ns namtrace-all $nf set tf [open out.tr w] $ns trace-all $tf
Ejemplo 1 ● ● ● ● ● ● ● ●
proc finish {} { global ns nf tf $ns flush-trace close $nf close $tf exec nam out.nam & exit 0 }
Ejemplo 1 ● ● ● ●
● ● ●
set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
Ejemplo 1 ●
$ns queue-limit $n2 $n3 10
●
$ns duplex-link-op $n2 $n3 queuePos 0.5
●
● ●
$ns duplex-link-op $n0 $n2 orient rightdown $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right
Ejemplo 1 ● ● ● ● ● ● ● ● ● ● ●
set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #creamos el flujo de datos set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP
Ejemplo 1 ● ● ● ● ● ● ● ● ● ● ● ● ●
set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $tcp set fid_ 2 #creamos el flujo de datos set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false
Ejemplo 1 ● ● ● ●
●
● ● ● ●
$ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" $ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detachagent $n3 $sink” $ns at 5.0 "finish" puts "tamano de paquete CBR = [$cbr set packet_size_]" puts "intervalo CBR = [$cbr set interval_]" $ns run
Ejemplo 1
Ejemplo 1
Ejemplo 2 ● ● ● ● ● ● ●
set ns [new Simulator] $ns color 0 red $ns color 1 blue set nf [open out.nam w] $ns namtrace-all $nf set tf [open out.tr w] $ns trace-all $tf
Ejemplo 2 ● ● ● ● ● ● ● ●
proc finish {} { global ns nf tf $ns flush-trace close $nf close $tf exec nam out.nam & exit 0 }
Ejemplo 2 ● ● ●
●
set n0 [$ns node] set n1 [$ns node] $ns duplex-link $n0 $n1 2Mb 5ms DropTail $ns queue-limit $n0 $n1 10
Ejemplo 2 ● ● ● ● ● ● ● ● ● ● ● ●
set tcp0 [new Agent/TCP] #$tcp0 set packetSize_ 1460 $tcp0 set window_ 20 $tcp0 set fid_ 0 $tcp0 set class_ 0 $ns attach-agent $n0 $tcp0 set tcp1 [new Agent/TCP] #$tcp1 set packetSize_ 1460 $tcp1 set window_ 20 $tcp1 set fid_ 1 $tcp1 set class_ 1 $ns attach-agent $n0 $tcp1
Ejemplo 2 ● ● ● ● ● ● ● ● ● ●
set sink0 [new Agent/TCPSink] $sink0 set fid_ 0 $ns attach-agent $n1 $sink0 $sink0 set class_ 0 #$tcp1 listen set sink1 [new Agent/TCPSink] $sink1 set fid_ 1 $ns attach-agent $n1 $sink1 $sink1 set class_ 1 #$tcp1 listen
Ejemplo 2 ● ● ● ● ● ● ● ● ● ● ● ●
$ns connect $tcp0 $sink0 $ns connect $tcp1 $sink1 set ftp0 [new Application/FTP] $ftp0 attach-agent $tcp0 set ftp1 [new Application/FTP] $ftp1 attach-agent $tcp1 $ns at 0.5 "$ftp0 start" $ns at 1.0 "$ftp1 start" $ns at 3.5 "$ftp1 stop" $ns at 4.0 "$ftp0 stop" $ns at 4.5 "finish" $ns run
Ejemplo 2
Enlaces de interés
• http://www.isi.edu/nsnam/ns • http://salem.cs.depaul.edu/~ehabCourses/TD
Muchas gracias por la atención