Simulador NS-2

¿Que es simulador NS-2?



-Ns, network simulator, es una herramienta muy potente dentro del campo de la simulación de redes. Es a la vez muy flexible dada la posibilidad de trabajar con scripts tcl que nos permite agregar toda la potencia de un lenguaje de programación a los propios elementos de la simulación.



-NS (Network Simulator) actualmente en la versión 2 nos permite realizar simulaciones de múltiples tipos de redes (cableadas, inalámbricas y por satelite). Para ello utiliza un lenguaje de script llamado Tcl que nos permite ir generando el modelo.

-También disponemos de una interfaz gráfica llamada nam que nos permite visualizar las simulaciones e incluso crear y editar los modelos a simular.

-Ns es una gran herramienta que nos puede ayudar en muchos campos a la hora de realizar pruebas o generar nuevos tipos de redes.


Un poco mas sobre NS



-Ns es un simulador de eventos centrado en la investigación sobre redes. Ns dispone simulación para TCP, routing y multicast sobre redes cableadas o inalámbricas (locales y por satélite).

-Ns empieza como una variante de el REAL network simulator en 1989 y ha evolucionado substancialmente durante los últimos años. En 1995 el desarrollo lo llevaba acabo DARPA a través del proyecto VINT de LBL, Xerox PARC, UCB y USC/ISI. Actualmente el desarrollo de ns lo lleva DARPA junto a SAMAN y otros. Ns siempre ha contado con contribuciones de muchos otros desarrolladores, incluyendo código inalámbrico de los proyectos CMU Monach y UCB Daedelus y también de Sun Microsystems.

-Ns se está utilizando tanto en entornos de investigación como en entornos educativos. Ns nos va a ser útil para la investigación ya que nos permite acceder a simulaciones con elementos a las que no podríamos acceder normalmente en caso de no disponer de un simulador. También nos permite modificar casi todos los parámetros que influyen en el estado o configuración de una red en tan solo unos segundos mientras que recrear en la realidad este entorno podría costarnos días o incluso meses.

-Ns se utiliza en entornos educativos ya que nos permite simular sencillas redes que nos van a ayudar a comprender los distintos protocolos y observar como se produce el envió de paquetes entre nodos, etc.

-Para definir una simulación en ns utilizamos un lenguaje de script llamado TCL que nos va a permitir definir los distintos elementos de la red y como debe comportarse. Una vez terminado el script se lo pasamos al ns y este irá realizando la simulación.

-Ns dispone de una interfaz gráfica para visualizar las simulaciones llamada nam (network animator). Nam también dispone de un editor gráfico, que nos va a permitir no tener que usar código TCL para crear las animaciones. Puedes crear la topología de red y simular varios protocolos y fuentes de tráfico mediante el uso del ratón.


¿Qué podemos hacer con estas herramientas?



DEFINIR:
-Redes terrestres, inalámbricas y por satélite con varios algoritmos de enrutado (DV, LS, PIM-DM, PIM-SM, AODV, DSR).
-Distintas fuentes de tráfico: Web, ftp, telnet, cbr ,etc..
-Fallos como perdidas probabilísticas y deterministas, fallos en la conexión, etc.
-Distintas disciplinas de encolado (drop-tail, RED, FQ, SFQ, DRR, etc) y QoS (calidad de servicio, como por ejemplo InmtServ y Diffserv).
VISUALIZAR:
-Flujo del paquete, su encolado y su posible descarte.
-Comportamientos del protocolo: comienzo lento de TCP, control de congestión, retransmisión rápida y recuperación.
-Movimiento de nodos en redes inalámbricas.
-Notas de los sucesos más importantes.
-Estados del protocolo.



Tipo de intalacion de NS2




Ejemplo de de un Scrip en NS2:















Ejemplo Explicado paso por paso sobre un Scrip en NS-2:

Primero crearemos un fichero que llamaremos ejemplo.tcl y al que iremos agregando las distintas líneas del script.

Primero de todo necesitamos un objeto de simulador:

set ns [new Simulator]

Ahora abriremos un fichero para guardar la traza para nam:

set nf [open out.nam w]
$ns namtrace-all $nf

La primera línea abre el fichero out.nam para escritura y nos da un manejador ‘nf’. En la segunda línea le decimos al objeto simulador que creamos al principio que envie todos los datos que se generen a este fichero.

El siguiente paso es añadir una función finish que cierre el fichero y que comience nam.

proc finish {} {
global ns nf
$ns flush-trace
close $nf
exec nam out.nam &
exit 0
}


La siguiente línea indica que transcurridos 5 segundos se termine la simulación invocando a la función finish.


$ns at 5.0 "finish"

Y a continuación indicaríamos el inicio de la simulación.

$ns run

Este es el esqueleto básico de cualquier script Tcl para ns, ahora hemos de añadir los distintos elementos queconformaran la simulación.

Vamos a crear una topología muy sencilla formada por dos nodos y un enlace:

El código debemos incluirlo antes de $ns run o no será incluido en la simulación. Para crear los nodos usamos $ns node y los asignamos a dos identificadores n0 y n1:
set n0 [$ns node]
set n1 [$ns node]

Ahora definimos el enlace que los conecta: enlace duplex con 1 Megabit de ancho de banda , un retardo de 10ms y encolado por Drop Tail.

