RFC 7980
A Framework for Defining Network Complexity
1. Introduction โจ
Okay so bestie, let's get into it ๐ This is Part 1 of the RFC 7980 glow-up, and the title block comes first because it's giving "who's who" energy ๐
Title block ๐ฆ This is an Independent Submission and it's Informational, which means it's published for info, not as an Internet Standard. The authors are M. Behringer and A. Retana from Cisco Systems, R. White from Ericsson, and G. Huston from APNIC. It's from October 2016, and the ISSN is 2070-1721. Also, nothing about obsoletes or updates is listed in the title block, so it doesn't replace or change any other RFC ๐ธ
The title is A Framework for Defining Network Complexity ๐ง and the big idea is that complexity is SUCH a popular word in network design, but nobody has a generally agreed definition for it ๐ Like, everyone uses it, nobody can pin it down. The abstract says the document gives a framework for research on the topic, plus some practical trade-off examples ๐
Then there's the status bit: this is a snapshot of the IRTF's Network Complexity Research Group (NCRG) at the time it closed, not final results ๐ It's a basis for future work, so lowkey it's a starting point, not the finish line โจ
1. Introduction ๐
Network design is basically the art of finding the simplest solution to a problem ๐ซถ Complexity is already baked into the design process, so engineers don't ask if there should be complexity, they ask how much is needed ๐ But then, how do you even measure "how much"? That's assuming there's a way to characterize complexity, and honestly that's still a research thing rather than a solved problem ๐ญ Right now, design decisions are based on rough guesses about a network's complexity instead of a solid understanding ๐
Here's the plan for the doc ๐ It starts with general considerations and foundational definitions, then gives examples of the trade-offs engineers make all the time. The point is that there's no single answer to complexity. It's a managed trade-off between a bunch of parameters ๐ After that, it lists parameters engineers should think about when they try to measure complexity or build a framework around it. The list isn't complete, but it's a guide to known areas of investigation AND areas that still need digging into ๐ฅ
Two purposes here, bestie โจ First, it helps researchers aim their work at what network designers actually care about, which makes their research way more useful ๐ It might even inspire research into stuff nobody has looked at yet ๐ฆ Second, it helps network engineers spot where complexity might be "hiding" in their networks and understand how it interacts with design and deployment ๐
The IRTF Network Complexity Research Group (NCRG) [ncrg] was meant to define a framework for network complexity research, while also recognizing that metrics for overall network complexity may be impossible ๐ญ This doc summarizes that group's work up to its closure in 2014 ๐ธ Again, it's not final results, just a snapshot of an ongoing activity as a basis for future work โญ
Lots of existing research on network complexity is listed on the Network Complexity Wiki [wiki] ๐ง The wiki also has background info on past meetings, previous research, and more, so go check it out if you're obsessed like me ๐
2. General Considerations ๐
2.1. The Behavior of a Complex Network ๐ฆ
There's no generally accepted definition of network complexity, but we do have some understanding of how a complex network behaves ๐ A complex network has some or all of these properties:
- Self-Organization ๐: A network runs some protocols and processes without external control, like a routing process or failover mechanisms. Those mechanisms interacting with each other can lead to complex behavior ๐
- Unpredictability ๐ฎ: In a complex network, a local change can have unpredictable effects on the behavior of the global network ๐ญ
- Emergence ๐ธ: The behavior of the system as a whole isn't reflected in the behavior of any single component ๐ง
- Non-linearity ๐: An input into the network produces a non-linear result ๐
- Fragility ๐: A small local input can break the entire system ๐
2.2. Complex versus Complicated ๐
"Complex" and "complicated" get used interchangeably all the time, but they describe different (though overlapping) properties โจ The RG made some statements about the two terms, but they'd need more refinement before they count as formal definitions ๐
- A "complicated" system is a deterministic system that can be understood with an appropriate level of analysis ๐ซถ It's often an externally applied attribute rather than an intrinsic property of a system, and it's typically associated with systems that need deep or significant analysis ๐
- A "complex" system, by comparison, is an intrinsic property of a system ๐ It's typically associated with emergent behaviors, where the behavior of the whole isn't fully described by the sum of its components. Complex systems are often linked to components that show high levels of interaction and feedback ๐ฅ
2.3. Robust Yet Fragile ๐
Networks typically follow the "robust yet fragile" paradigm ๐ They're designed to be robust against a set of failures, but they're very vulnerable to other failures ๐ญ Doyle [Doyle] explains it with an example: the Internet is robust against single-component failure but fragile to targeted attacks ๐ This property also touches on the fact that all network designs are necessarily making trade-offs between different design goals โจ
The simplest one is "Good, Fast, Cheap: Pick any two (you can't have all three)", as described in "The Twelve Networking Truths" [RFC1925] ๐ In real network design, you have to juggle trade-offs between lots of aspects, like scope, time, and cost across the planning, design, implementation, and management of a network platform ๐ง Section 3 gives some trade-off examples, and parameters are covered in Section 4 ๐ฆ
That's the end of Part 1! ๐๐ Part 2 is coming next, so stay tuned, bestie ๐ซถ
2.4. The Complexity Cube โจ
okay so complex tasks on a network can get done in different places ๐ง for example, routing can be controlled by central algorithms with the result pushed out to everyone (that's the OpenFlow model ๐ ). Or the routing algorithm can run completely distributed, with every router figuring it out together (routing protocols like OSPF or IS-IS ๐ฆ). Or a human operator could calculate the routing tables and set them up statically by hand ๐. Behringer [Behringer] calls these three axes a "complexity cube", with the sides being network elements, central systems, and human operators. Any function can be built on any of those three axes, and that choice probably changes how complex the whole system ends up being ๐
2.5. Related Concepts ๐ธ
bestie, when you're talking about network complexity, there are SO many influencing factors you have to look at before you get the full picture ๐ here are some of the big ones:
- State in the Network: this covers the network elements, like routers, switches (along with their OS, including the protocols), lines, central systems, and so on. It also includes how many protocols run on network devices and how algorithmically complicated those protocols are ๐
- Human Operators: complexity often shows up as a network that human operators don't completely understand ๐ human error is a primary source of catastrophic failures, so it must be taken into account, no exceptions ๐ซถ
- Classes/Templates: honestly, it's not about counting lines in a config or counting hardware boxes. What matters more is how many classes those things can be derived from โจ so 1000 interfaces that are all configured identically are probably LESS complex than 5 that are each configured completely differently ๐ iconic.
- Dependencies and Interactions: how many dependencies there are between elements, plus how those elements interact with each other, affects how complex the network gets ๐ธ๏ธ
- Total Cost of Ownership (TCO): TCO could be a good metric for network complexity, but only if the calculation counts every influencing factor, like how long it takes staff to train up so they can maintain the network ๐
- Benchmark Unit Cost (BUC): BUC is a related metric that shows what it costs to operate a certain component ๐ if it's calculated well, it reflects at least part of that component's complexity. So the way TCO or BUC gets calculated can help you come up with a complexity metric ๐
- Churn / Rate of Change: the rate of change in a network can add to its complexity all on its own, especially when a bunch of components in the overall network are interacting ๐ช๏ธ
Networks also differ in their intended purpose (think enterprise networks versus public carrier networks ๐ข) and in their intended roles (think "access" networks versus "core" transit networks ๐ฃ๏ธ). Those differences in purpose and role can change how much complexity people will tolerate, and even which metrics for complexity make sense in each scenario ๐ซ so no, this isn't a space where one single way of measuring complexity, with one single acceptability threshold, is appropriate. main character energy would be pretending there's one answer ๐ โโ๏ธ
2.6. Technical Debt ๐ธ
okay this one's so real ๐ญ lots of changes in a network get made while depending on the network that already exists. Often a suboptimal decision gets made, because the optimal decision is hard or even impossible to pull off at that moment. Over time, all those suboptimal changes start causing serious complexity by themselves, and that complexity wouldn't have existed if the optimal solution had been implemented in the first place ๐
The term "technical debt" refers to that accumulated complexity from suboptimal changes over time. Just like financial debt, the idea is that technical debt has to be repaid one day, by cleaning up the network or the software ๐งพโจ the bill always comes eventually, periodt.
2.7. Layering Considerations ๐
when you look at the bigger picture (applications, transport services, network services, and media services), you can engineer responses to certain types of desired application behavior in lots of different ways, and those ways can involve different layers of the so-called network protocol stack ๐ฅ for example, Quality of Service (QoS) could be engineered at any of these layers, or even across a bunch of different combinations of layers ๐
complexity shows up when mutually incompatible measures get used together (like error detection and retransmission at the media layer, combined with the TCP transport protocol ๐ตโ๐ซ), or when an assumption made in one layer gets violated by another layer. That leads to surprising outcomes that can create complex interactions, like oscillation, because different layers use different timers for retransmission ๐ these issues are why people have the perspective that increased layering frequently increases complexity [RFC3439] ๐ซฃ
and yes, this research is focused on network complexity, but the interactions between the network and the end-to-end transport protocols, application layer protocols, and media properties are relevant too ๐ฆ
3. Trade-Offs โ๏ธ
network complexity is a system-level problem, not a component-level one ๐ the overall system complexity can end up being more than just the sum of the complexity of each individual piece ๐คฏ
there are two basic ways to tackle a system-level problem: interfaces and continuums ๐งฉ with interfaces, you treat each piece of the system as a "black box" and work hard to fully understand the interfaces between those black boxes. With a continuum, you try to understand how a single change or element affects the entire system as a set of trade-offs ๐ข
network complexity can be approached from either of those perspectives, but in this document we chose the continuums of trade-offs approach for looking at the system-level impact of network complexity ๐ in theory, modifying the network to fix one particular problem (or class of problems) adds complexity, and that complexity raises the likelihood (or the appearance) of a different class of problems ๐ so the key steps are discovering these continuums of trade-offs, and then figuring out how to measure each one. That's how you understand and measure system-level complexity this way โจ
the following sections describe five such continuums, but more may be possible ๐
- Control-Plane State versus Optimal Forwarding Paths (or its opposite measure, stretch)
- Configuration State versus Failure Domain Separation
- Policy Centralization versus Optimal Policy Application
- Configuration State versus Per-Hop Forwarding Optimization
- Reactivity versus Stability
3.1. Control-Plane State versus Optimal Forwarding Paths (Stretch) ๐ฆ
control-plane state is the aggregate amount of information the control plane carries through the network in order to produce the forwarding table on each device ๐ฆ every extra piece of information added to the control plane adds to the complexity of that plane. That includes more-specific reachability information, policy information, additional control planes for virtualization and tunneling, or more precise topology information ๐ง and that added complexity adds to the burden of monitoring, understanding, troubleshooting, and managing the network ๐ฉ
removing control-plane state isn't always a net positive for the network as a system, though ๐ โโ๏ธ removing it almost always makes forwarding and handling of packets less optimal. That decreased optimality can be termed "stretch", which is defined as the difference between the absolute shortest (or best) path traffic could take through the network and the path the traffic actually takes ๐ฃ๏ธ stretch is expressed as the difference between the optimal path and the actual path. Here's an example of this trade-off ๐
+---R1---+
| |
(aggregate: 192.0.2/24) R2 R3 (aggregate: 192.0.2/24)
| |
R4-------R5
|
(announce: 192.0.2.1/32) R6
assume each link is of equal cost in this figure, and that R6 is advertising 192.0.2.1/32 ๐ฃ
for R1, the shortest path to 192.0.2.1/32 (advertised by R6) is along the path [R1,R2,R4,R6] ๐โโ๏ธ
now, say the network administrator decides to aggregate reachability information at R2 and R3, advertising 192.0.2.0/24 towards R1 from both of those points ๐ this cuts down the overall complexity of the control plane, since less information gets carried past these two routers (at R1 only, in this case) โ๏ธ
but here's the twist ๐ณ aggregating at R2 and R3 can make both routes towards 192.0.2.1/32 look like equal cost paths to R1. There's no particular reason R1 should pick the shortest path through R2 over the longer path through R3 ๐คทโโ๏ธ and that, in effect, increases the stretch of the network. The shortest path from R1 to R6 is 3 hops, and it's the path that will always get chosen before aggregation is configured. Assuming half the traffic goes through R2 (3 hops) and half through R3 (4 hops), the network is stretched by ((3+4)/2) - 3), or .5, a "half a hop" ๐๐
last thing, traffic engineering through various tunneling mechanisms is, at a broad level, adding control-plane state to get more optimal forwarding (or better network utilization) ๐ optimizing network utilization may mean detuning stretch (intentionally increasing stretch) to boost overall utilization and efficiency. That's just another instance of control-plane state (and therefore complexity) being weighed against optimal forwarding through the network โ๏ธโจ
3.2. Configuration State versus Failure Domain Separation โจ
Okay so, bestie, a failure domain is basically the group of devices that feel it when the topology or configuration changes in the control plane. ๐ซถ Bigger failure domains are way more prone to cascading failures, so smaller ones are normally the move. ๐
The main tool for shrinking a failure domain is information hiding, and there are two big things you can hide: reachability information and topology information. ๐ฆ Aggregating reachability is giving summarization. Like, 192.0.2.1/32, 192.0.2.2/32, and 192.0.2.3/32 can all get squished into the single route 192.0.2.0/24, with the metrics of the component routes aggregated too. ๐ Honestly, aggregation is super natural in IP networks, starting from individual hosts getting grouped into a subnet at the network edge. ๐ธ Topology aggregation looks like summarizing routes at a link-state flooding domain boundary, or just not having topology info at all in a distance-vector protocol. ๐ง
Now here's the tea. Limiting failure domains looks like an absolute good for network complexity, but there's a real trade-off in configuration complexity. โจ The more failure domain edges you make, the more complex the configuration gets. ๐ญ It's especially true when you redistribute routing info between multiple control-plane processes to make those boundaries, because moving between different control-plane types wrecks the consistent metrics that most of them use to build loop-free paths. ๐ Redistribution is the real menace here since it opens the door to very destructive positive feedback loops inside the control plane. ๐ฅ Some examples of the complexity you get from making failure domain boundaries: route filters, routing aggregation configuration, and metric modifications to engineer traffic across those boundaries. ๐
Going back to the network from the previous section, aggregating routing info at R2 and R3 splits the network into two failure domains: (R1, R2, R3) and (R2, R3, R4, R5). ๐ฆ A failure at R5 should have no impact on the forwarding information at R1. ๐
But wait, there's a catch! ๐ A false failure domain separation happens when the metric of the aggregate route advertised by R2 and R3 depends on one of the routes inside the aggregate. For example, if the metric of the 192.0.2.0/24 aggregate is derived from the metric of the component 192.0.2.1/32, then a failure of that one component changes the forwarding table at R1. ๐ So the control plane never really got split into two distinct failure domains. ๐ญ The extra complexity in this illustration network is managing the configuration needed to aggregate the control-plane info, plus managing the metrics so the control plane is actually separated into two distinct failure domains. ๐
Replacing aggregation with redistribution adds the complexity of managing the feedback of routing info redistributed between the failure domains. ๐ For instance, if R1, R2, and R3 run one routing protocol while R2, R3, R4, R5, and R6 run another, R2 and R3 could be configured to redistribute reachability info between those two control planes. ๐ This can split the control plane into multiple failure domains (depending on exactly how redistribution is configured), but the cost is creating and managing that redistribution config. ๐ซถ And on top of that, R3 must be configured to block routing info redistributed at R2 towards R1 from being redistributed (again) towards R4 and R5. ๐ฅ
3.3. Policy Centralization versus Optimal Policy Application โจ
Another big area where control-plane complexity meets optimal network utilization is QoS. ๐ Two specific actions are required to optimize the flow of traffic through a network: marking and Per Hop Behaviors (PHBs). ๐ฆ Instead of examining each packet at each forwarding device, packets are often marked, or classified, in some way (typically through Type of Service bits) so they can be handled consistently at all forwarding devices. ๐ง
Packet-marking policies must be configured on specific forwarding devices throughout the network. ๐ Distributing marking closer to the edge means configuring and managing more devices, but it gives optimal forwarding at a bigger number of network devices. ๐ธ Moving marking toward the network core means packets get marked for proper handling across fewer devices. โจ Same deal with PHBs: every device a packet passes through with the correct PHBs configured makes packet handling more consistent through the network, but it also means more devices to configure and manage for those PHBs. ๐ Here's the network we'll use to illustrate this:
+----R1----+
| |
+--R2--+ +--R3--+
| | | |
R4 R5 R6 R7
In this network, marking and PHB configuration may be configured on any device, R1 through R7. ๐ซถ
Say marking is configured at the network edge. Then four devices (R4, R5, R6, R7) must be configured, including ongoing configuration management, to mark packets. ๐ Moving packet marking to R2 and R3 halves the number of devices where marking config must be managed, but the cost is inconsistent packet handling at the inbound interfaces of R2 and R3 themselves. ๐
So, reducing the number of devices that need managed configs for packet marking also reduces optimal packet flow through the network. ๐ Assuming packet marking is actually configured along the edge of this network, configuring PHBs on different devices has the same trade-off of managed config versus optimal traffic flow. ๐ If the correct PHBs are configured on R1, R2, and R3, packets get handled correctly at each hop, but the cost is managing PHB config on three devices. ๐ฆ Configuring a single device for the correct PHBs (R1, for instance) cuts down the config management, but at the cost of less than optimal packet handling along the entire path. ๐ญ
3.4. Configuration State versus Per-Hop Forwarding Optimization โจ
The number of PHBs configured along a forwarding path has the same complexity versus optimality trade-off we just covered. ๐ The more classes (or queues) traffic gets divided into, the more fine-grained that traffic can be managed as it moves through the network. ๐ But every class of service has to be managed, both in terms of configuration and in how it interacts with the other classes configured in the network. ๐ซถ
3.5. Reactivity versus Stability โก
okay so bestie, this is the big one ๐ญ how fast should the control plane react when something changes? sounds like an easy question but it is NOT, it's a whole thing ๐
the control plane's convergence (how long it takes the network to figure out the new situation) breaks down into four essential parts:
- Detecting the change
- Propagating information about the change
- Determining the best path(s) through the network after the change
- Changing the forwarding path at each network element along the modified paths
every one of these can be sped up to make convergence faster ๐๏ธ but some of those upgrades come with extra complexity, so it's never free bestie ๐ซถ
detecting changes can get super quick with faster echo (or hello) mechanisms, lower-layer physical detection, and other methods ๐ฆ BUT each of these only works if you're ready to evaluate and manage false positives and high rates of topology change. so you trade speed for drama ๐
like, if the state of a link change can be detected in 10 ms, the link could theoretically flip 50 times in a single second ๐ and it would be impossible to tune a control plane to react to topology changes at that rate. feeding topology change info into the control plane that fast can destabilize the control plane, and hence the whole network ๐ญ so to counter this, most techniques that quickly detect link-down events include some form of dampening mechanism ๐ง and yes, configuring and managing those dampeners adds complexity too. literally everything has a cost ๐ฅฒ
propagating changes is its own vibe ๐ the info has to reach every device along the path so each one can compute new forwarding tables. in high-speed environments this can happen in tens of milliseconds, so multiple changes could get propagated per second. pushing info at that rate into the control plane risks overloading the processes and devices taking part, and it can create destructive positive feedback loops in the network ๐ to avoid all that, most control-plane protocols regulate how fast any individual device is allowed to transmit information about network changes ๐ฆ
a recent innovation here is exponential backoff โจ the first change goes out quickly, and subsequent changes get sent more slowly. these techniques all keep the destabilizing effects of rapid information flows in check, but the price is the added complexity of configuring and managing the rate at which the control plane propagates information about network changes ๐
every control plane needs some kind of algorithmic calculation to find the best path through the network to any given destination ๐บ๏ธ these algorithms are often lightweight, but they still need some memory and computational power to run. rapid changes can overwhelm the devices running them, especially if changes arrive faster than the algorithm can finish ๐ต once a device becomes processor or memory bound, it could fail completely and cause a bigger network outage ๐จ so to prevent computational overload, control-plane protocols use timers that limit how often they can compute the best path. these timers are often exponential too, so the first computation runs quickly while later ones get delayed ๐ข and yep, configuring and managing those timers is another source of complexity ๐
another way to make the control plane react faster is to precompute alternate paths at each device and maybe preinstall forwarding info into local forwarding tables ๐โโ๏ธ but precomputing alternate paths needs additional state, and often extra algorithms and techniques get configured and deployed too. all of that adds some complexity to configuring and managing the network ๐
and in some situations (for some topologies), a tunnel is required to pass traffic around a network failure or topology change ๐ the tunnels aren't configured by hand, but they still add complexity to both the forwarding and control planes. not me having to deal with more moving parts ๐ฉ
4. Parameters ๐
okay so in Section 3 we went through a bunch of network design trade-offs to show the real choices operators have to make ๐ the list of parameters to weigh in those trade-offs is HUGE, so a complete listing might not be possible ๐ญ also, the dependencies between the metrics are super complex and still need more study ๐ง this document tries to define a methodology and an overall high-level structure, and that's the goal here โจ
to analyze trade-offs, we have to formalize them ๐ the parameters are long and can be complicated themselves. like, "cost" can be a simple one-dimensional metric, but "extensibility" and "optimal forwarding state" are way harder to pin down ๐ค
a list of parameters to trade off includes metrics like:
- State: How much state needs to be held in the control plane, forwarding plane, configuration, etc.? ๐๏ธ
- Cost: How much does the network cost to build and run (i.e., capital expenditure (capex) and operating expenses (opex))? ๐ธ
- Bandwidth/Delay/Jitter: Traffic characteristics between two points (average, max, etc.) ๐ถ
- Configuration Complexity: How hard is it to configure and maintain the configuration? ๐ ๏ธ
- Susceptibility to Denial of Service: How easy is it to attack the service? ๐ฅ
- Security (Confidentiality/Integrity): How easy is it to sniff/modify/insert the data flow? ๐
- Scalability: To what size can I grow the network/service? ๐
- Stability: How stable is the network under the influence of local change? ๐ง
- Reactivity: How fast does the network converge or adapt to new situations? โก
- Extensibility: Can I use the network for other services in the future? ๐ฑ
- Ease of Troubleshooting: Are failure domains separated? How hard is it to find and correct problems? ๐
- Optimal Per-Hop Forwarding Behavior ๐ฏ
- Predictability: If I change a parameter, what will happen? ๐ฎ
- Clean Failure: When a problem arises, does the root cause lead to deterministic failure? ๐งฏ
5. Elements of Complexity ๐งฉ
okay bestie, complexity can show up in all sorts of elements in a networked system ๐ like, the configuration of a network element reflects some of the complexity in the system, or an algorithm a protocol uses might be more or less complex ๐ค when classifying complexity, the first question to ask is "WHAT is complex?" โ this section gives you a method to answer that ๐ซถ
5.1. The Physical Network (Hardware) ๐
the set of network devices and wiring has a certain complexity of its own ๐งต for example, adding a redundant link between two locations makes the network more complex, but it also gives you more redundancy ๐ and network devices can be more or less modular, which affects complexity in a trade-off against ease of maintenance, availability, and upgradability ๐งฑ
5.2. Algorithms ๐งฎ
the behavior of the physical network isn't just defined by the hardware, it's also defined by algorithms running on network elements and in central locations ๐ฅ๏ธ every algorithm has some intrinsic complexity, and that's the subject of research on software complexity ๐
5.3. State in the Network ๐๏ธ
the way a network element treats traffic is largely defined by the state in the network, in the form of configuration, routing state, security measures, and so on ๐ก๏ธ Section 3.1 shows an example where more control-plane state allows for more precise forwarding ๐ฏ
5.4. Churn ๐ช๏ธ
the rate of change is itself a parameter in complexity, and it needs to be weighed against the other parameters โ๏ธ Section 3.5 explains a trade-off between how fast changes get communicated through the network and how stable the network stays ๐งโโ๏ธ
5.5. Knowledge ๐ง
some complexity parameters are strongly linked to the human side of networking ๐โโ๏ธ for example, the more options and parameters a protocol has, the harder it is to configure and troubleshoot ๐ตโ๐ซ so there's a trade-off between the knowledge operational staff have to maintain and the functionality you want ๐ the knowledge network operators need is therefore a big part of complexity considerations ๐
6. Location of Complexity ๐
the previous section looked at the forms complexity can take ๐ this section focuses on WHERE that complexity lives in a network ๐บ๏ธ an algorithm can run centrally, distributed, or even in the head of a network administrator ๐คฏ when you classify a network's complexity, the location of a component can change the overall complexity, so this section offers a method to find WHERE the complex component is located ๐
6.1. Topological Location ๐
an algorithm can run distributed, like a routing protocol such as OSPF running on all routers in a network ๐ฃ๏ธ but it can also live in a central location, like a Network Operations Center (NOC) ๐ข the physical location affects other parameters like availability (local changes might be faster than going through a remote NOC) and ease of operation, because it's easier to understand and troubleshoot one central entity than many remote ones ๐ง
the example in Section 3.3 shows how the location of state (in this case, configuration) affects the precision of policy enforcement and the state required to do it ๐ enforcement closer to the edge needs more network-wide state, but it's more precise ๐ฏ
6.2. Logical Location ๐งฉ
independent of physical location, the logical location can also make a difference to complexity ๐๏ธ a controller function, for example, can live in a NOC and also on a network element ๐ป organizing a network into separate logical entities is generally considered a positive, because it makes the network easier to understand and therefore easier to troubleshoot and configure ๐ for example, a BGP route reflector is a separate logical entity from a BGP speaker, but it may sit on the same physical node ๐ซง
6.3. Layering Considerations ๐ฅ
the layer of the TCP/IP stack where a function is implemented can also affect the complexity of the overall network ๐ some functions get implemented across several layers in slightly different ways, and that can lead to unexpected results ๐ฌ
as an example, a link failure gets detected at various layers: L1, L2, the IGP, BGP, and potentially more ๐ those layers depend on each other, so different link failure detection times can cause undesired effects ๐ต dependencies get covered in more detail in the next section ๐
7. Dependencies ๐ธ๏ธ
dependencies are generally regarded as related to overall complexity ๐งถ a system with fewer dependencies is generally considered less complex ๐ฅฐ this section proposes a way to analyze dependencies in a network ๐ฌ
for example, [Chun] states: "We conjecture that the complexity particular to networked systems arises from the need to ensure state is kept in sync with its distributed dependencies." ๐ค
in this document, we distinguish three types of dependencies: local dependencies, network-wide dependencies, and network-external dependencies ๐
7.1. Local Dependencies
okay so local dependencies are all about ONE node ๐ Think of a single router. An interface on it has an IP address, and that address might get used in other bits of the config too. Change the interface address and every dependent config piece has to change with it, or things get messy fr fr ๐
Same deal with QoS policies, access-control lists, and the names and numbers of config parts. It's the same drama, just in different outfits ๐โจ
7.2. Network-Wide Dependencies
Routing protocols, failover protocols, and a bunch of others depend on each other across the whole network ๐ If one node has a problem, it can ripple out to everyone else, kind of like a group chat where one message sets off a chain reaction ๐
These protocols are usually designed to handle weird unexpected stuff, so they're not likely to cause trouble all by themselves. BUT sometimes a bunch of complexity issues pile up at once (like different timers running on different layers ๐ซ ) and that's when you get really unexpected behavior ๐ญ
7.3. Network-External Dependencies
Some dependencies live OUTSIDE the network entirely ๐ Like an external NTP clock source, or an Authentication, Authorization, and Accounting (AAA) server. And here's the tradeoff, bestie: take AAA for login authentication. We cut down the config (state) on each node, especially the user-specific stuff, but now every node depends on an AAA server ๐ซฃ
In a network with lots of admins, an AAA server is honestly the only manageable way to keep track of everyone ๐ง But the cost is this external dependency, which means admin access can vanish for ALL devices at the same time when the AAA server goes down. Yikes ๐ฑ
Even so, centralizing user info (and logging) is still worth it compared to spreading user info across every device ๐ To cover for the central dependency being unavailable, other solutions exist too. For example, a secondary authentication mode with a single root-level password for when the AAA server is not around ๐
8. Management Interactions
A static network is usually pretty stable ๐ Changes, on the other hand, bring uncertainty, so they need a closer look ๐ Troubleshooting a network also shows you how complex it really is, kind of intuitively ๐ This section proposes a way to classify management interactions based on how they relate to network complexity ๐ฆ
8.1. Configuration Complexity
Configuration can be thought of as state spread across network devices, where the administrator has direct say over how the network behaves ๐ Changing the config can make the network behave better overall, or make it worse. In the worst case, one misconfiguration could take down the entire network ๐ So it's super important that a human admin can manage config complexity well ๐ซถ
The configuration reflects most of the local and global dependencies in the network, as explained in Section 7. Tracking those dependencies in the config helps you understand the overall network complexity ๐ธ
8.2. Troubleshooting Complexity
Unexpected behavior can come from a bunch of places ๐ The config might have errors, the operating system (its algorithms) might have bugs, or the hardware might be faulty, and that includes everything from broken fibers to faulty line cards ๐ In serious problems, a combo of causes can show up as one single visible symptom, which is so annoying ๐ฉ Tracking down the root causes can be extremely difficult, and that's basically the network's complexity showing its face ๐ฆ
So finding the source of a problem takes a solid understanding of how complex the network is ๐ง The configuration complexity from the last section is only PART of the overall problem space โจ
8.3. Monitoring Complexity
Even when nothing is erroring, you should keep an eye on the network's state so you can catch error conditions, ideally BEFORE services get affected ๐ For example, a single link-down event might not cause a service disruption in a well-designed network, but you still need to fix it quickly to get redundancy back ๐ง
Monitoring has its own complexity, too ๐คฏ The issues are about scale, the variety of devices to monitor, the variety of methods used to collect info, the inevitable loss of information when reports get aggregated centrally, and the knowledge needed to understand the network, its dependencies, and how it interacts with users and other external inputs ๐
8.4. Complexity of System Integration
A network isn't just network devices ๐ It also includes a huge array of backend and support systems. It connects to a large variety of user devices, plus a bunch of human interfaces, both for the users and customers AND for the network admins ๐งโ๐ป A system integration job is needed to make sure the whole network delivers the overall service that's expected ๐
All those systems and interactions have to be modeled so you can understand the interdependencies and complexities in the network ๐ธ๏ธ This is a big area for future research ๐ญ
9. External Interactions
A network isn't a self-contained little world ๐ It exists to give connectivity and services to users and to other networks, and a network admin doesn't directly control any of them ๐ โโ๏ธ The user experience also shows its own kind of interaction, with its own complexity ๐
External interactions fall into these categories:
- User Interactions: Users need a way to request a service, get their problems resolved, and possibly get billed for their usage ๐ธ There are a bunch of human interfaces to think about, which depend somewhat on the network, for example, for troubleshooting or for monitoring usage ๐
- Interactions with End Systems: The network also talks to the devices that plug into it ๐ฑ Usually, a device gets an IP address from the network, plus info on how to resolve domain names, and maybe other services too. Those interactions are pretty simple, BUT there are sooo many types of end devices that keeping track of them is a complicated space ๐ตโ๐ซ
- Internetwork Interactions: Most networks connect to other networks ๐ค There are lots of interactions between networks, both technical (like running a routing protocol) AND non-technical (like tracing problems across network boundaries) ๐งฉ
For a fully operational network that serves users, the external interactions and dependencies are an integral part of the overall complexity of the network service ๐ซง One big example is the root DNS servers, which are critical to how the Internet works ๐ Practically all Internet users have an implicit dependency on them, which is why they're frequent targets for attacks ๐ฏ Understanding the overall complexity of a network includes understanding all of these external dependencies ๐ซถ With the root DNS servers, though, there's honestly not much a network operator can influence ๐ฅฒ
10. Examples
In the foreseeable future, it's unlikely that anyone will define a single, objective metric that covers ALL the relevant aspects of complexity ๐ Without a global metric like that, a comparative approach could be easier ๐
For example, you can compare a centralized system, where algorithms run centrally and the results get distributed to the network nodes, with a distributed algorithm ๐ธ The type of algorithm might be similar, but the location is different, so you end up with a different dependency graph ๐ธ๏ธ The supporting hardware might be the same, so it could be ignored for this exercise ๐ง Layering is likely to be the same too ๐งฑ The management interactions, though, would be WILDLY different in the two cases ๐ค
The classification in this document also makes it easier to survey existing research on which areas of complexity are covered ๐ That could help identify open areas for research ๐ญโจ
11. Security Considerations
This document does not discuss any specific security considerations. ๐จ Heads up, this one is not a free pass! Just because this document doesn't cover security doesn't mean security isn't a big deal. Complexity and security are tangled up with each other, so keep that in mind when you're designing and running networks ๐๐
12. Informative References
[Behringer] Behringer, M., "Classifying Network Complexity",
Proceedings of the 2009 Workshop on Re-architecting the
Internet (Re-Arch '09), ACM, DOI 10.1145/1658978.1658983,
December 2009.
[Chun] Chun, B-G., Ratnasamy, S., and E. Eddie, "NetComplex: A
Complexity Metric for Networked System Designs",
Proceedings of the 5th USENIX Symposium on Networked
Systems Design and Implementation (NSDI '08), pp.
393-406, April 2008, <http://usenix.org/events/nsdi08/
tech/full_papers/chun/chun.pdf>.
[Doyle] Doyle, J., Anderson, D., Li, L., Low, S., Roughnan, M.,
Shalunov, S., Tanaka, R., and W. Willinger, "The 'robust
yet fragile' nature of the Internet", Proceedings of the
National Academy of Sciences of the United States of
America (PNAS), Volume 102, Number 41,
DOI 10.1073/pnas.0501426102, October 2005.
[ncrg] IRTF, "IRTF Network Complexity Research Group (NCRG)
[CONCLUDED]", <https://irtf.org/concluded/ncrg>.
[RFC1925] Callon, R., "The Twelve Networking Truths", RFC 1925,
DOI 10.17487/RFC1925, April 1996,
<http://www.rfc-editor.org/info/rfc1925>.
[RFC3439] Bush, R. and D. Meyer, "Some Internet Architectural
Guidelines and Philosophy", RFC 3439,
DOI 10.17487/RFC3439, December 2002,
<http://www.rfc-editor.org/info/rfc3439>.
[wiki] "Network Complexity - The Wiki",
<http://networkcomplexity.org/>.
Acknowledgements โจ
The motivations and framework of this overview of studies into network complexity came out of SO many meetings and discussions with way too many people to list here ๐ซถ Still, some key contributions came from John Doyle, Dave Meyer, Jon Crowcroft, Mark Handley, Fred Baker, Paul Vixie, Lars Eggert, Bob Briscoe, Keith Jones, Bruno Klauser, Stephen Youell, Joel Obstfeld, and Philip Eardley ๐
The authors would also like to thank Rana Sircar, Ken Carlberg, and Luca Caviglione for their contributions to the preparation of this document ๐
Authors' Addresses
Michael H. Behringer
Cisco Systems
Building D, 45 Allee des Ormes
Mougins 06250
France
Email: mbehring@cisco.com
Alvaro Retana
Cisco Systems
7025 Kit Creek Rd.
Research Triangle Park, NC 27709
United States of America
Email: aretana@cisco.com
Russ White
Ericsson
144 Warm Wood Lane
Apex, NC 27539
United States of America
Email: russ@riw.us
URI: http://www.ericsson.com
Geoff Huston
Asia Pacific Network Information Centre
6 Cordelia St
South Brisbane, QLD 4101
Australia
Email: gih@apnic.net
URI: http://www.apnic.net
That's the whole RFC, bestie! ๐๐ฆ You made it through every complexity bit, every dependency, and all the authors ๐ โจ
๐ฆ where this page comes from
- ietf: rfc7980 2016-10
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms