Está en la página 1de 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
Script
Simulación

NAM – Network Animator

NAM – Network Animator

Xgraph – Gnuplot

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

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

$$nnss rrttmmooddeell--aatt <<ttiimmee>> uupp||ddoowwnn $$nn00 $$nn11

$$nnss rrttmmooddeell TTrraaccee <<ccoonnffiigg

$$nnss rrttmmooddeell EExxppoonneennttiiaall {{<<ppaarraammss>>}} $$nn00 $$nn11 $$nnss rrttmmooddeell DDeetteerrmmiinniissttiicc {{<<ppaarraammss>>}} $$nn00 $$nn11

ffiillee>> $$nn00 $$nn11

Lista de Parámetros

[[<<ssttaarrtt>>]] <<uupp

iinntteerrvvaall>>

<<ddoowwnn

iinntteerrvvaall>>

[[<<ffiinniisshh>>]]

CreandoCreando lala topologíatopologí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

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

Ejemplo 2

Enlaces de interés

http://www.isi.edu/nsnam/ns

http://salem.cs.depaul.edu/~ehabCourses/

Muchas gracias por la atención