Que es ns2?
Permite simular tanto protocolos unicast como multicast y se utiliza intensamente en la investigación de redes móviles ad-hoc. Implementa una amplia gama de protocolos tanto de redes cableadas como de redes inalámbricas.
NS-2 fue desarrollado en C++ y provee una interfaz de simulación a través de OTcl, una variante Orientada a Objetos de Tcl. El usuario describe una topología de red por medio de scripts OTcl, y luego el programa principal de ns-2 simular dicha topología utilizando los parámetros definidos. ns -2 esta diseñado para sistemas operativos Linux, FreeBSD, Solaris, Mac OS X y puede ejecutarse bajo Windows utilizando Cygwin. Fue licenciado bajo GPL versión 2.
La última versión, 2.34, se presentó al público el 17 de junio de 2009.
Asi es como las muestra el NAM la simulacion
Es sencillo de entender con esta imagen
En esta entrada se escogió realizar el trabajo con NS-2, primero se realizo un ejemplo para poder entender como es que se hacia esto, y salio como resultante el siguiente código con una simulación de un nodo con un agente UDP y un trafico CBR. El segundo nodo recibe los paquetes enviados con un agente NULL y realiza la conexión con el agente UDP.
Aquí el código:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set ns [new Simulator] | |
#Abrimos los archivos rastreadores | |
set tracefile [open out.tr w] | |
$ns trace-all $tracefile | |
#Abrimos los archivos para NAM | |
set nf [open out.nam w] | |
$ns namtrace-all $nf | |
#Definimos un procedimiento para "terminar" | |
proc finish {} { | |
global ns tracefile nf | |
$ns flush-trace | |
close $nf | |
close $tracefile | |
#ejecutamos NAM en los archivos Trace | |
exec nam out.nam & | |
exit 0 | |
} | |
#Creamos los nodos | |
set n0 [$ns node] | |
set n1 [$ns node] | |
#Creamos los enlaces entre los nodos | |
$ns simplex-link $n0 $n1 1mb 10ms DropTail #Crea dos enlaces simplex/nodos conect/ancho de banda/retardo | |
#Establecemos la dispocision de la coneccion | |
set udp0 [new Agent/UDP] | |
$ns attach-agent $n0 $udp0 | |
set cbr [new Application/Traffic/CBR] | |
$cbr attach-agent $udp0 | |
set null0 [new Agent/Null] | |
$ns attach-agent $n1 $null0 | |
$ns connect $udp0 $null0 | |
#Se programa el evento para CRB | |
$ns at 0.1 "$cbr start" | |
$ns at 1.0 "$cbr stop" | |
#LLamamos el proceso "finish" para terminarlo a los 11 segundos de simulacion | |
$ns at 1.1 "finish" | |
#Corremos la simulacion | |
$ns run |
En este ejemplo solo enviamos paquetes del nodo 0 al nodo 1 con UDP.
Este codigo salio de la pagina siguiente, solo se fue borrando codigo hasta llegar al que tenemos
http://nile.wpi.edu/NS/
Ahora gracias a este pequeño ejemplo se puede hacer algo mas grande y empezar a simular situaciones reales. Ahora en el siguiente ejemplo agregaremos agentes TCP, agentes UDP, un nodo que sirva para recibir los paquetes y enviarlos
Aquí el código:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set ns [new Simulator] | |
#Definimos el color para los diferentes flujos de dato (NAM) | |
$ns color 1 Blue | |
$ns color 2 Red | |
#Abrimos los archivos Trace | |
set tracefile [open out.tr w] | |
set winfile [open WinFile w] | |
$ns trace-all $tracefile | |
#Abrimos archivos para NAM | |
set nf [open out.nam w] | |
$ns namtrace-all $nf | |
#Definimos un procedimiento para "terminar" | |
proc finish {} { | |
global ns tracefile nf | |
$ns flush-trace | |
close $tracefile | |
close $nf | |
#ejecutamos NAM en los archivos Trace | |
exec nam out.nam & | |
exit 0 | |
} | |
#Creamos seis nodos | |
set n0 [$ns node] | |
set n1 [$ns node] | |
set n2 [$ns node] | |
set n3 [$ns node] | |
set n4 [$ns node] | |
set n5 [$ns node] | |
#Creamos los enlaces para los nodos | |
$ns duplex-link $n0 $n2 2Mb 10ms DropTail #Crea dos enlaces simplex/nodos conect/ancho de banda/retardo | |
$ns duplex-link $n1 $n2 2Mb 10ms DropTail | |
$ns simplex-link $n2 $n3 0.3Mb 100ms DropTail | |
$ns simplex-link $n3 $n2 0.3Mb 100ms DropTail | |
$ns duplex-link $n3 $n4 0.5Mb 40ms DropTail | |
$ns duplex-link $n3 $n5 0.5Mb 30ms DropTail | |
#Le damos la posicion para el NAM | |
$ns duplex-link-op $n0 $n2 orient right-down | |
$ns duplex-link-op $n1 $n2 orient right-up | |
$ns simplex-link-op $n2 $n3 orient right | |
$ns simplex-link-op $n3 $n2 orient left | |
$ns duplex-link-op $n3 $n4 orient right-up | |
$ns duplex-link-op $n3 $n5 orient right-down | |
#Establecemos el tamaño del Queue entre n2-n3 a 20 | |
$ns queue-limit $n2 $n3 20 | |
#Disposicion de la coneccion TCP | |
set tcp [new Agent/TCP/Newreno] | |
$ns attach-agent $n0 $tcp | |
set sink [new Agent/TCPSink/DelAck] | |
$ns attach-agent $n4 $sink | |
$ns connect $tcp $sink | |
$tcp set fid_ 1 | |
$tcp set packetSize_ 500 | |
#Configuramos una conexion FTP a TCP | |
set ftp [new Application/FTP] | |
$ftp attach-agent $tcp | |
$ftp set type_ FTP | |
#Configuramos conexion UDP | |
set udp [new Agent/UDP] | |
$ns attach-agent $n1 $udp | |
set null [new Agent/Null] | |
$ns attach-agent $n5 $null | |
$ns connect $udp $null | |
$udp set fid_ 2 | |
#Configuramos conexion CBR a UDP | |
set cbr [new Application/Traffic/CBR] | |
$cbr attach-agent $udp | |
$cbr set type_ CBR | |
$cbr set packet_size_ 1000 | |
$cbr set rate_ 0.01mb | |
$cbr set random_ false | |
#Se programa el evento para CRB y FTP | |
$ns at 0.1 "$cbr start" | |
$ns at 1.0 "$ftp start" | |
$ns at 10.0 "$ftp stop" | |
$ns at 10.5 "$cbr stop" | |
#LLamamos el proceso "finish" para terminarlo a los 11 segundos de simulacion | |
$ns at 11.0 "finish" | |
#Corremos la simulacion | |
$ns run |
Como se aprecia en la simulación el nodo0 y nodo1 (auzl para TCP, rojo para UDP) envían paquetes, lo que hace el nodo2 recibe y envía al nodo3 este nodo lo que realiza es mandar los paquetes a los respectivos nodos con su mismo protocolo entonces el nodo4 recibe los paquetes de nodo0 y envía una respuesta, al llegar esta respuesta de regreso al nodo0 este nodo envía sus paquetes nuevamente.
En el nodo1 lo único que hace es mandar y recibe el nodo5 al final de todo
En este link se encuentran diferentes ejemplos:
http://www-sop.inria.fr/members/Eitan.Altman/ns.html
En la pagina anterior hay un ejemplo de donde sale el segundo código de esta entrada
Referencias:
http://www.cs.bu.edu/groups/itm/SATS/simulation.html
http://nile.wpi.edu/NS/
http://es.wikipedia.org/wiki/Ns_(simulador)
http://www-sop.inria.fr/members/Eitan.Altman/ns.html
Pues, solamente faltó medir algo. 6 pts.
ResponderEliminar