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 No hay pruebas de corrección Búsqueda exhaustiva Toma tiempo

Desventajas
– – –

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 Si se requiere procesamiento de cada paquete de cada flujo Si se quiere cambiar el comportamiento de una clase C++ existente

C++
– –

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] $ns simplex-link $n0 $n1 <bandwidth> <delay> <queue_type> $ns duplex-link $n0 $n1 <bandwidth> <delay> <queue_type> <queue_type>: DropTail, RED, CBQ, FQ, SFQ, DRR

Enlaces y colas
– – –

Creando la topología

LAN

– – – –

$ns make-lan <node_list> <bandwidth> <delay> <ll_type> <ifq_type> <mac_type> <channel_type> <ll_type>: LL <ifq_type>: Queue/DropTail, <mac_type>: MAC/802_3 <channel_type>: 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] $ns lossmodel $loss_module $n0 $n1

Insertando módulos de Error

Creando la topología

Falla en los enlaces

Modificaciones en el módulo de enrutamiento para reflejar cambios de enrutamiento
rtmodel-at <time> up|down $n0 $n1 rtmodel Trace <config_file> $n0 $n1 rtmodel Exponential {<params>} $n0 $n1 rtmodel Deterministic {<params>} $n0 $n1

Cuatro modelos
$ns $ns $ns $ns

Lista de Parámetros
[<start>] <up_interval> <down_interval> [<finish>]

Creando la topología

Unicast
– –

$ns rtproto <type> <type>: Static, Session, DV, cost, multi-path $ns multicast (después de [new Simulator])

Multicast
– – –

o set ns [new Simulator –multicast on]

$ns mrtproto <type> <type>: 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] set src [new Application/Traffic/Exponential] set src [new Application/Traffic/Pareto]

Exponencial o Pareto
– –

Definiendo el tráfico

FTP
– –

set ftp [new Application/FTP] $ftp attach-agent $tcp set telnet [new Application/Telnet] $telnet attach-agent $tcp

Telnet
– –

Simulación de aplicaciones

Características
– –

Construcción sobre un protocolo de transporte existente Transmisión de data de usuario, ej., Cabeceras HTTP TCP: Application/TcpApp UDP: Agent/Message

Dos soluciones diferentes
– –

Programando los eventos

Programando el inicio del tráfico

$ns at 0.0 “$cbr0 start” $ns at 5.0 “$cbr0 stop” $ns at 5.0 “finish”

Programando el fin del tráfico
– –

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