martes, 30 de abril de 2013

Congestión/Tráfico en redes con ns-2

La conexión que se estableció es simple, solo son dos nodos y se crea una conexión udp, por lo que podría pasar por un servicio de VoiP, o al menos es la misma idea:



El codigo para la simulación ns-2, es muy parecido al que se ha estado usando en las entradas anteriorres:



Faltaron las pruebas de rendimiento... :/

Actividad #9 Lab - Ahorro de Energía (lifetime)

Para esta tarea, se realizó un resumen del siguiente documento:


Maximum Network Lifetime in Wireless Sensor Networks with Adjustable Sensing Ranges
Autores: Mihaela Cardei, Jie Wu, Mingming Lu, Mohammad O. Pervaiz

El documento habla acerca de mecanismos para extender o como optimizar la vida útil o tiempo de actividad de una red inalámbrica (cuando se están usando baterías) esto debido al alto consumo de energía al transmitir datos o al tratar de conectar con nuevos nodos.

Debido a que las redes inalámbricas son muy dinámicas en cuanto a la conexión con otros nodos/clientes, es decir la mayoría de las veces no se tiene un límite de usuarios por lo que el consumo de energía puede variar mucho además de esto las variados posiciones que los nodos pueden tomar hacen que el uso de una topología para tener más orden sea más complejo.

Para estos casos, los limitantes son el tamaño (capacidad) de la batería y el peso de esta, generalmente a más capacidad más peso, por lo que actualmente esto impacta directamente en el tiempo de vida de una red de este tipo (sobre todo en dispositivos móviles) ya que siempre se busca la movilidad.

Los mecanismos para extender la vida de estas redes se pueden clasificar en dos tipos:
·         Manejar la activación y desactivación de ciertos nodos.
·         Ajustar la transmisión de datos o el rango que cubre la red.

Algunos problemas que se deben repasar para llevar a cabo el punto central del documento, son los algunos ya conocidos como:
·         Área de cobertura: el objetivo es cubrir cierta área de interés.
·         Puntos/objetivos a cubrir: Dar servicio de cobertura a ciertos nodos.
·         Problemas de cobertura: Determinar el máximo tráfico que puede viajar dentro de la red.

Algunas soluciones propuestas a estos problemas en otras ocasiones, una de ellas es:
·         Una correcta distribución de nodos y protocolo (manejando la activad de la red en rounds), estos nodos se activan para cubrir cierto espacio (donde se requieren conexión) mientras los otros se desactivan porque no se requiere conexión.

El punto aquí es como determinar el número óptimo de nodos para satisfacer las necesidades de la red, como determinar los rounds y en qué punto se debe de cambiar de uno a otro, la posición correcta de estos nodos, la transmisión de datos, todos estos puntos son necesarios con el fin de optimizar el consumo de energía y con esto alargar la vida útil de la red.

El problema planteado (de manera muy general) más formalmente se puede definir de la siguiente forma:
Se tiene cierta cantidad de nodos ubicados de manera aleatoria con el fin de cubrir ciertos objetivos, cada nodo tiene su consumo inicial de energía y la capacidad de ajustar la intensidad de su señal (se definen n opciones). El nodo central tiene la capacidad de conectarse a cualquier otro nodo.
Y se necesita un método para calcular la relación de cobertura entre un nodo y un objetivo (cliente), es decir si la distancia Euclidiana entre el nodo y el cliente no es mayor a una distancia dentro del área de cobertura original.
Con esta información, si la distancia es menor que la cubierta originalmente, se puede modificar para que se disminuya intensidad y así reducir el consumo de energía, en caso de lo contrario se recalcula un nuevo nodo, y se repite el proceso para tratar de disminuir la intensidad de su señal.


La idea de problema se puede aclarar con la siguiente figura:


Donde las sn son los nodos, los tn son las clientes/objetivos y las rn son las opciones de intensidad.
  

