IMPLEMENTACIÓN DE UN GENERADOR DE TOPOLOGÍAS

Anuncio
IMPLEMENTACIÓN DE UN GENERADOR DE TOPOLOGÍAS ALEATORIAS EN
EL EMULADOR DE RED MININET
Rosa Alejandra García Grisales
Diego Fernando Hernández Ossa
Juan Carlos Agudelo Calderón
Universidad Católica De Pereira
Facultad De Ciencias Básicas E Ingeniería
Ingeniería De Sistemas Y Telecomunicaciones
Pereira, 2015
IMPLEMENTACIÓN DE UN GENERADOR DE TOPOLOGÍAS ALEATORIAS EN
EL EMULADOR DE RED MININET
Autores: Rosa Alejandra García Grisales
Juan Carlos Agudelo Calderón
Rosa Alejandra García Grisales
Director del Proyecto: Ingeniero Néstor Álzate Mejía
Trabajo de grado para optar al título de profesional en Ingeniería en Sistemas y
Telecomunicaciones
Universidad Católica De Pereira
Facultad De Ciencias Básicas E Ingeniería
Ingeniería De Sistemas Y Telecomunicaciones
Pereira, 2015
AGRADECIMIENTOS
A mi padre, madre, hermano por su apoyo incondicional y ser el motor para
alcanzar este logro
Al ingeniero Néstor Álzate por su paciencia, acompañamiento y enseñanza.
Rosa Alejandra García Grisales
A mi familia por el apoyo incondicional, por el acompañamiento y por la motivación
para lograr este sueño.
Al ingeniero Néstor Álzate por su gran participación, ayuda y acompañamiento a lo
largo del proyecto.
Diego Fernando Hernández Ossa
A mi esposa e hijos, que han aportado su espacio y tiempo como apoyo
incondicional para lograr este objetivo.
A nuestro director, ingeniero Néstor Álzate, que nos abre la mente para afrontar y
entender el cambio inminente de estas nuevas tecnologías.
Juan Carlos Agudelo Calderón
RESUMEN
La arquitectura de las redes actuales están limitadas, son costosas y complejas de
administrar, las Redes Definidas por Software (SDN por sus siglas en inglés) nacen
para innovar en las redes, su elemento clave es la separación de los datos y el
plano de control, elimina el plano de control del hardware de red e implementa en
software en su lugar, lo que permite el acceso virtual y, como resultado, hace que
la administración de red sea mucho más dinámica, flexible, adaptable a los
requisitos de la red, además de permitir la rápida configuración y reconfiguración
para mejorar la utilización de recursos y las actuaciones de servicios.
El presente proyecto contribuye a la comunidad académica, especialmente que se
encuentra compartiendo sus avances en GitHub1 y a los estudiantes de la
Universidad Católica de Pereira que están realizando su trabajo de grado en el tema
de las SDN, proponiendo la solución de un Generador de Topologías Aleatorias en
la API del emulador Mininet, que es una aplicación desarrollada para investigación,
practica, pruebas y desarrollo de prototipos SDN en tiempo real.
Palabras Clave: Redes Definidas por Software, Mininet, Generador de Topología.
1
Git Hub plataforma de desarrollo colaborativo de software para alojar proyectos y contribuir a otros
desarrollos.
4
ABSTRACT
The architecture of today's networks are limited, they are expensive and complex to
administer networks defined by Software (SDN for its acronym in English) born to
innovate in networks, the key element is the separation of data and control plane
eliminates the control plane and network hardware implemented in software in place,
allowing virtual access and as a result, makes network management is much more
dynamic, flexible, adaptable to the requirements of the network, In addition to
allowing quick configuration and reconfiguration to improve resource utilization and
performance of services.
This project contributes to the academic community, especially that is sharing its
progress on GitHub and students of the Catholic University of Pereira who are doing
their job grade in the subject of the SDN, proposing a solution to a Topology Builder
Random API emulator in Mininet, which is an application developed for research,
practice, testing and prototyping SDN in real time.
Keywords: software-defined networking, Mininet, Topology Generator.
5
TABLA CONTENIDO
TABLA CONTENIDO ...................................................................................................................................... 6
TABLA DE ILUSTRACIONES............................................................................................................................ 8
LISTADO DE TABLAS ................................................................................................................................... 11
1. INTRODUCCION ...................................................................................................................................... 12
2. FORMULACIÓN DEL PROBLEMA ............................................................................................................. 14
3. OBJETIVOS.............................................................................................................................................. 15
3.2 OBJETIVO GENERAL................................................................................................................................. 15
3.3 OBJETIVOS ESPECÍFICOS .......................................................................................................................... 15
4. JUSTIFICACIÓN ....................................................................................................................................... 16
5. METODOLOGIA ...................................................................................................................................... 17
6. MARCO CONTEXTUAL ............................................................................................................................ 18
7. ANTECEDENTES ...................................................................................................................................... 21
7.2 MARCO CONCEPTUAL ............................................................................................................................. 22
7.2.1 SDN .................................................................................................................................................. 22
7.2.2 OpenFlow ........................................................................................................................................ 26
Switch Openflow ...................................................................................................................................... 26
Protocolo Openflow ................................................................................................................................. 28
Controladores............................................................................................................................................ 28
7.2.3 Mininet ............................................................................................................................................ 31
API Mininet ............................................................................................................................................... 36
7.2.4 Modelo de Grafo Aleatorio .............................................................................................................. 39
7.2.9 Generadores de Topologías ............................................................................................................. 45
8. IMPLEMENTACION ................................................................................................................................. 50
8.1 LIBRERIAS INSTALADAS PARA EJECUTAR LA TOPOLOGIA WAXMAN ...................................................... 51
8.3 VALIDACIÓN ............................................................................................................................................ 52
8.4 CALCULO DEL ÁREA ................................................................................................................................. 53
8.5 NODOS .................................................................................................................................................... 54
6
8.6 DISTRIBUCIÓN DE NODOS ....................................................................................................................... 54
8.7 DEFINICIÓN DE DISTANCIAS .................................................................................................................... 55
8.8 DEFINICIÓN DE PROBABILIDADES ........................................................................................................... 56
8.9 ASIGNACIÓN DE HOST A LOS N NODOS .................................................................................................. 57
8.9.2 Importación de librerías de Mininet. ............................................................................................... 57
8.10 INCLUSIÓN EN LA API ............................................................................................................................ 60
8.11 RESULTADO ........................................................................................................................................... 61
8.12 OBSERVACIONES ................................................................................................................................... 62
9. PRESUPUESTO ........................................................................................................................................ 63
10. CRONOGRAMA ..................................................................................................................................... 65
11. CONCLUSIONES Y RECOMENDACIONES ................................................................................................ 66
REFERENCIAS ............................................................................................................................................. 67
BIBLIOGRAFIA ............................................................................................................................................ 73
ANEXO 1..................................................................................................................................................... 79
GUÍA DE INSTALACIÓN MININET................................................................................................................... 79
INSTALACIÓN NATIVA DE MININET EN UBUNTU 14.04. ........................................................................... 79
LISTADO DE COMANDOS UTILES EN MININET .............................................................................................. 81
COMANDOS PARA GENERAR TOPOLOGIAS .............................................................................................. 81
COMANDOS DE PRUEBAS ......................................................................................................................... 83
COMANDOS FUNCIONALES ...................................................................................................................... 87
INSTALACION DE LIBRERÍAS Y PAQUETES REQUERIDOS ............................................................................... 89
EJECUCIÓN ARCHIVO PYTHON ...................................................................................................................... 92
CREAR Y EDITAR TOPOLOGÍAS DESDE EL EDITOR NANO EN UBUNTU .......................................................... 94
CONTROLADOR POR DEFECTO DE MININET POX.......................................................................................... 95
ANEXO 2..................................................................................................................................................... 96
CÓDIGO PYTHON TOPOLOGÍA WAXMAN.PY ................................................................................................ 96
7
TABLA DE ILUSTRACIONES
Ilustración 1. Arquitectura lógica de las redes definidas por software .................... 24
Ilustración 2 Switch Openflow ................................................................................ 27
Ilustración 3. Funciones de Switch......................................................................... 28
Ilustración 4. Esquema básico de un controlador de red ....................................... 30
Ilustración 5. Diagrama de flujo de las funciones de un controlador ...................... 31
Ilustración 6. Dispositivo virtual de Mininet ............................................................ 32
Ilustración 7. Topologia de Red simulada .............................................................. 35
Ilustración 8. Ejemplo simulacion Mininet .............................................................. 36
Ilustración 9. Nodos y enlaces ............................................................................... 37
Ilustración 10. Objeto de red .................................................................................. 38
Ilustración 11. Plantilla de topología ...................................................................... 38
Ilustración 12. Modelo de Waxman ........................................................................ 40
Ilustración 13. Modelo Erdos-Renyi. ..................................................................... 41
Ilustración 14. Modelo Barabasi-Albert .................................................................. 43
Ilustración 15. Modelo Watts-Strogatz ................................................................... 44
Ilustración 16. Interfaz de usuario para la versión Bessie ...................................... 47
Ilustración 17. NEM................................................................................................ 48
Ilustración 18. Grafica de Brite ............................................................................... 49
Ilustración 19. Captura de pantalla IGen con una topología entre dominios .......... 50
Ilustración 20. Librerías importadas ....................................................................... 51
Ilustración 21. Definición de la Función Waxman .................................................. 52
Ilustración 22. Validación de ingreso de datos ....................................................... 53
Ilustración 23. Tupla Límite .................................................................................... 53
Ilustración 24. Calculo área ................................................................................... 53
Ilustración 25. Calculo de nodos ........................................................................... 54
8
Ilustración 26. Distribución de nodos ..................................................................... 55
Ilustración 27. Distribución en los ejes X y Y ........................................................ 55
Ilustración 28. Coordenadas del Vector Fuente: Elaboración propia ..................... 56
Ilustración 29. Matriz de distribución ...................................................................... 56
Ilustración 30. Matriz de probabilidades ................................................................. 57
Ilustración 31. Matriz de adyacencia ...................................................................... 57
Ilustración 32.Definición de la clase ....................................................................... 58
Ilustración 33. Importación de la clase topo ........................................................... 58
Ilustración 34. Definición nodos y asignación host................................................. 59
Ilustración 35. Definiendo Waxman como clase tipo Topo .................................... 59
Ilustración 36. Ejemplo ejecución topología ........................................................... 60
Ilustración 37. Otro Ejemplo ejecución topología ................................................... 60
Ilustración 38. Ejecución Waxman.py .................................................................... 61
Ilustración 39. Cronograma .................................................................................... 65
Ilustración 40. Terminal Ubuntu ............................................................................. 79
Ilustración 41. Instalar Mininet desde terminal ....................................................... 80
Ilustración 42. Instalar Mininet ............................................................................... 80
Ilustración 43. sudo mn --test pingall ..................................................................... 80
Ilustración 44. sudo mn .......................................................................................... 81
Ilustración 45. sudo topo single.............................................................................. 81
Ilustración 46. sudo topo linear .............................................................................. 82
Ilustración 47. sudo topo tree ................................................................................. 82
Ilustración 48. link .................................................................................................. 83
Ilustración 49. h1 ping h2 ....................................................................................... 83
Ilustración 50. pingall ............................................................................................. 83
Ilustración 51. pingpair ........................................................................................... 84
Ilustración 52. iperf ................................................................................................. 84
Ilustración 53. nodes .............................................................................................. 84
Ilustración 54. dump............................................................................................... 84
9
Ilustración 55. net................................................................................................... 85
Ilustración 56. eof................................................................................................... 85
Ilustración 57. s1 arp .............................................................................................. 85
Ilustración 58. h1 if config ...................................................................................... 86
Ilustración 59. s1 ifconfig ....................................................................................... 86
Ilustración 60. h1 ps ............................................................................................... 87
Ilustración 61. s1 ps ............................................................................................... 87
Ilustración 62. exit .................................................................................................. 87
Ilustración 63. help ................................................................................................. 88
Ilustración 64. sudo su ........................................................................................... 88
Ilustración 65. Instalación librería FNSS ................................................................ 89
Ilustración 66. Instalación Wireshark ..................................................................... 89
Ilustración 67. Instalación librerías ......................................................................... 90
Ilustración 68. Instalación librería matpotlib ........................................................... 91
Ilustración 69. Ingreso a ruta desde la API ............................................................ 92
Ilustración 70. Abrir archivo python Waxman.py .................................................... 92
Ilustración 71. Ejecución Waxman.py .................................................................... 93
Ilustración 72. Vista ejecución archivo Waxman.py ............................................... 93
Ilustración 73. Editor nano ..................................................................................... 94
Ilustración 74. Modificación de archivo desde nano............................................... 94
10
LISTADO DE TABLAS
Tabla 1. Equipos Cómputo .................................................................................... 63
Tabla 2. Costos Administrativos............................................................................. 63
Tabla 3. Presupuesto de Inversiones ..................................................................... 64
11
1. INTRODUCCION
Las arquitecturas de las redes actuales, fueron pensadas para que el control,
enrutamiento y la señalización de la red, fuesen parte de una estructura de gestión
estática, jerárquica y dependientes de la infraestructura de red. Una de sus grandes
dificultades sigue siendo la imposibilidad de realizar cambios de modo dinámico, en
función de requerimientos de tráfico o servicios, aumentando significativamente la
complejidad, el costo de administración y gestión de la red. La red tradicional de
datos ha estado en gran medida centrada en hardware. Sin embargo, en los últimos
años la adopción de dispositivos de red virtualizados y el interés creciente han
liderado un movimiento hacia una mayor dependencia de la funcionalidad de red
basada en el software.
Para superar las limitaciones de las redes tradicionales han surgido herramientas
como Mininet2 y Organizaciones sin ánimo de lucro como la ONF (Open Networking
Foundation) que están apoyando el desarrollo de las SDN, que permiten realizar
control, administración y ajustes dinámicos de la red, su inteligencia está
centralizada en los controladores, que mantienen una visión global de la red,
controla y configura los nodos para dirigir correctamente los flujos de tráfico y decide
el mejor camino, optimiza los recursos de red muy rápidamente a través de
aplicaciones dinámicas y automatizadas, que podemos programar nosotros mismos
ya que no dependen del software del fabricante. Las instrucciones son
proporcionadas por los controladores en lugar de múltiples dispositivos,
proveedores específicos y protocolos.
Cómo contribución a las SDN, nace la idea de implementar una herramienta que
realice la creación de topologías de una manera más ágil ya que la configuración de
un escenario completo de red y la aplicación en un simulador o emulador tardaría
demasiado tiempo y es muy propenso a errores. Este proyecto permite que se
puedan realizar estudios de protocolos de comunicaciones, estudiar
comportamientos de las topologías y así mismo desarrollar nuevos servicios. En el
mercado existen diferentes generadores de topologías que ofrecen diferentes
servicios todos enfocados a la reducción de tiempo pero ninguno de ellos se ha
desarrollado sobre Mininet.
2
Mininet: Emulador de Redes Definidas por Software
12
Para el éxito de este proyecto se tuvo que llevar a cabo un proceso de consulta
amplio, que incluye estudios en el lenguaje de programación Python, práctica de las
funcionalidades de la API Mininet, modelos de generadores de topologías
aleatorias, a partir del cual se determina implementar el Modelo Waxman, un modelo
de grafos aleatorios para modelar topologías de red y tiene el propósito de evaluar
los algoritmos de enrutamiento(Waxman, 1988).
El presente documento tiene plasmadas las bases teóricas y el desarrollo del
Generador de Topologías Aleatorias propuesto con el que se pretende realizar un
aporte importarte a la comunidad académica para próximos desarrollos en SDN.
13
2. FORMULACIÓN DEL PROBLEMA
Durante mucho tiempo, las tecnologías de red han evolucionado a un menor ritmo
en comparación al desarrollo de aplicaciones y servicios ofrecidos por las redes.
Los dispositivos de red como switches y routers se han desarrollado
tradicionalmente por cada fabricante, quienes diseñan su propio firmware y otros
softwares para operar y administrar sus propios equipos, cerrando la posibilidad de
programar nuevas funciones. Esto dificulta el avance de las innovaciones en las
redes, causando un aumento en la gestión y los costos de operación. Por lo tanto
las comunidades de investigación y líderes del mercado industrial han colaborado
con el fin de repensar el diseño de las redes tradicionales, trayendo como resultado
las Redes Definidas por Software.
Para apoyar la práctica e investigación de funciones, desarrollos y protocolos,
actualmente existen emuladores de red que están permitiendo evaluar el
rendimiento de una red de manera eficiente y permiten realizar pruebas de nuevos
desarrollos. El emulador Mininet es un banco de pruebas de red sin costo y
fácilmente configurable, y hasta ahora es la herramienta más conocida de apoyo a
la investigación de las SDN. (Wang, 2014)
Debido a que en las redes actuales son simples y en Mininet es posible personalizar
topologías de red, la propuesta de este proyecto es integrar a la API del emulador,
un generador de topologias aleatorio que ayudará a realizar pruebas e
investigaciones de manera más ágil.
14
3. OBJETIVOS
3.2 OBJETIVO GENERAL
Implementar un generador de topologías aleatorias con la API de Mininet, que
facilite la experimentación e investigaciones en el campo de las Redes Definidas
por Software.
3.3 OBJETIVOS ESPECÍFICOS
 Estudiar y seleccionar un algoritmo para la generación de topologías
