Simulador ns2. Principios básicos.
Probablemente NS2 es el simulador de redes open source más extendido tanto en investigación como para propósitos docentes, en esta receta vamos a aprender a instalarlo y a simular un escenario para MANET's muy simple.
Introducción
Entre los usos más habituales que les puedes dar a este tipo de simuladores se encuentran:- Simular estructuras y protocolos de redes de todo tipo (satélite, wireless, cableadas, etc..)
- Desarrollar nuevos protocolos y algoritmos y comprobar su funcionamiento.
- Comparar distintos protocolos en cuanto a prestaciones.
Instalación
En la web del proyecto nos podemos encontrar todo lo necesario para instalarlo. Desde el 2005 los distintos módulos y el propio simulador han sido licenciados con una colección de licencias "GNU GPL compatible". La opción mas sencilla para instalarlo es bajarse el paquete "todo en uno" que contiene todas las versiones de las librerias que necesita. Este tgz puedes bajártelo de aqui (la actual versión es la ns2.29 y son 68 Megas). No obstante, puedes obtener las librerías y el propio simulador por separado en la página web de descarga e intentar instalar solamente aquellas partes que te falten o en las que estes interesado. La forma mas simple, como ya hemos dicho es bajarse el paquete "todo en uno". Una vez bajado el paquete lo descomprimimos:$ tar xvzf ns-allinone-2.29.2.tar.gz
$ ls
bin gt-itm install lib nam-1.11 otcl-1.11 sgb tclcl-1.17 xgraph-12.1
cweb include INSTALL.WIN32 man ns-2.29 README tcl8.4.11 tk8.4.11 zlib-1.2.3
- nam: herramienta que se utiliza para visualizar de forma gráfica nuestras simulaciones.
- xgraph que sirve para realizar gráficas a partir de los datos de la simulación. No coje el archivo de salida del simulador directamente sino que se tienen que generar archivos adicionales mediante scripts.
Un aspecto importante es que debe ser compilado con el g++2.95 ya que con versiones posteriores da errores al compilar.Una vez compilado el programa tenemos un ejecutable denominado ns. Para comprobar que el simulador se ha compilado de forma correcta debemos validarlos con los ejemplos y sus salidas que nos bienen con el propio simulador, para lo cual existe una serie de scripts que comienzan con la palabra validate y que permiten validar todos los ejemplos o solamente parte de ellos. Estos tests tambien son una buena fuente de ejemplos para aprender a usar el simulador ns.
Uso básico de ns2
El uso básico del simulador ns2 es bastante simple, se crea un archivo dónde le decimos qué queremos simular (topología, nodos, movimientos, tráfico, etc..) y se lo pasamos como parámetro al simulador, este genera una traza de todos los eventos que se han generado durante la simulación. El archivo de configuración es un script realizado en TCL y la salida es un archivo de texto (generalmente con extensión .tr), adicionalmente le podemos indicar que nos genere tambien un archivo para el visor gráfico nam o generar archivos adicionales para visualizar en el xgraph. Por ejemplo, una ejecución básica (mi simulador ha sido instalado en ./original/ns-allinone-2.29/ns-2.29/) sería:$ ls
basico.tcl escenarios modificado original scripts
$./original/ns-allinone-2.29/ns-2.29/ns basico.tcl
num_nodes is set 5
warning: Please use -channel as shown in tcl/ex/wireless-mitf.tcl
INITIALIZE THE LIST xListHead
Starting Simulation...
channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
highestAntennaZ_ = 1.5, distCST_ = 422.8
SORTING LISTS ...DONE!
NS EXITING...
$ ls
basico1-out.nam basico1-out.tr basico.tcl escenarios modificado original scripts
NOTA: El fichero básico.tcl es una recopilación desde distintos ejemplos creados por otros autores
# ======================================================================
# Define options
# ======================================================================
set val(chan) Channel/WirelessChannel ;# channel type
set val(prop) Propagation/TwoRayGround ;# radio-propagation model
set val(netif) Phy/WirelessPhy ;# network interface type
set val(mac) Mac/802_11 ;# MAC type
set val(ifq) Queue/DropTail/PriQueue ;# interface queue type
set val(ll) LL ;# link layer type
set val(ant) Antenna/OmniAntenna ;# antenna model
set val(ifqlen) 50 ;# max packet in ifq
set val(nn) 5 ;# number of mobilenodes
set val(rp) AODV ;# routing protocol
set val(x) 670 ;# X dimension of the topography
set val(y) 670 ;# Y dimension of the topography
set val(seed) 0.0
# Energy options
set val(engmodel) EnergyModel
set val(txPower) 1.4 ;# transmitting power in mW
set val(rxPower) 0.9 ;# recving power in mW
set val(sensePower) 0.00000175; ;# sensing power in mW
set val(idlePower) 0.0 ;# idle power in mW
set val(initeng) 75 ;# Initial energy in Joules
# ======================================================================
# Main Program
# ======================================================================
# Initialize the SharedMedia interface with parameters to make
# it work like the 2.4GMHz Lucent Orinoco WaveLAN DSSS radio interface (11 Mb/s and 170 m)
Phy/WirelessPhy set CPThresh_ 10.0
Phy/WirelessPhy set CSThresh_ 5.011872e-12
Phy/WirelessPhy set RXThresh_ 1.02054e-10
Phy/WirelessPhy set Rb_ 11*1e6
Phy/WirelessPhy set Pt_ 0.031622777
Phy/WirelessPhy set freq_ 2.472e9
Phy/WirelessPhy set L_ 1.0
# Setting the bandwidth to 11 Mbps
Mac/802_11 set dataRate_ 11Mb
Mac/802_11 set basicRate 11Mb
#
# Initialize Global Variables
#
set ns_ [new Simulator]
set tracefd [open basico1-out.tr w]
set namtrace [open basico1-out.nam w]
$ns_ trace-all $tracefd
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
# set up topography object
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
#
# Create God
#
create-god $val(nn)
#Usamos el nuevo formato de traza
$ns_ use-newtrace
#configure node
$ns_ node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-channelType $val(chan) \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF \
-energyModel $val(engmodel)\
-rxPower $val(rxPower) \
-txPower $val(txPower) \
-sensePower $val(sensePower) \
-idlePower $val(idlePower) \
-initialEnergy $val(initeng)
for {set i 0} {$i < 4} {incr i} {
set node_($i) [$ns_ node]
$node_($i) random-motion 0 ;# disable random motion
}
$ns_ node-config -initialEnergy 5
set node_(4) [$ns_ node]
$node_(4) random-motion 0
#
# Provide initial (X,Y, for now Z=0) co-ordinates for mobilenodes
#
$node_(0) set X_ 25.0
$node_(0) set Y_ 275.0
$node_(0) set Z_ 0.0
$node_(1) set X_ 250.0
$node_(1) set Y_ 300.0
$node_(1) set Z_ 0.0
$node_(2) set X_ 75.0
$node_(2) set Y_ 125.0
$node_(2) set Z_ 0.0
$node_(4) set X_ 125.0
$node_(4) set Y_ 375.0
$node_(4) set Z_ 0.0
$node_(3) set X_ 225.0
$node_(3) set Y_ 150.0
$node_(3) set Z_ 0.0
set tcp [new Agent/TCP]
$tcp set class_ 2
set sink [new Agent/TCPSink]
$ns_ attach-agent $node_(0) $tcp
$ns_ attach-agent $node_(1) $sink
$ns_ connect $tcp $sink
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ns_ at 1.0 "$ftp start"
$ns_ at 4.0 "$ftp stop"
#$ns_ at 20.0 "$ftp start"
#$ns_ at 28.0 "$ftp stop"
#define el tamaño del nodo en el nam, si no pones esto no aparece nada en el nam
for {set i 0} {$i < $val(nn)} {incr i} {
# 20 defines the node size in nam, must adjust it according to your scenario
# The function must be called after mobility model is defined
$ns_ initial_node_pos $node_($i) 20
}
#
# Tell nodes when the simulation ends
#
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at 250.0 "$node_($i) reset";
}
$ns_ at 35.0 "stop"
$ns_ at 35.01 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {
global ns_ tracefd
$ns_ flush-trace
close $tracefd
}
puts "Starting Simulation..."
$ns_ run
ns basico.ns2
Algunos enlaces útiles
- http://www.isi.edu/nsnam/ns/doc/ La documentación del simulador (el paquete "todo en uno" incluye una copia)
- http://www.isi.edu/nsnam/ns/ La página web del simulador.
- http://linux.ideando.net/articulos/ns/ns2.htm : un paso a paso muy bueno en castellano.
- http://www-sop.inria.fr/mistral/personnel/Eitan.Altman/ns.html algunos ejemplos que incluyen funciones para generar archivos que sirven como entrada de xgraph
- http://www.etsimo.uniovi.es/tcl/tutorial/ Pôr último no está de mas mirarse un tutorial de tcl.
[ show comments ]
blog comments powered by Disqus