← Interview Prep

RSVP-TE — Theory

MPLS Traffic Engineering with RSVP-TE: how explicit, bandwidth-constrained LSPs are computed with CSPF and signaled hop-by-hop, protected with FRR, and why the model doesn't scale.

RSVP-TE (RFC 3209) extends the Resource ReSerVation Protocol from a host-driven QoS mechanism into the control plane that builds MPLS Traffic-Engineered LSPs. Where plain LDP just follows the IGP shortest path, RSVP-TE lets the head-end pin a tunnel down an explicit path and reserve bandwidth along it, so operators can steer traffic off the shortest path to honour capacity, latency, and diversity constraints.

Three ideas carry the whole topic. CSPF at the head-end computes a constrained path from a TE database and emits an ERO. RSVP signaling walks that ERO to install labels and reserve bandwidth (Path downstream, Resv upstream). FRR pre-signals backup LSPs so a failure is repaired locally in ~50 ms. Everything else is detail hanging off these three.

Purpose & the soft-state model

RSVP-TE exists to solve the problem plain IGP routing cannot: the shortest path is not always the path you want. Multiple flows converging on the same shortest path congest it while parallel links sit idle. RSVP-TE gives the head-end (the ingress LSR) a way to:

RSVP is a soft-state protocol: reservations are not permanent. Each LSR must periodically refresh the state (default Path/Resv refresh ~30 s) or it times out and is torn down. This makes the protocol self-healing after transient loss but is also the source of its scaling problem — see below. It is also receiver-oriented and downstream-on-demand: the downstream node allocates the label and hands it upstream in the Resv.

Signaling messages

Setup is a two-pass exchange: a Path message travels downstream from ingress to egress to propose the LSP; a Resv message travels back upstream, allocating labels and confirming the reservation hop by hop.

Ingress (head-end)          P (transit)          Egress (tail-end)
   │  Path (ERO, LABEL_REQUEST, SENDER_TSPEC)      │
   │ ─────────────────▶│ ─────────────────────────▶│
   │                   │                           │  (egress picks label,
   │  Resv (LABEL=implicit-null / N)   Resv (LABEL) │   often implicit-null=3)
   │ ◀─────────────────│ ◀─────────────────────────│
   │  LSP up: labels installed, bandwidth booked   │
   │  ... periodic Path/Resv refresh every ~30s ...│
MessageDirectionRole
PathDownstream (ingress → egress)Proposes the LSP; carries the ERO, LABEL_REQUEST, SESSION and SENDER_TSPEC; establishes path state at each hop.
ResvUpstream (egress → ingress)Grants the reservation; carries the LABEL (downstream-on-demand allocation), RRO and FLOWSPEC; installs the forwarding label at each hop.
PathErrUpstreamReports a setup error (e.g. no route, admission-control failure) back toward the ingress — does not tear state down by itself.
ResvErrDownstreamReports a reservation error toward the egress.
PathTearDownstreamExplicitly deletes path state along the LSP (fast teardown vs waiting for soft-state timeout).
ResvTearUpstreamExplicitly deletes reservation state upstream.
ResvConfDownstreamOptional confirmation of a reservation back to the receiver.

Hello messages (RFC 3209) between adjacent LSRs give fast node-failure detection independent of the slow refresh timers, and drive graceful restart so the control plane can restart without dropping the data plane.

Key objects

RSVP messages are containers of typed objects. The ones to be able to name in an interview:

ObjectCarried inPurpose
SESSIONPath / ResvIdentifies the LSP: tunnel endpoint address, tunnel ID, extended tunnel ID. The key that binds Path and Resv to one tunnel.
LABEL_REQUESTPathAsks each downstream hop to allocate a label for this LSP (turns RSVP into a label-distribution protocol).
LABELResvThe allocated label handed upstream — downstream-on-demand. Egress usually returns 3 (implicit-null) to request penultimate-hop popping.
ERO (Explicit Route)PathThe ordered list of hops the LSP must follow — the output of CSPF. Hops can be strict (exact next hop) or loose (get there any way).
RRO (Record Route)Path & ResvRecords the actual hops (and labels) traversed — used for loop detection, FRR bypass selection, and operator visibility.
SENDER_TSPECPathDescribes the traffic the sender will offer (the requested bandwidth / token-bucket parameters).
FLOWSPECResvThe reservation actually granted along the return path (must satisfy the TSPEC).
SESSION_ATTRIBUTEPathSetup/hold priority, affinity (admin-group) constraints, and FRR flags (local-protection-desired, etc.).
FILTER_SPEC / SENDER_TEMPLATEResv / PathIdentify the specific sender (LSP-ID) the reservation applies to.

CSPF and the TE database

The explicit route in the ERO is not hand-typed — it is computed by CSPF (Constrained Shortest Path First) at the head-end. CSPF is ordinary SPF/Dijkstra run over a topology that has first been pruned of every link that fails the LSP's constraints.

The topology it runs on is the Traffic-Engineering Database (TED), populated by the IGP's TE extensions, which flood per-link TE attributes in addition to the normal reachability:

Carried byOSPF-TEIS-IS TE
Extension mechanismOpaque Type-10 (area-scoped) LSAs (RFC 3630)New TLVs 22/135 with sub-TLVs (RFC 5305)
Per-link attributesMaximum bandwidth, maximum reservable bandwidth, unreserved bandwidth per priority, TE metric, administrative-group (color) bitmask, SRLG membership.