aleatorias.
 Analizar los componentes y funcionalidades principales de la API Mininet
para la adaptación del algoritmo seleccionado.
 Programar en el lenguaje Python el algoritmo seleccionado en la API MiniNet.
 Documentar el desarrollo e implementación del software propuesto.
15
4. JUSTIFICACIÓN
El impacto que tienen las SDN en industria y en la sociedad, la red estática de hoy
puede convertirse en una plataforma de prestación de servicios amplia capaz de
responder rápidamente a las necesidades cambiantes del negocio, de los usuarios
finales, y del mercado. La necesidad de una nueva arquitectura de red, la explosión
de los dispositivos móviles y de la información, la virtualización de servidores, y
advenimiento de servicios en la nube son algunas de las tendencias que impulsan
la creación de redes en la industria para reexaminar las arquitecturas de red
tradicionales. (Foundation, Open Networking Foundation, 2012).
Existen varios generadores de topología a disposición de la comunidad
investigadora. Algunos de ellos tienen como objetivo principal generar topologías
aleatorias, otros pretenden imitar las propiedades jerárquicas de Internet. Al
seleccionar uno para un estudio en particular depende de varios
factores, incluyendo la naturaleza del estudio a realizar, el tamaño de la topología,
y determinar características de las topologías (por ejemplo, la estructura jerárquica
o propiedades de conectividad, tales como el grado de distribución de los nodos).
Con la motivación de apoyar el avance de las SDN, surge la idea de la
implementación de un generador de topologías aleatorias, aunque el emulador
Mininet permite crear modelos personalizadas, genera redes simples las cuales
limitan la investigación. La idea desarrollada en este proyecto brindará una
herramienta que generará topologías aleatoriamente permitiendo de una manera
más ágil la generación, de tal manera que facilitará su estudio, así como realizar
pruebas, implementar nuevos servicios, evolucionar nuevos protocolos, entre otros.
Los generadores de topologías proporcionan capacidades para analizar las
topologías de conjuntos de datos, asignar parámetros de configuración deseados,
proporcionan métodos para configurar la red y parámetros del tráfico(Saino, A
Toolchain for Simplifying Network Simulation Setup, 2014).
16
5. METODOLOGIA
Para el desarrollo del proyecto, se tomó como fortaleza las habilidades adquiridas,
capacitación en lenguajes, asesorías, recursos tecnológicos obtenidos. Sin
embargo, cabe anotar que para lograr los objetivos se tuvo grandes dificultades
debido que el sistema es novedoso. La mayor parte de la información se encuentra
en inglés y la poca documentación en español son traducciones del texto original.
A continuación se enumeran los pasos a seguir para el cumplimiento de los
objetivos:
1. Recopilación de información

Consultar y estudiar los algoritmos para la generación de topologías
aleatorias, generadores de topologías aleatorias existentes, tutoriales,
documentación del lenguaje de programación Python y funcionalidades
principales de la API Mininet.
2. Implementación y pruebas

Desarrollar el código con el lenguaje de programación Pyhton en la API de
Mininet y pruebas.
3. Documentación del Proyecto

