Network Simulation is Hard (Part 1/2)
- 4 minutes read - 684 wordsEvery few weeks I’m asked about why we1 can’t do pre-change network validation. Most network engineers don’t understand the nuances and details around this topic, and there’s very few words published on this, so it’s time for me to discuss what constitutes network simulation, network emulation, and what the challenges are around trying to validate network changes before they’re put in to production.
This is part one of two, where I’ll dive in to defining network simulation and some example tools. Then in the next post, I’ll cover how you can use these building blocks to validate changes, and the limits of each approach.
TL-DR
It’s pretty much impossible to do what most network engineers dream of: tell me what’s going to happen with absolute confidence if I make a change to the network configuration or state. That said, there’s still value in solving parts of this enormous problem space, but you need to understand the limits. So let’s dig in.
What is Network Simulation?
From Wikipedia:
Network Simulation is a technique in computer networking that utilizes a software program to imitate, replicate, and model the behavior of a real-world computer network. It is a process of simulating the functioning, performance, and behavior of computer networks by creating a virtual network environment.
This virtual environment can help to test and predict how a real-world network may behave in various scenarios, without the need for expensive hardware or making significant changes to the original network. Network simulation enables network engineers and researchers to study network behavior under controlled conditions, without the inherent risks and expenses of testing in a live network.
This is a good starting point. But what about spinning up vendor images that share a likeness to their physical hardware counterparts? That’s where network emulation comes in.
What is Network Emulation?
Also from Wikipedia:
Network emulation is a technique for testing the performance of real applications over a virtual network. This is different from network simulation where virtual models of traffic, network models, channels, and protocols are applied.
Not the greatest definition if you ask me, but it’s an important distinction that needs understanding. With these definitions, network simulation is the higher-level catch-all term of creating any type of network model, and network emulation is the more specific case of trying to use something like a VM version of a NOS (network operating system) image spun up in a virtualized environment.
Can you give me some examples?
There’s been a wide variety of network simulators over the years. Here’s some examples of commercial products I’ve worked with that attempt to create a network simulation of control plane protocols in the network:
- Cariden MATE (Now Cisco WAE)
- WANDL IP/MPLSView (Now Juniper)
- OPNET (Now Riverbed)
- Packet Design (Now Ciena)
- Mininet (SDN/OpenFlow Simulation)
Many of those tools were concerned with modeling a simplified routing plane. For example, just model OSPF, BGP, and MPLS behavior of a few hundred routers.
Some newer open source and commercial solutions have come about in the last few years that attempt to simulate more than just routing (RIB) protocols, but also other state and forwarding (FIB) information as well. Terms like Network Assurance, Intent-Based Networking and Digital Twins have been thrown around to describe this newer generation of solutions:
- Forward Networks
- IP Fabric
- Batfish (Now maintained by AWS)
- Veriflow (Now part of VMware)
- LnetD NM
- Juniper Apstra
What about emulators? Anyone who’s tried to create their own virtual lab to learn a certification has probably used one of the following tools.
- Dynamips - The one that started it all!
- GNS3
- EVE-NG
- Vagrant + Libvirt
- Cisco CML - a.k.a. VIRL and the building blocks for Cisco DevNet Sandboxes
- NVIDIA Air
- Containerlab
- NetLab - More of a higher level orchestrator for Vagrant or Containerlab
- Camphor Networks
- Tesuto (RIP!)
- NRE Labs (RIP!)
I’ve tried to include all the ones I’ve seen over the years. Reach out and tell me if there’s any I’ve missed!
What next?
Now that we’ve got various network simulation options, we’ll discuss how you can use these simulations.
Footnotes
-
We = Network engineers in general, or my $dayjob’s product specifically ↩︎