martes, 21 de mayo de 2013

[RT] Tarea 7: Simulación redes ad-hoc

Para ésta semana se debió realizar la simulación de una red ad-hoc. La simulación debe contar con las siguientes características.
  • Llegadas y salidas de nodos utilizando procesos Poisson.
  • Por lo menos un modelo de movilidad
  • Nodos con capacidad inicial de batería
  • Envío de mensajes, el cual consume batería según el radio de transmisión
  • Modelo simplificado
    • La recepción de mensajes no consume batería
    • El radio de alcance es ajustable en cada nodo individualmente
    • Inundación con un TTL que se adapte


Redes ad-hoc

Una red ad-hoc es una red inalámbrica descentralizada, es decir, que no cuenta con un nodo central que controle las comunicaciones, sino que todos los nodos comparten privilegios.

Las redes bajo este modelo son las más simples de construir ya que no se basan en una infraestructura existente. Las tarjetas en modo ad-hoc se configuran con las opciones de fábrica.
Cada nodo participa en el enrutamiento mediante el envío de los datos para otros nodos, y la determinación de qué nodos encaminan los datos se realiza dinámicamente sobre la base de la conectividad de red.

"Se denomina ad-hoc a cualquier conjunto de redes en las que todos los dispositivos tengan el mismo estatus en una red y son libres de asociarse con cualquier otro dispositivo de red ad hoc en el rango de enlace."



El protocolo que rige este tipo de comunicaciones es el 802.11, definiendo todos los parámetros necesarios para establecer la comunicación entre dispositivo inalámbricos. EL principal inconveniente de este tipo de redes radica en el número de saltos que debe recorrer la información antes de llegar a su destino, esto debido a que los nodos pueden conectarse o desconectarse en cualquier momento.



Simulación

Como es de esperarse, la simulación fue realizada en lenguaje Python, utilizando hilos.

Básicamente el script se compone de 3 módulos:

  • Interfaz: Utilizando Tkinter, ayuda a visualizar lo que esta sucediendo en la zona de la simulación.
  • Generador de nodos: Se utiliza una simple función, la cual se corre como un hilo utilizando la librería threading. La finalidad del módulo es agregar nodos a la red emulando un proceso de Poisson, en éste caso el temporizador esta controlado por la función random.expovariate, con un valor lambda de 5.
  • Simulador: Se encarga de arrancar los nodos y movilizarlos uno por uno.

2 clases principales componen los elementos de la simulación:
  • Mensaje: Representa el mensaje que es transmitido durante una conexión entre nodos. El mensaje cuenta con 2 atributos:
    • ttl: Un valor de vida inicial el cual disminuye en 1 cada vez que el mensaje de transmite a otro nodo.
    • estado: Representa si un mensaje aun se puede transmitir. Un mensaje es descartado cuando su valor TTL llega a cero.
  • Nodo: Un nodo capaz de conectarse a la red ad-hoc, los atributos de cada nodo son:
    • id: Número identificador único de cada nodo.
    • color: Color para la visualizacion
    • coord: Coordenadas donde el nodo sera dibujado
    • radio: Radio de alcance del nodo
    • bateria: Bateria del nodo
    • costo: Costo energetico de cada paso
    • velocidad: Velocidad del movimiento
    • vecinos: Vecinos dentro del radio de alcance
    • cola: Cola de mensajes que serán transmitidos
    • estado: Estado del nodo: True=Vivo, False=Muerto
    • instancias: Para guardar temporalmente las referencias a los dibujos del nodo

Los nodos siguen un proceso muy simple en cada paso, los primeros pasos son:
  1. Se calculan los atributos del nodo, los cuales son:
    • Posición inicial (x,y)
    • Radio de alcance
    • Nivel de bateria
    • Velocidad del movimiento
  2. Se inicializa el nodo con los atributos anteriores, de manera transparente se le asignan al nodo otros atributos como:
    • Asignar el ID
    • Asignar el color
    • Consumo energético inicial (1)
    • Lista para almacenar los vecinos
    • Cola de mensajes (5 iniciales)
    • Iniciar el nodo como vivo

Una vez inicializado el nodo, por cada paso se realiza lo siguiente:
  1. Se calcula la siguiente posición del nodo.
  2. Se buscan por aquellos nodos que se encuentren dentro del radio de alcance del nodo (utilizando teorema de Pitágoras)
    • Si un nodo se encuentra a una distancia menor o igual al radio de alcance, dicho nodo entra a la lista de vecinos
    • Mientras no se encuentren 3 vecinos, el radio de alcance ira creciendo poco a poco, dicho crecimiento hace que el nodo consuma más batería por cada paso.
  3. Se transmite el mensaje a los nodos vecinos
    • El mensaje baja en uno el valor TTL
  4. Se dibuja lo que esta pasando en la interfaz
  5. Se modifica el nivel de batería del nodo
    • Si la batería llega a cero, se eliminan sus elementos del canvas, la instancia del nodo y su estado pasa a False, así la simulación lo sacará de la lista de nodos activos y el garbage collector hará el resto.

Video



Código


Referencias

Shaeffer,Elisa. Mayo 2013. Redes Ad-Hoc. Redes de Telecomunicaciones. Recuperado el 20 de mayo de 2013 desde http://elisa.dyndns-web.com/~elisa/teaching/comp/net/adhoc.pdf

1 comentario: