By Mayur Channegowda, Research Assistant at the University Of Bristol's Faculty of Engineering.
This article is part of our series: a day in the software life, in which we will be asking researchers from all disciplines to discuss the tools that make their research possible.
How the Internet is used today is pushing its original architecture in an unexpected and ever more demanding direction.
The Internet, as it presently is, faces several limitations in regards to scalability, networking, mobility, and security. This requires a radical approach and a fundamental redesign of Internet architecture. Our research into these issues has allowed us to propose new technological and service schemes, supported by both theoretical and proof-of-concept studies.Fortunately, research in telecommunications networking is well funded, enabling the development of various tools and techniques to describe problem statements, create varied scenarios and analyse their results. These include simulation and emulation tools, as well as substantiated theoretical studies, allowing us to add realism to simulations and free-for-public experimental research testbeds.
My work involves a range of software and hardware components. Solving a typical networking problem starts with modelling existing network behaviour, usually starting with simulation tools. Network simulation replicates network behaviour by software/hardware without the real network being present. Open network simulation tools like NS-3, NetSim, OMNet++ provide a great source to program network models and observe in a controlled way how they behave. License based solutions (usually available in universities) like OPNET, which I used for my MSc dissertation, lets you analyse realistic simulated networks to compare the impact of different technology designs, including both wired and wireless technologies, on end-to-end behaviour.
Usually C and C++ are the preferred simulation programming languages owing to their speed and portability, but recently there has been a shift towards Python for fast prototyping. When it comes to simulating hardware devices I use C/C++ network driver libraries such as Boost.Asio and ACE to compose hardware actions, but I prefer Python with libraries such as Twisted and NetworkX for building software components due to their ease of use and library support.
For example, the popular software defined networking approach, which decouples network control intelligence from physical infrastructure for simplification, is usually coded in C/C++ and the control decisions about how and where traffic is sent, can be done via control programs written in Python.
One major drawback to networking simulation is the generation of real data/traffic. The ultimate goal of a network is not just to provide the largest amount of data by the fastest means, but to also provide the right traffic data. Thus knowledge of traffic types, or flows, and the state of the network they go through, is essential for understanding network characteristics and behaviour. An emulated network mimics these real world scenarios, thereby making the research more credible.
Network emulation techniques replicate some properties of a network device or traffic over a physical network. My experience with network emulation is in a Linux environment. It might come as a surprise that a Linux box can emulate diverse network behaviours. Yet it can act as a real packet router/switch using IPROUTE and Quagga modules, emulate link characteristics like delay and jitter, link quality using Netem and tc, and also support packet generation captures, such as libpcap, tcpdump and wireshark, which provide detailed views of the protocol exchanges.
Another important development is the free-for-all experimentation facilities, backed by research funding, to help identify and solve future Internet problems. GENI, FIRE and Akari are some examples where testbeds have been made available for research use. Once the simulation and emulation have provided enough results, then a proof-of-concept implementation can be carried over. Using resources from testbeds like protogeni, planetlab, ofelia and so on, I can transform my simulation environment into a real world prototype for resources such as wired and wireless networking devices. This lets me create a network of my own to test and develop a better Internet for us all.