Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NS2 - Network Simulator PDF
NS2 - Network Simulator PDF
Resumen
He aquı́ una reseña acerca de lo que es Network Simulator, un sim-
ulador/manejador de eventos en redes IP. Implementa protocolos tales
como TCP, UDP, aplicaciones como FTP, Telnet, WEB, tráfico de colas
como DropTail, RED, algoritmo de Dijkstra, y mucho más.
1. Introducción
A través de los años se ha hecho importante el modelamiento de diversos
eventos antes de tomar decisiones. Tal es el caso de la programación lineal,
donde se plantéa un problema de la vida cotidiana y mediante un modelamien-
to matemático es factible encontrar una o más soluciones. Sin embargo, en la
realidad hay que considerar miles de factores importantes que lamentablemente
un modelo matemático no considera en el mayor de los casos, pero aproxima
bastante a una solución que nos puede llevar por un buen camino.
Es por ello que la idea de modelar y/o simular es bastante importante en la
toma de decisiones.
En el presente trabajo se dará una descripción a lo que es este simulador
de redes. Esta investigación está orientada a conocer el tema de la simulación
de redes mediante esta aplicación denominada Network Simulator. Se realizarán
pruebas de algunos algoritmos ya realizados y se hará una descripción interna
de cómo funciona este simulador.
Este simulador fue probado en un procesador Pentium II 700MHZ con 256MB
de memoria ram, bajo la plataforma Linux Debian. Este simulador también fun-
ciona bajo plataforma windows, sin embargo, la investigación no se llevó a cabo
en este sistema operativo, por lo tanto, requisitos, funcionamiento, u otros, no
fueron probados. Por lo tanto, al hablar de Lı́nea de comandos se hará referencia
a las consolas de Linux.
En el caso de Linux, el único requisito (suponiendo un PC normal con interfaz
gráfica X y paquetes tı́picos) fue la instalación del paquete xfree-devel.
1
2. Descripción Interna NS
Network Simulator es un simulador discreto de eventos creado por la Uni-
versidad de Berkeley para modelar redes de tipo IP. En la simulación se toma en
cuenta lo que es la estructura (topológia) de la red y el tráfico de paquetes que
posee la misma, con el fin de crear una especie de diagnóstico que nos muestre
el comportamiento que se obtiene al tener una red con ciertas caracterı́sticas.
Trae implementaciones de protocolos tales como TCP y UDP, que es posible
hacerlos comportar como un tráfico FTP, Telnet, Web, CBR y VBR. Maneja
diversos mecanismos de colas que se generan en los routers, tales como DropTail,
RED, CQB, algoritmo de Dijkstra, etc.
Actualmente, el proyecto NS es parte de VINT proyect que desarrolla her-
ramientas para visualizar los resultados de una simulación (por ejemplo, una
interfaz gráfica).
La versión con que fue probado (en este informe) es la NS versión 2 escrita
en los lenguajes de programación C++ y OTcl1 .
El funcionamiento de Network Simulator se explicará poco a poco mostrando
las partes más generales a las más particulares. Para comenzar se mostrará una
vista bastante simplificada de lo que es NS.
Como se puede observar, se comienza con un script en OTcl que viene a hacer
lo que el usuario codifica para simular. Es el único INPUT que dá el usuario al
programa. El resto es el procesamiento interno de NS. La simulación queda en
un archivo que puede ser bastante incómodo de leer o analizar para el usuario,
sin embargo, usando una aplicación especial se puede mostrar mediante una
interfaz gráfica.
El script es un archivo escrito en Tcl orientado a objetos, es decir, OTcl, que
tiene diversos componentes internos que se muestran en el cuadro del medio de
la figura 1. En estos componentes se configura la topologı́a de la red, calendariza
los eventos, carga las funciones necesarias para la simulación, planifica cuando
iniciar o terminar el tráfico de un determinado paquete, entre otras cosas.
A continuación se entrará a especificar un poco más como funciona cada
componente. Tampoco es la idea de entrar en detalle, sin embargo, una referencia
rápida a cada punto será justa y necesaria.
1 Lenguaje Scripting orientado a objetos, desarrollado por MIT
2
2.1. Event Scheduler Object
Este evento en NS, es un paquete único con una calendarización o programa
dado por el programador en la codificación. Internamente se identificará con un
puntero al objeto que maneja este evento. En la figura 2 se muestra la forma de
calendarizar los eventos.
3
Figura 3: Componente de red - Link
4
2.3. Network Setup Helping Module
Por último, el network Setup Helping Modules indicará las bibliotecas nece-
sarias para realizar la simulación. Esto es necesario ya que los 2 primeros com-
ponentes, descritos en los subı́temes 2.1 y 2.2, están escritos y compilados en
C++ y están disponibles para el intérprete OTcl a través de un linkage 2 . La
razón no es muy clara, pero tiene que ver con el tiempo de procesamiento (no
de simulación). Se puede hacer la analogı́a entre C con C++ y tcl con OTcl.
En la siguiente figura se logra mostrar la forma en que se comunican las
bibliotecas compiladas de C++ y OTcl. Más bien, es OTcl que llama a estas
bibliotecas.
3. Ejecutar un script
Para ejecutar la aplicación, Network Simulator toma como INPUT a un
script en OTcl. En este script se define fı́sicamente la configuración de la red
(nodos, conexiones entre nodos), los protocolos que serán usados en las conex-
iones y definiciones especificas de aplicaciones usando tipos de conexiones.
El script es un archivo con extension .tcl. Para hacerlo correr se debe
ejecutar ns ejemplo1.tcl desde la lı́nea de comandos y esto creará un archivo
que contendrá el OUTPUT del análisis, un archivo de extensión .nam (o el
similar .tr que más adelante se analizará la pequeña diferencia). Este archivo
es una completa descripción de la simulación, donde cada lı́nea describe los
paquetes recibidos, enviados, encolados, sacados de la cola, etc. Más adelante
se realizará un estudio más acabado de este tipo de archivo. Sin embargo, por
mucho que se mire este archivo, será muy dificil obtener una gran fotografı́a de lo
que sucede en la simulación. Es por ello que la visualización se realiza mediante el
programa nam3 y se ejecuta simplemente con el comando nam ejemplo1.nam.
En la figura 6 se muestra lo recién explicado:
Aparte de generar el archivo .nam, también puede generar otro archivo .q
(si se especifica) que contiene información acerca de una cola de un nodo en
particular durante la simulación. Esta puede ser graficada u otros fines.
2 Para enlazar a OTcl las bibliotecas de C++.
3 Nam es Network AniMator, que es una interfaz gráfica para ver la simulación.
5
kd jasdlkasj diaj kjdkasjdsak asd
dasod jaspdj pijdwpqij qw qw
qroqw oqrjf qwifjwqpifjq wqwfq
oqwif hjqp'i3 rh3i8h fw eew
eiw hfiewhf'9u fiewhf iewhfw
e ijhewf0hw hfewifh wefewfuji wfwe
ns ejemplo1.tcl .nam nam ejemplo1.nam
fwie fjwief uew we we9f wef
wf iwe fwiehfiwefewufiw wfe fwe
fewf9 wuifehiowejfipwjef jwef jwe
f we+fi jwefew
tjt rjytwtykt yrothwqwwerij wewe
rewi jrweoir +we08ru0eur owehrwer
wre iw0iwer u3'0r9u irsr+pisjfklsdmf s
f dsifj isjaf'9je fwenfpijsd fas
dfasfsdiaj foasdfaisf iasdf
asfi sdajfosdaf'as fisjadf sdafjdsa
fasdfjaosfjias jdfiasj 'fd9as fda
.tr
fidsaj foiasjf 9iuwer'f 9wuef oskfas
iaf sjdfiasuf098u fiwjfpisjdfpiasjdf
ftp::TCP
n0
2.5 mbps, 10ms
Sink
n2 n3
1 mbps, 20ms
NULL
2 mbps, 10ms
n1
CBR::UDP
La red consiste en 4 nodos (n0, n1, n2, n3). Todos los links serán declarados
como bidireccionales, es decir, duplex links.
El link de n2 → n3 tiene un ancho de banda de 1 mbps con un retardo de
20 ms.
El link n0 → n2, tiene un ancho de banda de 2.5 mbps con 10 ms de retardo.
El link n1 → n2, tiene un ancho de banda de 2 mbps con 10 ms de retardo.
El nodo n2 usa una cola de tipo DropTail, es decir, si supera la máxima
capacidad de la cola, se descartarán los siguiente paquetes entrantes. Para este
caso, la capacidad máxima será de 10 paquetes.
Los nodos n0 con n3 realizarán una conexión de tipo FTP (Bajo TCP), es
decir, se requerirá de un ACK (SINK ) para confirmar recepción del paquete.
Los nodos n1 con n3, tendrán una comunicación CBR (bajo UDP), es decir,
este no requerirá de un paquete ACK de confirmación. Simplemente se enviará.
Esto se ve en el nodo n3, NULL.
La simulación comenzará el tráfico CBR a los 0.1 segundos y finalizará a los
5 segundos. El tráfico FTP comenzará a los 0.5 segundo y finalizara a los 4.5
segundos.
6
A continuación se muestra el código comentado:
#El trazado anterior es poco legible, pero debe ser creado para que el
#programa nam lo interprete. Sin embargo, hay otro tipo de trazado que
#es mas legible para nosotros. Para ello es necesario a~
nadir las
#siguientes lineas, muy parecidas a las de arriba
set tf [open out.tr w]
$ns trace-all $tf
7
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n2 $n3 1Mb 20ms DropTail
#La cola maxima entre los nodos $n2 y $n3 sera de 10 paquetes, el
resto será descartado
$ns queue-limit $n2 $n3 10
8
$cbr set packet_size_ 1000 # Maximo tama~
no de paquetes
$cbr set rate_ 1mb
$cbr set random_ false
#Iniciar la simulación
$ns run
9
Figura 8: Formato de la estructura en archivo .nam
Extraeremos del ejemplo del ı́tem 4 una parte del archivo .tr generado y lo
analizaremos:
Nodo fuente
Nodo Destino
Tipo de paquete
Tamaño del paquete
Flags varios
El resto no es necesario nombrar
En la figura 4 se ilustró la forma como se movian los paquetes internamente
en cada nodo. Si se observa detenidamente, los campos 9 y 10, representan el
movimiento que debe tener el paquete dentro de cada nodo. Por ejemplo 1.0
3.1 quiere decir que en nodo n1 salió por puerta 0 y cuando llegue al nodo n3
debe entrar por puerta 1. Como se habı́a visto anteriormente, esto es lógico, ya
que el puerto 1 era el port Clasiffier y era lo primero que debe hacer un paquete
al ingresar a un nodo para ver el tipo de paquete..
El resto del trazado es simple ya que es una secuencia lógica de entrada y
salida de cada paquete a una cola o llegada a un nodo.
10
5. Simulación RED
Otro ejemplo bastante interesante es el de la simulación de una cola de tipo
RED - Random Early Detection. Esta cola consiste en un sistema que mediante
un resultado probabilı́stico indica si un paquetes es descartado o no de una cola.
No esta diseñado para operar con cualquier protocolo. Su mejor funcionamiento
se logra a través de TCP.
En los ejemplos anteriores, se disponı́a de las colas de tipo DropTail que
consistı́a en descartar los paquetes si estos exceden el máximo del tamaño de la
cola. En RED se verifica que el promedio de la cola se encuentre en distintos
rangos, y de acuerdo a su probabilidad se toma la decisión de descartarlo o
aceptarlo. El usuario debe definir 4 parámetros: fijar el lı́mite QL que es el
tamaño de la cola, definir maxth y minth que es la denominada región RED, la
probabilidad máxima a aceptar mediante maxp y wq que es un factor de peso
(tamaño instantáneo de la cola).
El promedio se obtiene mediante el siguiente cálculo:
avgi = (1 − wq ) × avgi−1 + wq × q
El algoritmo que se sigue se muestra a continuación
Para cada llegada del paquete {
Calcule avg
if (avg > max_th) {
Caiga el paquete
}
else if (avg > min_th) {
11
ftp::TCP sink1
{Ventana = 15}
s1 s3
10Mb,2ms 10Mb,4ms
sink2
r1 r2
1.5MB,20ms
10Mb,3ms 10Mb,5ms
s2 s4
{Ventana = 15}
FTP2::TCP2
12
set tcp1 [$ns create-connection TCP/Reno $node_(s1) TCPSink $node_(s3) 0]
$tcp1 set window_ 25
set tcp2 [$ns create-connection TCP/Reno $node_(s2) TCPSink $node_(s3) 1]
$tcp2 set window_ 25
set ftp1 [$tcp1 attach-source FTP]
set ftp2 [$tcp2 attach-source FTP]
13
exec awk $awkCode all.q
puts $f \"queue
exec cat temp.q >@ $f
puts $f \n\"ave_queue
exec cat temp.a >@ $f
close $f
# Acá se ejecuta xgraph y lleva como parámetro los archivos
# creados mediante el procesamiento anterior.
exec xgraph -bb -tk -x time -y queue temp.queue &
exit 0
}
$ns run
14
El promedio de uso de la cola baja considerablemente a los 5 segundos.
Puede ser muy básico lo explicado recientemente, pero la idea es que medi-
ante la simulación se pudo determinar los horarios en que se ven afectados con
mucha actividad la cola de una red.
El mismo script modificado para ser visto en el simulador .nam se presenta
a continuación.
15
#Define a ’finish’ procedure
proc finish {} {
global ns nf
$ns flush-trace
#Close the NAM trace file
close $nf
#Execute NAM on the trace file
exec nam out.nam &
exit 0
}
$ns run
6. Conclusión
Finalmente, este trabajo a pesar de ser bastante extenso en lo teórico, cosa
que no creı́ nunca, fue necesario hacer una descripción general del funcionamien-
to de este sistema. Al principio la investigación del tema fue siempre hacia el lado
práctico y no tomó más de dos dı́as en entender el lenguaje y el funcionamiento
del sistema. Sin embargo, la forma de simular, de procesar los datos, etc.. fueron
partes claves que dieron un gusto más interesante a la investigación.
Como opinión personal, pienso que el sistema esta bastante avanzado y si
su desarrollo continúa, puede llegar a ser un gran simulador. Al parecer los
desarrolladores están constantemente haciendo cambios a NS. Por lo menos en
los archivos fuente con que se probó este programa, según en control de versiones,
salı́a que la última modificación fue en Enero del 2003.
Se están agregando módulos para transmisión Wireless que lamentablemente
no se pudieron probar por falta de documentación respecto al tema.
16
El lenguaje es bastante cómodo de trabajar y no se debe tener un conocimien-
to muy acabado de programación, ya que no se emplean sentencias clásicas como
while, for, etc.
Los OUTPUT en los archivos de trazado con los resultados de la simulación
son de gran ayuda pero requiere de un manejo bastante avanzado en lı́nea de
comandos de Linux. Importante mencionar es que existen algunas herramientas
desarrolladas por los mismos programadores de NS que muestran varias opciones
teniendo el archivo de trazado en formato .tr. Estan disponibles en la página
principal.
Por otro lado, el simulador .nam está muy bien realizado, pero aún esta
muy inestable. A veces se caı́a el programa de la nada, o bien, al momento de
hacer cambios en los tiempos, desde nam, se “volvı́a loco” el sistema y mandaba
cualquier cosa a cualquier nodo.
Creo que el último ejemplo empleado demuestra la efectividad que tiene
este instrumento de simulación. El gráfico es bastante explicativo ya que da una
referencia del tráfico de esa cola con respecto al tiempo. Esto puede ser de mucha
utilidad porque pueden estudiarse los tiempos de mayor o menor congestión y
realizar ciertas tareas cuando se entren a esos horarios. Por ejemplo, en el gráfico
se observaba que a los 5 segundos habı́a una baja muy considerable durante 1
segundo. Por lo tanto, se podrı́a suponer que ese horario en una organización
puede ser la hora almuerzo donde los empleados dejan sus computadores sin
actividad por lo tanto la red tiene poca congestión. Entonces podrı́a realizar en
ese horario los respaldos pertinentes a la hora que tengo disponible y ası́ intentar
dejar la curva de promedio lo más pareja posible.
Para finalizar, estoy conciente que NS no es un producto terminado, pero
es el resultado de mucha investigación y desarrollo de los programadores. En
particular, se han descubierto muchos bugs en el código y han sido corregidos
a cabalidad. Sin embargo, gran parte del código no está ejercitado o verifica-
do por ninguna entidad verificadora, por lo tanto, uno podrı́a esperar cierta
incertidumbre en los resultados que entrega.
A pesar de eso, interesante investigación y gran aporte para mis conocimien-
tos.
Referencias
[1] The Network Simulator NS 2, Home page. Página principal.
http://www.isi.edu/nsnam/ns/
[2] Jae Chung, Mark Claypool. NS by Example,
http://nile.wpi.edu/NS/
[3] Sally Floyd. Validation Experiences with the NS Simulator. Abril 19, 1999.
[4] Tcl/Tk Quick Reference Guide. Referencia Rápida para Tcl.
http://www.slac.stanford.edu/~raines/tkref.html
JoTa/LATEX 2ε
17