Plasmar la conceptualización obtenida a lo largo del proyecto y documentar
el desarrollo.
17
6. MARCO CONTEXTUAL
La ingeniería de hardware sigue evolucionando y avanza a pasos agigantados, la
capacidad de hacer el mejor uso de la infraestructura de red se ve limitada por las
normas y protocolos rígidos o exclusivos de cada fabricante.
SDN está revolucionando la creación de redes en la industria, ofreciendo una
multitud de opciones a todos los interesados: empresarios, operadores de redes,
proveedores de servicios, empresas en general, investigadores y estudiantes.
Las Universidades a nivel mundial están investigando sobre Redes Definidas por
Software, de tal manera que están ofreciendo cursos de capacitación en SDN,
debido a que la industria de las telecomunicaciones no está preparada para recibir
esta revolución de las redes; enfocando a los profesionales de las TI en este nuevo
campo con una visión más amplia para aprovechar las ventajas que ofrecen las
redes programables.
Este proyecto está dirigido y desarrollado principalmente a la comunidad académica
de la Universidad Católica de Pereira y a la comunidad GitHub que estén
adelantando investigaciones en las SDN.
A continuación universidades que están adelantando estudios sobre las SDN:
Open NetworkingResearch Center- Universidad de Stanford
Como co-inventores de OpenFlow y SDN, abren un laboratorio de investigación que
permitirá a la industria de las comunicaciones construir redes programables que
ofrecen una mayor funcionalidad, más económicas y más fáciles de usar. (ONRC
Research, 2014)
SDN Academy-Universidad de Stanford
Permite a las empresas de redes y profesionales de TI aprovechar al máximo esta
oportunidad. Se formó en torno a un grupo de investigadores de la Universidad de
Stanford que han estado al frente de la iniciativa SDN desde su creación. Ellos han
llevado el movimiento abierto de redes durante los últimos seis años y encabezó el
desarrollo de SDN a través de un sinnúmero de demos, proyectos de código abierto,
tutoriales y prototipos. (SDN Academy, 2015)
18
North Carolina State University-Universidad Carolina del Norte
Se ha asociado con organizaciones regionales para explorar redes definidas por
software (SDN), para llevar a cabo investigaciones. El banco de pruebas se utilizará
para transferir grandes conjuntos de datos de investigación y permitir la
experimentación regional con tecnologías SDN. Con el tiempo, permitirá a las
instituciones construir dinámicamente circuitos de investigación a través de las
redes de múltiples universidades y laboratorios nacionales. (NC State University,
2014)
InCNTRE-Universidad de Indiana
Centro de educación, investigación, capacitación y desarrollo para la adopción de
OpenFlow y otras tecnologías de red (SDN). A través de iniciativas como el
laboratorio de interoperabilidad SDN. (InCNTRE's SDN Interoperability Lab, 2015)
CoSDN - Cognitive Software Defined Networks-Universidad de Luxerburgo
La investigación y la aplicación CoSDN se basa en los conceptos de gestión y
control de la red autónoma. Tal combinación de SDN con los marcos autónomos y
algoritmos cognitivos es una propuesta muy novedosa. A pesar de que ha habido
contribuciones de investigación importantes en el pasado en relación con estas
áreas mencionadas, no hay actualmente actividades de investigación que intenten
combinar estos conceptos, estas áreas sólo se están investigando de forma
individual. Los resultados serán empujados a los organismos de normalización
como la Open Network Foundation (ONF), quien está a cargo de la definición de
protocolo OpenFlow, y el Instituto Europeo de Normas de Telecomunicaciones
(ETSI) para garantizar la compatibilidad y la facilidad de acceso para aplicaciones
futuras. (CoSDN - Cognitive Software Defined Networks, 2015)
Victoria University of Wellington, New Zealand
El Centro de Investigación tiene como objetivo fomentar la colaboración con la
industria, la academia y los estudiantes, así como la promoción de actividades de
investigación y desarrollo independientes que promueven las SDN. Victoria
University, sigue presente en la investigación SDN en Australia, para fomentar la
colaboración con la industria y el mundo académico y las actividades de apoyo que
promuevan la SDN. (Web Home Groups SDN Victoria University, 2015)
19
GITA: Grupo de investigación en Telecomunicaciones Aplicadas-Universidad
de Antioquia
Proyecto Redes definidas por software (SDN) como habilitador de tecnologías de
redes inteligentes para el sector energía eléctrica. (Grupo de Investigacion de la
Universidad de Antiquia, 2015)
20
7. ANTECEDENTES
En la actualidad Mininet no cuenta con la implementación de un generador de
topologías aleatorias, razón por la cual da mayor motivación para realizar este
proyecto. A continuación se cita un proyecto desarrollado en Mininet y algunos de
los generadores de topologías existentes.
Marco Canini (2013) The Frenetic Proyect es una plataforma de controladores
SDN de código abierto. Crearon topologías de red personalizadas en Mininet (Entre
ellas Waxman) proyecto ejecutado desde la línea de comando. (Git Hub, 2013)
Adelstein, Hosch, Richard, & Schwiebert (1988) Bessie permite la generación de
topologías de red tanto interactivo como comandos, asignando nodos de
multidifusión3. Bessie genera redes mediante la colocación de puntos al azar en una
rejilla de dos dimensiones y luego utiliza funciones de probabilidad para determinar
qué nodos están conectados. La conectividad puede ser limitada por grado de nodo
y la distancia nodo
Brite Boston University representative Internet Topology Generator Brite fue
diseñado para ser un generador de topología flexible, no se limita a cualquier forma
particular de la generación de topologías. Como tal, soporta múltiples modelos de
generación.
Quoitin & Lepropre IGen no se basa en métodos probabilísticos para generar
topologías de red. Dado que las redes reales son el resultado de un diseño de red
cuidadoso.
Magoni D. (2002) Nem no tiene interfaz de usuario, pero funciona con un archivo
de proceso. Cada línea contiene uno o más instrucciones para ser ejecutadas en
una red. Analiza la topología de las redes y Genera redes aleatorias.
3
Multidifusión: envío de la información en múltiples redes a múltiples destinos simultáneamente
21
7.2 MARCO CONCEPTUAL
Esta sección contiene los conceptos, definiciones e hipótesis que fueron
consultados a lo largo del proceso de desarrollo y fueron indispensables para
alcanzar los objetivos propuestos. Incluye la conceptualización sobre el Emulador
de red Mininet y API4, lenguaje de programación Python, Protocolo Open Flow,
Conceptos sobre Redes Definidas por Software, Generadores de Topologías y
Teoría de Grafos Aleatorios (Waxman).
La arquitectura actual es esencialmente basada en conceptos que nacieron en la
década de 1950. A partir de ahí, diversos protocolos y componentes fueron
agregados, de acuerdo a las necesidades que surgieron a lo largo del tiempo. Esa
arquitectura de redes, a pesar de atender a las necesidades actuales, es compleja,
y de cierta manera, poco flexible para continuar evolucionando a la velocidad del
surgimiento de nuevas aplicaciones que imaginamos para un futuro próximo. En
otras palabras, a pesar de que la arquitectura de redes actual es bastante resistente,
aparentemente, no es lo suficientemente escalable para las futuras necesidades.
Como respuesta a este desafío, diversos involucrados del sector de
telecomunicaciones y tecnología de la información, como fabricantes,
investigadores, empezaron a trabajar en una nueva arquitectura de redes, basada
en patrones abiertos, significativamente menos complejos, más flexible, más
eficiente y potencialmente más baratos. El resultado de ese trabajo es lo que
llamamos Redes Definidas por Software. (Bogdan Ciubotaru, 2013)
7.2.1 SDN
El objetivo de las SDN no es otro que armar a los administradores con
herramientas centralizadas de programación, virtualización y monitorización de
la situación en tiempo real para que las redes se puedan adaptar de forma
eficiente a las necesidades concretas de cada momento, lo que promete acelerar
la transformación de los datacenters hacia una nueva generación más escalable,
automatizar recursos, simplificar tareas y, en definitiva, marcar un antes y un
después en el terreno del networking y las comunicaciones. Con SDN el
procesamiento de paquetes ya no deriva de una serie de ficheros de configuración
estáticos en cada uno de sus miles de nodos,
sino
de
una organización
puramente dinámica a través de una capa de software que virtualiza la red y
la independiza de la infraestructura física subyacente. (Vargas, 2013)
4
Application Programming Interface
22
“Aunque la historia de SDN no ha hecho más que empezar, vemos claramente
cuatro etapas en el futuro.
 Automatización de redes. en la actualidad, el control de software de nuestras
redes se realiza en la propia empresa y; con frecuencia, por medios
rudimentarios. Solo si liberamos el código fuente de las interfaces de
programación de aplicaciones (API), empezaremos a conseguir la agilidad que
necesitamos.
 Virtualización de redes. cuando dispongamos de la automatización básica,
podrá iniciarse realmente el proceso de separación de la capa 2/3 de la red y la
capa física Aunque esta tecnología todavía está tomando cuerpo, vemos mucho
potencial en los controladores basados en software que utilizan OpenFIow, el
nuevo protocolo SDN para programar conmutadores virtuales en los
hipervisores de software tecnología que se suele denominar "de superposición".
 Ampliación de SDN a las redes WAN no solo los Data Centres conseguirán
ventajas, ya que nuestras redes WAN pueden controlarse también mediante
SDN.
 Las auténticas redes definidas por software en definitiva, el objetivo tiene que
ser disponer de una capa física simplificada que solo funcione con OpenFlow y
que cuente con API estandarizadas para optimizar la forma en que consumimos
los recursos de la red. Mientras que los operadores y sus clientes solo pueden
salir ganando, los proveedores se muestran recelosos, por lo que tenemos que
asumir que ofrecerán cierta resistencia y que tendremos que esforzarnos para
superarla”. (SRL, 2015)
La figura siguiente representa la arquitectura lógica de las redes definidas por
software, en donde la inteligencia de la red es lógicamente los controladores de las
SDN que mantienen una visión global de la red. Con SDN, empresas y operadores
pueden tomar el control sobre toda la red desde un único punto lógico, lo que
simplifica en gran medida el diseño de la red. (Vargas, 2013)
23
Ilustración 1. Arquitectura lógica de las redes definidas por software
Fuente:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por
_software_utilizando_MiniNet
Estos son los seis principios de las SDN y los correspondientes beneficios que
ofrecen a los clientes:

Separan de forma eficiente el software de red en cuatro niveles
(planos): administración, servicios, control y reenvío.

Esto ofrece el apoyo estructural necesario para optimizar cada plano
dentro de la red.

Centralizan los aspectos necesarios de los planos de administración,
servicios y control para simplificar el diseño de red y para reducir los
costes operativos.

Utilizan la nube para una implementación flexible y con una escala
adaptable, que permite una estructura de precios basada en el uso con
el fin de reducir el tiempo de servicio y establecer una correlación entre
costes/valor.

Crean una plataforma para las aplicaciones de red, los servicios y la
integración en los sistemas de administración, lo que permite el
desarrollo de nuevas soluciones de negocio.
24

Permiten una estandarización de los protocolos, lo que hace
posible disponer de asistencia inter-operativa y heterogénea entre
proveedores, y que da lugar a la posibilidad de elección y de reducción
del coste.

Aplican c o n u n a amplia perspectiva los principios de las SDN a
todos los servicios de red, incluidos los de seguridad. Esto abarca
desde el centro de datos y el campus empresarial hasta las redes
móviles e inalámbricas utilizadas por los proveedores de servicio.
(Vargas, 2013)
Dentro de cada dispositivo de red y de seguridad (conmutadores, enrutadores y
firewall), es posible separar el software en cuatro niveles o planos. A medida
que nos movemos hacia las SDN, es necesario diferenciarlos y separarlos
con claridad.
Se trata de algo esencial para el desarrollo de la siguiente generación de redes
altamente escalables, por tal motivo; se presentan cuatro capas que representarían
el plano de red de una SDN:
1. Forwarding. Se encarga del envío de paquetes en la red, la cual está
optimizado para mover los datos lo más rápido posible, esta capa puede
implementarse en el software, aunque suele desarrollarse sobre circuitos
integrados específicos para aplicaciones (ASIC), que están diseñados para
este propósito.
2. Control. Si pensamos en el plano de forwarding como en los músculos
de la red, el control sería el cerebro. El plano de control analiza la
topología de red y toma decisiones sobre el destino del flujo de la red.
3. Servicios. Algunas redes requieren un mayor procesamiento, para eso se
tiene la capa de servicios, pero no todas los equipos cuentan con esta capa,
como por ejemplo los conmutadores. Sin embargo, en muchos enrutadores y
firewalls, el plano de servicios se encarga de la toma de decisiones y de llevar
a cabo las operaciones complejas con los datos de red
4. Administración. Proporciona las instrucciones básicas sobre cómo debe
interactuar el dispositivo de red con el resto de esta. (Velasquez, 2015)
25
7.2.2 OpenFlow
Openflow es un protocolo de comunicaciones diseñado para dirigir el manejo y
enrutamiento del tráfico en una red conmutada, hasta la fecha los switches decidían
hacia donde llevar el tráfico de manera individual y en base al firmware de cada
uno de ellos, eran dependiente del fabricante y dispositivo, con OpenFlow esa
decisión dejara de ser tomada de manera individual por cada switch y pasará
a estar controlada por una fuente de inteligencia externa.
OpenFlow facilita el acceso a dispositivos de red para la programación simplificada
mediante una interfaz estándar. La facilidad a la hora de programar permite
configurar una capa de control solvente para poder centralizar la inteligencia de la
red y brindar esa capacidad de programación tan pregonada por la tecnología SDN
(Hewlett-Packard, 2014). (Vargas, 2013)
OpenFlow necesita de 3 elementos:
1.
Tablas de flujos en los nodos de conmutación
2.
Un controlador
3.
Un protocolo OpenFlow para que el controlador se comunique con los nodos.
(Park &Baack, 2012).
Los switches consultaran sus tablas de flujo antes de hacer el forwarding del tráfico
y lo realizarán conforme a ellas. Si se da la circunstancia de no saber qué hacer
con el tráfico, preguntaran al controlador y este les dirá que hacer, lo que la
convertirá en una red gestionada de manera centralizada.
Switch Openflow
Los switch openflow se los pueden dividir en tres partes, tal cual como se lo observa
en la figura siguiente, las tablas de flujo, la seguridad del canal y por último el
protocolo openflow.
26
Ilustración 2 Switch Openflow
Fuente: http://yuba.stanford.edu/cs244wiki/index.php/Overview
Las tablas de flujo indican a los switch como deben proceder los paquetes a través
de la red. La seguridad permite conectar a los switch con dispositivos remotos
y el protocolo openflow que es un estándar de comunicación abierta entre los
controladores y el switch.
Los flujos se determinan mediante la combinación de una tupla de 9 elementos que
son parte de los encabezados de las capas 2, 3 y 4 del modelo OSI y son:
1.
2.
3.
4.
5.
6.
7.
8.
9.
Puerto de entrada del conmutador
Dirección fuente MAC
Dirección destino MAC
Tipo Ethernet
VLAN
Dirección IP origen
Dirección IP destino
Puerto TCP/UDP origen
Puerto TCP/UDP destino
Una vez que el switch recibe un paquete, se realizan las funciones mostradas en
la siguiente imagen, inicialmente el switch recibe el paquete, luego revisa las tablas
de flujo y si la dirección se encuentra en las tablas envía el paquete, caso contrario
se lo envía al controlador y este se hace responsable de indicarle al switch que
debe hacer con el mismo. (Vargas, 2013)
27
Ilustración 3. Funciones de Switch
Fuente:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por
_software_utilizando_MiniNet
Protocolo Openflow
El protocolo openflow permite la comunicación entre el switch y el controlador. Los
switches deben ser capaces de establecer comunicación con los controladores,
usando una dirección IP y puerto especificado por el usuario. Si el switch conoce la
dirección del controlador éste inicia una conexión TCP estándar con el controlador.
Cuando una conexión es establecida por primera vez, cada dispositivo conectado
debe enviar mensajes de HELLO con la versión más alta soportada por el
protocolo para él envió, aquellos que reciben los mensajes deben tener una
versión igual o inferior para poder realizar una conexión, caso contrario se envía
un mensaje de ERROR y se termina la conexión . (Vargas, 2013)
Controladores
Los controladores se encargan de centralizar y transmitir la información a la red
manteniendo un paso distribuido a través de los switch y routers. Estos
28
controladores en la red van ubicados dependiendo de cómo estén los switch
conectados, se podrían identificar dos formas de configuración, una de ellas es que
debería haber un controlador centralizado para que administre y configure todos
los dispositivos de la red y la otra que los controladores se repartan de manera
distribuida, es decir, un controlador para cada conjunto de switch.
El objetivo de un controlador es redirigir ICMP 5 o paquetes de Ethernet enviados
entre los dispositivos finales sin importar el tipo de controlador que se tenga,
pero si es importante saber cómo la red debe tomar estas decisiones, los posibles
modos de operación de un controlador son los siguientes:
5
6

Centralizado. Solo se necesita un controlador para manejar los switch, es
decir; un solo controlador maneja todos los dispositivos de la red.

Por flujo. Cada entrada es configurada por el controlador y así mismo, las
tablas contienen las nuevas líneas del flujo.

Reactivos. El controlador está diseñado inicialmente para no hacer nada
hasta que reciba un mensaje, sean estos: Solicitudes de ping, mensajes
RST6 o introducir una regla en las tablas de flujo para así ser enviados al
destino. A este método se lo conoce como reactivo, porque una vez que
se procese el mensaje, el controlador usará una regla específica para
enviar el paquete al destino.

Proactivos. El controlador anticipa el mensaje de respuesta, el mensaje
Ping Responder, y finalmente antes de recibir el mensaje Ping Reply, el
controlador inserta la regla en las tablas de flujo del switch. Entonces,
cuando el switch recibe el mensaje Ping Reply, el switch ya tiene la regla
para envía el paquete. (Vargas, 2013)
Internet Control Message Protocol
Ping Request Message
29
Esquema básico de un controlador en la red:
Ilustración 4. Esquema básico de un controlador de red
Fuente:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por
_software_utilizando_MiniNet
Si el switch no sabe qué acción realizar con un paquete en específico, lo pasa al
controlador. El controlador recibirá el paquete y revisara si este es un paquete
Ethernet, hay dos casos posibles:

Si el paquete no es uno de Ethernet, el controlador lo descarta.

Si el paquete es Ethernet, el controlador analizara las cabeceras del
paquete para obtener la dirección de destino (dirección MAC y dirección
IP). Después, el controlador inserta las reglas necesarias en los switch para
que pueda ser enrutado al destino.
30
Diagrama de flujo de las funciones de un Controlador
Ilustración 5. Diagrama de flujo de las funciones de un controlador
Fuente:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por
_software_utilizando_MiniNet
7.2.3 Mininet
Es un emulador de red que ejecuta una colección de dispositivos finales, switches,
routers y enlaces en un solo núcleo de Linux, utilizando la virtualización y
permitiendo así la creación de una red completa, ejecutándose a través de un
mismo kernel.
En resumen, los dispositivos virtuales de Mininet, conmutadores, enlaces y los
controladores se crean utilizando software en lugar de hardware, en su mayor
parte el comportamiento es similar a los elementos de hardware. La eficiencia de
Mininet permite que con un solo comando se ejecute la red. (Vargas, 2013)
Ejemplo:
31
Ilustración 6. Dispositivo virtual de Mininet
Fuente: http://mininet.org/
 Ventajas de Mininet
Mininet presenta un sin número de ventajas al querer simular una red, la cual se
presentan a continuación: (Vargas, 2013)
 Es rápido – la puesta en marcha de una red simple tarda sólo unos
segundos. Esto significa que el bucle de gestión edit-debug puede ser muy
rápido.
 Puede crear topologías personalizadas: un solo switch, grandes
topologías tipo Internet, la red troncal de Stanford, un centro de datos, o
cualquier otra cosa de redes.
 Ejecutar programas reales: cualquier cosa que se ejecute en Linux está
disponible para que funcione, desde los servidores de Internet hasta
las herramientas de TCP para el monitoreo de paquetes.
 Personalizar el reenvío de paquetes: los switch de MiniNet son
programables usando el protocolo OpenFlow, lo que significa que los diseños
de red se pueden transferir fácilmente a los switches OpenFlow.
 Puede ejecutar MiniNet en su computadora portátil, en un servidor, en una
máquina virtual, en una máquina Linux nativo (MiniNet se incluye con Ubuntu
12.10), o en la nube (por ejemplo, Amazon EC2).
 Puede compartir y replicar los resultados: cualquiera con una
computadora puede ejecutar el código una vez que se han instalado los
paquetes necesarios para su funcionamiento.
 Se puede crear y ejecutar experimentos MiniNet escribiendo simples
(o complejos de ser necesario) scripts de Python.
32

Limitaciones
Correr en un solo sistema es conveniente, pero también impone límites de
recursos: si su servidor tiene 3 GHz de CPU y cambia su tráfico simulado de Gbps 7,
tendrán que ser equilibradas y compartidas entre los hosts virtuales y
switches. (Vargas, 2013)
 Mininet utiliza un solo núcleo de Linux para todos los hosts virtuales, lo que
significa que no se puede ejecutar el software que depende de BSD,
Windows, u otros núcleos del sistema operativo. (Aunque se puede
conectar máquinas virtuales a Mininet.)
 Mininet no escribirá su controlador OpenFlow para usted, si usted
necesita enrutamiento personalizado o el comportamiento de conmutación,
usted tendrá que encontrar o desarrollar un controlador con las
características que usted requiere.
 Actualmente Mininet no hace NAT8 fuera de la caja. Esto significa que
sus máquinas virtuales se pueden aislar de la red LAN9 de forma
predeterminada, lo que suele ser bueno, pero significa que sus anfitriones
no pueden hablar directamente a Internet a menos que proporcione un
medio para que lo hagan. (el ejemplo nat.py muestra cómo configurar
hosts Mininet para la conectividad
externa,
y
los ejemplos
hwintf.py muestran cómo agregar una interfaz física para Mininet.).
 Todos los hosts Mininet comparten el sistema de archivos y el espacio
PID10, lo que significa que es posible que tenga que tener cuidado si se está
ejecutando demonios que requieren de configuración en /etc.
 A diferencia de un simulador, Mininet no tiene una fuerte noción de tiempo
virtual, lo que significa que las medidas de temporización se basarán en
tiempo real, y que los resultados serán en tiempo real (por ejemplo, redes a
100 Gbps) no pueden ser fácilmente emuladas.
7
Gigabit per second
Network Address Translation
9
Local Area Network
10
Proportional–Integral–Derivative
8
33
Interactuar con los Host y Switch
Puede interactuar con Mininet, iniciando una topología mínima utilizando
el comando: sudo mn, la red predeterminada que se cargará consta de un
controlador que administra un switch conectado a dos host. A continuación se
presentan los comandos básicos:
Help: Muestra los comandos de Mininet. Nodes: Muestra los nodos de la red
Net: Muestra los enlaces que se tiene en la red.
Ifconfig-a: Muestra la configuración IP del dispositivo que se desea consultar,
puede ser un host o switch. El uso es de la siguiente manera: h1 ifconfiga, donde h1 representa el host 1 en la red.
Ps-a: Muestra en pantalla los procesos que se están ejecutando en la máquina,
la forma de usarlo es: h1 ps-a, donde h1 es el host 1 en la red. Se debe
recordar que los procesos a mostrar serán los mismos tanto en los host como en
los switch, debido a que se está virtualizando la red más no se tiene máquinas
individuales.
Ping -c: Permite hacer ping entre los dispositivos de la red, la manera de uso
es la siguiente: h1 ping-c 1 h2. El host 1 está haciendo ping al host 2, pero solo
le está enviando un mensaje, la cantidad de mensajes puede ser configurada
indicando el número de mensajes después del comando ping -c. (Vargas, 2013)
Topología de cierta simulación
En el gráfico siguiente se puede observar claramente una estructura con un
controlador centralizado, encargado de reenviar los paquetes a los switch y estos a
su vez transmitirlos a los dispositivos finales.
34
Topología de red simulada
Ilustración 7. Topologia de Red simulada
Fuente:http://es.slideshare.net/wavelasq/emulacin-de-una-red-definida-porsoftware-utilizando-mininet
La ilustración anterior muestra la siguiente topología: 12 host,3 switch y 1
controlador. Los host están repartidos en cuatro por cada switch, switch 1 (s5) tiene
los host (h1, h2, h3, h4), switch 2 (s16) tiene los host (h14, h15, h13, h12),
switch 3 (s23) tiene los host (h24, h25, h26, h27) y controlador administra los
tres switch.
Primero se importan las librerías de Mininet para usar la API, luego se define
una topología, es decir; instanciamos un objeto “Mininet”. Se crean los nodos,
todos los host con su dirección IP, los switch y el controlador; luego se agregan
las relaciones entre ellos y finalmente se procede a ejecutar el controlador.
Al ejecutar el archivo MininetTopologia.sh se crean en la maquina las interfaces
virtuales y al mismo tiempo compila el código de la simulación, en la ilustracion
siguiente se muestra la ejecución del comando net: (Vargas, 2013)
35
Ilustración 8. Ejemplo simulacion Mininet
Fuente:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por
_software_utilizando_MiniNet
Mininet ofrece en su sitio web oficial (www.Mininet.org) información suficiente para
la instalación del software y los primeros acercamientos a la herramienta, además
para que, con base en ella, puedan crearse importantes desarrollos en cuenta a la
simulación de Redes Definidas por Software se refiere, inclusive redes que utilicen
el protocolo IPv6.
API Mininet
A lo largo de esta introducción, que ha estado expuesto a una serie de clases de
Python que comprenden la API de Mininet, incluyendo clases como Topo, Mininet,
Host, Switch, Link y sus subclases. Es conveniente dividir estas clases en los niveles
(o capas), ya que en general las API de alto nivel se construyen utilizando las API
de nivel inferior.
La API de Mininet está construida en tres niveles principales:

API de bajo nivel: La API de bajo nivel consta de las clases de nodo base y
de enlace (tales como Host, Switch, Link y sus subclases) que en realidad
se pueden crear instancias de forma individual y se utiliza para crear una red,
pero es un poco difícil de manejar.
36

API de nivel medio: La API de nivel medio añade el Mininet objeto que sirve
como contenedor para los nodos y enlaces. Proporciona una serie de
métodos (como addHost (), addSwitch (), y addLink ()) para agregar nodos y
enlaces a una red, así como la red de configuración, puesta en marcha y
parada (en particular, start () y stop ().

API de alto nivel: La API de alto nivel añade una abstracción de topología. La
clase Topo ofrece la posibilidad de crear plantillas de topologías reutilizables
parametrizados. Estas plantillas se pueden pasar a la mn de comandos (a
través de la --custom opción) y se utilizan desde la línea de comandos.
En general cuando se quiere controlar los nodos y conmutadores directamente, se
utiliza la API de bajo nivel. Cuando se inicia o detenie una red, por lo general utiliza
la API de nivel medio (en particular el Mininet clase.)
Las cosas se vuelven interesantes cuando se comienza la creación de redes
completas,las redes completas pueden ser creadas usando cualquiera de los
niveles de API (como se ve en los ejemplos), pero en general se pueden elegir tanto
la API de nivel medio (por ejemplo Mininet.add * ()) como la API de alto
nivel (Topo. añadir * ()) para crear las redes. (GitHub Mininet, s.f.)
Estos son ejemplos de la creación de redes de uso de cada nivel de la API:
API de bajo nivel: nodos y enlaces
Ilustración 9. Nodos y enlaces
Fuente: https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#api
37
API de nivel medio: Objeto de Red
Ilustración 10. Objeto de red
Fuente: https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#api
API de alto nivel: las plantillas de topología
Ilustración 11. Plantilla de topología
Fuente: https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#api
38
7.2.4 Modelo de Grafo Aleatorio
Modelo Waxman
A partir de observaciones efectuadas sobre Internet, Waxman formuló dos hipótesis
respecto a cómo estaban conectados los routers en la red. En su trabajo sostuvo
que:

Los routers de Internet se encuentran distribuidos geográficamente y que
esta distribución incide en la forma en que están conectados.

Como resultado de un proceso de optimización de recursos, la existencia de
conexiones es más probable entre routers cercanos que entre routers
distantes. A partir de estas hipótesis y tomando como base el modelo Erdos
Renyi, Waxman realizó una modificación para que la probabilidad de
conexión de los nodos fuera dependiente de la distancia entre los
mismos.(Waxman, 1988)
Los grafos Waxman, han sido introducidos como una en particular la clase de grafos
aleatorios para modelar topologías de red y tiene el propósito de evaluar los
algoritmos de enrutamiento(Waxman, 1988).
Los nodos se distribuyen de manera uniforme sobre un área rectangular, y los
enlaces se añaden entre el los nodos a través de un mecanismo aleatorio (la
probabilidad de que dos nodos están conectados directamente disminuye
exponencialmente a medida que aumenta su distancia euclidiana). Los grafos
Waxman caen en la clase general de modelos espaciales, donde las propiedades
de conectividad de la gráfica están directamente relacionados con las relaciones
espaciales entre los routers (es decir, sus distancias). A pesar del número de los
modelos de la competencia, los gráficos Waxman han sido ampliamente aceptados
como un modelo de topología para la red intra-dominio y empleado en muchos
estudios de enrutamiento de rendimiento(Naldi, 2005).
En la formulación original de Waxman, los gráficos tienen un número N
predeterminado de nodos, que son distribuidos uniformemente sobre una cuadrícula
de coordenadas rectangular, esto significa que cada nodo tiene coordenadas
enteras, mientras que si se considera el caso más general, donde un nodo puede
estar en cualquier lugar dentro del área rectangular.
39
La probabilidad de que existe un vínculo directo entre los nodos genéricos u y v es
relacionado con la distancia euclidiana d (u, v) entre ellos por la expresión:
Donde L es la distancia máxima entre dos nodos, y 𝜶 y 𝜷 son dos parámetros en el
rango (0,1). Los valores más altos de 𝜷 resultan en gráficos con mayor densidad
de enlaces, mientras que los pequeños valores de 𝜶 tienen un aumento de la
densidad de enlaces cortos en relación con los más largos (en algunas
formulaciones posteriores del modelo del posiciones y roles, de 𝜶 𝒚 𝜷 se
intercambian. (Waxman, 1988)
Dado que la probabilidad de que exista un vínculo entre dos nodos depende de su
distancia, y esta es una variable aleatoria, el primer paso es derivar la función de
densidad de probabilidad de la distancia entre dos nodos. Se considera el caso
general de un rectángulo que contiene nuestros nodos, cuya relación de lado
(relación entre el más pequeño y el mayor de los lados del rectángulo) se indica por
𝒓 . Lo que interesa es la distancia normalizada 𝑫, es decir, la distancia dividida por
la longitud de la diagonal del rectángulo, ya que la expresión enlace de probabilidad
puede ser reformulada como: (Waxman, 1988)
Ilustración 12. Modelo de Waxman
Fuente: https://www.cs.purdue.edu/homes/dgleich/demos/erdos_renyi/
40
Modelo Erdos - Renyg
El más sencillo de los modelos de grafos aleatorios fue propuesto por Erdos - Renyig
hacia 1960. Este modelo considera un grafo con n vértices, en el que la probabilidad
de que dos vértices distintos tomados al azar estén conectados es fija e igual a p.
Los grafos aleatorios Erdos-Renyi (ER) Gnp presentan las siguientes propiedades:

El
tamaño
del
grafo
sigue
una
distribución
binomial:
.
𝒏
En donde 𝑵 = (𝟐)


La esperanza del tamaño del grafo es
El grado de los vértices sigue
una
distribución
.

La esperanza del grado de un vértice es




El coeficiente de agrupamiento esperado de un vértice es
La concordancia por grados es asintótica a 0 para 𝒏 → ∞
El diámetro es asintótico a ln n= ln(pn) para 𝒏 → ∞
El grafo es conexo con alta probabilidad.
Ilustración 13. Modelo Erdos-Renyi.
Fuente: (Beiró, 2010)
41
binomial:
La arista-conectividad es asintótica a a (n - 1) p para 𝒏 → ∞
Es habitual estudiar el comportamiento de los grafos Erdos-Renyi cuando 𝒏 → ∞
manteniendo np constante, de manera de conservar el grado medio de los vértices.
Bajo esta restricción, con 𝒏 → ∞ se cumple que:



La distribución de grados de los vértices converge a una Poisson con media
np.
El coeficiente de agrupamiento de los vértices y global es asintótico a 0.
El grafo es no conexo (el diámetro es infinito).
Los grafos Erdos-Renyi no son adecuados para modelar redes complejas por tener
una distribución de grados con caída exponencial (en lugar de una cola larga) y un
coeficiente de agrupamiento pequeño, y por la ausencia de correlaciones que se
manifiesta, por ejemplo, en una concordancia por grados cercana a cero. (Erdos &
Renyi, 1958)
Modelo Barabasi-Albert
En su trabajo, Barabasi y Albert descubrieron la presencia de leyes de escala en las
distribuciones de los grados de muchas redes complejas, y la ejemplificaron con la
Web, una red de citaciones científicas y la red de distribución de energía de los
Estados Unidos, entre otras. Asimismo, mostraron que los modelos de redes
conocidos hasta ese momento, como el Erdos-Renyi y el Watts-Strogatz, no
lograban capturar esta naturaleza libre de escala. Propusieron entonces un nuevo
modelo con el objetivo de obtener leyes de potencia en la distribuciones de grados,
partiendo de dos hipótesis: el crecimiento de la red y el mecanismo de acoplamiento
preferencial (preferential attachment).
El modelo Barabasi-Albert parte de una red formada por una cantidad m0 de vértices
conectados, que llamaremos G0, y evoluciona en forma discreta en el tiempo
incorporando un nuevo vértice en cada instante. En el instante t, dado el grafo
𝑮𝒕−𝟏 = 𝑽𝒕−𝟏, 𝑬𝒕−𝟏 se incorpora un vértice vt para obtener un grafo Gt. Al ser
incorporado, el nuevo vértice se conecta con una cantidad 𝑚 ≤ 𝑚0 de vértices en
𝑽𝒕−𝟏 cada uno de los cuales se elije con una probabilidad p(vj) proporcional a su
grado:
42
A partir de esta regla y luego de un tiempo suficiente, la distribución de grados
alcanza un estado estacionario libre de escala. Este comportamiento fue mostrado
empíricamente por Barabasi y Albert y luego probado formalmente por enfoques de
campo medio basados en ecuaciones cinéticas (rate equations). (Beiró, 2010)
Ilustración 14. Modelo Barabasi-Albert
Fuente: (Beiró, 2010)
El modelo Watts-Strogatz
Watts y Strogatz se plantearon entonces el problema de reproducir esta situación
en un modelo de red con grado medio fijo. En el modelo Erdos-Renyi hemos visto
que esto no es posible, dado que manteniendo el producto np constante, con n
suficientemente grande se obtiene una red disconexa y con coeficiente de
agrupamiento tendiendo a cero.
Los autores compararon esta situación con el caso de determinados reticulados, en
los que el coeficiente de agrupamiento es elevado pero la distancia entre dos nodos
puede ser muy grande. Buscando un punto intermedio, propusieron un modelo que
parte de una estructura de tipo anillo en la que los nodos se conectan con sus 2*k
vecinos más cercanos en el anillo (de manera de obtener un alto coeficiente de
agrupamiento) y luego realiza un proceso de recableado en que, con cierta
probabilidad p, las aristas uv se eliminan y se establece una arista uw con algún
nodo w al azar. El procedimiento de recableado no modifica la cantidad de aristas
del grafo, por lo cual se conserva el grado medio.
43
El incremento de la probabilidad p disminuye la distancia promedio pero también el
coeficiente de agrupamiento global. Sin embargo, para una amplia variedad de
valores de p (en el rango 𝒏−𝟏 ≪ 𝒑 ≪ 𝟏) el modelo logra obtener grafos con baja
distancia promedio y coeficiente de agrupamiento elevado.
Los grafos aleatorios obtenidos con el modelo Watts-Strogatz presentan las
siguientes propiedades:




El tamaño del grafo es kn
Para 𝒏 → ∞ 𝒚 𝒑 → 𝟏, la distribución de grados de los vértices converge a una
distribución de Poisson de media k.
En la región 𝒏−𝟏 ≪ 𝒑 ≪ 𝟏 el coeficiente de agrupamiento esperado de un
3(𝑘−1)
vértice es: 2 (2𝑘−1)
En la región 𝒏−𝟏 ≪ 𝒑 ≪ 𝟏 la distancia esperada entre vértices es ln n/ ln k.
Si bien la distribución de los grados en el modelo Watts-Strogatz sigue siendo una
distribución de Poisson, el gran mérito de este modelo es haber sido el primero en
construir redes de mundo pequeño. (Beiró, 2010)
Ilustración 15. Modelo Watts-Strogatz
Fuente: https://es.wikipedia.org/wiki/Modelo_Watts_y_Strogatz
44
7.2.9 Generadores de Topologías
Las herramientas de simulación hoy en día son ampliamente utilizadas para poner
a prueba los protocolos de red. La topología de red es modelada por un grafo no
dirigido donde se modelan los dispositivos de red, nodos y la comunicación entre
ellos. (Magoni & Pansiot, 2002). Un generador de topologías de red reduce
drásticamente el tiempo dedicado por investigador o estudiante para obtener los
modelos de red y ser estudiados. (Inda, Bravo, & Flores, 2009).
El modelado de la topología de Internet es de vital importancia para los
investigadores. Algunos protocolos de red, y en particular los de multidifusión, tienen
actuaciones que dependerán en gran medida de la topología de red. Es por ello que
la topología modelo utilizada para la simulación de los protocolos debe ser lo más
realista posible. (Magoni & Pansiot, 2002)
Un generador de topologías ideal debe permitir el uso y el desarrollo de modelos de
generación que producen representaciones precisas de topologías de Internet. La
siguiente es una lista de características deseables para tales generadores de
topologías.
1. Representatividad. Produce topologías precisas. La precisión debe reflejarse
en tantos aspectos de la topología de Internet real como sea posible (por
ejemplo, estructura jerárquica, grado de distribución de nodos, etc.).
2. La inclusividad. Combina en una sola herramienta las ventajas de la mayoría
de generadores.
3. Flexibilidad. Genera topologías con más de una amplia gama de tamaños.
Restricciones como el número mínimo y máximo de nodos deben evitarse
razonablemente.
4. Eficiencia. Genera grandes topologías (por ejemplo, número de nodos> 100,
000) con CPU razonable y consumo de memoria.
5. Extensibilidad. Proporciona mecanismos que permiten al usuario extender
fácilmente sus capacidades mediante la adición de modelos de nueva
generación.
6. La facilidad de uso. Sigue los principios de uso de interfaces de usuario
estándar. El usuario debe aprender la mecánica de la herramienta de
generación de una sola vez. Para cada modelo de generación incorporada
en la herramienta, sólo debería tener que aprender la funcionalidad asociada
con el nuevo modelo.
45
7. Interoperabilidad. Proporciona interfaces para aplicaciones principales de
simulación y visualización. Debe ser posible generar topologías que pueden
ser procesados por los simuladores ampliamente utilizados.
8. Robustez. No sacrificar robustez en nombre de la eficiencia e incluye
amplias capacidades de detección de errores. (Medina, Lakhina, Matta, &
Byers, 2001)
A continuación se citan algunos generadores de topología:

Bessie
Bessie permite tanto la generación de topologías de red tanto interactivo como
comandos, asignando nodos de multidifusión. Bessie genera redes mediante la
colocación de puntos al azar en una rejilla de dos dimensiones y a continuación,
utiliza funciones de probabilidad para determinar qué nodos están conectados. La
conectividad puede ser limitada por grado de nodo y la distancia nodo. (Adelstein,
Hosch, Richard, & Schwiebert, 1988).
El usuario también puede leer y escribir descripciones de redes como archivos
Bessie, y guardar una imagen gráfica de la red actual. La Figura ilustra la GUI Bessie
básica.
Mientras Bessie se utiliza principalmente en la evaluación de la generación de árbol
de algoritmos multidifusión, se espera que el modelo básico sea útil en otras áreas
de investigación de la red, en particular como se incorporan modelos de red
adicionales. (Adelstein, Hosch, Richard, & Schwiebert, 1988).
46
Ilustración 16. Interfaz de usuario para la versión Bessie
Fuente: (Adelstein, Hosch, Richard, & Schwiebert, 1988)
Un conjunto de parámetros controla la generación de red en Bessie. Entre los
parámetros son los siguientes:
 Tamaño total de la red,
 El número de redes de satélites y el tamaño medio de una red de satélites.
(Adelstein, Hosch, Richard, & Schwiebert, 1988)

Nem
Nem no tiene interfaz de usuario, pero funciona con un lote de archivo ASCII
llamado archivo de proceso. Cada línea contiene uno o más instrucciones para ser
ejecutadas en una red. Tiene las siguientes características:
1. Convertir archivos de red de un formato a otro
2. Analizar las topologías de las redes
3. Generar redes aleatorias (Magoni D. , 2002)
47
Ilustración 17. NEM
Fuente: (Magoni & Pansiot, 2002)

Brite
Brite fue diseñado para ser un generador de topologías flexible, no se limita
cualquier forma particular de la generación de topologías. Como tal, soporta
múltiples modelos de generación. La figura siguiente representa una vista
esquemática de la estructura de BRITE, está siendo utilizada en la Universidad de
Boston.
Características:
 Argumentan que la conectividad y el crecimiento preferencial incrementales
son las razones principales de la ley de distribución de poder de internet
 Colocación nodo sesgada
 El área se divide en plazas y nodos distribuidos (un nodo está seleccionado
para la columna vertebral)
 Cada cuadrado se divide en cuadrados.
 Los nodos se distribuyen de manera uniforme entre los cuadrados
 Conexiones de red preferencial basado localidad (utiliza la función
probabilística Waxman)
 Grado de distribución también se conserva para los nodos (Brite Boston
University representative Internet Topology Generator, 2014)
48
Ilustración 18. Grafica de Brite
Fuente: (Brite Boston University representative Internet Topology Generator,
2014)

IGen
A diferencia de GT-ITM y BRITE, iGen no se basa en métodos probabilísticos para
generar topologías de red. Dado que las redes reales son el resultado de un diseño
de red cuidadosa, iGen implementa diversas heurísticas de diseño de red (Quoitin
& Lepropre, 2010)
 Generador de topología de nivel Router
 La mayoría de los generadores de topología de Internet utilizan redes
aleatorias.
 Topología de Internet es de alta ingeniería, optimizado para los costes y
afectados por las relaciones de negocios entre Sistemas Autónomos.
 Diseño de topologías complejas
49
Ilustración 19. Captura de pantalla IGen con una topología entre dominios
Fuente: (Quoitin & Lepropre, 2010).
8. IMPLEMENTACION
GENERADOR DE TOPOLOGÍAS ALEATORIAS (WAXMAN)
El generador de topología aleatoria introducido por Waxman, en el año1988, es un
modelo geográfico para el crecimiento de una red informática. En este modelo los
nodos de la red están distribuidos uniformemente en el plano y los límites se añaden
de acuerdo con las probabilidades que dependen de las distancias entre los
nodos. La probabilidad de tener un borde entre nodos u y v viene dada por la
fórmula:
P (u, v) = ae -d / (BL)
donde 0 <a, b <= 1, d es la distancia de u a v, y L es la distancia máxima entre dos
nodos. Un aumento en el parámetro aumenta la probabilidad de bordes entre los
nodos en el gráfico, mientras que un aumento en B se obtiene una proporción mayor
de los bordes largos a los bordes cortos. (Waxman, 1988)
50
8.1 LIBRERIAS INSTALADAS PARA EJECUTAR LA TOPOLOGIA WAXMAN
Para ejecutar el código que genera la topología de Waxman fueron necesarias
instalar varias dos librerías principales que están enfocadas en los cálculos
científicos y matemáticos, especialmente las orientadas al cálculo matricial, ellas
son:
- Numpy
NumPy es el paquete fundamental para la computación científica con Python, en
especial para el manejo de matrices con N dimensiones, álgebra lineal,
transformaciones de Fourier, y capacidades de números aleatorios
- Scipy
SciPy es una colección de algoritmos matemáticos y funciones de conveniencia
construidas sobre la extensión Numpy de Python. Con SciPy una sesión interactiva
de Python se convierte en un entorno de procesamiento de datos y el sistema de
prototipado rivalizando Sytems como MATLAB, IDL, Octave, R-Lab y SciLab.
Ilustración 20. Librerías importadas
Fuente: Elaboración propia
8.2 DEFINICION DE LA FUNCION
Para escribir el código requerido se eligió Python, que es el lenguaje de
programación ideal ya que Mininet fue desarrollado en este.
Luego de generar el encabezado del documento e importar las librerías requeridas
se procede a definir la función que pide los parámetros para la realización de los
cálculos:
51
Con la palabra reservada “def” se crea la función, para este caso se llamó “waxman”,
seguido y entre paréntesis ingresamos, separadas por coma (,), las variables que
se requieren para recibir los parámetros iniciales. Se asignan unos valores por
defecto para garantizar la ejecución de la función en caso que se omita uno o más
de los valores que deben ser ingresados como parámetros para la ejecución de la
función.
Las variables se definen de forma dinámica; es decir, no se tiene que especificar
cuál es su tipo de antemano, se le asignan valores con el signo igual (=).
Las variables iniciales que reciben los valores para los cálculos son:




lambda que es la intensidad del proceso de Poisson
alpha, que captura el enlace de máxima probabilidad.
Beta, almacena el parámetro para controlar la longitud de los bordes.
Límites, es una tupla que guarda los datos de la región donde se distribuirán
los puntos. Del mismo modo de la función los valores se separan por coma
(,) para identificarlos como valores individuales. Estos valores son
almacenados en su orden en las variables:
o xmin, borde inferior del eje x
o xmax, borde máximo del eje x
o ymin, borde inferior del eje y
o ymax, borde máximo del eje y
Ilustración 21. Definición de la Función Waxman
Fuente: Elaboración propia
8.3 VALIDACIÓN
En la primera versión del script no se tenían establecidas validaciones de ingreso
de datos, por lo que generaba error al ingresar valores no válidos pero sin
determinar la causa.
Se opta por ingresa validaciones básicas para quien genere la topología identifique
con claridad la causa del error. Estas validaciones contemplan los valores
ingresados para las variables _lambda, alpha, beta, que deben estar entre 0 y 1 por
tratarse de una probabilidad, y los valores de xmin, xmax, ymin, ymax
52
Ilustración 22. Validación de ingreso de datos
Fuente: Elaboración propia
8.4 CALCULO DEL ÁREA
Inicialmente se determina el área o espacio geográfico (limites) en el cual estarán
distribuidos los nodos, y que son insumo principal para realizar la colocación de los
puntos. Estos datos son recibidos mediante la tupla de la forma:
Ilustración 23. Tupla Límite
Fuente: Elaboración propia
Se define la nueva variable “área”, la cual almacena el valor del cálculo realizado
con los valores capturados por intermedio de la tupla “límites”. Este valor de
determina mediante el cálculo:
Ilustración 24. Calculo área
Fuente: Elaboración propia
53
8.5 NODOS
En esta implementación el número de nodos se distribuyen con la intensidad
proporcional al área del dominio, siguiendo la distribución de Poisson.
Para identificar esa función fue necesario remitirnos a las librerías de Mininet y
estudiar detenidamente que opción nos servía para este cálculo, ya que la función
sin parámetros genera error.
La distribución de Poisson se encontró dentro de las funciones estadísticas de
Mininet, y dentro de Poisson el método forma “rvs” que genera una variable
aleatoria discreta. Se eligió el método “rvs” porque garantiza que el número de
valores sea finito.
Para determinar la cantidad de nodos se ejecuta la función poisson.rvs con los
parámetros _lamba * área (variables anteriormente descritas).
Ilustración 25. Calculo de nodos
Fuente: Elaboración propia
8.6 DISTRIBUCIÓN DE NODOS
Obtenido el número de puntos se debe generar la distribución uniforme dentro del
área calculada. Esto requirió nuevamente buscar en la documentación disponible
para determinar la mejor opción, en inglés principalmente, los registros en español
son pocos y pobres de contenido.
Inicialmente se usó la librería random, pero no permitió el adecuado manejo de los
parámetros porque que se requiere como resultado una matriz. Luego de esta
prueba y después de ampliar la búsqueda se halló la librería Numpy, que es el
paquete de computación científica de Python y que está especialmente orientado al
manejo de matrices.
Una vez instalada la librería Numpy se realizó el cambio de random a
numpy.random.random pero no fue exitoso, no permite el ingreso de parámetros;
debido a esto se continuó consultando las diferentes rutinas de Numpy, fue un largo
proceso de documentación y pruebas, hasta encontrar el parámetro “uniform” que
nos permitió a parte de ingresar los parámetros, conserva la estructura uniforme de
la matriz que nos cambiaba numpy.random.
54
Así los nodos se distribuyen de manera pareja en la red aprovechando la función
numpy.random.uniform, el 2 indica el tamaño de la matriz, en la imagen a
continuación se muestra la sintaxis:
Ilustración 26. Distribución de nodos
Fuente: Elaboración propia
Con este dato se realiza la distribución de los puntos para los ejes X y Y.
Ilustración 27. Distribución en los ejes X y Y
Fuente: Elaboración propia
8.7 DEFINICIÓN DE DISTANCIAS
Una red es un grafo aleatorio, el gráfico está representado por un vector que
contiene las coordenadas de los nodos y la matriz de adyacencia de la gráfica.
El elemento en la posición (i, j) es igual a 1 si los puntos i y j en el vector de
coordenadas están conectados.
Para generar una red aleatoria, se tiene que crear un vector con las coordenadas
de los nodos, replicar el vector que contiene las coordenadas de los nodos N veces
y almacenar en una matriz todas las posibles distancias (d (i, j)).
Nuevamente se remite a la documentación de Python, más encaminados con la
experiencia del punto anterior; después de una larga búsqueda se encuentra el
parámetro “tile”.
Con el parámetro “tile” se replican las coordenadas del vector en dos nuevas
variables (x_rep y y_rep) para almacenar los valores no repetidos y a partir de estos
generar una nueva matriz.
55
Ilustración 28. Coordenadas del Vector
Fuente: Elaboración propia
Usando la clase coo_matrix de la librería numpy se genera la matriz en formato de
coordenadas usando la forma:
coo_matrix ((datos, (i, j)), [forma = (M, N)]) donde:
Datos [:] las entradas de la matriz, en cualquier orden
i [:] los índices de fila de las entradas de la matriz
j [:] los índices de columna de las entradas de la matriz.
Ilustración 29. Matriz de distribución
Fuente: Elaboración propia
8.8 DEFINICIÓN DE PROBABILIDADES
La clase Triu, importada de la librería Numpy garantiza el operar con valores
diferentes a cero (0). Dado que la matriz de distancias es simétrica con ceros en la
diagonal, se declaran como triangular superior y matriz escasa. Esto permite
mantener en la memoria sólo los elementos distintos de cero por encima de la
diagonal principal.
Antes de llegar a triu, se prueba con la clase “power” en el camino de aprendizaje
de Python, pero no cumplía con el resultado esperado por lo que rápidamente se
descartó y se continuó con la búsqueda la clase que requiere.
Una vez obtenida la matriz de distribución (dist_matr) se calcula la matriz de
probabilidades:
56
Ilustración 30. Matriz de probabilidades
Fuente: Elaboración propia
Ahora se procede a generar la matriz de adyacencia de acuerdo a las probabilidades
calculadas en el paso anterior.
Se utiliza el argumento “astype” para redondear los valores de la matriz a valores
enteros para optimizar la asignación de los valores en el plano que se distribuyen
aleatoriamente.
Se toman los valores enteros de la anterior matriz (matriz de probabilidades) para
calcular la matriz de adyacencia, validando que estén dentro de la matriz.
Ilustración 31. Matriz de adyacencia
Fuente: Elaboración propia
8.9 ASIGNACIÓN DE HOST A LOS N NODOS
A partir de esta instancia se inicia un nuevo proceso de aprendizaje, cambiando de
Python para sumergirse en la API de Mininet. Se continúa con el reto de la
documentación en inglés, y se comienzan a asimilar nuevos conceptos, términos y
definiciones propios de esta plataforma. Tras muchas horas de lectura en especial
desde la página oficial de Mininet, se obtiene la información básica para iniciar a
aplicar su verdadero poder como emulador.

Importación de librerías de Mininet.
CLI permite controlar y administrar toda la red virtual desde una única consola,
ejemplo: hacer ping.
57
TOPO tiene como objetos propios los switches, host, links entre otros permitiendo
así asignar con agilidad todos los elementos que requiramos.
IRANGE guarda resultados para su uso posterior.
La clase se crea con la palabra reversada “class” y se define como tipo “topo” para
que Mininet pueda reconocerla y ejecutarla como tal.
Se invoca el parámetro “self” para asociarla a la librería topo, y “k” esa una variable
que almacena la cantidad de nodos generados.
Ilustración 32.Definición de la clase
Fuente: Elaboración propia
Usando las bondades de la API de Mininet se invoca topo con el método __init__
Es un constructor, init recibe parámetros y asigna los campos a la nueva instancia
de la clase. Puede validar los argumentos, hacer cómputos y métodos de llamadas.
Ilustración 33. Importación de la clase topo
Fuente: Elaboración propia
Recibiendo la cantidad de nodos se realiza la asignación de los host, links y switches
por medio de un ciclo “FOR”.
58
Ilustración 34. Definición nodos y asignación host
Fuente: Elaboración propia
y se finaliza la clase definiéndola como topología tipo waxman.
“topos” es una palabra reservada al igual que lambda, a esta última se le asigna el
nombre de la clase para que pueda ser ejecutada al invocar el script.
Ilustración 35. Definiendo Waxman como clase tipo Topo
Fuente: Elaboración propia
59
8.10 INCLUSIÓN EN LA API
La API de MiniNet está construida en tres niveles:
API de bajo nivel: Consta de las clases de nodo base y de enlace (host, switch, link).
API de nivel medio: Sirve como contenedor para los nodos y enlaces. Proporciona
una serie de métodos (como AddHost (), addSwitch (), y addLink ()) para agregar
nodos y enlaces a una red, puesta en marcha y detenida (start () y stop ())
API de alto nivel: La API de alto nivel añade una abstracción plantilla de topología,
la clase topo, que ofrece la posibilidad de crear plantillas de topología reutilizables,
parametrizadas. Estas plantillas se pueden ejecutar desde la línea de comando con
mn (a través de la opción --custom) y se utilizan desde la línea de comandos.
Para utilizar la API Python de MiniNet el código se graba con extensión .py para que
sea reconocido como documento de Python desde Mininet. Este documento se
guarda en la carpeta CUSTOM de la API de Mininet para luego ser ejecutado.
Ilustración 36. Ejemplo ejecución topología
Fuente: Elaboración propia
O como:
Ilustración 37. Otro Ejemplo ejecución topología
Fuente: Elaboración propia
Al momento de la ejecución se deben llenar los valores que piden las variables
_lamda, alpha, beta y límites. El resultado es la creación de los nodos como se
muestra en el siguiente gráfico:
60
Ilustración 38. Ejecución Waxman.py
Fuente: Elaboración propia
8.11 RESULTADO
Como punto principal se obtuvo el conocimiento de esta nueva alternativa en redes
que se proyecta fuertemente hacia el futuro, de Python como lenguaje de
programación (nuevo para nosotros) se reconoce el potencial de Mininet como
plataforma no solo para el tema de SDN sino para el tema experimental en general,
similar a Mathlab. Fue largo el tiempo de estudio, documentación, pruebas para
llegar a la realización de este documento.
61
Durante el desarrollo del generador se observó que las diferentes propuestas de
topologías personalizadas implementadas para Mininet no cuentan con opciones
dinámicas para el cambio de parámetros desde la línea de comando.
Mininet como herramienta es muy ágil e incluye todo lo necesario para la para
investigación en RDS con la limitante de no poseer interfaz gráfica, por lo que se
sugiere previamente tener conocimientos básicos del sistema operativo Linux, y del
lenguaje de programación Phyton para el desarrollo de los scripts que permiten la
generación de las topologías o componentes personalizados.
Una vez finalizado el desarrollo del código se obtiene un generador aleatorio de
topologías que recibe desde la línea de comando los parámetros para su ejecución,
en esto se diferencia especialmente de las plantillas o modelos almacenados en
Mininet que vienen con los valores pregrabados y que requieren editar el documento
para cambiar los valores, o que no se pueden cambiar porque son ejemplos
específicos.
8.12 OBSERVACIONES
Queda el documento de libre manipulación para quienes sean inquietos en el tema
para que modifiquen, mejoren, corrijan, complementen o lo que consideren
pertinente.
Hay mejoras que se pueden realizar, como reducir algunas líneas de código que se
identificaron cómo susceptibles de mejora, o incluir las aristas en el gráfico; ítems
que no son del alcance de este proyecto.
62
9. PRESUPUESTO
Para ejecutar el desarrollo de este proyecto se requieren 3 computadores
personales con las características básicas funcionales, y un entorno de red para
realizar las pruebas pertinentes a medida que avanza el desarrollo del aplicativo.
Se cuenta con las instalaciones del laboratorio de telecomunicaciones de la UCP
que cuenta la cantidad de equipos requeridos.
Elementos Requeridos
Se relacionan los elementos físicos requeridos para el desarrollo del proyecto, no
se determina presupuesto de inversión ya que contamos con el acceso a estos en
la UCP.
Tabla 1. Equipos Cómputo
EQUIPOS DE CÓMPUTO
CANTIDAD
COSTO
Computador Portátil
3
$4.500.000
Router Gama Baja
1
$100.000
TOTAL
$ 4.600.000
Tabla 2. Costos Administrativos
COSTOS ADMINISTRATIVOS
DESCRIPCIÓN
VALOR
Transporte
Papelería
$ 720,000
$ 100,000
TOTAL
$ 820,000
El software necesario para las actividades de desarrollo es gratuito (Mininet, Phyton,
NOX), por lo que no se requiere realizar inversión en licencias.
Presupuesto de Inversión
La inversión requerida para la puesta en marcha del proyecto se enfoca en los
elementos de papelería y transportes de los integrantes necesarios para el
levantamiento de la documentación y reuniones respectivamente.
63
Tabla 3. Presupuesto de Inversiones
PRESUPUESTO DE INVERSIONES
CONCEPTO
CAPITAL DE TRABAJO
Costos y Gastos Efectivos
Equipos
TOTAL INVERSIONES
PARTICIPACION POR ÁREA
DISTRIBUCIÓN
PRODUCC.
$
$
$
$
0.0%
$
6.000.000
$
820.000
$
4.600.000
$
5.420.000
100.0%
ADMON.
$
$
$
$
0.0%
-
VENTAS
$
$
$
$
0.0%
Recursos Humanos
Se compone de 3 estudiantes de Ingeniería de Sistemas y Telecomunicaciones.
Para este proyecto se requiere personal idóneo con formación básica en sistema
operativo Linux (Ubuntu), lenguaje de programación Python y conocimientos
avanzados en telecomunicaciones.
64
10. CRONOGRAMA
Ilustración 39. Cronograma
Fuente: Elaboración propia
65
11. CONCLUSIONES Y RECOMENDACIONES
En el desarrollo del proyecto se encuentra un lenguaje de programación no conocido
por los integrantes del proyecto, incluyendo el emulador de SDN lo que dificultó el
desarrollo del código; la documentación fue amplia para conocer los conceptos
básicos de programación en este lenguaje.
Asi mismo la documentación está en su gran mayoría en inglés, siendo este idioma
un reto más a superar para la continuidad del proyecto; la poca documentación en
nuestro idioma es incipiente y generalmente copia de las páginas oficiales, por lo
que realmente no aportan suficientemente al objetivo propuesto.
El desarrollo realizado permite a estudiantes e investigadores el estudio, práctica e
implementación de nuevos servicios, ayuda generando topologías complejas de
forma más ágil y así estudiar su comportamiento para una mejor gestión de red.
Durante el desarrollo se evidenciaron muchas dificultades, como el acceso a la
información, actualmente es poca y el apoyo que se puede tener al respecto es
reducido, esto demuestra que cada vez universidades deben enfocarse más en la
enseñanza de las SDN porque son el presente y el futuro de las telecomunicaciones,
muchos fabricantes e industriales ya están eligiendo ser parte porque validaron su
eficiencia y rentabilidad. Hay mucho por hacer, mucho por desarrollar y muchos
desafíos por cumplir.
Mininet como herramienta es muy ágil e incluye todo lo necesario para la para
investigación en RDS con la limitante de no poseer interfaz gráfica, por lo que se
sugiere previamente tener conocimientos básicos del sistema operativo Linux, y del
lenguaje de programación Phyton para el desarrollo de los scripts que permiten la
generación de las topologías o componentes personalizados.
Con este prototipo de SDN, se tiene una base para realizar otras implementaciones,
ya que el tema de las SDN es bastante amplio. Las aplicaciones que se pueden
realizar son muy vastas ya que estas redes son muy versátiles.
Como menciona Carl Sagan en la serie Cosmos, "Recientemente nos hemos
adentrado un poco en el mar, vadeando lo suficiente para mojarnos los dedos de
los pies, o como máximo para que el agua nos llegara al tobillo. " Así estamos en lo
referente a las SDN y quienes desarrollamos este proyecto estamos, más que
generando soluciones, brindando un medio para experimentar, para crear más
inquietudes que al final son las que nos llevan al desarrollo del conocimiento.
66
REFERENCIAS
Adelstein, F., Hosch, F., Richard, G. G., & Schwiebert, L. (1988). Portable Generation of Network
Topologies. 5.
Adjacency List and Adjacency Matrix in Python. (2012). Retrieved from
http://stackoverflow.com/questions/13547133/adjacency-list-and-adjacency-matrix-inpython
Bayer, M. (n.d.). Mako. Retrieved from Mako: http://www.makotemplates.org/
Beiró, M. G. (2010). Modelos Combinatorios de Sistemas Complejos:. 180.
Bogdan Ciubotaru, G.-M. M. (2013). Advanced Network Programming – Principles and Techniques.
Springer.
Brite Boston University representative Internet Topology Generator. (2014). Retrieved from
http://www.cs.bu.edu/brite/
Cecilia Urbina Topologias y ruteos. (2013). Retrieved from http://ceciliaurbina.blogspot.com.co/2013/04/topologias-y-ruteos.html
Community, T. S. (2008-2014). Scipy.org. Retrieved from http://docs.scipy.org/doc/scipy0.15.1/reference/generated/scipy.stats.poisson.html
Community, T. S. (2008-2014). SciPY.org. Retrieved from
http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html
Coonor Johnson. (2014). Retrieved from http://connor-johnson.com/2014/02/25/spatial-pointprocesses/
CoSDN - Cognitive Software Defined Networks. (2015). Retrieved from
http://wwwen.uni.lu/snt/research/netlab/projects/cosdn_cognitive_software_defined_ne
tworks
Cursos de Programacion a Distancia. (2015). Retrieved from
http://www.cursosdeprogramacionadistancia.com/static/pdf/material-sin-personalizarpython.pdf
Developers, N. (2013). numpy.org. Retrieved from numpy.org: http://www.numpy.org/
Developers, S. (2015). Scipy. Retrieved from Scipy: http://www.scipy.org/
Erdos, P., & Renyi, A. (1958). On random graphs I. 8.
67
Faloutsos, M., Faloutsos, P., & Faloutsos, C. (1999). On Power-Law Relationships of the Internet
Topology. 12.
Fast Network Simulation Setup. (2013). Retrieved from http://fnss.github.io/
Fei, Z., Xu, Q., & Lu, H. (2014). Generating Large Network Topologies for GENI. 7.
Foundation, O. N. (2012). Open Networking Foundation. Retrieved from
https://www.opennetworking.org
Foundation, O. N. (2015). Open Networking Foundation. Retrieved from
https://www.opennetworking.org/component/sfg/?view=form&Itemid=143
Gephi Makes Graphs Handy. (2008-2015). Retrieved from https://gephi.github.io/features/
Git Hub. (2008). Retrieved from https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
Git Hub. (2013). Retrieved from https://github.com/ryazwinski/mcat/blob/master/setup.py
Git Hub. (2015). Retrieved from https://github.com/scipy/scipy#what-is-scipy
GitHub Mininet, P. (n.d.). Introduction to Mininet. Retrieved from Introduction to Mininet:
https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#api
github. (n.d.). raw.githubusercontent.com. Retrieved from raw.githubusercontent.com:
https://raw.githubusercontent.com/fnss/fnss-vm/master/setup.sh
Grupo de Investigacion de la Universidad de Antiquia. (2015). Retrieved from
http://ingenieria.udea.edu.co/investigacion/
Guia Rapida de Python. (2015). Retrieved from
https://sites.google.com/site/pythoncolombia/guia-rapida-de-python
Haggerty, M. (n.d.). Gnuplot.py en SourceForge. Retrieved from Gnuplot.py en SourceForge:
http://gnuplot-py.sourceforge.net/
Hunter, J., Dale, D., Firing, E., Droettboom, M., & Developers Team, M. (2012 - 2015). matplotlib.
Retrieved from matplotlib: http://matplotlib.org/
InCNTRE's SDN Interoperability Lab. (2015). Retrieved from http://incntre.iu.edu/SDNlab
Inda, A., Bravo, G., & Flores, F. (2009). AUTOMATIC NETWORK TOPOLOGY GENERATOR FOR
TRANSMISSION PLANNING. 9.
Instalando Paguetes de Python. (2015). Retrieved from
http://www.manejandodatos.es/2013/10/instalando-paquetes-de-python/
Installation Instructions. (2015). Retrieved from http://cvxopt.org/install/index.html
68
Introduction to Mininet. (n.d.). Retrieved from
https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
Jupyter Notebook Viewer. (2015). Retrieved from
http://nbviewer.ipython.org/github/gfrubi/clases-python-cientifico/blob/master/Lecture2-Numpy.ipynb
Laszlo Barabasi, A., & Albert, R. (1999). Emergence of Scaling in. 4.
LFD. (2015). Retrieved from http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
Magoni, D. (2002). nem: A Software for Network Topology Analysis and Modeling. 8.
Magoni, M., & Pansiot, J.-J. (2002). sis and Comparison of Internet Topology. 12.
Martinez Copete, J. E. (2015). SDN - Mininet last version V5. In J. E. Martinez Copete. Pereira
Risaralda Colombia.
Math Synonyms. (2006). Retrieved from http://mathesaurus.sourceforge.net/math-synonyms.pdf
Mathesaurus. (2007). Retrieved from http://mathesaurus.sourceforge.net/matlab-numpy.html
Matlab Python Xref. (2006). Retrieved from http://mathesaurus.sourceforge.net/matlab-pythonxref.pdf
Matlab Sparse. (2008). Retrieved from
http://mat21.etsii.upm.es/matesp/clases/clases0809/clase04/MatlabSparse.pdf
Matlab to python code conversion. (2012). Retrieved from
http://stackoverflow.com/questions/11674841/matlab-to-python-code-conversion
Matplotlib 1.5.0 Documentation. (2002-2012). Retrieved from
http://matplotlib.org/examples/api/unicode_minus.html
Matplotlib 1.5.0 Documentation. (2012). Retrieved from http://matplotlib.org/
Medina, A. (2001). Generadores de Topologias Disponibles. Retrieved from http://www.cs.bu.edu/
Medina, A., Lakhina, A., Matta, I., & Byers, J. (2001). BRITE: An Approach to Universal Topology
Generation. 8.
Megasolution. (2015). Retrieved from http://www.megasolutions.net/python/Does-Python-haveequivalent-to-MATLAB--varargin-,--varargout-,--nargin-,--nargout_-14798.aspx
Mininet Walkthrough. (2015). Retrieved from http://mininet.org/walkthrough/#custom-topologies
Naldi, M. (2005). Connectivity of Waxman topology models. 8.
NC State University. (2014). Retrieved from https://www.ncsu.edu/
69
NetworkX Equipo desarrollador. (2014). NetworkX. Retrieved from NetworkX:
https://networkx.github.io/
Numerical Python Browse. (2015). Retrieved from
http://sourceforge.net/projects/numpy/files/NumPy/1.9.2/
Numpy v1.0 Manual. (2008-2009). Retrieved from
http://docs.scipy.org/doc/numpy/user/install.html
ONRC Research. (2014). Retrieved from http://onrc.stanford.edu/
Open Networking Foundation. (2015). Retrieved from
https://www.opennetworking.org/component/sfg/?view=form&Itemid=143
Org Cython. (n.d.). Cython C-Extensions for Python. Retrieved from http://cython.org/
Paper, O. W. (2012). Open Networking Foundation. Retrieved from
https://www.opennetworking.org
Pip 7.1.2 Documentation. (n.d.). Retrieved from https://pip.pypa.io/en/latest/installing/#install-pip
Project, M. (n.d.). Mininet Download. Retrieved from Mininet Download:
http://mininet.org/download/
Python 2.7.10 Documentation. (2009-2015). Retrieved from
https://docs.python.org/2/library/random.html
Python Library Import. (2008). Retrieved from
http://ubuntuforums.org/showthread.php?t=917516
Python Package Index. (1990-2015). Retrieved from https://pypi.python.org/pypi/setuptools/
Python para Principiantes. (2011-2013). Retrieved from
http://librosweb.es/libro/python/capitulo_4/llamadas_de_retorno.html
Python Software Foundation. (1990-2015). Retrieved from https://pypi.python.org/pypi/pymatlab
Python Software Foundation. (2015). Retrieved from
https://packaging.python.org/en/latest/projects/#pip
python.org. (n.d.). Python-Dev, desarrolladores del núcleo de Python. Retrieved from
https://mail.python.org/mailman/listinfo/python-dev
pythontesting. (n.d.). Python Test Frameworks and Strategies. Retrieved from Python Test
Frameworks and Strategies: http://pythontesting.net/framework/nose/nose-introduction/
Quoitin, B., & Lepropre, J. (2010). Topology generation through network design heuristics.
Retrieved from http://informatique.umons.ac.be/networks/igen/
70
Read filesin Python. (2015). Retrieved from http://stackoverflow.com/questions/874461/readmat-files-in-python
Rényi and, E. (1960). Publicationes Mathematicae Debrecen.
Reproducing Network Research. (2012). Retrieved from
https://reproducingnetworkresearch.wordpress.com/2012/06/04/jellyfish-vs-fat-tree/
Saino, L. (2014). A Toolchain for Simplifying Network Simulation Setup. 10.
Saino, L., & Cocora, C. (2012-2015). Fast Network Simulation Setup (FNSS). Retrieved from Fast
Network Simulation Setup (FNSS): http://fnss.github.io/doc/core/
Scipy.org. (n.d.). Retrieved from http://www.scipy.org/scipylib/download.html
Scipy.org. (2008-2014). Retrieved from http://docs.scipy.org/doc/scipy0.15.1/reference/generated/scipy.stats.poisson.html
SciPy.org. (2008-2014). Retrieved from https://docs.scipy.org/doc/scipy/reference/sparse.html
SDN Academy. (2015). Retrieved from http://sdnacademy.com/
Sebastian Raschka. (2014). Retrieved from
http://sebastianraschka.com/Articles/2014_matrix_cheatsheet_table.html
Slide Share. (2013). Retrieved from http://es.slideshare.net/rjain51/m-15oct?related=2
Software Foundation, P. (1990-2015). docs.python.org. Retrieved from docs.python.org:
https://docs.python.org/3/library/distutils.html
SRL, K. I. (2015). Kit Electronica. Retrieved from Kit Electronica: http://www.kit.com.ar/boletinesa.php?id=0000140
Stack Over Flow. (2012). Retrieved from http://stackoverflow.com/questions/10555593/randomadjacency-matrix-with-variation-on-number-of-edges-per-node
Stack Over Flow. (2012). Retrieved from http://stackoverflow.com/questions/2180299/range-ofpythons-random-random-from-the-standard-library
The IPython Development, T. (n.d.). IP [y]. Retrieved from IP [y]: https://ipython.org/ipythondoc/3/interactive/qtconsole.html
The Plone Foundation, a. f. (2000-2013). Plone. Retrieved from Plone:
https://plone.org/countries/mx/instalacion-de-setuptools-y-easyinstall-para-python
TuxyLinux.com. (2015). Tuxylinux. Retrieved from Tuxylinux: http://www.tuxylinux.com/instalar-yconfigurar-wireshark-en-linux/
71
Vaamonde, S. R. (2013). De Matlab a Python. Retrieved from
https://srodriguezv.wordpress.com/2013/07/14/de-matlab-a-python-python-comolenguaje-de-programacion-cientifico-y-tecnico/
Vargas, W. A. (2013). Emulacion de una red definida por software. Retrieved from Emulacion de
una red definida por software:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por_softw
are_utilizando_MiniNet
Velasquez, W. (2015). Emulación de una red definida por software utilizando MiniNet. Retrieved
from Emulación de una red definida por software utilizando MiniNet:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por_softw
are_utilizando_MiniNet
Wang, S.-Y. (2014). Comparison of SDN OpenFlow Network Simulator. 6.
Waxman, B. M. (1988). Routing of Multipoint Connections.
Web Home Groups SDN Victoria University. (2015). Retrieved from
https://ecs.victoria.ac.nz/Groups/SDN/
72
BIBLIOGRAFIA
Adelstein, F., Hosch, F., Richard, G. G., & Schwiebert, L. (1988). Portable Generation of Network
Topologies. 5.
Adjacency List and Adjacency Matrix in Python. (2012). Retrieved from
http://stackoverflow.com/questions/13547133/adjacency-list-and-adjacency-matrix-inpython
Bayer, M. (n.d.). Mako. Retrieved from Mako: http://www.makotemplates.org/
Beiró, M. G. (2010). Modelos Combinatorios de Sistemas Complejos:. 180.
Bogdan Ciubotaru, G.-M. M. (2013). Advanced Network Programming – Principles and Techniques.
Springer.
Brite Boston University representative Internet Topology Generator. (n.d.). Retrieved from
http://www.cs.bu.edu/brite/
Cecilia Urbina Topologias y ruteos. (2013). Retrieved from http://ceciliaurbina.blogspot.com.co/2013/04/topologias-y-ruteos.html
Community, T. S. (2008-2014). Scipy.org. Retrieved from http://docs.scipy.org/doc/scipy0.15.1/reference/generated/scipy.stats.poisson.html
Community, T. S. (2008-2014). SciPY.org. Retrieved from
http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html
Coonor Johnson. (2014). Retrieved from http://connor-johnson.com/2014/02/25/spatial-pointprocesses/
CoSDN - Cognitive Software Defined Networks. (2015). Retrieved from
http://wwwen.uni.lu/snt/research/netlab/projects/cosdn_cognitive_software_defined_ne
tworks
Cursos de Programacion a Distancia. (2015). Retrieved from
http://www.cursosdeprogramacionadistancia.com/static/pdf/material-sin-personalizarpython.pdf
Developers, N. (2013). numpy.org. Retrieved from numpy.org: http://www.numpy.org/
Developers, S. (2015). Scipy. Retrieved from Scipy: http://www.scipy.org/
Erdos, P., & Renyi, A. (1958). On random graphs I. 8.
73
Faloutsos, M., Faloutsos, P., & Faloutsos, C. (1999). On Power-Law Relationships of the Internet
Topology. 12.
Fast Network Simulation Setup. (2013). Retrieved from http://fnss.github.io/
Fei, Z., Xu, Q., & Lu, H. (2014). Generating Large Network Topologies for GENI. 7.
Foundation, O. N. (2012). Open Networking Foundation. Retrieved from
https://www.opennetworking.org
Foundation, O. N. (2015). Open Networking Foundation. Retrieved from
https://www.opennetworking.org/component/sfg/?view=form&Itemid=143
Gephi Makes Graphs Handy. (2008-2015). Retrieved from https://gephi.github.io/features/
Git Hub. (2008). Retrieved from https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
Git Hub. (2013). Retrieved from https://github.com/ryazwinski/mcat/blob/master/setup.py
Git Hub. (2015). Retrieved from https://github.com/scipy/scipy#what-is-scipy
github. (n.d.). raw.githubusercontent.com. Retrieved from raw.githubusercontent.com:
https://raw.githubusercontent.com/fnss/fnss-vm/master/setup.sh
Grupo de Investigacion de la Universidad de Antiquia. (2015). Retrieved from
http://ingenieria.udea.edu.co/investigacion/
Guia Rapida de Python. (2015). Retrieved from
https://sites.google.com/site/pythoncolombia/guia-rapida-de-python
Haggerty, M. (n.d.). Gnuplot.py en SourceForge. Retrieved from Gnuplot.py en SourceForge:
http://gnuplot-py.sourceforge.net/
Hunter, J., Dale, D., Firing, E., Droettboom, M., & Developers Team, M. (2012 - 2015). matplotlib.
Retrieved from matplotlib: http://matplotlib.org/
InCNTRE's SDN Interoperability Lab. (2015). Retrieved from http://incntre.iu.edu/SDNlab
Inda, A., Bravo, G., & Flores, F. (2009). AUTOMATIC NETWORK TOPOLOGY GENERATOR FOR
TRANSMISSION PLANNING. 9.
Instalando Paguetes de Python. (2015). Retrieved from
http://www.manejandodatos.es/2013/10/instalando-paquetes-de-python/
Installation Instructions. (2015). Retrieved from http://cvxopt.org/install/index.html
Introduction to Mininet. (n.d.). Retrieved from
https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
74
Jupyter Notebook Viewer. (2015). Retrieved from
http://nbviewer.ipython.org/github/gfrubi/clases-python-cientifico/blob/master/Lecture2-Numpy.ipynb
Laszlo Barabasi, A., & Albert, R. (1999). Emergence of Scaling in. 4.
LFD. (2015). Retrieved from http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
Magoni, D. (2002). nem: A Software for Network Topology Analysis and Modeling. 8.
Magoni, M., & Pansiot, J.-J. (2002). sis and Comparison of Internet Topology. 12.
Martinez Copete, J. E. (2015). SDN - Mininet last version V5. In J. E. Martinez Copete. Pereira
Risaralda Colombia.
Math Synonyms. (2006). Retrieved from http://mathesaurus.sourceforge.net/math-synonyms.pdf
Mathesaurus. (2007). Retrieved from http://mathesaurus.sourceforge.net/matlab-numpy.html
Matlab Python Xref. (2006). Retrieved from http://mathesaurus.sourceforge.net/matlab-pythonxref.pdf
Matlab Sparse. (2008). Retrieved from
http://mat21.etsii.upm.es/matesp/clases/clases0809/clase04/MatlabSparse.pdf
Matlab to python code conversion. (2012). Retrieved from
http://stackoverflow.com/questions/11674841/matlab-to-python-code-conversion
Matplotlib 1.5.0 Documentation. (2002-2012). Retrieved from
http://matplotlib.org/examples/api/unicode_minus.html
Matplotlib 1.5.0 Documentation. (2012). Retrieved from http://matplotlib.org/
Medina, A. (2001). Generadores de Topologias Disponibles. Retrieved from http://www.cs.bu.edu/
Medina, A., Lakhina, A., Matta, I., & Byers, J. (2001). BRITE: An Approach to Universal Topology
Generation. 8.
Megasolution. (2015). Retrieved from http://www.megasolutions.net/python/Does-Python-haveequivalent-to-MATLAB--varargin-,--varargout-,--nargin-,--nargout_-14798.aspx
Mininet Walkthrough. (2015). Retrieved from http://mininet.org/walkthrough/#custom-topologies
Naldi, M. (2005). Connectivity of Waxman topology models. 8.
NC State University. (2014). Retrieved from https://www.ncsu.edu/
NetworkX Equipo desarrollador. (2014). NetworkX. Retrieved from NetworkX:
https://networkx.github.io/
75
Numerical Python Browse. (2015). Retrieved from
http://sourceforge.net/projects/numpy/files/NumPy/1.9.2/
Numpy v1.0 Manual. (2008-2009). Retrieved from
http://docs.scipy.org/doc/numpy/user/install.html
ONRC Research. (2014). Retrieved from http://onrc.stanford.edu/
Open Networking Foundation. (2015). Retrieved from
https://www.opennetworking.org/component/sfg/?view=form&Itemid=143
Org Cython. (n.d.). Cython C-Extensions for Python. Retrieved from http://cython.org/
Paper, O. W. (2012). Open Networking Foundation. Retrieved from
https://www.opennetworking.org
Pip 7.1.2 Documentation. (n.d.). Retrieved from https://pip.pypa.io/en/latest/installing/#install-pip
Project, M. (n.d.). Introduction to Mininet. Retrieved from Introduction to Mininet:
https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#api
Project, M. (n.d.). Mininet Download. Retrieved from Mininet Download:
http://mininet.org/download/
Python 2.7.10 Documentation. (2009-2015). Retrieved from
https://docs.python.org/2/library/random.html
Python Library Import. (2008). Retrieved from
http://ubuntuforums.org/showthread.php?t=917516
Python Package Index. (1990-2015). Retrieved from https://pypi.python.org/pypi/setuptools/
Python para Principiantes. (2011-2013). Retrieved from
http://librosweb.es/libro/python/capitulo_4/llamadas_de_retorno.html
Python Software Foundation. (1990-2015). Retrieved from https://pypi.python.org/pypi/pymatlab
Python Software Foundation. (2015). Retrieved from
https://packaging.python.org/en/latest/projects/#pip
python.org. (n.d.). Python-Dev, desarrolladores del núcleo de Python. Retrieved from
https://mail.python.org/mailman/listinfo/python-dev
pythontesting. (n.d.). Python Test Frameworks and Strategies. Retrieved from Python Test
Frameworks and Strategies: http://pythontesting.net/framework/nose/nose-introduction/
Quoitin, B., & Lepropre, J. (n.d.). Topology generation through network design heuristics. Retrieved
from http://informatique.umons.ac.be/networks/igen/
76
Read filesin Python. (2015). Retrieved from http://stackoverflow.com/questions/874461/readmat-files-in-python
Rényi and, E. (1960). Publicationes Mathematicae Debrecen.
Reproducing Network Research. (2012). Retrieved from
https://reproducingnetworkresearch.wordpress.com/2012/06/04/jellyfish-vs-fat-tree/
Saino, L. (2014). A Toolchain for Simplifying Network Simulation Setup. 10.
Saino, L., & Cocora, C. (2012-2015). Fast Network Simulation Setup (FNSS). Retrieved from Fast
Network Simulation Setup (FNSS): http://fnss.github.io/doc/core/
Scipy.org. (n.d.). Retrieved from http://www.scipy.org/scipylib/download.html
Scipy.org. (2008-2014). Retrieved from http://docs.scipy.org/doc/scipy0.15.1/reference/generated/scipy.stats.poisson.html
SciPy.org. (2008-2014). Retrieved from https://docs.scipy.org/doc/scipy/reference/sparse.html
SDN Academy. (2015). Retrieved from http://sdnacademy.com/
Sebastian Raschka. (2014). Retrieved from
http://sebastianraschka.com/Articles/2014_matrix_cheatsheet_table.html
Slide Share. (2013). Retrieved from http://es.slideshare.net/rjain51/m-15oct?related=2
Software Foundation, P. (1990-2015). docs.python.org. Retrieved from docs.python.org:
https://docs.python.org/3/library/distutils.html
Stack Over Flow. (2012). Retrieved from http://stackoverflow.com/questions/10555593/randomadjacency-matrix-with-variation-on-number-of-edges-per-node
Stack Over Flow. (2012). Retrieved from http://stackoverflow.com/questions/2180299/range-ofpythons-random-random-from-the-standard-library
The IPython Development, T. (n.d.). IP [y]. Retrieved from IP [y]: https://ipython.org/ipythondoc/3/interactive/qtconsole.html
The Plone Foundation, a. f. (2000-2013). Plone. Retrieved from Plone:
https://plone.org/countries/mx/instalacion-de-setuptools-y-easyinstall-para-python
TuxyLinux.com. (2015). Tuxylinux. Retrieved from Tuxylinux: http://www.tuxylinux.com/instalar-yconfigurar-wireshark-en-linux/
Vaamonde, S. R. (2013). De Matlab a Python. Retrieved from
https://srodriguezv.wordpress.com/2013/07/14/de-matlab-a-python-python-comolenguaje-de-programacion-cientifico-y-tecnico/
77
Vargas, W. A. (2013). Emulacion de una red definida por software. Retrieved from Emulacion de
una red definida por software:
https://www.academia.edu/5730624/Emulaci%C3%B3n_de_una_red_definida_por_softw
are_utilizando_MiniNet
Wang, S.-Y. (2014). Comparison of SDN OpenFlow Network Simulator. 6.
Waxman, B. M. (1988). Routing of Multipoint Connections.
Web Home Groups SDN Victoria University. (2015). Retrieved from
https://ecs.victoria.ac.nz/Groups/SDN/
78
ANEXO 1
GUÍA DE INSTALACIÓN MININET
Mininet ofrece dos formas de utilización, una forma Virtualizada a través de un
Virtual Box u otro software similar, y la otra de forma nativa en S.O Ubuntu 14.04 o
superior.
La forma utilizada para este proyecto es de manera Nativa con S.O Ubuntu 14.04.
(Project, Mininet Download, s.f.)
INSTALACIÓN NATIVA DE MININET EN UBUNTU 14.04.
Para instalarse MiniNet (es decir, ‘mn’ en la API de Python) en Ubuntu 14+ o
superior, basta con ejecutar los siguientes comandos desde la terminal: (Project,
Mininet Download, s.f.)
Ilustración 40. Terminal Ubuntu
Fuente: Elaboración propia
79
Para la instalación de Mininet de forma nativa desde la fuente se debe introducir:
git clone git://github.com/mininet/mininet
Ilustración 41. Instalar Mininet desde terminal
Fuente: Elaboración propia
Una vez que tenga el árbol de fuentes, el comando para instalar MiniNet es:
mininet/util/install.sh –a
Ilustración 42. Instalar Mininet
Fuente: Elaboración propia
-a: instala todo lo que se incluye en el MiniNet VM, incluyendo dependencias como
Open vSwitch así las adiciones como el disector Wireshark OpenFlow y POX.
Después de la instalación se ha completado, probar la funcionalidad básica MiniNet:
sudo mn --test pingall
Ilustración 43. sudo mn --test pingall
Fuente: Elaboración propia
80
LISTADO DE COMANDOS UTILES EN MININET
Fuente: SDN-Mininet last version_V5 (Martinez Copete, 2015)
COMANDOS PARA GENERAR TOPOLOGIAS
$Sudo mn : Crea una topología por default con 1 switch, 1 controlador y 2 hosts.
Ilustración 44. sudo mn
Fuente: Elaboración propia
$sudo mn --topo single,N
Para crear una topología single de N host, donde N es el número de hosts deseados.
Ilustración 45. sudo topo single
Fuente: Elaboración propia
81
$sudo mn --topo linear,N
Crea una topología linear de N host y N switches, donde N es el número de hosts y
switches deseados.
Ilustración 46. sudo topo linear
Fuente: Elaboración propia
sudo mn --topo tree,N
Crea una topología en árbol de N host y N switches.
Ilustración 47. sudo topo tree
Fuente: Elaboración propia
82
COMANDOS DE PRUEBAS
Mininet>link [node1][node2][up o down]
Crea o elimina un o link entre dos nodos.
Ilustración 48. link
Fuente: Elaboración propia
Mininet>h1 ping h2
Instrucción para saber si hay conectividad entre un host de origen (h1) y un host de
destino (h2).
Ilustración 49. h1 ping h2
Fuente: Elaboración propia
Mininet>pingall
Prueba conectividad entre dos nodos.
Ilustración 50. pingall
Fuente: Elaboración propia
83
Mininet>pinpair
Realiza un test de conectividad entre las diferentes parejas de host de la red.
Ilustración 51. pingpair
Fuente: Elaboración propia
Mininet>iperf
Comando para la caracterización del ancho de banda entre host.
Ilustración 52. iperf
Fuente: Elaboración propia
Mininet>nodes
Muestra los nodos de la topología.
Ilustración 53. nodes
Fuente: Elaboración propia
Mininet>dump
Con el comando dump, se observa la información de todos los nodos que hacen
parte de la topología.
Ilustración 54. dump
Fuente: Elaboración propia
84
Mininet>net
Con este comando se muestra como están conectados los dispositivos de la red.
Ilustración 55. net
Fuente: Elaboración propia
Mininet>eof
Detiene los dispositivos de la red y la cierra.
Ilustración 56. eof
Fuente: Elaboración propia
Mininet>s(número del switch) arp
Comando para el protocolo de resolución de direcciones.
Ilustración 57. s1 arp
Fuente: Elaboración propia
85
Mininet> h(número del host) ifconfig
Muestra la configuración de la interfaz del host
Ilustración 58. h1 if config
Fuente: Elaboración propia
Mininet> s(número del switch) ifconfig
Muestra la configuración de la interfaz del switch.
Ilustración 59. s1 ifconfig
Fuente: Elaboración propia
86
Mininet>h(número del host) ps
Imprime la lista de procesos a partir de un proceso de hosts.
Ilustración 60. h1 ps
Fuente: Elaboración propia
Mininet>s(número del switch) ps
Imprime la lista de procesos del switch.
Ilustración 61. s1 ps
Fuente: Elaboración propia
COMANDOS FUNCIONALES
Mininet>exit
Salir de Mininet
Ilustración 62. exit
Fuente: Elaboración propia
87
Mininet>help
Ayuda, muestra lista de comandos de Mininet
Ilustración 63. help
Fuente: Elaboración propia
Sudo su
Entrar en modo privilegiado
Ilustración 64. sudo su
Fuente: Elaboración propia
88
INSTALACION DE LIBRERÍAS Y PAQUETES REQUERIDOS
En lo siguiente se explican las diferentes librerías y paquetes que fueron
necesarias instalar para la ejecución de la topología Waxman.
Librería FNSS:
Es una biblioteca de Python que proporciona un conjunto de características que
permiten simplificar la configuración de un experimento de red.
La biblioteca central contiene adaptadores para exportar escenarios generados a una
de
los
siguientes
simuladores
de
red
o
emuladores:
ns2, MiniNet, omnet ++, jFed y Autonetkit. (Saino & Cocora, Fast Network Simulation
Setup (FNSS), 2012-2015)
sudo pip install -U fnss
Ilustración 65. Instalación librería FNSS
Fuente: Elaboración propia
Wireshark
Wireshark es una herramienta de red que captura el tráfico de la máquina dónde se
está ejecutando y nos muestra mediante su interfaz gráfica los paquetes
capturados. (TuxyLinux.com, 2015)
sudo apt-get install wireshark
Ilustración 66. Instalación Wireshark
Fuente: Elaboración propia
89
Librerías, utilidades y paquetes para Python 2.
La siguiente son unas líneas de código que permite la instalación de librerías,
utilidades y paquetes que fueron necesarios para la ejecución de la topología
Waxman.py. Seguido de la ilustración (64) se define cada una de ellas.
sudo apt-get -y -q install python ipython python-pip python-setuptools cython ipythonnotebook ipython-qtconsole
sudo apt-get -y -q install python-dev python-scipy python-numpy python-matplotlib pythonnetworkx python-gnuplot python-mako python-nose (github, s.f.)
Ilustración 67. Instalación librerías
Fuente: Elaboración propia

SetupTools: Setuptools es una colección de mejoras para el módulo
distutils de Python, que permiten a un desarrollador construir y distribuir
paquetes de Python de forma sencilla, en especial cuando dependen de otros
paquetes de Python para funcionar. (The Plone Foundation, 2000-2013)
El distutils mencionado en el párrafo anterior es el paquete que proporciona
soporte para la construcción e instalación de módulos adicionales en una
instalación de Python. (Software Foundation, 1990-2015)

Librería Cython: El lenguaje Cython es un súper conjunto del lenguaje
Python que apoya el llamado a funciones C y declara tipos C sobre
variables y atributos de clase. Cython le da el poder combinado de Python
y C para que pueda escribir código Python que llama de ida y vuelta desde
y hacia C o C ++ código de forma nativa en cualquier punto. (Org Cython)

Qtconsole: Es un widget que se siente en gran medida como un terminal,
pero ofrece una serie de mejoras en una interfaz gráfica de usuario, tales
como figuras en línea, edición multilínea adecuada con resaltado de sintaxis,
gráficos, y mucho más. (The IPython Development, s.f.)

Dev: Es la lista de los principales desarrolladores de Python para discutir el
futuro de la lengua y su aplicación. Los temas incluyen cuestiones Python,
diseño, la mecánica de liberación, y el mantenimiento de las emisiones
existentes. (python.org, s.f.)
90

Librería SciPy: (pronunciado "Suspiro Pie") es un ecosistema basado en
Python del software de código abierto para las matemáticas, la ciencia y la
ingeniería. SciPy es una colección de algoritmos matemáticos y funciones de
conveniencia construidas sobre la extensión Numpy de Python.
Con SciPy una sesión interactiva de Python se convierte en un entorno de
procesamiento de datos y el sistema de prototipado rivalizando Sytems como
MATLAB, IDL, Octave, R-Lab y SciLab. (Developers S. , 2015)

Librería numpy: NumPy es el paquete fundamental para la computación
científica con Python, en especial para el manejo de matrices con N
dimensiones, álgebra lineal, transformaciones de Fourier, y capacidades de
números aleatorios. (Developers, 2013)
NetworkX: es un paquete de software de lenguaje Python para la creación,
manipulación, y el estudio de la estructura, la dinámica y las funciones de redes
complejas. (NetworkX Equipo desarrollador, 2014)


Gnuplot: es un paquete de Python que se conecta a gnuplot, el programa
trazado de código abierto muy popular. Se permite el uso de gnuplot desde
dentro de Python para trazar conjuntos de datos de la memoria, los archivos
de datos o funciones matemáticas. (Haggerty, s.f.)

Mako: es una biblioteca de plantillas escrito en Python. Proporciona una
sintaxis familiar, no XML que compila en módulos de Python para el máximo
rendimiento. (Bayer, s.f.)

Nose: Es un marco de pruebas bastante conocido como unidad de Python y
se puede ejecutar prueba unitaria, unittests y pruebas "no repetitivo".
(pythontesting, s.f.)
Librería Matplotlib: Matplotlib es una biblioteca python 2D que produce figuras de
calidad. Matplotlib se puede utilizar en scripts python, Puede generar parcelas,
histogramas, los espectros de potencia, gráficos de barras, diagramas de
dispersión, etc, con sólo unas pocas líneas de código. (Hunter, Dale, Firing,
Droettboom, & Developers Team, 2012 - 2015)
sudo apt-get install python-matplotlib
Ilustración 68. Instalación librería matpotlib
91
EJECUCIÓN ARCHIVO PYTHON
Para importar el archivo waxman.py en el cual está el desarrollo de nuestra
topología, se deben realizar los siguientes pasos:
1. Inicialmente el archivo desarrollado debe estar creado en python para que
pueda ser reconocido por la API.
2. El archivo python debe estar almacenado en la siguiente ruta:
/home/diego/mininet/custom/Waxman.py
home/diego: es el nombre del equipo y usuario de la maquina donde se instaló
la API.
3. Para la ejecución del archivo Waxman.py, lo hacemos desde la línea de
comandos de la siguiente manera:
sudo su : para ingresar en modo privilegiado
contraseña: ( la establecida inicialmente)
cd Mininet : para acceder al directorio de la API
cd custom : para ingresar a la carpeta donde se almacena el archivo python
ls : nos muestra los archivos existentes en la carpeta
Ilustración 69. Ingreso a ruta desde la API
Fuente: Elaboración propia
Para abrir el archivo python desarrollado escribimos sudo python Waxman.py
Ilustración 70. Abrir archivo python Waxman.py
Fuente: Elaboración propia
92
Ejecución topología Waxman.py
sudo python Waxman.py
Al ingresar el comando nos solicita valores de los parámetros necesarios para su
ejecución. Se debe tener en cuenta que los valores de lamda, alpha y beta deben
ser menores de 1 debido que se trata de probabilidades.
Ilustración 71. Ejecución Waxman.py
Fuente: Elaboración propia
Luego de introducido los valores, el script genera los nodos y los distribuye en el
plano y procede a representar gráficamente.
Ilustración 72. Vista ejecución archivo Waxman.py
Fuente: Elaboración propia
93
CREAR Y EDITAR TOPOLOGÍAS DESDE EL EDITOR NANO EN UBUNTU
Para crear una topología desde el editor nano (editor de textos para la terminal) en
Ubuntu navegamos hasta la carpeta en la que deseamos guardar el archivo con las
líneas de código python, para posteriormente ejecutar la topología creada. Para
editar una topología se sigue un proceso similar al de crear una, ya que se tiene que
navegar por el directorio hasta llegar a la carpeta que contiene el archivo deseado,
con la variante de que al encontrar el archivo se abrirá con las líneas de código que
contiene. (Martinez Copete, 2015, págs. 66-68).
Gráficamente seria así:
Ejecutamos nano: Al escribir nano y pulsar Enter automáticamente se abre el editor.
Ilustración 73. Editor nano
Fuente: Elaboración propia
Seguimos los pasos indicados en la parte inferior para buscar y abrir el archivo
correspondiente:
Ilustración 74. Modificación de archivo desde nano
Fuente: Elaboración propia
Como último paso guardamos el archivo en la ruta especificada al momento de
almacenar.
94
CONTROLADOR POR DEFECTO DE MININET POX
POX es un controlador OpenFlow desarrollado para cubrir los requerimientos de las
SDN usando el lenguaje de programación Python. Además de ser un framework
para la interacción con los switches de OpenFlow, está siendo usado para explorar
nuevos prototipos de redes con distribución, para la depuración de las SDN y el
diseño de controladores.
Algunas de las características más relevantes de POX son:
- Interfaz OpenFlow basada en Python.
- Los componentes muestran la selección de ruta de acceso, detección de la
topología, entre otras. (Martinez Copete, 2015, pág. 73).
95
ANEXO 2
CÓDIGO PYTHON TOPOLOGÍA WAXMAN.PY
A continuación se enseña código completo para el desarrollo de la topología
Waxman.py en lenguaje Python.
# -*- coding: utf-8 -*## Codificación estándar e importación de librerías
import scipy.io as sio
import string
import random
import math
import numpy as np
import scipy as Sci
import scipy.stats as stats
import scipy.sparse as sp
import scipy.linalg
from scipy.sparse import csr_matrix
import matplotlib
import matplotlib.pyplot as plt
#Importacion de librerías para generar la red
from mininet.net import Mininet
from mininet.topo import Topo
from mininet.node import RemoteController
from mininet.util import irange
from mininet.cli import CLI
96
class waxman(Topo):
"Asignacion de un host a cada nodo calculado, y un switch por nodo."
def __init__(self, k, **opts):
"""Init.
k: numero de host y switch"""
Topo.__init__( self )
lastSwitch = None
for i in irange(1, k):
host = self.addHost('h%s' % i)
switch = self.addSwitch('s%s' % i)
self.addLink( host, switch)
if lastSwitch:
self.addLink( switch, lastSwitch)
lastSwitch = switch
## Definicion de la funcion waxman (página 52)
def waxman(_lambda=0.6, alpha=0.4, beta=0.2, limites=(1, 10, 1, 10)):
# Validación de ingreso de parámetros
if _lambda < 0:
raise ValueError('_lambda debe ser un valor numérico mayor a 0')
if alpha > 1 or alpha <= 0 or beta > 1 or beta <= 0:
raise ValueError('alpha y beta deben ser valores numericos entre (0,1]')
if not isinstance(limites, tuple) or len(limites) != 4:
97
raise ValueError('limites debe ser una tupla de 4 numeros')
(xmin, xmax, ymin, ymax) = limites
if xmin > xmax:
raise ValueError('En limites, xmin no puede ser mayor a xmax')
if ymin > ymax:
raise ValueError('En limites, ymin no puede ser mayor a ymax')
# numero de puntos con la distribucion de Poisson con una intensidad
proporcional al área
area = (xmax - xmin) * (ymax - ymin)
nnodos = stats.poisson.rvs(_lambda * area)
#nnodos = 20 ## Quitando el comentario se puede definer la cantidad de nodos
de manera manual.
# Obtenido el numero de puntos, se distribuyen los nodos de manera uniforme
nd_coord = np.random.uniform(size=(nnodos, 2))
nd_coord[:,0] = nd_coord[:,0] * ((xmax - xmin) + xmin)
nd_coord[:,1] = nd_coord[:,1] * ((ymax - ymin) + ymin)
## creacion de la matriz con todas las posibles distancias
x_rep = np.tile(nd_coord[:, 0], [1, nnodos]);
y_rep = np.tile(nd_coord[:, 1], [1, nnodos]);
dist_matr =sp.coo_matrix( np.triu(((x_rep-x_rep.transpose())**2 + (y_repy_rep.transpose())**2)**0.5, 1))
98
## creacion de la matriz de probabilidades
prob_matr = alpha*(-dist_matr /(beta * dist_matr.max()))
dist_matr = dist_matr.astype('Int32').max()
## generar la matriz de adyacencia
runi = sp.rand(1,dist_matr,1).max()
adj_matr = (runi>0) and (runi < prob_matr)
matplotlib.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots()
ax.plot(nd_coord[:, 0], nd_coord[:, 1], 'o')
ax.set_title('modelo waxman')
plt.show()
topo = waxman( nnodos)
99
Descargar