Redes de Telecomunicaciones
Tarea 5
Tarea 5
Para esta entrega se nos pidió desarrollar un modulo para NS-2 que permitiera crear topologías, generar patrones de tráfico y comparar por lo menos dos diferentes esquemas de control de congestión. De esta entrega las dos primeras partes ya se habían mencionado antes en las entregas de laboratorio y para la tercera solo me fue posible abordar con información acerca del tema.
Al final en la parte de referencias dejo los enlaces a documentos con muy buena información para el tema de congestión de redes y algunas pruebas hechas por otras personas acerca del mismo tema.
Generación de topologías y creación de tráfico
Para la parte de creación de topologías y creación de tráfico, me base en lo ya antes presentado en las tareas de laboratorio, pero ahora creando un solo archivo tcl que incluye funciones encargadas de la formación de una topología común conocida de unos cuantos nodos y de a selección manual de tráfico de red.
Con este mismo podemos obtener simulaciones como se muestra en las siguiente animación producida por nam.
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] | |
$ns namtrace-all [open out.nam w] | |
set topology [lindex $argv 0] | |
set traffic_app [lindex $argv 1] | |
proc finish {} { | |
exec nam out.nam & | |
exit 0 | |
} | |
set first [$ns node] | |
set n1 [$ns node] | |
set n2 [$ns node] | |
set n3 [$ns node] | |
set n4 [$ns node] | |
set n5 [$ns node] | |
set n6 [$ns node] | |
set n7 [$ns node] | |
proc star {} { | |
global ns first n1 n2 n3 n4 n5 n6 n7 | |
ns duplex-link first $n1 2.5Mb 10ms DropTail | |
ns duplex-link first $n2 2Mb 10ms DropTail | |
ns duplex-link first $n3 2Mb 10ms DropTail | |
ns duplex-link first $n4 1.5Mb 10ms DropTail | |
ns duplex-link first $n5 1.5Mb 10ms DropTail | |
ns duplex-link first $n6 1.5Mb 10ms DropTail | |
ns duplex-link first $n7 1.5Mb 10ms DropTail | |
} | |
proc line {} { | |
global ns first n1 n2 n3 n4 n5 n6 n7 | |
ns duplex-link first $n1 2.5Mb 10ms DropTail | |
ns duplex-link n1 $n2 2Mb 10ms DropTail | |
ns duplex-link n2 $n3 2Mb 10ms DropTail | |
ns duplex-link n3 $n4 1.5Mb 10ms DropTail | |
ns duplex-link n4 $n5 1.5Mb 10ms DropTail | |
ns duplex-link n5 $n6 1.5Mb 10ms DropTail | |
ns duplex-link n6 $n7 1.5Mb 10ms DropTail | |
} | |
proc random {} { | |
global ns first n1 n2 n3 n4 n5 n6 n7 | |
ns duplex-link first $n1 2.5Mb 10ms DropTail | |
ns duplex-link first $n2 2.5Mb 10ms DropTail | |
ns duplex-link n1 $n2 2Mb 10ms DropTail | |
ns duplex-link n1 $n4 2Mb 10ms DropTail | |
ns duplex-link n2 $n5 1.5Mb 10ms DropTail | |
ns duplex-link n5 $n4 1.5Mb 10ms DropTail | |
ns duplex-link n4 $n3 1.5Mb 10ms DropTail | |
ns duplex-link n3 $n6 1.5Mb 10ms DropTail | |
ns duplex-link n3 $n4 1.5Mb 10ms DropTail | |
ns duplex-link n6 $n7 1.5Mb 10ms DropTail | |
ns duplex-link n7 $n4 1.5Mb 10ms DropTail | |
} | |
global ns first n6 n7 | |
set tcp [new Agent/TCP] | |
ns attach-agent first $tcp | |
set sink [new Agent/TCPSink] | |
ns attach-agent n6 $sink | |
ns connect tcp $sink | |
set tcp2 [new Agent/TCP] | |
ns attach-agent first $tcp2 | |
set sink2 [new Agent/TCPSink] | |
ns attach-agent n7 $sink2 | |
ns connect tcp2 $sink2 | |
set ftp [new Application/FTP] | |
ftp attach-agent tcp | |
set ftp2 [new Application/FTP] | |
ftp2 attach-agent tcp2 | |
set udp [new Agent/UDP] | |
ns attach-agent first $udp | |
set null [new Agent/Null] | |
ns attach-agent n6 $null | |
ns connect udp $null | |
if {$topology == "star"} { | |
star | |
} elseif {$topology == "line"} { | |
line | |
} else { | |
random | |
} | |
if {$traffic_app == "exponential"} { | |
set traffic [new Application/Traffic/Exponential] | |
traffic attach-agent udp | |
$traffic set packetSize_ 1024 | |
$traffic set rate_ 1 | |
$traffic set burst_time_ 500ms | |
$traffic set idle_time_ 50ms | |
} elseif {$traffic_app == "pareto"} { | |
set traffic [new Application/Traffic/Pareto] | |
traffic attach-agent udp | |
$traffic set packetSize_ 1024 | |
$traffic set rate_ 1 | |
$traffic set burst_time_ 500ms | |
$traffic set idle_time_ 50ms | |
$traffic set shape_ 1.5 | |
} else { | |
set traffic [new Application/Traffic/CBR] | |
traffic attach-agent udp | |
$traffic set packetSize_ 1024 | |
$traffic set rate_ 1 | |
$traffic set type_ CBR | |
$traffic set random_ true | |
} | |
ns at 0.05 "traffic start" | |
ns at 0.10 "ftp start" | |
ns at 0.50 "ftp2 start" | |
ns at 1.4 "ftp stop" | |
ns at 1.8 "ftp2 stop" | |
ns at 2.0 "traffic stop" | |
$ns at 2.0 "finish" | |
$ns run |
Control de congestión
Se llama congestión al exceso de tráfico en alguna parte de una red, que da lugar al exceso de demanda de algún recurso (ancho de banda, memoria, capacidad de procesamiento) y los síntomas notorios para este caso son el aumento en los retardos y la pérdida de paquetes.
Consecuencias de la congestión:
Retardos: Trabajar cerca de la capacidad de los enlaces es ideal desde el punto de vista de la productividad, pero no lo es respecto al retardo. Se experimentan grandes retardos en una cola según la tasa de llegadas de paquetes se acerca a la capacidad del enlace.
Pérdidas: Como los buffers no son de tamaño in finito, el emisor debe realizar retransmisiones para compensar los paquetes perdidos debido al desbordamiento de los buffers.
Desperdicio de recursos:
- Las retransmisiones innecesarias realizadas por el emisor en presencia de grandes retardos, que provocan que venzan los temporizadores de retransmisión antes de que lleguen los asentimientos, hacen que el ancho de banda de los enlaces se utilice para encaminar copias innecesarias de los paquetes.
- Cuando un paquete es desechado a lo largo de un camino, la capacidad de almacenamiento, procesamiento y transmisión que fue utilizada en cada uno de los nodos y enlaces anteriores, para encaminar ese paquete hasta el punto en el que es desechado, está siendo desperdiciada.
Algoritmos de control de congestión:
Mecanismo de Traffic Shaping
Es un mecanismo en bucle abierto. Conforma el tráfico que una fuente puede inyectar a la red. Se usa en redes ATM (Asynchronous Transfer Mode). En estas redes, la velocidad de línea es de 155 Mbps y el usuario puede ver una velocidad de unos 10 Mbps.
Si se tiene una ráfaga lista para transmitir, el sistema obliga a no transmitir todo seguido. Requiere un acuerdo entre proveedor y cliente: el proveedor garantiza que se cursa el tráfico si se transmite a una tasa determinada y tira el tráfico si se supera. Esto lo realiza mediante una función policía, que es un nodo que tira los paquetes que superan la tasa contratada a la entrada de la red (no se tiran una vez que ya ha entrado). Esto puede realizarse mediante un algoritmo de Leaky Bucket, cuyo nombre se debe a que es como si tuviéramos un bote que vamos llenando con un caudal determinado y por el que sale el líquido con otro caudal distinto; si llenamos muy deprisa el bote acabará llenándose y vertiéndose por arriba, lo que asemeja una pérdida de paquetes en una red.
Algoritmo de descarte de paquetes
Es un algoritmo de control de congestión en bucle cerrado. Se basa en que los nodos descartan (tiran) paquetes cuando su ocupación es alta. Para esto los nodos han de conocer sus recursos (CPU y memoria). Hace una asignación dinámica de los buffers en base a las necesidades de cada línea.
Sin embargo, cada línea necesita al menos una (o más) posiciones de memoria para gestionar información relevante, tal como asentimientos, que permite la liberación de posiciones de memoria ocupadas por paquetes que estaban esperando por si necesitaban retransmitirse. Si a la línea llegan datos (no asentiminentos u otra información relevante) y el buffer de salida de la línea correspondiente está lleno, se descarta el paquete. Hay varias formas de hacer la asignación de buffers:
- En base al uso. No es muy eficiente, porque cuando una línea se empieza a cargar acapara todos los recursos.
- Asignación fija. Tampoco es muy buena, ya que desaprovecha recursos.
- Asignación subóptima. Llamando k al número de posiciones del buffer y s al número de líneas de salida, se tiene que el número de posiciones de memoria asociadas a cada línea es:
m=\dfrac {k}{\sqrt{s}}
Referencias:
Video Sources and Congestion Control Protocols
TCP Congestion Control Algorithms
TCP Performance Simulations
Control de Congestión
Algoritmos de Control de Congestión
Pues, los explicas, pero no los inventaste ni modificaste. Tampoco está la implementación ni la experimentación. 2 pts.
ResponderEliminar