martes, 16 de abril de 2013

[Lab RT] Actividad 7: Medidas de desempeño y métodos de generación de tráfico

La tarea de esta semana constitió en:
  • Investigar sobre los métodos de generación de tráfico en el simulador NS-2 o NS-3, cómo  generarlo y cómo modificar sus propiedades.
  • Cómo se pueden monitorear las medidas de desempeño en la red simulada.

Seguimos utilizando NS-2, con algunas mejoras al generador de topologías de la entrada anterior.

Generación de tráfico


La generación de tráfico en NS-2 entra dentro de la clasificación Application Objects. Un Application Object puede ser de 2 tipos, una aplicación simulada o un generador de tráfico.

Lo que nos interesa son, justamente los generadores de tráfico.
Los objetos generadores de tráfico, generan tráfico de 4 tipos principales, y con una pequeña modificación, hasta 5 tipos diferentes, cada uno con sus propiedades y los cuales se describen a continuación.


Exponencial (Application/Traffic/Exponential)

Los objetos de tráfico exponencial, generan tráfico que puede "encenderse" o "apagarse" (comenzar y detenerse) por ciertos periodos de tiempo.
Durante los periodos de "encendido" los paquetes son generados en forma de ráfagas constantes. Durante los periodos de "apagado", pues ningún tipo de tráfico es generado.
Los periodos de encendido y apagado, y sus tiempos de duración, son tomados de acuerdo a una distribución exponencial.

Los parámetros de configuración de éste tipo de tráfico son:
  • PacketSize_ : El tamaño del paquete a generar, constante.
  • burst_time_ : Tiempo promedio para el estado "encendido" del tráfico.
  • idle_time_ : Tiempo promedio para el estado "apagado" del tráfico.
  • rate_ : Velocidad de transferencia durante los tiempos de "encendido".
set e [new Application/Traffic/Exponential] $e set packetSize_ 210 $e set burst_time_ 500ms $e set idle_time_ 500ms $e set rate_ 100k

Poisson:

Configurando de forma especial el generador exponencial se puede obtener un generador que tome la forma de la distribución de Poisson.
Estableciendo la variable burst_time_ a cero y la variable rate_ a un valor demasiado alto se obtiene el resultado esperado.
Adicionalmente, el valor entre llegadas de paquetes es la suma de la tasa de transferencia (rate_) y el valor aleatorio correspondiente al parámetro idle_time_ . Para hacer el primero valor de la suma muy pequeño, el parámetro burst_time_ debe ser muy alto, de tal forma que el tiempo de transmisión sea despreciable comparado con los tiempos típicos de espera (idle_times).


Pareto (Application/Traffic/Pareto)

Genera tráfico con las mismas caracteristicas que el generador exponencial, la diferencia es que éste toma la forma de la distribución de Pareto.
Los parámetros de configuración son:
  • PacketSize_ : Tamaño constante de los paquetes generados.
  • burst_time_ : Tiempo promedio para el estado "encendido" del tráfico.
  • idle_time_ : Tiempo promedio para el estado "apagado" del tráfico.
  • rate_ : Velocidad de transferencia durante los tiempos de "encendido".
  • shape_ : Parámetro propio de la distribución.

set p [new Application/Traffic/Pareto] $p set packetSize_ 210 $p set burst_time_ 500ms $p set idle_time_ 500ms $p set rate_ 200k $p set shape_ 1.5

CBR (Application/Traffic/CBR)

El tipo de tráfico genera ráfagas constantes de paquetes a una velocidad constante, es útil para simular aplicaciones multimedia como stream de música o videos. Por lo general se utiliza bajo el protocolo UDP.
Los parámetros de configuración son:
  • PacketSize_ : El tamaño del paquete a enviar, constante.
  • rate_ : La tasa de transferencia.
  • interval_ : El intervalo de tiempo entre los paquetes.
  • random_ : Si se desea introducir ruido aleatorio en los tiempos de salida.
  • maxpkts_ : La cantidad máxima de paquetes a enviar, por ejemplo, en videostream, el tamaño del video a ver.
Los parámetros rate_ e interval_ son mutualmente excluyentes, es decir, en algunos scripts de puede configurar el intervalo en lugar de la tasa de transferencia o al revés  para cualquier simulación algunos de los 2 parámetros debe ser especificado.
set cbr [new Application/Traffic/CBR] $cbr set packetSize_ 48 $cbr set rate_ 64Kb $cbr set random_ 1

Trace (Application/Traffic/Trace)

