MININET Y RYU (Análisis de Tráfico - Streaming) - Removed

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

Ryu

Para esta práctica vamos a utilizar python3-pip, junto a la versión developer de


python, adicionalmente se instala build-essential, el cual es un paquete que instala
en el sistema una serie de paquetes necesarios para la compilación de paquetes
Debian necesarios para un correcto funcionamiento.

Posteriormente se instala python3-eventlet, eventlet es principalmente una biblioteca


para la concurrencia de red, que se centra en la lógica de ejecución de código, junto
a este se instala python3-routes, routes es una reimplementación de Python del
sistema de rutas de Rails para asignar direcciones URL, también se instala
python3-webob el cual proporciona objetos para solicitudes y respuestas HTTP,
finalmente se instala python3-paramiko el cual brinda la implementación del
protocolo SSHv2, proporcionando la funcionalidad tanto de cliente como de servidor.
Una vez instalados estas librerías, procedemos a instalar ryu con el comando “sudo
pip install ryu”

Al intentar hacer la instalación nos presenta un error, el cual se soluciona con ayuda
de un foro, el cual sugiere instalarlo de la siguiente forma: “python3 -m pip install -U
ryu”
Solución.
https://flutterq.com/command-python-setup-py-egg_info-failed-with-error-code-1-in-t
mp-pip-build-rnhk49o3-opencv-python/
Topología árbol

Implementamos la topología de árbol con el comando “sudo mn --topo=tree,


fanout=3, depth=3”, el cual crea 27 host, y 13 switches, cada 3 hosts se conecta a 1
switch, inicialmente sin haber definido el ancho de banda, y ninguna métrica.

Para realizar una prueba inicial se conecta a simple_switch con ryu, se puede
observar que termina el proceso y no es posible mantener la conexión.

Nota: termina el proceso → Error


Solución
Se realiza la conexión con simple_switch por medio de ryu

Se implementa la topología de la siguiente manera: “sudo mn --topo=tree, fanout=3,


depth=3 --lin tc, bw= 50, delay=10 --mac --controller=remote, ip=10.0.2.15” donde
se especifica la ip de la máquina para poder realizar la conexión satisfactoria con
ryu, usando controlador remoto y para este caso determinando un ancho de banda
de 50 y un delay de 10.

Abrir los nodos, por ejemplo el h1:


Una vez realizada la topología correctamente enlazada, se procede a abrir una
terminal para los host 1, 25, 26 y 37 con el comando “xterm h1 h25 h26 h27” como
se muestra a continuación:
En el la terminal del host 1, abrimos vlc con el comando “vlc-wrapper &”, se
selecciona la pestaña medios y se elige la opción emitir, mostrando lo que indica la
siguiente imagen:

Se procede a agregar el video que será transmitido entre el host 1 conectado en el


switch 3, hacia los hosts 25, 26 y 27 conectados en el switch 13, para realizar las 32
muestras requeridas, se requiere un vídeo de aproximadamente 6 minutos, debido a
que cada muestra será registrada cada 10 segundos.
Adicionado el vídeo, se le da en la opción de emitir, como se muestra a
continuación:
Para el tipo de transmisión que necesitamos realizar, en este caso un video en
formato mp4, se selecciona RTP / MPEG Transport Stream

Se selecciona el formato Video - H264 + mp3 (MP4) como se muestra a


continuación:
Se deben especificar los host a los que se les va a transmitir el vídeo, la forma en
identificarlos es buscando la ip en la terminal de cada host, con ayuda del comando
ifconfig, esta dirección ip es la que se pondrá junto al puerto por defecto 5004.

En este punto ya es posible transmitir, para facilidad en la lectura de las medidas, se


procede a configurar la recepción en los hosts h25, h26 y h27 antes de transmitir.
Es importante darle permiso de super_usuario al programa vlc, para ello se utiliza el
siguiente comando:
$ sudo sed -i ‘s/geteuid/getppid/’ /usr/bin/vlc
Para realizar la configuración en el programa vlc de cada host, se utiliza la ruta
rtp://@:5004 para especificar el puerto por el que se va a recibir la transmisión como
se muestra a continuación:

Al darle emitir desde el vlc en el host 1, se realiza la transmisión correctamente.


