• No se han encontrado resultados

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 Webhosts 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.