Los objetos de éste tipo son utilizados para generar tráfico a partir de un archivo de trazado.
Se debe adjuntar el archivo de trazado a este objeto, el cual especifica los datos del tráfico ya existentes.
Un archivo consiste en una serie de lineas con un formato y largo fijos. Cada línea o registro consiste en campos de 2*32 bit.
El primero indica el intervalo hasta el cual de podrá generar el siguiente paquete. El segundo indica el largo del siguiente paquete en bytes.

No hay parámetros de configuración para éste generador.


FTP over TCP (Application/FTP)

Como ya sabemos, se trata de tráfico que simula la transferencia de archivos bajo el modelo de cliente servidor.
Este tipo de tráfico es útil por ejemplo, para simular la descarga o subida de archivos, o para simular la transferencia de videos desde Youtube (desde que youtube utiliza TCP para la transferencia de videos.)

No hay parámetros de configuración para éste generador.
set ftp [new Application/FTP]
$ftp attach­agent $tcp0



Telnet over TCP (Application/Telnet)
Con éste tipo de tráfico se pueden simular sesiones de línea de comandos, no generan paquetes de un tamaño muy grande pero son útiles para simular tráfico real.

No hay parámetros de configuración para éste generador.
set telnet [new Application/Telnet]
$telnet attach­-agent $tcp0


Medidas de desempeño

Para analizar el rendimiento de nuestra red podemos analizar los archivos de salida de NS-2, estos archivos son los archivos de visualización en Network Animator (*.nam) y los archivos de trazas o trazado (*.tr)

Los archivos de trazas estan separados por espacios, y siguien el siguiente formato:

tipo de evento
tiempo
Nodo inicial
Nodo final
Tipo de tráfico
Tamaño del paquete
+,-,r,h,d
1.15
10
0
TCP,UDP
1000

Los archivos de nam tienen flags para separar los elementos utilizando el siguiente formato:

tipo de eventotiempoNodo inicialNodo finalTipo de tráficoTamaño del paquete
+,-,r,h,d-t 1.15-s 10-d 0-p TCP,UDP-e 1000

Los tipos de eventos pueden ser:

  • + : archivo en cola
  • -  : paquete sacado de la cola
  • r : paquete recibido
  • h : paquete enrutado
  • d : paquete desechado (dropped)

Se pueden utilizar scripts de AWK que nos ayudan a leer dichos archivos y generar las estadísticas correspondientes de latencia, retraso, jitter y throughput.

Escribi un ejemplo de archivo para calcular el rendimiento de la red, los paquetes enviados y recibidos:

Prueba


Las mejoras al código de generación de topologías fue agregar redes un poco más reales, entonces ayudandome un poco con la libreria de python networkx pude generar redes en forma de grafos tipo small-world y scale-free

Solo se agregaron las siguientes lineas:

Después sigue la generación de tráfico, para ello implemente un módulo sencillo que lee un archivo que contiene el tráfico en la red con el siguiente formato:

n1,n2,1.0,4.0,tcp,ftp,0 n1,n2,1.0,4.0,tcp,tel,0 n1,n2,1.0,4.0,udp,cbr,700;1000 n1,n2,1.0,4.0,udp,exp,310;500;500;1000 n1,n2,1.0,4.0,udp,par,500;300;100;1000

Los elementos de cada línea del archivo son:

  • Nodo inicial
  • Nodo final
  • Tiempo de inicio del stream
  • Tiempo final del stream
  • Protocolo
  • Generador
  • Parámetros propios de cada generador (ver descripciones arriba)

Así, al leer el archivo se van generando las topologías y sus conexiones, después se genera el tráfico.
Es necesario conocer la topología para generar el tráfico, es decir, cuantos nodos son para introducir tráfico solo a conexiones existentes.

Cabe recordar que el script de python genera el script TCL de la simulación.

El método es un poco simple, pero cumple para generar el tráfico de distintos tipos, la función encargada de generar el tráfico es la siguiente:



En el siguiente video se puede ver como se programó el nodo 10 como "servidor" enviando tráfico UDP a los demás nodos, además se programo que el flujo de datos siguiera la distribución Exponencial y Pareto por lo que se puede ver como los nodos se conectan y desconectan repentinamente, siguiendo estas distribuciones. La topología es una malla que conecta 4 redes tipo scale-free.



Calculando el rendimiento:



Referencias

1 comentario:

  1. Muy bien. Checa un poco más sobre las medidas de desempeño en algunas de las tareas de los compañeros para tener muchas medidas en la tarea siguiente. 7 pts.

    ResponderEliminar