Aut inveniam viam aut faciam

Multi-protocol Label Switching (MPLS) Notes

Multi-protocol Label Switching (MPLS)

Traditional routing

– Destination IP -> Next hop


– Labels -> Next hop

– No need to look to routing table

DLCI -> Labels

MPLS Architecture

 – Labels

     -> 32-bit value used for data propogation

Label number -> 2^20

Experimental bits

     -> QoS

     -> 8 possible values

Bottom of Stack

     -> 0 – More labels to follow

     -> 1 – Last label


     -> Default is 255


 – LSR

     -> Label Switching Router

 – LSP

     -> Label Switched Path

     -> The path a labeled packet takes to reach destination

Label Switching Protocols

 – TDP

     -> Tag Distribution Protocol

     -> Cisco Proprietary

     -> Deprecated

     -> Appears in the Troubleshooting section of the R&S lab

 – LDP

     -> Label Distribution Protocol

     -> Open standard

Forward Equivalency Class (FEC)

 – A group of packets which receive similar treatment in terms of data forwarding

Label Distribution Protocol

 – Used for layer 2 purposes

     -> To generate labels for all routes found in the routing table

          -> Except for BGP routes

     -> Distribute labels to neighbors

          -> The labels a route generates are used by LDP neighbors

Label Forwarding Information Base (LFIB)

 – Used by CEF


Frame header has a protocol type file

 – Code for MPLS packet

 – Code for IP packet

Packet with label

 – Check LFIB

Packet without label

 – Check FIB

A label for every route is listed in the FIB

sh ip cef

 – Will show the labels if LDP is enable

R1 -> R2

 – CEF lookup

 – Push -> Imposing a label

R2 -> R3

 – LFIB -> Label lookup

 – Swap -> Change label to next hop

R3 -> R4

 – LFIB -> Label lookup

 – Swap -> Change label to next hop

R4 -> Destination

 – LFIB -> Label lookup

 – Pop -> Remove the label

 – CEF lookup

The last hop router has to do two lookup

 – To change to one lookup

     -> R3 uses label “3” instead of 20

     -> When R4 sees label “3”, it doesn’t do an LFIB looup

          -> It Pops the label and goes straight to a CEF lookup

     -> show command doesn’t show “3”, but “POP”

Instructor comment, “MPLS requires the most structured teaching.”

LDP uses UDP port 646 to find neighbors

 – Discovery phase

     -> (all routers) UDP port 646

     -> After finding a potential neighbor, a TCP session is established on TCP port 646

     -> Hellos are sent every 5 seconds

     -> Hold down timer is 15 seconds

 – TCP Session

     -> Once a TCP session is established

          -> Keepalives are sent every 60 seconds

          -> Hold down timer is 180 seconds

 – After neighbor formation

     -> Labels are exchanged

     -> Kept in Label Information Base (LIB)

     -> LIB contains all labels, but might not have the best path (route)

     -> The best labels from the LIB are sent to the LFIB

          -> The routing table is referenced to determine the exit interface


 – Locally generated label for

     -> 20

     -> – 3

     -> – 3


 in  | out     next-hop

 20 | 3        fa0/0 ->


 1. Activate CEF (activated by default)

 2. Activate MPLS

 3. Activate LDP

 4. Configure LDP on the interfaces where neighbors can be found

R1(config)# ip cef

 mpls ip

     -> Enabled if an interface is configured

 mpls label protocol { ldp | tdp }

 int s0/0

  mpls ip

“Always check CEF”

      -> During troubleshooting section of the R&S lab

OSPF Autoconfig

 – Configures MPLS on all interfaces configured for OSPF

router ospf 1

 mpls ldp autoconfig

After MPLS and LDP is configured, LDP selects a router-id

 – Manual

 – Highest loopback IP address

 – Highest physical interface IP address

LDP starts sending “discovery hellos” to, UDP port 646

 – Contains

     -> Router-id (LDP)

     -> Transport address

          -> Used for TCP session

          -> By default, the router-id is used

Scenario -> The loopbacks of R1 and R2 can not be advertised in IGP


Solution 1 -> Change the LDP router-id to something reachable

R1(config)# mpls ldp router-id { <interface> | <ip address> } [force]

     -> Force is optional, but always use it

          -> Without force, the LDP router-id will only change after the next reboot

     -> Interface uses the IP address of the interface

Solution 2 -> Change the transport IP address

     – Interface specific command

R1(config)# int s0/0

 mpls ldp discovery transport-address { <interface> | <ip address> }

Discovery Timer

R1(config)# mpls ldp discovery hello { interval | hello } <seconds>

TCP Keepalive Timer

R1(config)# mpls ldp holddown <seconds>

Label Numbers

 – 2^20

 – But in Cisco, only 0 – 100000 are used

Reserved Labels

 – 0 – 15

     -> 0 – explicit NULL

          -> Used when you keep the experimental bit (Used for QoS)

          -> Last router will have to do two lookups

               -> LFIB

               -> CEF

     -> 3 – implicit NULL


To use explicit NULL (0)

R1(config)# mpls ldp explicit-null

To change the label range

R1(config)# mpls label range <lower> <upper>

sh mpls label range

mpls ldp advertise-label

 – LDP, by default, generates the labels for every route in the routing table and advertises them to neighbors

 – This behavior can be changed to control which labels (routes) are advertised and to which neighbors they can be advertised

no mpls ldp advertise-labels

mlps ldp advertise-labels for <acl> [to <peer acl>]

     -> for <acl>

          -> For which routes labels are to be advertised

     -> to <peer acl>

          -> To which neighbors labels will be advertised

Scenario -> On R1 and R2, advertise labels only for loopbacks.

R1(config)# access-list 1 permit

 access-list 1 permit

 no mpls ldp advertise-labels

 mpls ldp advertise-labels for 1

The ACL must list all “routes” to be advertised

Instructor comment, “LDP is a huge topic.  I highly recommend reading a book on LDP.”



sh mpls int

sh mpls ldp nei

sh mpls forwarding-table

sh mpls int vrf ABC

sh mpls ldp nei vrf ABC

sh mpls forwarding-table vrf ABC


sh mpls int

sh mpls ldp nei

sh mpls forwarding

sh mpls forwarding vrf ABC

Comments are closed.

This entry was posted on Friday, October 26th, 2018 at 10:52 pm and is filed under CCIE. You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.