Route Selection and Metrics
Most routing incidents are not protocol failures. They are two routes disagreeing and the router choosing the one nobody expected. This note is the tie-breaking logic, written down.
The universal rule comes first
Longest prefix match always wins, before any metric, admin distance or policy.
| Routing table | Destination | Chosen | Why |
|---|---|---|---|
0.0.0.0/0 via A |
203.0.113.7 | A | Only match |
203.0.113.0/24 via B + 0.0.0.0/0 via A |
203.0.113.7 | B | /24 is more specific |
203.0.113.0/24 via B + 203.0.113.0/25 via C |
203.0.113.7 | C | /25 wins |
203.0.113.0/24 via B + 203.0.113.0/24 via C |
any | tie-break | Metric and distance decide |
Everything below only applies when two routes have the same prefix length.
Administrative distance
When multiple protocols know the same prefix, the router prefers the most trustworthy source.
| Source | Cisco AD | Meaning |
|---|---|---|
| Connected | 0 | Directly attached |
| Static | 1 | You said so |
| eBGP | 20 | Learned from a peer |
| OSPF | 110 | Interior, link-state |
| IS-IS | 115 | Interior, link-state |
| RIP | 120 | Legacy distance-vector |
| iBGP | 200 | Learned inside your AS |
| Unknown | 255 | Never used |
Linux has an analogous concept — ip route metric, plus protocol preference — and FRR reproduces the Cisco table.
The practical consequence: a static route silently overrides OSPF, which is either the point or the bug. A leftover static route from a migration is one of the most common causes of "OSPF is up but traffic goes the wrong way".
Metrics inside a protocol
| Protocol | Metric | Grows with |
|---|---|---|
| OSPF | Cost (reference bandwidth ÷ bandwidth) | Fewer/shower links |
| IS-IS | Wide metric | Interface delay/bandwidth |
| RIP | Hop count (max 15) | Each router |
| eBGP | Attribute ladder, not a metric | Policy |
Metrics are only comparable within one protocol. OSPF cost 20 and RIP hop 2 have no relationship at all, which is why redistribution points need explicit control.
Equal-cost multipath
Two routes with identical preference and metric are installed together, and traffic is hashed across them by a flow hash (usually 5-tuple). Consequences worth knowing:
- Per-flow, not per-packet balancing: one elephant flow uses one link.
- Asymmetric routing can appear when the hashes differ in each direction — fine for stateless networks, fatal for stateful firewalls.
- Hash polarisation with a small number of flows can leave one link idle.
ip route show # multiple nexthops
ip route get 203.0.113.10 # which one this flow uses
show ip route 203.0.113.0 # "2 paths" in IOS
Policy beats metrics
Route-maps, prefix-lists, local preference, BGP communities and PBR all override the ladder above. That is their purpose, and their danger: policy is invisible in a traceroute and usually undocumented.
The rule for keeping a network debuggable: every policy needs a comment, an owner, and a test that fails when it stops doing what it says.
Where it goes wrong
- Two default routes, no metric. Traffic takes whichever the router installed last, and failover never happens because both are "up".
- Static route shadowing a dynamic one. A
/24static from a decommissioned link stays in the config for years. - Recursive routing. A static route points at a next hop that is itself reachable through the route being replaced — the route disappears when it is needed.
- Redistribution without a seed metric. Routes enter with metric 0 or infinity and get dropped or preferred wrongly.
- Mutual redistribution loops. A route learned from BGP goes into OSPF, back into BGP, and around again — usually with an AD change that hides it.
- Prefix-list typo.
permit 10.0.0.0/8 le 32versuspermit 10.0.0.0/8are very different policies. - Assuming symmetric routing. It is not a property of IP; it is a property of the specific design and often an accident.
Related Notes
- Routing Fundamentals — where these routes come from
- OSPF Fundamentals — cost in practice
- BGP And Internet Routing — the BGP attribute ladder
- NAT And PAT — where asymmetric routing becomes visible