martes, 30 de abril de 2013

Tarea 5: Control de tráfico cogestión

Para esta entrada se nos pidió realizar un programa en ns-2/3 donde a partir de una topología y la transmisión de paquetes (en una entrada anterior se habló de la pérdida de paquetes) al ver el comportamiento que tiene éste en el control de la congestión de tráfico.

Teoría:
Viendo un poco de teoría y buscando lo que se quiere implementar es:
Teniendo una topología entre nodos, en esta hay una transmisión de datos, suponiendo que nodo A y nodo B (servidor) hace peticiones, se tiene un flujo en el ancho de banda, en determinado momento el ancho de banda se ve congestionado ocasionando la pérdida de paquetes, para poder controlar esto lo que se puede hacer es disminuir el tiempo en el que se mandan los paquetes, reduciendo así su congestión.



Código:
Para esta entrada mediré el rendimiento que se tiene entre los nodos, teniendo variaciones en el envio de paquetes.

##iniciamos
set ns [new Simulator]
##declaramos el tipo de enrutamiento
$ns rtproto LS
##archivo para la simulación
set nf [open a.nam w]
set nt [open trace.tr w]
$ns namtrace-all $nf
$ns trace-all $nt
##Crear archivo
set trace [open trace.tr w]
$ns trace-all $trace
proc finish {} {
global ns nf nt
$ns flush-trace
close $nf
close $nt
exec nam -a a.nam &
exit 0
}
##creamos 6 nodos
for {set i 0} {$i < 6} {incr i} {
set n($i) [$ns node]
}
##dos nodos centrales
set ruter1 [$ns node]
set ruter2 [$ns node]
##unimos los nodos 0 al 3 con el ruter 1 al igual
## del 3 al 6 al ruter 2
for {set i 0} {$i < 3} {incr i} {
$ns duplex-link $ruter1 $n($i) 1Mb 10ms DropTail
}
for {set i 3} {$i < 6} {incr i} {
$ns duplex-link $ruter2 $n($i) 1Mb 10ms DropTail
}
# TOPOLIGIA
##unimos los dos nodos centrales
$ns duplex-link $ruter1 $ruter2 1Mb 10ms DropTail
## unimos nodos
##aqui creamos el tip de mensaje udp
set udp0 [new Agent/UDP]
$ns attach-agent $n(4) $udp0
# set udp0 flowid to 1
$udp0 set fid_ 1
##creamos el tamaño del los paquetes
## el intervalo de envio
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set sinknode1 [new Agent/LossMonitor]
$ns attach-agent $ruter1 $sinknode1
# Connect the UDP traffic source to Null sink
$ns connect $udp0 $sinknode1
##Creamos otra conexion udp
set udp1 [new Agent/UDP]
$ns attach-agent $n(3) $udp1
##creamos el tamaño del los paqueres
## el intervalo de envio
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize_ 500
$cbr1 set interval_ 0.005
$cbr1 attach-agent $udp1
##aqui decidimos cual sera el destino
##final de nuestros paqueres
set null0 [new Agent/Null]
$ns attach-agent $n(1) $null0
$ns connect $udp0 $null0
$ns connect $udp1 $null0
$ns at 0.5 "$cbr0 start"
$ns at 0.5 "$cbr1 start"
$ns at 4.5 "$cbr0 stop"
$ns at 4.5 "$cbr1 stop"
#finalizamos
$ns at 5.0 "finish"
$ns run
view raw gistfile1.tcl hosted with ❤ by GitHub
set INCREMENT 0.2
set PacketSize_ 1024
proc check {} {
global cbr1 cbr0 ns nf
global INCREMENT
set cbrBW1 [$cbr0 set ack_]
set cbrBW0 [$cbr1 set ack_]
set now [$ns now]
set d [expr $now - 0.1]
set resultado [expr $cbrBW1/$d * 8 * [$tcp1 set packetSize_]/1024]
set r2 [expr $cbrBW0/$d * 8 * [$tcp3 set packetSize_]/1024]
puts "$now $resultado $r2"
puts $nf "$now $resultado $r2"
$ns at [expr $now + $INCREMENT] "check"
}
view raw gistfile1.tcl hosted with ❤ by GitHub

Resultados:
En los resultados obtenidos tuve un ligero problema, ya que me monstró error en el parseo, para poder obtener el rendimiento se empleó una fórmula que viene más abajo de referencia donde el paquete saliente es divido por el incremento que va teniendo éste por 8 que es una constante por el tamaño del paquete y todo esto dividido en 1024, que el es limite máximo que puede tener nuestro paquete.



Notas:
Faltó realizar u obtener una simulación en gráfica, ya que los resultados obtenidos no son del todo satisfactorios.

Referencias:
http://web.mst.edu/~bckd2/CpE401/project/NS2%20simulations/special_study%20on%20TCP.pdf
http://www2.ensc.sfu.ca/~ljilja/ENSC835/Spring02/Projects/bian_zhang.hilary/Hilary_and_Bian_Report.pdf
http://www.profesores.frc.utn.edu.ar/sistemas/ingsanchez/Redes/Archivos/CCong.asp

1 comentario:

  1. Esta tarea no era para _medir_ el desempeño (ya tuvimos una tarea anterior sobre ese tema), sino para tomar acciones que afectan el desempeño con la finalidad de evitar congestión. Tu parte experimental no coincide con tu párrafo teórico. 1 pt por por lo menos mencionar qué es congestión y cómo se podría evitar.

    ResponderEliminar