$ns duplex-link $n0 $n1 1Mb 10ms DropTail

Ya tenemos definida la topología, así que ahora vamos a definir el envió de datos, esto se realiza creando un agente que envie datos y otro agente que los reciba. Definiremos un tamaño de paquete de 500 bytes y cada uno será enviado cada 0.005 segundos (200 paquetes por segundo)

#Creamos un agente UDP y se lo agregamos al nodo 0
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
# Creamos una fuente de trafico CBR (Constant Bit Rate) y la añadimos a udp0:
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0

Ahora crearemos un agente Null para recibir os paquetes en el nodo n1:

set null0 [new Agent/Null]
$ns attach-agent $n1 $null0

Y conectamos ambos agentes:

$ns connect $udp0 $null0

Ahora solo tenemos que indicarles cuando deben de comenzar y terminar de enviar los datos. Es recomendable ponerlo antes del secuenciador para finish.

$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"

Ya hemos terminado. Salvamos el fichero y comenzamos la simulación. Se abrirá una ventana de nam y podemos observar como los paquetes viajan del nodo 0 al 1.

Pinchando sobre los paquetes podremos obtener información sobre ellos y monitorizarlos. Pinchando sobre la linea obtendremos estadísticas sobre la misma.

Este es un ejemplo muy sencillo pero que ilustra con claridad como se definen simulaciones en ns.


Ahora veamos este otro ejemplo con 3 nodos:

n0
\bs
5Mb \bs
2ms \bs
\bs
n2 --------- n3
/ 1.5Mb
5Mb / 10ms
2ms /
/
n1

Aquí tenemos el código:

# Creamos el simulador
set ns [new Simulator]

# Definimos el fichero de traza
set f [open out.tr w]
$ns trace-all $f
set nf [open out.nam w]
$ns namtrace-all $nf
\clearpage

# Creamos los 3 nodos
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
$ns duplex-link $n0 $n2 5Mb 2ms DropTail
$ns duplex-link $n1 $n2 5Mb 2ms DropTail
$ns duplex-link $n2 $n3 1.5Mb 10ms DropTail

# Creamos los agentes
set udp0 [new Agent/UDP] # Agente UDP
$ns attach-agent $n0 $udp0 # en el nodo $n0
set cbr0 [new Application/Traffic/CBR] # Un generador de trafico
$cbr0 attach-agent $udp0 # en el nodo $1
$udp0 set class_ 0 #
but\ldots;
set null0 [new Agent/Null] # Nodo nulo
$ns attach-agent $n3 $null0 # en el $n3;
$ns connect $udp0 $null0
$ns at 1.0 "$cbr0 start"
puts [$cbr0 set packetSize_]
puts [$cbr0 set interval_]

# Definimos una conexión TCP entre el nodo 1 y el 3
set tcp [new Agent/TCP]
$tcp set class_ 1
$ns attach-agent $n1 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ns at 1.2 "$ftp start"
$ns connect $tcp $sink
$ns at 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"
\clearpage

# Definimos 3 segundos de duración para la simulación
$ns at 3.0 "finish"
proc finish {} {
global ns f nf
$ns flush-trace
close $f
close $nf
puts "Ejecutando nam..."
exec nam out.nam &
exit 0
}

# Finalmente iniciamos la simulación

$ns run

Apartir de los dos ejemplos de scipts podemos definir casi cualquier tipo de red para crear la simulación.


¿Como Monitorizar una cola?



Puede ser interesante monitorizar el estado de una cola e ir observando como los paquetes van entrando y saliendo de ella.

Por ejemplo si tuviésemos una simulación con 4 nodos y quisiéramos monitorizar la cola para el enlace entre 2 y 3 usaríamos:

$ns duplex-link-op $n2 $n3 queuePos 0.5

También visualizaremos los paquetes que no pueden ser procesados y son descartados.





¿Que es NAM para NS-2?


Nam es el entorno gráfico para ns. Nos permite ver y crear las simulaciones mediante un entorno más sencillo y visual.



EL EDITOR DE NAM:
Nam dispone de un editor grafico para que no sea necesario crear los esquemas de red y definir la simulación mediante líneas de código.

Usando el editor es más sencillo definir la topología e ir observando el esquema de la red según vamos creándolo.


Aquí podemos observar dos ejemplos de simulaciones en NAM.

EJEMPLO DE RED TCP:
También visualizaremos los paquetes que no pueden ser procesados y son descartados.

En esta simulación podemos observar tanto envios punto a punto como enlaces multipunto. También podemos observar
las colas que hemos creado para monitorizar los envíos entre 6 y 7 y entre 8 y 9. Así también vemos los paquetes queestán siendo descartados.

EJEMPLO DE RED INALÁMBRICA:
Este es un ejemplo de simulación de red inalámbrica con 5 nodos. Los enlaces no son “físicos” y podemos observar como los paquetes viajan de un nodo a otro. También podemos observar los movimientos de los nodos en caso de que estos se trasladasen de un sitio a otro.
También podríamos crear redes mixtas: cableadas e inalámbricas.

EL EDITOR DE NAM:
Nam dispone de un editor grafico para que no sea necesario crear los esquemas de red y definir la simulación mediante líneas de código.

Usando el editor es más sencillo definir la topología e ir observando el esquema de la red según vamos creándolo.