This thesis addresses the following question: What can be better ways of realizing network simulators and emulators? This question presents a moving target, since the meaning of “better” changes with changes in requirements due to rapid advancements in networking technology. As a result, this thesis is oriented towards identification of the design parameter space for constructing network simulators and emulators, with special focus on the software related challenges.
Network simulators and emulators have become major tools in experimental networking research because of several reasons, including the higher costs of experimenting on real networks. A simulation or an emulation-based experiment involves activities that can be categorized into the experimental design level or software level. While the experimental design level includes activities such as the identification of the system under test and construction of its model, the software level involves activities that relate to the construction of a simulator or an emulator as a software entity. At the software level, network simulators and emulators frequently require the network researcher to write the code for implementing the model elements used in the simulation. Since network researchers are not necessarily also experts in software, network simulators and emulators must have solid and simple software architectures that are designed to ease this burden of implementation.
Working towards formulating better ways of realizing network simulators and emulators necessitates a solid background about the available solutions in the field. Thus, this thesis presents surveys on network simulation and emulation, as well as a stance on the terminology on simulation, emulation, and testbeds.
In this thesis, a component-based approach is chosen as our approach to building simulators and emulators. The rationale for this choice is explained in detail, primarily for guiding further studies on software architectures for simulators and emulators. One of our main motivators in using components is to use the component-based structure of networks as perceived by network professionals, as a leverage in increasing the usability of simulators and decreasing their learning costs.
There are many design decisions involved in formulating a component-based approach. Making such decisions require a good understanding of the component concept and its use in software development, which we facilitate by covering some selected issues in component-based software engineering, and by presenting a survey of major component-based approaches with a special focus on their component models. This also helps us place the component-based architecture we have developed within the context of component-based software engineering. Furthermore, the design decisions involved in the development of our approach are documented thoroughly, since these decisions provide an idea about the range of decisions that need to be made in similar projects.
Our component-based approach is called MICA – The Minimalistic Component-Based Software Architecture. MICA aims to be minimal and easy to use. At the same time, MICA provides a detailed component model with several unique characteristics such as separation of worker and constructor components, and having a single control flow model from the perspective of the component developers, while being able to express multiprogramming, multitasking, and parallel processing through the use of component containers. MICA also includes necessary constructs for supporting transparent distribution of components. Furthermore, provided that certain conditions are satisfied by a simulator that is built using MICA, MICA allows model replacement and simulator interoperability at the software level.
We also describe two different component platforms that we implemented for the MICA component model. One of these platforms provides a single thread of control, therefore it is best suited for testing and debugging. Our other platform is built using the Parallel Virtual Machine (PVM) middleware, and it supports the whole range of control flow options defined in the component model.
We have also implemented a network emulator built using MICA, which is called DINEMO. DINEMO is a refactoring and extension of the NEMAN network emulator. It uses the TUN/TAP virtual network interfaces for hosting real applications distributed on multiple hosts in a simulated network. DINEMO acts as a proof-of-concept for MICA.