Add all 8 course modules with converted markdown links
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
81
modules/02-mpls.md
Normal file
81
modules/02-mpls.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Module 2: MPLS — Labeling the Backbone
|
||||
|
||||
> **Course**: [ISP Backbone Lab Course](../README.md)
|
||||
> **Previous**: [Module 1: IS-IS](01-isis.md)
|
||||
> **Next**: [Module 3: iBGP](03-ibgp.md)
|
||||
|
||||
---
|
||||
|
||||
## Network Diagram
|
||||
|
||||

|
||||
*MPLS label switched path showing Push → Swap → Swap → PHP Pop → IP Lookup*
|
||||
|
||||
---
|
||||
|
||||
## What Is MPLS and Why Do ISPs Use It?
|
||||
|
||||
MPLS (Multi-Protocol Label Switching) is the **heart of every modern ISP backbone**. Here's the key insight:
|
||||
|
||||
> **Core routers (P routers) don't need to know about customer routes.**
|
||||
|
||||
Without MPLS, every P router would need a full routing table — millions of routes. That's slow, expensive, and a security risk. Instead:
|
||||
|
||||
1. PE routers push an **MPLS label** onto packets entering the core
|
||||
2. P routers only look at the label — a simple number — and swap/forward it
|
||||
3. The PE on the other side pops the label and delivers to the customer
|
||||
|
||||
Think of it like shipping containers. The cargo ship (P router) doesn't care what's inside the container. It just reads the shipping label and moves it to the right port.
|
||||
|
||||
## LDP (Label Distribution Protocol)
|
||||
|
||||
LDP is how routers agree on which labels to use. It's simple:
|
||||
|
||||
1. Router A tells Router B: "If you want to reach my loopback 10.0.0.1, use label 24"
|
||||
2. Router B remembers this and tells its own neighbors: "To reach 10.0.0.1, send it to me with label 30" (its own locally assigned label)
|
||||
3. This builds a **Label Switched Path (LSP)** across the network
|
||||
|
||||
## Lab 2 Config: Enable MPLS/LDP
|
||||
|
||||
**On every P and PE router (add to existing config):**
|
||||
|
||||
```
|
||||
mpls ip
|
||||
mpls ldp router-id Loopback0 force
|
||||
!
|
||||
interface GigabitEthernet0/1
|
||||
mpls ip
|
||||
!
|
||||
interface GigabitEthernet0/2
|
||||
mpls ip
|
||||
!
|
||||
interface GigabitEthernet0/3
|
||||
mpls ip
|
||||
```
|
||||
|
||||
**That's it.** MPLS is beautifully simple to enable. The magic is in what it *enables* (VPNs, TE, etc.)
|
||||
|
||||
## Key Concept: PHP (Penultimate Hop Popping)
|
||||
|
||||
When a packet is one hop away from its destination, the second-to-last router **pops the label** instead of swapping it. Why? So the destination router only has to do one lookup (IP) instead of two (label + IP). This is called PHP and you'll see it as `implicit-null` or label `3` in the LFIB.
|
||||
|
||||
## Verification Commands
|
||||
|
||||
```
|
||||
show mpls interfaces ! Which interfaces have MPLS enabled?
|
||||
show mpls ldp neighbor ! LDP sessions established?
|
||||
show mpls ldp bindings ! What labels are assigned to what prefixes?
|
||||
show mpls forwarding-table ! The LFIB — the actual label switching table
|
||||
traceroute 10.0.0.14 source 10.0.0.11 ! Should show MPLS labels in the path!
|
||||
```
|
||||
|
||||
## Understanding Check
|
||||
|
||||
1. Why don't P routers need customer routes?
|
||||
2. What is the LFIB and how is it different from the RIB/FIB?
|
||||
3. Explain PHP — why does the second-to-last hop pop the label?
|
||||
4. What would break if you forgot `mpls ldp router-id Loopback0 force`?
|
||||
|
||||
---
|
||||
|
||||
> **Next Module**: [Module 3: iBGP — The Brain of the ISP →](03-ibgp.md)
|
||||
Reference in New Issue
Block a user