martes, 30 de abril de 2013

[RT] Tarea 5: Control de congestión

Para ésta semana se tuvieron que realizar las siguientes 3 actividades:

"Desarrollen para ns-2/3 un módulo que permite
  • Crear topologías
  • Generar “patrones” tráfico 
  • Comparar por lo menos dos diferentes esquemas de control de congestión (inventados por ustedes mismos, no anden googleando ni por ideas ni por código)"

1. Crear topologías y habilitar métodos de ruteo


Código que permite crear topologías de tipo:

  • Estrella
  • Anillo
  • Malla
  • Scale-Free
  • Small-World


Además poder habilitar diferentes métodos de ruteo unicast, multicast y adhoc



2. Generar tráfico

Código que permite generar tráfico sobre UDP o TCP, se puede configurar para seguir distintos patrones y distribuciones de probabilidad para hacerlo más realista.



3. Esquemas de control de congestión

Para el control de congestión, diseñe 2 esquemas muy simples, los cuales detectan una congestión basándose si hay o no pérdida de paquetes y la medida que toman para controlar la congestión es controlar la tasa de transferencia directamente.
Los esquemas se comportarían de la siguiente forma:

  • El primero necesita evaluar primeramente las condiciones de consumo de banda ancha, por eso en una primera etapa comienza con una tasa de transferencia pequeña que aumenta linealmente en pasos iguales. Si no se detecta ninguna pérdida entonces la tasa de transferencia comenzara a aumentar exponencialmente, al doble del paso anterior en cada tiempo, hasta llegar al tope de la cantidad de banda ancha disponible para esa conexion. Cuando se detecte la primera pérdida de paquetes entonces la tasa de transferencia cae hasta un 10%, después todo el proceso comienza de la misma forma, los paquetes perdidos se reenvian al estilo fast-retransmit en la primera oportunidad. Con esto espero que las colas de paquetes se vacíen un poco antes de volver a transmitir a la misma eficiencia que antes.
Comportamiento esperado


  • El segundo comienza con un aumento progresivo en la tasa de transferencia, evaluando las condiciones de la red y el consumo mientras aumenta. La tasa de transferencia esta acotada por el máximo de banda ancha disponible, así que, conforme la tasa de transferencia se acerca al tope, esta comienza a frenarse poco a poco, digamos que se comporta como una gráfica logarítmica. Si se detecta una pérdida de paquetes entonces la tasa de transferencia cae un 30% y vuelve a aumentar de la misma forma que antes. De la misma manera, se espera que las colas de datos se vacíen un poco antes de volver a enviar datos. La recuperación también es rápida adoptando los esquemas de fast-recovery y fast-retransmit de los protocolos TCP.
Comportamiento esperado




Sin embargo, la implementación de los esquemas de control de congestión están muy apegados al diseño de los llamados agentes (que suelen representar protocolos de capa 4 [TCP, UDP]).
La correcta implementación requiere tener conocimientos de programación C++ y si es posible, creación de patches para modificar el código existente en NS-2 en partes específicas.
Dentro de la carpeta donde descomprimimos NS-2 habrá una carpeta con el nombre ns-2.35, dentro se  encuentran ordenados por carpetas los diferentes protocolos disponibles.
Si queremos crear un nuevo esquema, agente o protocolo, debemos crear su carpeta ahí y dentro crear por lo menos 2 archivos:

  • Header (*.h): Que como sabemos, en C++ contiene la estructura del nuevo agente, los métodos y atributos.
  • Código (*.cc): Que contiene el desarrollo de los algoritmos necesarios para manipular las colas de datos, tablas de ruteo, estructuras de los paquetes, mensajes, timers, etcétera. Aqui es donde se implementa todo el código.
El tutorial escrito Marc Greis en http://www.isi.edu/nsnam/ns/tutorial/index.html indica de forma precisa como implementar un nuevo agente, en éste caso, emulando a PING.

El tutorial escrito por Elmurod A. Talipov en http://elmurod.net/en/index.php/archives/157 indica la forma de agregar los nuevos agentes a NS-2 y modificar ciertos archivos para recompilar el código fuente y que estén disponibles para las simulaciones con TCL.

Sin embargo, traté de seguir el tutorial con los ejemplos ahí incluidos y terminaba rompiendo el código fuente de NS-2, además de recibir múltiples mensajes de error al correr el makefile.


Referencias

1 comentario:

  1. Lástima. Las ideas parecieron bien. C++ puede resultar un poco retador al inicio. 4 pts.

    ResponderEliminar