Given a request for, say, 200 Mbps, avoid color RED, ≤ 6 hops, disjoint from SRLG 42, CSPF:

  1. Prunes links with insufficient unreserved bandwidth at the LSP's priority, links whose affinity bits violate the include/exclude policy, and links in an excluded SRLG.
  2. Runs shortest-path on the surviving graph using the TE metric (which can differ from the IGP metric — e.g. a delay-based metric), applying the hop-count limit.
  3. Emits the resulting hop list as the ERO placed in the Path message.

Why CSPF lives at the head-end (and its blind spot)

Fast ReRoute (FRR)

Convergence via IGP + re-signaling is far too slow for carrier SLAs. FRR (RFC 4090) pre-computes and pre-signals a backup LSP before any failure, so the node adjacent to the break can redirect traffic locally in ~50 ms — the classic SONET-parity number — while the head-end re-optimizes a fresh primary in the background.

Roles and scope

Two backup models

Facility backup (bypass)One-to-one (detour)
Backup LSPOne bypass tunnel shared by many protected LSPsA separate detour LSP per protected LSP
RelationshipOne-to-many (N LSPs share one bypass)One-to-one
Data-plane trickLabel stacking: PLR pushes the bypass label on top of the protected LSP's labelDetour carries the protected LSP's own labels
State in coreScales well — few bypass tunnelsMore state — a detour for every LSP
Typical vendorJuniper / common defaultCisco "detour" style

The key mechanism to state at a whiteboard: on failure the PLR pushes an extra (bypass) label and tunnels the original labeled packets to the MP, where the bypass label is popped and the packet continues down the original LSP as if nothing happened. FRR is a temporary local patch; the head-end then rebuilds an optimal end-to-end LSP and make-before-break moves traffic onto it.

Make-before-break, auto-bandwidth & preemption

Make-before-break (MBB)

Whenever an LSP is re-routed for reoptimization, a new path constraint, or after an FRR event, RSVP-TE builds the new LSP first, moves traffic onto it, then tears down the old one — hitless. The trick that makes this work without double-counting bandwidth is the SE (Shared Explicit) reservation style: the old and new LSPs share the same Tunnel ID but differ in LSP-ID, so links common to both paths count the reservation once instead of rejecting the new LSP for lack of bandwidth.

Auto-bandwidth

Auto-bandwidth lets an LSP measure its own traffic over a sampling interval and periodically re-signal (via MBB) a new reservation sized to the observed load — growing during busy periods and shrinking off-peak, so reservations track reality instead of a static guess.

Priorities and preemption

Operational view (CLI flavour)

What the state looks like on a box — names differ by vendor but the concepts map directly.

# Junos-style: a TE LSP with an explicit path + bandwidth + FRR
mpls {
    label-switched-path CORE-A-to-Z {
        to 10.0.0.9;                 # egress
        bandwidth 200m;              # reservation -> SENDER_TSPEC
        priority 3 3;                # setup / hold
        fast-reroute;                # request local protection (FRR)
        admin-group exclude red;     # affinity constraint -> CSPF prune
        primary VIA-CORE;            # named path (ERO seed)
    }
    path VIA-CORE {
        10.0.0.5 strict;             # ERO hop (strict)
        10.0.0.9 loose;              # ERO hop (loose)
    }
}

# Inspect signaled LSPs
show mpls lsp extensive
  Ingress LSP: CORE-A-to-Z  State: Up   Bandwidth: 200Mbps
    Explicit Route (ERO): 10.0.0.5(S) 10.0.0.9(L)
    Record   Route (RRO): 10.0.0.5 (Label 299808) 10.0.0.9 (Label 3)
    FastReroute Protection desired; Detour/Bypass: Up (bypass->P2)

Scaling limits & why SR-TE replaces it

RSVP-TE works, but its cost grows badly with network size — this is the single most important "downside" to be able to articulate, because it is the entire motivation for Segment Routing.

ProblemWhy it hurts
Per-LSP soft state in the coreEvery transit LSR holds Path + Resv state for every LSP crossing it. State is proportional to the number of tunnels, not the topology.
N×N full meshAny-to-any TE among N edge routers needs ~N² LSPs; each new edge node adds ~2N tunnels. State and provisioning explode quadratically.
Refresh overheadSoft state must be refreshed periodically for every LSP at every hop. Refresh-reduction (summary refresh, RFC 2961) helps but doesn't remove the fundamental O(LSPs) burden.
Slow, racy setupTwo-pass signaling per LSP, plus CSPF races and re-signals on every reoptimization/auto-bw change.

Segment Routing TE keeps the same CSPF-style path computation but throws away the signaling and per-LSP core state entirely: the head-end encodes the path as a stack of segment labels (SIDs) in the packet itself. Transit routers hold no per-LSP state and run no RSVP refresh — they just forward on globally-known SIDs. That removes the full-mesh state explosion and the refresh treadmill in one move.

One-line summary for the panel: RSVP-TE signals stateful, refreshed reservations hop by hop; SR-TE source-routes with a label stack and keeps zero per-LSP state in the core. See SR-TE — Theory for the replacement.

Likely follow-up questions

Related: SR-TE — Theory · TCP — Theory & Mechanisms.