Hernandez_Hernandez_Practica web de la sesion 12.pptx
Artículo - Simulador NS (Network Simulator)
1. All You Must to Know the NS Simulator
A. F. Montoya, E. A. Ruiz, M. A. Martinez
Abstract- This paper presents the main features of NS Simulator NS es un simulador de eventos discretos destinado para la
as the operating system that works, technical data of the creación de redes de investigación. Este proporciona un
computer for work and advantages over other simulators. Also, apoyo sustancial para la simulación de variedad de
describes the process of installing and configuration in a
protocolos de las capas de aplicación (http, ftp, cbr, etc),
operating system and a step by step example of a simple topology.
transporte (TCP, UDP, RTP, SRM), también protocolos de
Keywords- simulation, NS, modeling, software tools, example,
enrutamiento mono-difusión y multidifusión (multicast).
installation.1 Aplicando funcionalidades tanto para redes cableadas, no
cableadas, satelitales; con topologías complejas.
I. INTRODUCCIÓN
El simulador NS también incluye mecanismos concernientes a
La simulación se puede definir como la imitación del la capa de Enlace de Datos en redes de área local, tales como
comportamiento de un sistema real durante un lapso de tiempo protocolos de control de acceso al medio (MAC) del tipo de
determinado. En la actualidad se utilizan las simulaciones para Acceso múltiple por detección de portadora y detección de
usos prácticos tales como: predicción, entrenamiento, colisiones (CSMA/CD). A su vez incluye diversos algoritmos
entretenimiento, mejor comprensión de la situación estudiada, para la planificación de colas como FIFO, RED, FQ, SFQ,
apoyo a la toma de decisiones, etc. DRR.
En el campo de las redes es importante simular debido a que Para visualizar las simulaciones, NS dispone de herramientas
en la mayoría de los casos resulta mucho más práctico tener para graficar como NAM y XGRAPH. El NAM es una
una idea del comportamiento que tendrá una arquitectura que interfaz grafica que pueda representar la red que construyamos
necesitemos implementar antes de construirla físicamente. atreves del lenguaje OTcl y además permite visualizar
dinámicamente el desplazamiento de los paquetes de la
Una de las herramientas de simulación de redes más simulación. El XGRAPH atreves de graficas bi-dimensionales
utilizadas alrededor del mundo tanto en el ámbito académico permite realizar análisis de funcionalidades tales como
como en el investigativo es el NS, esto se debe a que se paquetes recibidos, paquetes perdidos, ancho de banda y
encuentra escrito en código abierto, y además gracias a que retardos.
existe abundante documentación sobre este en la red. El
código de NS se ofrece bajo la versión 2 de la GNU (General Básicamente NS se puede definir como un simulador
Public License). orientado a objetos, fue construido en C++ y proporciona una
interfaz de simulación a través de OTcl, un dialecto orientado
a objetos de Tcl. El usuario describe una topología de red
II. GENERALIDADES DEL SIMULADOR escribiendo scripts Otcl y, a continuación, el programa
principal de NS simula la topología con los parámetros
En sus inicios NS fue desarrollado como una variante del especificados.
simulador de redes REAL en 1989, en los últimos años ha
tenido una gran evolución. Su desarrollo fue apoyado por En la actualidad NS se está utilizando tanto en entornos de
Defense Advanced Research Projects Agency (DARPA) con investigación como en entornos educativos. NS resulta de gran
ayuda de instituciones de investigación en redes como LBL, ayuda para la investigación ya que nos da la posibilidad de
Xerox PARC, UCB y USC / ISI. acceder a la realización de pruebas con elementos a los que
no podríamos acceder normalmente en caso de no disponer de
un simulador. NS además permite modificar casi todos los
A. F. Montoya, Universidad Católica de Pereira, Pereira, Colombia, parámetros que intervienen en el estado o configuración de
montoya118@hotmail.com una red en tan solo unos segundos.
E. A. Ruiz, Universidad Católica de Pereira, Pereira, Colombia,
edwar.ruiz@ucpr.edu.co
M. A. Martinez, Universidad Católica de Pereira, Pereira, Colombia,
therelax29@hotmail.com
2. III. PROCESO DE INSTALACIÓN Y OTCL_LIB=/your/path/ns-allinone-2.31/otcl-1.13
CONFIGURACIÓN DEL SIMULADOR NS2_LIB=/your/path/ns-allinone-2.31/lib
X11_LIB=/usr/X11R6/lib
En el siguiente capítulo, se describirá como se puede instalar USR_LOCAL_LIB=/usr/local/lib
el simulador NS en un sistema operativo Linux, la cual export
recomendamos que sea en Ubuntu, en la cual lo instalamos y LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$
funcionó correctamente. NS2_LIB:$X11_LIB:$USR_LOCAL_LIB
Instalación del Simulador # TCL_LIBRARY
TCL_LIB=/your/path/ns-allinone-2.31/tcl8.4.14/library
Primero nos logueamos como usuario root USR_LIB=/usr/lib
export TCL_LIBRARY=$TCL_LIB:$USR_LIB
$ su –
password: # PATH
XGRAPH=/your/path/ns-allinone-2.31/bin:/your/path/ns-
Descargamos el archivo, lo movemos a /usr/src/, de ahí nos allinone-2.31/tcl8.4.14/unix:/your/path/ns-allinone-
ubicamos en esa carpeta y lo descomprimimos 2.31/tk8.4.14/unix
NS=/your/path/ns-allinone-2.31/ns-2.31/
# wget http://nchc.dl.sourceforge.net/sourceforge/nsnam/ns- NAM=/your/path/ns-allinone-2.31/nam-1.13/
allinone-2.31.tar.gz PATH=$PATH:$XGRAPH:$NS:$NAM
# mv ns-allinone-2.31.tar.gz /usr/src/
# cd /usr/src/ Luego actualizamos el bashrc con el siguiente comando:
# tar -xzvf ns-allinone-2.31.tar.gz
# source ~/.bashrc
Instalamos las librerías necesarias para poder compilar el ns:
Si hemos seguido los pasos anteriores y no hemos tenido
# apt-get install build-essential autoconf automake libxmu-dev contratiempos deberíamos obtener el símbolo "%" al escribir
ns en la consola de linux.
Sólo si aparecen errores reiniciamos el PC y luego instalamos:
# ns
# sudo apt-get install -f build-essential libxt-dev libxt6 libsm- %
dev libsm6 libice-dev libice6 libxmu-dev
Si queremos salir del shell de ns pulsamos las teclas
Ahora instalamos el paquete ns-2, esto demora un buen control+c.
tiempo, así que se puede dejar compilando.
IV. EJEMPLO DE SIMULACIÓN
# cd ns-allinone-2.31
#./install En éste capítulo de ejemplo de simulación, explicaremos las
líneas de código necesarias para llevar a cabo la simulación
Configuración de las Variables de Entorno que queremos.
Se pueden usar las variables vi o nano en lugar de gedit si es El ejemplo simulará la topología que se muestra en la figura 1,
necesario. donde se enviarán paquetes UDP desde el nodo 0 hasta el 9 y
desde el nodo 1 hasta el 8. Luego de un tiempo, se caen dos
$ gedit ~/.bashrc enlaces, y debido a que se ha configurado enrutamiento
dinámico, los paquetes son desviados por otros enlaces hasta
Una vez dentro del bashrc le agregamos las siguientes líneas y llegar a su destino. Además, se puede ver como se encolan los
reemplazamos /your/path/ por /usr/src/, como se muestra a paquetes y como se pierden.
continuación:
# LD_LIBRARY_PATH
3. set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]
set n6 [$ns node]
Figura 1. Topología de ejemplo para la simulación set n7 [$ns node]
set n8 [$ns node]
Lo primero que debemos hacer, es abrir el editor de texto de set n9 [$ns node]
Linux donde vamos a escribir todas nuestras líneas de código,
para que, posteriormente, se pueda ejecutar todo el archivo Ahora vamos a conectar los nodos ya creados, con la topología
desde el terminal de Linux. presentada en la figura 1.
Le ponemos un nombre al archivo y lo guardamos con
extensión TCL, como por ejemplo prueba.tcl. $ns duplex-link $n0 $n1 1Mb 10ms DropTail
Una vez creado y guardado el archivo, comenzamos a escribir $ns duplex-link $n1 $n2 1Mb 10ms SFQ
nuestro código. $ns duplex-link $n0 $n3 1Mb 10ms DropTail
$ns duplex-link $n3 $n4 1Mb 10ms DropTail
Lo primero es crear un objeto para el simulador, el cual se $ns duplex-link $n2 $n4 1Mb 10ms DropTail
hace con: $ns duplex-link $n4 $n5 2Mb 10ms DropTail
$ns duplex-link $n5 $n7 1Mb 10ms DropTail
set ns [new Simulator] $ns duplex-link $n7 $n9 1Mb 10ms DropTail
$ns duplex-link $n9 $n3 1Mb 10ms DropTail
Para obtener una visualización gráfica de la simulación, lo $ns duplex-link $n5 $n6 1Mb 10ms DropTail
debemos hacer por medio del graficador NAM. Donde en la $ns duplex-link $n6 $n8 1Mb 10ms DropTail
primera línea, creamos el archivo con nombre OUT con $ns duplex-link $n8 $n2 1Mb 10ms DropTail
extensión NAM y lo vinculamos a la variable nf. En la
segunda, le decimos a la variable ns que guarde todos los Con éstas líneas le decimos al simulador que cree enlace2 full
datos que se necesiten para la simulación en éste archivo. dúplex, conectando los nodos $n0 y $n1, y los que se vayan a
conectar, con un ancho de banda de 1Mbps, retarde de 10ms y
set nf [open out.nam w] el tipo de encolamiento que hay en el ejemplo son DropTail
$ns namtrace-all $nf (que viene siendo FIFO el cual desecha los paquetes que
llegan si está llena la cola) y SFQ (Stochastic Fair Queueing)
Luego creamos un procedimiento “finish” el cual cierra todas si se quiere una pérdida de paquetes más justa. Los valores
las trazas y ejecuta el NAM, el cual ejecutaremos más escritos anteriormente pueden ser cambiados si ustedes lo
adelante. consideran necesario.
proc finish {} { Ahora, debemos darle una ubicación específica a los nodos, de
global ns nf no hacerlo, el simulador los pone en ubicaciones aleatorias, lo
$ns flush-trace que dificultaría la visualización del ejemplo y dificultaría la
close $nf comprensión del mismo.
exec nam out.nam &
exit 0 $ns duplex-link-op $n0 $n1 orient right
} $ns duplex-link-op $n1 $n2 orient down
$ns duplex-link-op $n0 $n3 orient down
Ahora, comenzamos a crear los nodos que tendrá nuestra $ns duplex-link-op $n3 $n4 orient right-down
simulación.la instrucción set es para crear un nuevo objeto, $ns duplex-link-op $n2 $n4 orient left-down
luego ponemos el nombre de la variable que queremos para $ns duplex-link-op $n4 $n5 orient down
los nodos, que en este caso van enumerados desde el 0 hasta el $ns duplex-link-op $n5 $n7 orient left-down
9 y luego con la instrucción $ns node decimos que vamos a $ns duplex-link-op $n7 $n9 orient left-up
crear un objeto de tipo nodo. $ns duplex-link-op $n9 $n3 orient right-up
4. $ns duplex-link-op $n5 $n6 orient right-down
$ns duplex-link-op $n6 $n8 orient right-up Ahora, procedemos a crear los agentes que va a recibir el
$ns duplex-link-op $n8 $n2 orient left-up tráfico que generan los nodos anteriores. Se crea un agente de
tipo Null que servirán como receptor del tráfico y se adapta el
Hasta el momento, ya tenemos la topología creada, todos los nodo que se usará como receptor al agente Null. Esto mismo
nodos conectados con sus respectivos enlaces. Ahora vamos a se hace con los otros 2 nodos que serán receptores de tráfico,
configurar y crear el código para el envió de los datos entre los como se ve a continuación:
nodos. Se debe tener en cuenta que hay que crear un agente, el
cual genera el tráfico y otro que es el que recibe el tráfico. set null0 [new Agent/Null]
$ns attach-agent $n8 $null0
Primero creamos el tipo de tráfico que se va a generar, que en
este caso será UDP que lo llamamos $udp0 y lo adjuntamos al set null1 [new Agent/Null]
nodo $n0. Luego, debemos crear un generador de tráfico CBR $ns attach-agent $n9 $null1
que se llama $cbr0 que se adjunta al agente $udp0. En el
generador de tráfico, podemos configurar el tamaño de los set null2 [new Agent/Null]
paquetes que serán de 500 bytes con un intervalo de 0.005 $ns attach-agent $n0 $null2
segundos.
Conectamos los dos agentes a nivel de capa de transporte,
Para el ejemplo creamos 3 nodos que van a generar tráfico, especificando el agente que genera el tráfico con el que lo
que son el nodo 0, el nodo 1 y el nodo 5. Para ello solo es recibirá.
copiar los primeros bloques de código, cambiar los nodos y las
variables udp y cbr, tal como se muestra a continuación: $ns connect $udp0 $null0
$ns connect $udp1 $null1
#Create a UDP agent and attach it to node n0 $ns connect $udp2 $null2
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0 Luego, debemos especificar a los generadores de tráfico en
que momento iniciar y cuando parar. Tal como se muestra a
# Create a CBR traffic source and attach it to udp0 continuación:
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500 $ns at 0.2 "$cbr0 start"
$cbr0 set interval_ 0.005 $ns at 0.4 "$cbr1 start"
$cbr0 attach-agent $udp0 $ns at 2.0 "$cbr2 start"
$ns at 3.0 "$cbr1 stop"
#Create a UDP agent and attach it to node n1 $ns at 3.3 "$cbr0 stop"
set udp1 [new Agent/UDP] $ns at 3.4 "$cbr2 stop"
$ns attach-agent $n1 $udp1
Para monitorear las colas en los enlaces, ponemos el código
# Create a CBR traffic source and attach it to udp1 siguiente:
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize_ 500 $ns duplex-link-op $n0 $n3 queuePos 0.5
$cbr1 set interval_ 0.005 $ns duplex-link-op $n1 $n2 queuePos 0.5
$cbr1 attach-agent $udp1 $ns duplex-link-op $n4 $n5 queuePos 0.5
#Create a UDP agent and attach it to node n5 En nuestra simulación, haremos caer varios enlaces para ver el
set udp2 [new Agent/UDP] comportamiento de los paquetes y como se direccionan por
$ns attach-agent $n5 $udp2 otra vía. Para ello, ponemos el instante en el q se caera o
subirá el enlace, seguido de “down” si queremos que se caiga
# Create a CBR traffic source and attach it to udp2 el enlace o “up” si queremos subirlo y después los nodos del
set cbr2 [new Application/Traffic/CBR] enlace.
$cbr2 set packetSize_ 500
$cbr2 set interval_ 0.005 $ns rtmodel-at 1.0 down $n0 $n3
$cbr2 attach-agent $udp2 $ns rtmodel-at 1.0 down $n3 $n9
5. $ns rtmodel-at 1.5 up $n0 $n3
$ns rtmodel-at 2.0 down $n1 $n2
$ns rtmodel-at 2.0 down $n8 $n2
$ns rtmodel-at 2.5 up $n1 $n2
Para configurar un enrutamiento dinámico en nuestra
topología ponemos la siguiente línea de código:
$ns rtproto DV
Podemos identificar cada flujo de datos independientemente, y Para poder ver mejor la simulación, reubicamos los nodos. En
asignarle un color a cada uno para diferenciarlo más la parte izquierda, hacemos click en el botón editar y
fácilmente. movemos los nodos de forma que se vean todos, tal como se
muestra en la figura siguiente:
$udp0 set class_ 1
$udp1 set class_ 2
$ns color 1 Blue
$ns color 2 Red
Y para finalizar, con la primera línea ponemos el tiempo que
queremos que termine la ejecución de la simulación y
llamamos al procedimiento “finish” que creamos al principio,
para finalizar las trazas, y con la segunda línea ejecutamos la
simulación.
$ns at 3.5 "finish"
$ns run Una vez acomodados los nodos ejecutamos la simulación
haciendo click en el botón play, para iniciarla. En la grafica
Una vez creado todo el código anterior, guardamos los siguiente, podemos observar como al inicio de la simulación,
cambios hechos en el archivo. Abrimos el terminal de Linux y se envían pequeños paquetes entre los diferentes nodos, esos
escribimos la línea de código a continuación para ejecutar todo son los paquetes para la tabla de enrutamiento, para saber que
el archivo: ruta debe escoger el tráfico, una vez comience el envío. Estos
paquetes son enviados constantemente durante toda la
ns prueba.tcl simulación, incluso cuando se está generando el tráfico.
E inmediatamente se abre la ventana con la simulación como
se verá en el siguiente capítulo.
V. ANÁLISIS DE RESULTADOS
Una vez se ejecuta el archivo, nos muestra la siguiente imagen
de simulación:
En la siguiente gráfica, se puede observar como el tráfico
desde el nodo 0 hasta el 8 son enviados por la ruta más corta,
gracias al enrutamiento dinámico que le configuramos
anteriormente.
6. pero una vez se llena, solo de pierden paquetes azules, a
diferencia del anterior que se perdían por igual.
De igual manera, el nodo 5 comienza a generar un tráfico
hacia el nodo 0, se puede ver en la grafica que éste flujo no
interfiere con el flujo de datos que viene en dirección opuesta.
Luego, comienza el nodo 1 a enviar el tráfico hacia el nodo 9
simultáneamente que al tráfico generado por el nodo 0.
Podemos ver como el enlace es full dúplex, es decir que por el
enlace del nodo 0 al 1, el tráfico de subida es independiente al
de bajada, los paquetes no se interceptan ni deben esperar a
que uno termine de enviar para que el otro envíe.
En la siguiente gráfica, se puede ver como los enlaces entre
los nodos 0 y 3, y 2 y 8, han subido nuevamente, mientras que
los enlaces entre los nodos 3 y 4, y 2 y 8, han quedado
inactivos. Lo importante es observar lo que sucede entre los
nodos 4 y 5, llegan los tráficos de los dos nodos, pero en este
caso no se produce encolamiento ni pérdida de paquetes, esto
se debe a que desde un principio se configuro un ancho de
banda de 2 Mbps lo cual hace que se puedan enviar los
paquetes sin ningún problema.
En la siguiente gráfica, se observa que los enlaces entre el Igualmente se ve como el tráfico del nodo 5 hacia el 0, no se
nodo 0 y 3 y entre el 3 y 9, se caen los enlaces y el tráfico ve afectado.
generado por el nodo 1, es redireccionado a través de los
nodos 2, 4, 5 y 7. También podemos observar como los
paquetes son encolados entre los nodos 1 y 2, y se pierden en
proporciones iguales, es decir, se usa un encolamiento “justo”
en pérdida de paquetes, pero es importante diseñar topologías
donde no sucedan pérdidas como éstas.
VI. CONCLUSIONES
El simulador NS es uno de los más robustos y confiables en el
entorno digital, toda simulación que se haga en ésta
herramienta y sea presentada ante comités importantes de
tecnología, respetan y confían en los resultados que éste nos
Ahora, en la siguiente gráfica, se caen los enlaces entre los arroja.
nodos 1 y 2, y entre el nodo 2 y 8. Igualmente el tráfico es
enrutado a través de los otros enlaces, pero a diferencia de la También es importante tener conocimiento del lenguaje de
gráfica anterior, el encolamiento entre el nodo 0 y 3 es programación con la cuales trabaja éste, ya que, como vimos
diferente, pues se puede ver que el encolamiento es más largo, anteriormente, el simulador funciona, principalmente con
7. código, si se quiere hacer una buena simulación, con
características adicionales que éste tiene.
El ejemplo es una muy pequeña muestra de lo que éste puede
hacer, si quiere más información, puede descargar el manual
que contiene toda la programación y todo lo que se puede
hacer con ésta herramienta.
Por último, es muy importante tener en cuenta a la hora de
implementar una topología de red, saber el tipo de tráfico que
se va a enviar, el tipo de encolamiento y el ancho de banda,
para que no hallan pérdidas de paquetes ni saturación de la
información como se pudo observar en el capítulo del análisis.
De igual forma, para eso es ésta herramienta, para hacer
pruebas y poderlas corregir.
VII. REFERENCIAS
[1] http://blog.pucp.edu.pe/item/37506/instalar-ns2-en-ubuntu
[2] http://www.isi.edu/nsnam/ns/tutorial/index.html
[3] Manual de práctica con NS-2,
http://jpadilla.docentes.upbbga.edu.co/programa%20redes/Ma
nual%20de%20Practicas%20con%20NS2.pdf
[4] Manual for the Network Simulator “ns”,
http://www.isi.edu/nsnam/ns/tutorial/
[5]http://linuxalbacete.org/web/index2.php?option=com_conte
nt&do_pdf=1&id=149
[6]http://nsl.csie.nctu.edu.tw/NCTUnsReferences/memoria.pdf