5.2. Herramienta de simulación OMNeT++ 98
5.2.3. Simulador de redes OMNeT++ 101
El simulador de eventos discretos OMNeT++, [48], está disponible desde 1997.
La concepción de OMNeT++ fue implementar un simulador genérico que pudiera
extenderse modularmente para hacerlo específico para áreas como redes de
comunicaciones, sistemas multiprocesador y sistemas distribuidos. Este entorno ha
sido usado desde entonces probando su eficacia para simular colas en redes de
comunicaciones, redes ad‐hoc, inalámbricas, peer‐to‐peer, redes de conmutación
óptica, redes de almacenamiento distribuido, etc.
Lejos de ser punto en contra, es un punto a favor el hecho de que OMNeT sea un simulador que ofrece un marco genérico para distintas áreas de simulación. Se encuentran disponibles el código fuente y documentación, así como foros y listas de correo para la colaboración entre usuarios. Esto permite extender el simulador base mediante la adición de marcos de trabajo o frameworks, que añaden especificidad para un área concreta de simulación. Los frameworks son en sí mismos extensibles mediante la adición de nuevos módulos simples.
El diseño de OMNeT++ se basa en los siguientes puntos:
• Permitir simulaciones a gran escala, mediante modelos jerárquicos construidos
con componentes reutilizables.
• Una interfaz gráfica orientada a la depuración y verificación de los modelos
implementados.
• Estructura modular que permite extensibilidad y personalización, así como
inclusión de componentes en aplicaciones más grandes de planificación de red.
• Interfaces de datos abiertas, generando ficheros de definición y de resultados
fácilmente interpretables y procesables por herramientas genéricas.
• Proveer un entorno de desarrollo integrado que facilita el desarrollo de
modelos y el análisis de resultados.
La base del entorno de simulación es el núcleo o kernel. En éste se encuentran programadas las funciones generales que permiten la extensión modular del programa para la simulación en áreas específicas mediante herencia e interfaces en C++. Dentro
de cada extensión o framework específico se pueden definir los modelos de
simulación.
La definición de modelos en OMNeT se lleva a cabo de forma modular
jerárquica. Existe un módulo principal, por ejemplo el módulo de red, que engloba todos los elementos y relaciones existentes entre ellos. Debajo de este nivel, están los
módulos compuestos, que integran sistemas y elementos físicos de la red, como
pueden ser routers, servidores Web, hosts de usuarios finales, enlaces inalámbricos, etc. Y finalmente, en el nivel más bajo de la jerarquía se encuentran los módulos
simples. Éstos implementan funciones concretas, como interfaces de red (punto‐a‐
punto, Ethernet,…), protocolos específicos (TCP, FTP,…), o canales para la conexión entre módulos (enlaces de fibra, enlaces inalámbricos,…). Los módulos simples son la base de los modelos definidos en OMNeT++, y están implementados en lenguaje C++. La estructura modular descrita puede observarse en la figura 5.2‐1.
Fig. 5.2‐1 Estructura modular de los modelos de OMNeT++. Fuente [48].
Por otro lado, sólo se implementan en C++ los módulos simples. La definición de los modelos de red y módulos compuestos se realiza mediante un lenguaje especial
desarrollado para esta función, el lenguaje NED (Network Description Language).
Mediante el lenguaje NED se establece la jerarquía modular, la construcción de
módulos compuestos y la asociación y conexión entre los elementos del modelo, así como la definición de los canales de comunicación e interfaces de entrada y salida.
Una vez se tienen definidos los módulos a usar, ya sean módulos existentes previamente o creados para tal fin, se pasa definir topologías concretas sobre las que realizar una configuración de elementos y módulos implicados. Una vez decididos los rangos de parámetros, se crea un fichero inicialización de topología, por defecto “OMNETPP.INI”, que contiene los valores concretos de cada parámetro a usar en cada
experimento y conjunto de medidas. Se crean instancias concretas de ejecución,
llamadas “RUN ‘X’”, y se ejecuta la simulación.
A lo largo de la simulación se van produciendo una serie de eventos
programados en el tiempo dentro de la cola de espera principal. Estos eventos pueden
implementar bien mensajes entre los módulos simples o bien automensajes para
simular temporizadores. La transmisión de mensajes se puede realizar entre módulos directamente conectados, a través las interfaces directas entre módulos simples o los
canales de comunicación entre objetos y módulos compuestos. También se pueden transmitir mensajes directamente entre un par de módulos cualquiera en caso de ser necesario hacer llamadas por ejemplo pasando varios niveles de jerarquía.
Durante cada ejecución de la simulación se obtienen resultados de salida de los distintos módulos así como colecciones de estadísticas, que se van almacenando en
ficheros escalares y vectoriales para su posterior procesado y visualización en
herramientas gráficas. Además el proceso de ejecución permite elegir entre una
interfaz textual muy rápida o una interfaz gráfica más lenta pero especialmente
diseñada para la depuración, localización y corrección de fallos.
La capacidad de extensión y adición de nuevos módulos es la que se ha aprovechado para integrar la simulación del protocolo PIM‐SM y sus modificaciones de operación. Es la razón fundamental de la elección de este simulador como herramienta para el desarrollo del estudio. En la simulación y análisis de PIM‐SM se ha realizado
mediante la extensión de módulos del framework INET, [49]. La construcción de
topologías se ha llevado a cabo usando la herramienta auxiliar ReaSE. Se pasa a describir ambos en el siguiente apartado.