Análisis de tráfico

Como primera medida, se realiza el análisis de los paquetes transmitidos para la


topología requerida, creada con el comando “sudo mn --link
tc,bw=30,delay=10ms,loss=1 --topo=tree,fanout=3,depth=3 --controller=remote,
ip=192.168.39.110 --mac --switch=ovsk,protocols=OpenFlow13” Con el cual se
pueden variar fácilmente los parámetros para el ancho de banda, el delay, los
paquetes perdidos, con las variables bw, delay y loss, respectivamente.
Se comprueba que la transmisión se realiza correctamente, teniendo como
resultado paquetes perdidos que en su mayoría están cercanos al estipulado, con
una diferencia de 3 por encima y por debajo.
Se realiza el cálculo del packet loss de la siguiente manera:

𝑝𝑎𝑐𝑘𝑒𝑡 𝑙𝑜𝑠𝑠 = 𝑏𝑦𝑡𝑒𝑠 𝑡𝑥 − 𝑏𝑦𝑡𝑒𝑠 𝑟𝑥 / 𝑏𝑦𝑡𝑒𝑠 𝑡𝑥

Pruebas modificando el video


video 144p
video 240p:

video 360p:

video720p:
Se realizan 32 muestras por cada video, para ellos se utiliza traffic monitor,
utilizando el siguiente código:
“ryu-manager simple_monitor_13.py 2> /home/jack/test_monitor_720p.txt”
Para el cálculo del Throughput se utiliza la siguiente fórmula:

𝑇ℎ𝑟𝑜𝑢𝑔ℎ𝑝𝑢𝑡 = 𝑏𝑦𝑡𝑒𝑠 𝑡𝑥 − 𝑏𝑦𝑡𝑒𝑠 𝑟𝑥 / 𝑝𝑒𝑟𝑖𝑜𝑑𝑜

En donde el periodo es el tiempo en el que se toma cada muestra, para este caso
son 10 segundos.

Se aprecia en la gráfica que la tasa de transferencia efectiva aumenta


proporcionalmente con la calidad del video, comprobando de esta manera que las
velocidades de bits más altas generalmente se traducen en video y audio de mayor
calidad, por tanto entre mayor calidad de video, más alto será el throughput
necesario para su correcta transmisión.
La gráfica comprueba que los paquetes perdidos se ven afectados según la calidad
del vídeo, esto es debido a que el ancho de banda se mantiene constante con un
valor de 30, haciendo transmisión con vídeo de hasta 100Mb en 790p para poder
apreciar el efecto.

Pruebas con cambios de delay

Se realizan 32 muestras para cada variación del delay como se muestra a


continuación:
Al graficar los datos perdidos con respecto a los cambios del delay, se comprueba
que al aumentar el delay, afecta al packet loss, debido a que al presentar ese
retraso en el envío del paquete, estos llegan a un punto en que se pierden en
algunos envíos de los paquetes.Estás pérdidas no son tan drásticas ya que gran
parte de los paquetes logran llegar correctamente a pesar de presentar el retraso.

Packet loss
Visualmente se comprueba que el packet loss afecta considerablemente la
transmisión del vídeo llegando a perder gran parte de la imagen al tener un 5% de
pérdidas.
La gráfica del packet loss con respecto al throughput, indica que al tener pérdidas
de los paquetes, la transmisión depura en velocidad generando un aumento en el
throughput.

Error con Delay Monitor for Software-Defined Networking in Ryu:


El error que se puede determinar es debido a que el archivo delay_monitor.py está
hecho en python 2, debido a que para esta práctica se usa python 3, modificamos el
archivo para corregir el error en el print de la siguiente manera:

Corregido este error de compatibilidad, se nos presenta un nuevo error el cual no


fue posible corregir:
Podemos observar que no reconoce el módulo thread, por tanto no se puede usar la
función start_new_thread el cual inicia un nuevo hilo y retorna su identificador.

Referencias
https://shantoroy.com/sdn/sdn-mininet-ryu/
https://programmerclick.com/article/92801405191/
https://ryu.readthedocs.io/en/latest/developing.html
https://ryu.readthedocs.io/en/latest/writing_ryu_app.html

También podría gustarte