Para la obtención de resultados sobre este problema, en el documento se proponen y se aplican tres métodos heurísticos (LP-based heuristic and greedy-based heuristic(centralized and distributed) ) creados por ellos mismos, los métodos se aplican sobre el planteamiento del problema como Programación Entera.
Dos de los métodos se ejecutan en el nodo central, mientras que otro se ejecuta en los nodos con el fin de obtener diferentes perspectivas y nombrar el “más” correcto.

Después de las respectivas simulaciones, los resultados se pueden categorizar de la siguiente forma:



En la figura se muestra el tiempo de vida útil de la red, obtenida de los tres diferentes métodos variando el número de nodos.


En esta figura se muestra como varía la vida útil de la red al modificar la intensidad de los nodos.

Conclusiones

La idea que se propone es buena al tratar de economizar el consumo de energía sobre todo si se trata de dispositivos dependientes de una batería, pero como lo dije en la entrada anterior, los resultados de una simulación pueden resultar engañosos ya que es muy difícil el replicar completamente el comportamiento de cierto medio, por lo que los resultados obtenidos en una simulación pueden no ser los mismos al aplicarse los métodos en un contexto real.

Otro punto, si la idea es disminuir el consumo de energía para alargar la vida útil de la red, según yo resulta contraproducente el realizar cálculos extras para poder aplicar los métodos que se mencionan en el documento, obtener los resultados y tomar decisiones. Estos cálculos extras se reflejaran directamente en el consumo de energía ya que antes no se hacían y al parecer esto no se tomó en cuenta en el documento.

________________________________________________________________________
Enlaces:

martes, 23 de abril de 2013

Actividad Lab. #8 - Congestión de Redes


Resumen de:
Congestion Control for Scalable Video Streaming Using the Scalability Extension of H.264/AVC
Autores: Dieu Thanh Nguyen and Joern Ostermann
IEEE JOURNAL OF SELECTED TOPICS IN SIGNAL PROCESSING, VOL. 1, NO. 2, AUGUST 2007


Mencionan que en la actualidad la demanda del video streaming ha crecido en gran medida, ya que la mayoría de los servicios que hay en internet ofrecen de diferentes formas contenido presentado de esta forma, como puede ser video streaming de servicios como youtube, dailymotion donde el video se descarga normalmente a nuestra computadora mientras se reproduce o servicios de video on demand donde el video se descarga y se “decodifica” para que lo podamos ver, o también video streaming de transmisiones en vivo, donde puede ocurrir algo parecido al video on demand.

Cada una de estas formas de prestar el servicio de streaming acusa un congestionamiento o saturación de la red, ya que la mayoría de las aplicaciones consumen la mayor parte del ancho de banda que se encuentre disponible dejando sin recursos a otras aplicaciones o usuarios incluso afectando a sí mismos si el ancho de banda no es el adecuado que se ve reflajado como pérdida de paquetes, retrasos, etc.

La propuesta de este paper es una especie de algoritmo para controlar en gran medida el congestionamiento de las redes al utilizar servicios de streaming, la idea que proponen es que este algoritmo se encuentre en funcionamiento directamente en los servidos de las aplicaciones de streaming y no en los clientes (que sería lo más entendible), se busca que este algoritmo sea capaz de optimizar totalmente el flujo de datos teniendo en cuenta las carencias de la red del cliente que se conecte para así no saturar su propia red ni la del cliente, y tener más oportunidades de ofrecer un mejor servicio al momento de la conexión de un gran número de clientes a la vez.

Un aspecto importante a mencionar en el paper es el formato/codificación para video que proponen para mejorar el flujo cuando se hace streaming, que ya desde hace tiempo varias organizaciones han buscado su estandarización y que al parecer a la fecha la norma se quedó en H.264/AVC.
Estos formatos permiten organizar la información contenida en el video de manera que se pueden producir grandes calidades de imagen a menores cantidades de espacio, debido a sus mecanismos de compresión/descompresión por lo que son ideales para aplicaciones para hacer streaming.

