CONCEPT Cited by 2 sources
RIB / FIB routing split¶
What it is¶
In networking, the RIB (Routing Information Base) is the router's full, authoritative routing table — built from every route the router has learned from every protocol. It is optimised for correctness, not speed.
The FIB (Forwarding Information Base) is the derived, in-memory table the data plane actually hits on every packet. It is optimised for speed — often a hardware TCAM lookup.
The router recomputes the FIB from the RIB whenever the RIB changes. The data plane never reads the RIB directly.
Why the split exists¶
- The RIB is often huge (full BGP table: ~1M routes) and structurally expensive to traverse.
- The data plane needs nanosecond-scale lookups on every packet.
- The FIB is a summary (longest-prefix-match friendly, often compressed into hardware tables) computed off the RIB.
Classical instance of control-plane / data-plane separation that long predates distributed-systems usage of the term.
Generalisation to state-distribution systems¶
The same shape works for any system where authoritative state is large or distributed, but the hot read path needs a fast aggregated view:
- Fly.io edge proxy: Corrosion is the RIB (the authoritative distributed SQLite of every Machine's routing state); fly-proxy's in-memory Catalog is the FIB (the aggregated view the request-routing hot path reads). Corrosion updates propagate host-to-host "in millisecond intervals of time"; the proxy refreshes its Catalog from those updates.
- Kubernetes: etcd-stored API objects (RIB) vs. kube-proxy's in-kernel iptables/IPVS rules (FIB).
- Service mesh: Envoy's xDS-delivered configuration (RIB) vs. the per-connection forwarding state (FIB).
Canonical wiki instance — fly-proxy + Corrosion¶
From sources/2025-05-28-flyio-parking-lot-ffffffffffffffff:
"In somewhat the same sense as a router works both with a RIB and a FIB, there is in fly-proxy a system of record for routing information (Corrosion), and then an in-memory aggregation of that information used to make fast decisions."
The 2024-09-01 global Anycast outage was a
contagious deadlock in the
FIB-update consumer (the Catalog reader's
if let over an RwLock),
not in the RIB itself. Corrosion was "just a bystander" — but
the gossip layer was the blast amplifier.
Seen in¶
- sources/2025-05-28-flyio-parking-lot-ffffffffffffffff — canonical wiki instance naming Corrosion as fly-proxy's RIB and the in-memory Catalog as its FIB.
- sources/2025-10-22-flyio-corrosion — Fly.io's link-state-inspired architecture naturally produces a RIB at each worker (SQLite replica) and FIBs at each consumer (e.g. the fly-proxy Catalog).
Related¶
- concepts/link-state-routing-protocol — the protocol family that canonically produces RIB/FIB splits.
- concepts/control-plane-data-plane-separation — the generalised design pattern.
- systems/corrosion-swim — the RIB.
- systems/fly-proxy — houses the FIB (Catalog).