Modos de ruteo
Los distintos modos de ruteo que podemos modelar en NS2 se encuentran disponibles códigos ejemplos de como implementar una prueba de ruteo según el código que estes realizando en las clases de prueba de NS-2.35 versión en la cual he estado trabajando, estos son los que yo encontré en la carpeta ns-allinone-2.35/ns-2.35/tcl/test:
- Ruteo algoritmico:
- Lo puedes encontrar en el archivo test-suite-algo-routing.tcl
- Ruteo jerárquico:
- Lo puedes encontrar en el archivo test-suite-hier-routing.tcl
- Ruteo de LAN y broadcast:
- Lo puedes encontrar en el archivo test-suite-lan.tcl
- Ruteo manual:
- Lo puedes encontrar en el archivo test-suite-manual-routing.tcl
- Ruteo centralizado multicast:
- Lo puedes encontrar en el archivo test-suite-mcast.tcl
- Ruteo dinamico:
- Lo puedes encontrar en el archivo test-suite-routed.tcl
- Clasificador virtual de ruteo:
- Lo puedes encontrar en el archivo test -suite-vc
Al igual que podemos encontrar mecanismos que nos sirven para hacer scheduling, manejar colas, admisiones de control, etc, entre los cuales encontré:
- Algoritmos de scheduling como:
- FQ (Fair Queueing)
- SFQ (Stochastic Fair Queuing)
- DRR (Deficit Round Robin)
- FIFO
- Estos se encuentran en el archivo test-suite-schedule.tcl
- Control de admisión:
- MS, HB, ACTP, ACTO
- Estos se encuentran en el archivo test-suite-intserv.tcl
Generador de Topologías
Por el lado de implementación de un generador de topologías realicé un programa en TCL en el cual pones como parámetro la topología que deseas realizarle un experimento y realiza una simulación de envio de datos con TCP y FTP.
Las topologías implementadas son:
- Arbol
- Estrella
- Anillo
- Mixto
- Lineal
Entonces, cuando ejecutamos la simulación, ponemos la topología la cual queremos experimentar.
ns simulacion.tcl arbol
A continuación les presento el código que hice.
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 sim [new Simulator] | |
set archivo_1 [open salida_1.nam w] | |
$sim namtrace-all $archivo_1 | |
proc termina_1 {} { | |
global sim archivo_1 | |
$sim flush-trace | |
close $archivo_1 | |
exec nam salida_1.nam & | |
exit 0 | |
} | |
#Nodos suficientes para topologia | |
set padre [$sim node] | |
set hijo1 [$sim node] | |
set hijo2 [$sim node] | |
set hijo3 [$sim node] | |
set ter1 [$sim node] | |
set ter2 [$sim node] | |
set ter3 [$sim node] | |
set ter4 [$sim node] | |
set ter5 [$sim node] | |
#conexiones para topologia arbol | |
proc conecta_arbol {} { | |
global sim padre hijo1 hijo2 hijo3 ter1 ter2 ter3 ter4 ter5 | |
$sim duplex-link $padre $hijo1 2.5Mb 10ms DropTail | |
$sim duplex-link $hijo1 $hijo2 2Mb 10ms DropTail | |
$sim duplex-link $hijo1 $hijo3 2Mb 10ms DropTail | |
$sim duplex-link $hijo3 $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $hijo3 $ter2 1.5Mb 10ms DropTail | |
$sim duplex-link $hijo3 $ter3 1.5Mb 10ms DropTail | |
$sim duplex-link $hijo2 $ter4 1.5Mb 10ms DropTail | |
$sim duplex-link $ter3 $ter5 1.5Mb 10ms DropTail | |
$sim queue-limit $padre $hijo1 25 | |
$sim queue-limit $hijo1 $hijo2 15 | |
$sim queue-limit $hijo1 $hijo3 15 | |
$sim queue-limit $hijo3 $ter1 10 | |
$sim queue-limit $hijo3 $ter2 10 | |
$sim queue-limit $hijo3 $ter3 10 | |
$sim queue-limit $hijo2 $ter4 10 | |
$sim queue-limit $ter3 $ter5 10 | |
$sim duplex-link-op $padre $hijo1 orient down | |
$sim duplex-link-op $hijo1 $hijo2 orient down-right | |
$sim duplex-link-op $hijo1 $hijo3 orient down-left | |
$sim duplex-link-op $hijo3 $ter1 orient down-left | |
$sim duplex-link-op $hijo3 $ter2 orient down-right | |
$sim duplex-link-op $hijo3 $ter3 orient down | |
$sim duplex-link-op $ter3 $ter5 orient down | |
$sim duplex-link-op $hijo2 $ter4 orient down-right | |
} | |
#conexiones para topologia estrella | |
proc conecta_estrella {} { | |
global sim padre hijo1 hijo2 hijo3 ter1 ter2 ter3 ter4 ter5 | |
$sim duplex-link $padre $hijo1 2.5Mb 10ms DropTail | |
$sim duplex-link $padre $hijo2 2Mb 10ms DropTail | |
$sim duplex-link $padre $hijo3 2Mb 10ms DropTail | |
$sim duplex-link $padre $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $padre $ter2 1.5Mb 10ms DropTail | |
$sim duplex-link $padre $ter3 1.5Mb 10ms DropTail | |
$sim duplex-link $padre $ter4 1.5Mb 10ms DropTail | |
$sim duplex-link $padre $ter5 1.5Mb 10ms DropTail | |
$sim queue-limit $padre $hijo1 25 | |
$sim queue-limit $padre $hijo2 15 | |
$sim queue-limit $padre $hijo3 15 | |
$sim queue-limit $padre $ter1 10 | |
$sim queue-limit $padre $ter2 10 | |
$sim queue-limit $padre $ter3 10 | |
$sim queue-limit $padre $ter4 10 | |
$sim queue-limit $padre $ter5 10 | |
$sim duplex-link-op $padre $hijo1 orient down | |
$sim duplex-link-op $padre $hijo2 orient down-right | |
$sim duplex-link-op $padre $hijo3 orient down-left | |
$sim duplex-link-op $padre $ter1 orient up-left | |
$sim duplex-link-op $padre $ter2 orient up-right | |
$sim duplex-link-op $padre $ter3 orient up | |
$sim duplex-link-op $padre $ter5 orient right | |
$sim duplex-link-op $padre $ter4 orient left | |
} | |
#conexiones para topologia anillo | |
proc conecta_anillo {} { | |
global sim padre ter1 ter2 ter3 ter4 ter5 | |
$sim duplex-link $padre $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $ter1 $ter2 1.5Mb 10ms DropTail | |
$sim duplex-link $ter2 $ter3 1.5Mb 10ms DropTail | |
$sim duplex-link $ter3 $ter4 1.5Mb 10ms DropTail | |
$sim duplex-link $ter4 $ter5 1.5Mb 10ms DropTail | |
$sim duplex-link $ter5 $padre 1.5Mb 10ms DropTail | |
$sim queue-limit $padre $ter1 10 | |
$sim queue-limit $ter1 $ter2 10 | |
$sim queue-limit $ter2 $ter3 10 | |
$sim queue-limit $ter3 $ter4 10 | |
$sim queue-limit $ter4 $ter5 10 | |
$sim queue-limit $ter5 $padre 10 | |
$sim duplex-link-op $padre $ter1 orient down-right | |
$sim duplex-link-op $ter1 $ter2 orient down | |
$sim duplex-link-op $ter2 $ter3 orient down-left | |
$sim duplex-link-op $ter3 $ter4 orient up-left | |
$sim duplex-link-op $ter4 $ter5 orient up | |
$sim duplex-link-op $ter5 $padre orient up-right | |
} | |
#conexiones para topologia mixta | |
proc conecta_mixto {} { | |
global sim padre hijo1 hijo2 hijo3 ter1 ter2 ter3 ter4 ter5 | |
$sim duplex-link $padre $hijo1 2.5Mb 10ms DropTail | |
$sim duplex-link $padre $hijo2 2.5Mb 10ms DropTail | |
$sim duplex-link $hijo1 $hijo2 2Mb 10ms DropTail | |
$sim duplex-link $hijo1 $ter1 2Mb 10ms DropTail | |
$sim duplex-link $hijo2 $ter2 1.5Mb 10ms DropTail | |
$sim duplex-link $ter2 $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $ter1 $hijo3 1.5Mb 10ms DropTail | |
$sim duplex-link $hijo3 $ter3 1.5Mb 10ms DropTail | |
$sim duplex-link $hijo3 $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $ter3 $ter4 1.5Mb 10ms DropTail | |
$sim duplex-link $ter4 $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $ter4 $ter5 1.5Mb 10ms DropTail | |
$sim duplex-link $ter5 $ter2 1.5Mb 10ms DropTail | |
$sim queue-limit $padre $hijo1 25 | |
$sim queue-limit $padre $hijo2 15 | |
$sim queue-limit $hijo1 $hijo2 15 | |
$sim queue-limit $hijo2 $ter2 10 | |
$sim queue-limit $ter2 $ter1 10 | |
$sim queue-limit $ter1 $hijo3 10 | |
$sim queue-limit $hijo3 $ter3 10 | |
$sim queue-limit $hijo3 $ter1 10 | |
$sim queue-limit $ter3 $ter4 10 | |
$sim queue-limit $ter4 $ter1 10 | |
$sim queue-limit $ter4 $ter5 10 | |
$sim queue-limit $ter5 $ter2 10 | |
$sim duplex-link-op $padre $hijo1 queuePos 0.5 | |
$sim duplex-link-op $padre $hijo2 queuePos 0.5 | |
$sim duplex-link-op $hijo1 $hijo2 queuePos 0.5 | |
$sim duplex-link-op $hijo2 $ter2 queuePos 0.5 | |
$sim duplex-link-op $ter2 $ter1 queuePos 0.5 | |
$sim duplex-link-op $ter1 $hijo3 queuePos 0.5 | |
$sim duplex-link-op $hijo3 $ter3 queuePos 0.5 | |
$sim duplex-link-op $hijo3 $ter1 queuePos 0.5 | |
$sim duplex-link-op $ter3 $ter4 queuePos 0.5 | |
$sim duplex-link-op $ter4 $ter1 queuePos 0.5 | |
$sim duplex-link-op $ter4 $ter5 queuePos 0.5 | |
$sim duplex-link-op $ter5 $ter2 queuePos 0.5 | |
} | |
#conexiones para topologia lineal | |
proc conecta_lineal {} { | |
global sim padre hijo1 hijo2 hijo3 ter1 ter2 ter3 ter4 ter5 | |
$sim duplex-link $padre $hijo1 2.5Mb 10ms DropTail | |
$sim duplex-link $hijo1 $hijo2 2Mb 10ms DropTail | |
$sim duplex-link $hijo2 $hijo3 2Mb 10ms DropTail | |
$sim duplex-link $hijo3 $ter1 1.5Mb 10ms DropTail | |
$sim duplex-link $ter1 $ter2 1.5Mb 10ms DropTail | |
$sim duplex-link $ter2 $ter3 1.5Mb 10ms DropTail | |
$sim duplex-link $ter3 $ter4 1.5Mb 10ms DropTail | |
$sim duplex-link $ter4 $ter5 1.5Mb 10ms DropTail | |
$sim queue-limit $padre $hijo1 25 | |
$sim queue-limit $hijo1 $hijo2 15 | |
$sim queue-limit $hijo2 $hijo3 15 | |
$sim queue-limit $hijo3 $ter1 10 | |
$sim queue-limit $ter1 $ter2 10 | |
$sim queue-limit $ter2 $ter3 10 | |
$sim queue-limit $ter3 $ter4 10 | |
$sim queue-limit $ter4 $ter5 10 | |
$sim duplex-link-op $padre $hijo1 orient left | |
$sim duplex-link-op $hijo1 $hijo2 orient left | |
$sim duplex-link-op $hijo2 $hijo3 orient left | |
$sim duplex-link-op $hijo3 $ter1 orient left | |
$sim duplex-link-op $ter1 $ter2 orient left | |
$sim duplex-link-op $ter2 $ter3 orient left | |
$sim duplex-link-op $ter3 $ter4 orient left | |
$sim duplex-link-op $ter4 $ter5 orient left | |
} | |
proc llamada args { | |
foreach arg $args { | |
puts "Comando de entrada: $args" | |
if {$args == "estrella"} { | |
conecta_estrella | |
} elseif {$args == "arbol"} { | |
conecta_arbol | |
} elseif {$args == "anillo"} { | |
conecta_anillo | |
} elseif {$args == "mixto"} { | |
conecta_mixto | |
} elseif {$args == "lineal"} { | |
conecta_lineal | |
} else { | |
puts "Selecciona un comando, prueba arbol" | |
conecta_arbol | |
} | |
} | |
} | |
llamada $argv | |
global sim padre ter4 ter5 | |
set tcp [new Agent/TCP] | |
$sim attach-agent $padre $tcp | |
set sink [new Agent/TCPSink] | |
$sim attach-agent $ter4 $sink | |
$sim connect $tcp $sink | |
set tcp2 [new Agent/TCP] | |
$sim attach-agent $padre $tcp2 | |
set sink2 [new Agent/TCPSink] | |
$sim attach-agent $ter5 $sink2 | |
$sim connect $tcp2 $sink2 | |
set ftp [new Application/FTP] | |
$ftp attach-agent $tcp | |
set ftp2 [new Application/FTP] | |
$ftp2 attach-agent $tcp2 | |
$sim at 0.01 "$ftp start" | |
$sim at 0.5 "$ftp stop" | |
$sim at 0.51 "$ftp2 start" | |
$sim at 1.0 "$ftp2 stop" | |
$sim at 1.0 "termina_1" | |
$sim run |
Para finalizar les muestro un video de la simulación de la topología de árbol.
Esto sería todo para la actividad de laboratorio.
Me hubiera gustado un generador parametrizado que permite crear topologías con n nodos, donde n es un parámetro. Lo interesente de mecanismos de ruteo es que la topología afecta el desempeño del ruteo, algo que podrás explorar en el lab que toca hacer ahora. 5 pts.
ResponderEliminar