Arquitectura del sistema propuesto
Debido a que las aplicaciones de video streaming se ejecutan usando UDP como protocolo de transporte y no TCP, se desaprovechan algunas opciones de este último como el hecho de poder reducir la latencia mediante retransmisión de paquetes, además el protocolo UDP no provee mecanismos para controlar la congestión de la red (TCP si lo hace) y al querer implementar algo para arreglar esto, es necesario que lo que se cree se ejecute en la capa de aplicación del UDP.

Para la estimación del ancho de banda disponible y evitar la congestión de la red, el algoritmo propuesto identifica los cuellos de botella, es decir los puntos en los que la conexión se reduce considerablemente evitando el flujo de la información, con estos embotellamientos detectados procede a disminuir la carga del flujo de información con el fin de no presionar el embotellamiento y causar más caos, y recalcula estos embotellamientos constantemente para decir el tamaño del flujo.

Debido a que la estimación del ancho de banda puede fallar (se calcula el ancho de banda disponible pero la información de este llega retrasada por lo que el flujo de datos a enviar puede no ser el correcto en ese momento), también se propone un mecanismo que actúe en caso de que este error ocurra. La idea es tomar todos los paquetes recibidos y ordenarlos según su prioridad, debido a que el dato de la estimación del ancho de banda puede no ser correcto, estos paquetes se comienzan en enviar de manera que los de mayor prioridad sean los primeros y después los de menor prioridad.
Esto es debido a que el decodificador del video si puede reconstruir la estructura del video a partir de los paquetes con mayor prioridad (lo hace disminuyendo la calidad de video o con breves pérdidas de calidad) y no puede hacer esto partiendo de los paquetes con menos prioridad.
Esto se hace así con el fin de que si el ancho de banda no es el adecuado, solo se pierdan los paquetes de menor calidad y la transmisión del video pueda continuar.

Una imagen de la simulación del sistema con ns-2, donde se espera hacer streaming desde el servidor al cliente, el enlace entre las dos partes de simula utilizando dos routers (R1 y R2) y el cuello de botella será el el menor ancho de banda que produzca alguno de estos dos routers (1200kbit/s). El protocolo de envío de paquetes es UDP.


Los resultados de la simulación anterior comparándolo con los manejos de TCP y UDP se pueden ver en la siguiente gráfica:


Conclusiones
En conclusión se puede decir que la idea de estos tipos es buena, aunque se puede mejorar utilizando un sistema parecido pero ejecutándose en los clientes y que interactúe con el del servidor, de esta manera se puede obtener mayor precisión en los datos para los cálculos de los anchos de banda o el envío de información.

Y aunque a simple vista los resultados pueden ser favorables, un escenario simulado no ofrece con exactitud los mismos factores de un escenario real, por lo que el aplicar este sistema en escenarios reales puede que no arroje los mismos resultados que se muestran anteriormente.

_________________________________________________________________________________
Referencias:
Dieu Thanh Nguyen and Joern Ostermann, "Congestion Control for Scalable Video Streaming Using the Scalability Extension of H.264/AVC", IEEE JOURNAL OF SELECTED TOPICS IN SIGNAL PROCESSING, VOL. 1, NO. 2, AUGUST 2007
Link al paper -> http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04276656


martes, 9 de abril de 2013

Actividad #6 : Topologías de Redes con ns-2

Para esta vez la tarea es tratar de lograr topologías de redes parecidas a alguna forma conocida, formé esta con el simulador de ns-2, conocida como "estrella":


El código de ns-2 para lograr esta topología:



Para formar topologías nuevas, partiendo de la anterior, podemos crear los scripts de ns-2 desde un script de python que reciba unos cuantos parámetros y que posterior los ejecute.

Los scripts se crearían a partir de impresiones de texto archivos de txt con la extensión .tcl de ns-2, su ejecución podría ser con alguna llamada al sistema.

Partiendo de querer crear una topología de estrella, la idea podría ser esta:



La salida de este script es la misma que el script mostrado de ns-2, solo con cambios en el numero de nodos que se manejan.

Para crear otras topologías se pueden tomar como referencias otros patrones en la forma de conectar los nodos o inlcusive conectar todos los nodos de manera aleatoria a ver que sale :P.