You are on page 1of 44

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 <bandwidth> <delay>
<queue_type>
– $ns duplex-link $n0 $n1 <bandwidth> <delay>
<queue_type>
– <queue_type>: DropTail, RED, CBQ, FQ, SFQ, DRR
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]
● 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 rtmodel-at <time> up|down $n0 $n1
$ns rtmodel Trace <config_file> $n0 $n1
$ns rtmodel Exponential {<params>} $n0 $n1
$ns rtmodel Deterministic {<params>} $n0 $n1
● 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
● Multicast
– $ns multicast (después de [new Simulator])
● 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]
● 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 post-
simulació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 right-


down
● $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 detach-


agent $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

You might also like