Recently, there has been a lot of interest in the Internet Engineering Task Force (IETF) to develop standards for new congestion control algorithms that can provide ultra-low latency and scalable throughput, both of which are crucial to successfully deploy 5G applications.
Before developing such standards, it is crucial to evaluate the effectiveness of these algorithms and their deployment complexity. The Transport Area Working Group (tsvwg) at the IETF has thus been carefully examining the experimental results shared by the research community to derive inferences about the newly proposed congestion control algorithms and queue disciplines.
Performing network experiments on physical testbeds can be expensive, even for relatively small networks, and more importantly, not scalable. Linux network namespaces are a suitable alternative to physical testbeds and can be used to set up a lightweight emulation testbed for the experimental evaluation.
Setting up a network environment in a single system using network namespaces enhances the reproducibility aspects, and minimizes the maintenance and cost overheads. Nevertheless, building a complex topology using network namespaces can be a tedious process, starting with the creation of a large number of namespaces, establishing connections, generating different traffic patterns and extracting per-node or per-flow statistics for evaluation.
Network Stack Tester (NeST) is an open-source Python package developed by the National Institute of Technology Karnataka (NITK) Surathkal, India to simplify the process of performing networking experiments.
It internally uses Linux network namespaces and provides APIs to create complex emulated networks, run tests and extract the statistics using iproute2, netperf and iperf3 in a single python script as shown in Figure 1 below.
The ‘Topology Module’ handles the creation of network namespaces and establishes virtual links for the user by calling the ‘Engine Module’, which internally uses iproute2 to create network namespaces and set up virtual links, and the ‘Experiment Module’ handles traffic generation by using netperf and iperf3, statistics collection and plotting graphs.
Multiple instances of the same network topology can co-exist, and different experiments can be run in parallel on every instance because NeST internally maps the user-specified names for namespaces to uniquely generated names using a ‘Topology Map’.
All these features ensure that using NeST requires fewer prerequisites (that is, prior knowledge of network namespaces to set up virtual testbeds or experience about setting up physical testbeds) and the experiments conducted using NeST can be easily reproduced.
Developed with the future in mind
NeST has been designed and developed taking into consideration the increased interest in the research community to evaluate new transport protocols such as QUIC, BBRv2 and TCP Prague, and new queue disciplines such as FQ-CoDel, CAKE and FQ-PIE. Hence, it provides timestamped JSON (raw) data and plots for congestion window, per-flow throughput, link utilization and queue backlog.
Additionally, it is targeted to be used for educational purposes to introduce the fundamentals of networking protocols to Bachelors and Masters graduate students.
It can be quickly installed from PyPI and the source code is openly available under GPLv2. It can be obtained from GitLab. To get started with NeST, refer to the documentation and a few example programs that are provided in the GitLab repository.
Contributors: Shanthanu S Rai, Dhanasekhar M, Leslie Monis and Mohit P. Tahiliani
Narayan G is a Bachelors Student in the Department of Computer Science and Engineering at National Institute of Technology Karnataka (NITK) Surathkal, India.
The views expressed by the authors of this blog are their own and do not necessarily reflect the views of APNIC. Please note a Code of Conduct applies to this blog.