Step 7. Count to Infinity in Complex Networks¶
Introduction¶
In the previous step, we explored the count-to-infinity problem in a simple two-router network and saw how solutions like split horizon can effectively prevent routing loops in such topologies. However, real networks often have more complex topologies with multiple routers forming potential loops.
In this step, we’ll examine how the count-to-infinity problem manifests in networks with more than two routers, and why solutions like split horizon and poison reverse, while helpful, don’t completely solve the problem in these more complex topologies.
Goals¶
In this step, our goals are to:
Understand how the count-to-infinity problem occurs in networks with more than two routers
Observe why split horizon alone cannot completely solve the problem in complex topologies
Evaluate the effectiveness of different solutions, including split horizon and triggered updates
Understand the implications for real-world RIP deployments
Understanding Count-to-Infinity in Complex Networks¶
In networks with more than two routers, the count-to-infinity problem becomes more challenging to solve. This is because split horizon only prevents a router from advertising routes back to the neighbor from which it learned them. It doesn’t prevent routing loops that involve three or more routers.
Consider a simple scenario with three routers (A, B, and C) in a triangle topology:
Router A has a direct connection to Network X
Routers B and C learn about Network X through Router A
If Router A’s connection to Network X fails:
Router A will mark the route as unreachable
However, Router B still has a valid route to Network X (through Router A)
Router B will advertise this route to Router C
Router C will then advertise the route to Router A
Router A will accept this route, not knowing it ultimately leads nowhere
A routing loop is formed: A → C → B → A
Split horizon doesn’t prevent this because Router C isn’t advertising the route back to Router B (from which it learned it), but to Router A. This is why more complex topologies require additional mechanisms beyond split horizon.
Network Model¶
For this step, we use a more complex network topology defined in
RipNetworkC.ned. This network includes four routers (router0, router1,
router2, and router3) connected in a mesh topology, creating multiple potential
routing loops:
This step uses the following network:
network RipNetworkC
{
@display("bgb=2066.82,862.47003");
@figure[simtime](type="simTimeText"; pos=1550,60; prefix="SimTime: "; font=,14);
submodules:
configurator: Ipv4NetworkConfigurator {
@display("p=683.76,77.700005");
}
visualizer: <default("IntegratedCanvasVisualizer")> like IIntegratedVisualizer {
@display("p=936.72504,78.9375");
}
scenarioManager: ScenarioManager {
@display("p=1210.375,78.9375");
}
host0: StandardHost {
@display("p=116.55,271.95");
}
host1: StandardHost {
@display("p=116.55,489.51");
}
host2: StandardHost {
@display("p=116.55,717.43");
}
router0: Router {
@display("p=986.79004,271.95");
}
router1: Router {
@display("p=1289.8201,489.51");
}
host3: StandardHost {
@display("p=1924.37,271.95");
}
host4: StandardHost {
@display("p=1924.37,489.51");
}
host5: StandardHost {
@display("p=1924.37,717.43");
}
switch0: EthernetSwitch {
@display("p=406.63,486.92");
}
switch1: EthernetSwitch {
@display("p=1605.8,486.92");
}
router2: Router {
@display("p=704.48,489.51");
}
router3: Router {
@display("p=986.79004,717.43");
}
connections:
host2.ethg++ <--> Eth100M <--> switch0.ethg++;
host1.ethg++ <--> Eth100M <--> switch0.ethg++;
host0.ethg++ <--> Eth100M <--> switch0.ethg++;
switch0.ethg++ <--> Eth100M <--> router2.ethg++;
switch1.ethg++ <--> Eth100M <--> host3.ethg++;
switch1.ethg++ <--> Eth100M <--> host4.ethg++;
switch1.ethg++ <--> Eth100M <--> host5.ethg++;
router0.ethg++ <--> Eth100M <--> router1.ethg++;
router1.ethg++ <--> Eth100M <--> switch1.ethg++;
router2.ethg++ <--> Eth100M <--> router3.ethg++;
router2.ethg++ <--> Eth100M <--> router0.ethg++;
router3.ethg++ <--> Eth100M <--> router0.ethg++;
router3.ethg++ <--> Eth100M <--> router1.ethg++;
}
The key difference from the previous step is that we now have four routers instead of two, with multiple paths between them. This creates the potential for more complex routing loops that can’t be prevented by split horizon alone.
Experiment Configurations¶
We’ll explore several configurations to understand the count-to-infinity problem in this more complex topology and evaluate different solutions.
Basic Configuration¶
The basic configuration in omnetpp.ini is:
[Config Step7]
description = "Count to infinity (loop instability with higher number of nodes)"
extends = Step6
network = RipNetworkC
sim-time-limit = 500s
*.host0.numApps = 0
Key aspects of this configuration:
Split horizon is disabled (
mode='NoSplitHorizon')Triggered updates are disabled
A scenario manager script disconnects a link at t=50s
Split Horizon Configuration¶
We also test with split horizon enabled:
[Config Step7SplitHorizon]
extends = Step7
sim-time-limit = 500s
*.router*.rip.ripConfig = xml("<config> <interface hosts='router*' mode='SplitHorizon' /> </config>")
Triggered Updates Configuration¶
Finally, we test with triggered updates enabled:
[Config Step7TriggeredUpdates]
extends = Step7
sim-time-limit = 200s
*.router*.rip.triggeredUpdate = true
*.router*.rip.ripConfig = xml("<config> <interface hosts='router*' mode='SplitHorizon' /> </config>")
Experiment 1: Basic Count-to-Infinity in Complex Networks¶
In our first experiment, we observe the basic count-to-infinity problem in the complex network. When a link fails at t=50s, routing loops form among the routers, and metrics gradually increase as routing information circulates through the network.
RIP update messages are sent every 30 seconds (not visualized here). The route metrics increase incrementally (count-to-infinity):
In this scenario, we observe:
After the link failure, routers continue to advertise routes they learned from other routers
These advertisements create routing loops where packets circulate among multiple routers
With each update, the metrics for these routes increase
Eventually, after many updates, the metrics reach 16 (infinity) and the routes are removed
The key insight is that the count-to-infinity problem in complex networks can take much longer to resolve than in simple two-router networks, potentially causing extended periods of network instability.
Experiment 2: Split Horizon in Complex Networks¶
In this experiment, we enable split horizon to see if it resolves the count-to-infinity problem in our complex network.
With split horizon enabled:
Routers don’t advertise routes back to the neighbors from which they learned them
This prevents some routing loops, particularly direct back-and-forth loops between two routers
However, loops involving three or more routers can still form
For example, if router0 learns a route from router1, split horizon prevents router0 from advertising that route back to router1. However, router0 can still advertise it to router3, which can advertise it to router1, creating a loop.
The result is that while split horizon helps reduce the severity of the count-to-infinity problem, it doesn’t completely eliminate it in complex networks. Convergence is faster than without split horizon, but routing loops can still occur.
Experiment 3: Triggered Updates in Complex Networks¶
In our final experiment, we enable triggered updates to see how they affect convergence in the complex network.
With triggered updates:
Routing information propagates more quickly after the link failure
This can help the network converge faster to a stable state
However, it can also accelerate the rate at which incorrect routing information propagates
The result is a trade-off: triggered updates can speed up convergence in some cases, but they can also make the count-to-infinity problem more intense by accelerating the rate at which metrics increase.
When combined with split horizon, triggered updates provide a more effective solution, though still not perfect for complex networks.
Implications for Real-World RIP Deployments¶
The count-to-infinity problem in complex networks has several implications for real-world RIP deployments:
Network Design: Avoid complex topologies with multiple potential loops when using RIP
Combined Solutions: Use a combination of split horizon, poison reverse, and triggered updates
Route Summarization: Summarize routes where possible to limit the scope of routing loops
Alternative Protocols: Consider link-state protocols like OSPF for complex networks, which don’t suffer from the count-to-infinity problem
In the next step, we’ll explore another important mechanism for addressing the count-to-infinity problem: the hold-down timer.
Conclusion and Next Steps¶
In this step, we’ve seen that the count-to-infinity problem becomes more challenging in networks with more than two routers. Solutions like split horizon and triggered updates help but don’t completely solve the problem in complex topologies.
In the next step, we’ll explore the hold-down timer, which provides another mechanism for preventing routing loops and improving convergence in RIP networks.
Sources:
omnetpp.ini,
RipNetworkC.ned
Discussion¶
Use this page in the GitHub issue tracker for commenting on this tutorial.