by Richard Hijinx
Multiprotocol Label Switching Part 1 provided a quick overview of MPLS and the strength it provides as a WAN switching service. In Part 2, we are going to quickly go over some more terminology and then dive into a simple Frame Mode Multiprotocol Label Switching lab configuration. This part is going to be a little repetitive because we are going to be configuring several of these devices for Frame Mode Multiprotocol Label Switching. This is going to come in handy when we move on to more advanced labs where we delve into some pretty slick configurations offered by Multiprotocol Label Switching, such as MPLS Traffic Engineering.
To begin, let’s get that all-important MPLS terminology out of the way. This is taken directly from RFC 3031, which defines the Multiprotocol Label Switching Architecture.
FEC - a group of IP packets which are forwarded in the same manner (e.g., over the same path, with the same forwarding treatment)
label - a short fixed length physically contiguous identifier which is used to identify a forwarding equivalence class, typically of local significance.
label swap - the basic forwarding operation consisting of looking up an incoming label to determine the outgoing label, encapsulation, port, and other data handling information.
label swapping - allows streamlined forwarding of data by using labels to identify classes of data packets which are treated the same when forwarding.
label switched hop - the hop between two Multiprotocol Label Switching nodes, where forwarding is done using labels.
label switched path - The path through one or more Label Switch Routers at one level of the hierarchy followed by a packets in a particular forwarding equivalence class.
label switching router - a MPLS node capable of forwarding native layer 3 packets.
label stack - an ordered set of labels
Multiprotocol Label Switch domain - a contiguous group of nodes that operate Multiprotocol Label Switch routing and forwarding and are also in one Routing or Administrative Domain
Multiprotocol Label Switch edge node - an Multiprotocol Label Switch node that connects an MPLS domain with a node which is outside of the domain, either because it does not run MPLS, and/or because it is in a different domain. Note that if an LSR has a neighboring host which is not running MPLS, that the Label Switch Router is an Multiprotocol Label Switched edge node.
Multiprotocol Label Switch egress node - an MPLS edge node in its role in handling traffic as it leaves an MPLS domain.
MPLS ingress node - an Multiprotocol Label Switch edge node in its role in handling traffic as it enters an MPLS domain.
Now that we’ve got our terminology out of the way, let’s begin by downloading the lab topology and Multiprotocol Label Switching cabling and IP addressing schemes we are going to be working with, and then start prepping all our devices for the MPLS portion of the lab. First, we’ll have to get all these interfaces configured.
On MPLS1, I have 3 interfaces, with F1/0 connected to MPLS3, F1/1 connected to MPLS2, and F2/0 connected to MPLS5. Following the cabling scheme provided, these these subnets are in 172.16.13.0/28, 172.16.12.0/28, and 172.16.15.0/28, respectively. The local IP address assignments are shown below:
MPLS1#show ip interface brief
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 unassigned YES NVRAM administratively down down
FastEthernet1/0 172.16.13.1 YES NVRAM up up
FastEthernet1/1 172.16.12.1 YES NVRAM up up
FastEthernet2/0 172.16.15.1 YES NVRAM up up
FastEthernet2/1 unassigned YES NVRAM administratively down down
FastEthernet3/0 unassigned YES NVRAM administratively down down
FastEthernet3/1 unassigned YES NVRAM administratively down down
Shown below, the interface config is simple.
MPLS1#sho run int fa1/0
Building configuration…
Current configuration : 147 bytes
!
interface FastEthernet1/0
ip address 172.16.13.1 255.255.255.240
duplex auto
speed auto
end
MPLS1#sho run int fa1/1
Building configuration…
Current configuration : 147 bytes
!
interface FastEthernet1/1
ip address 172.16.12.1 255.255.255.240
duplex auto
speed auto end
MPLS1#sho run int fa2/0
Building configuration…
Current configuration : 147 bytes
!
interface FastEthernet2/0
ip address 172.16.15.1 255.255.255.240
duplex auto
speed auto
end
We need to continue configuring the interfaces on the remaining devices in the same manner. One of the requirements of MPLS is that Cisco Express Forwarding be enabled, which it should be enabled by default on most modern IOS releases, but enabling it is simple enough with the following command:
MPLS1(config)#ip cef
MPLS1(config)#^Z
MPLS1#
CEF will need to be enabled on every MPLS router. We will get more into the specifics of MPLS reliance on Cisco Express Forwarding in later labs. Right now we are just excited to get an MPLS network rocking and rolling. After we have all our interfaces configured we are going to enable an interior gateway protocol. In this case I’m choosing to use EIGRP because of its support for unequal cost load-balancing, which we are going to use in some of our more advanced MPLS labs. For the scenarios I have provided here, you can enable EIGRP on each MPLS device with these very simple commands:
MPLS1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
MPLS1(config)#router eigrp 100
MPLS1(config-router)#no auto-summary
MPLS1(config-router)#network 172.16.0.0
MPLS1(config-router)#^Z
MPLS1#
After you have enabled EIGRP on each of your MPLS routers, let’s take a couple minutes to verify our routing tables with this command:
MPLS1#show ip route eigrp 100
172.16.0.0/28 is subnetted, 14 subnets
D 172.16.56.0 [90/30720] via 172.16.15.5, 00:00:35, FastEthernet2/0
D 172.16.57.0 [90/30720] via 172.16.15.5, 00:00:28, FastEthernet2/0
D 172.16.45.0 [90/30720] via 172.16.15.5, 00:00:38, FastEthernet2/0
D 172.16.46.0 [90/33280] via 172.16.15.5, 00:00:36, FastEthernet2/0
[90/33280] via 172.16.13.3, 00:00:36, FastEthernet1/0
[90/33280] via 172.16.12.2, 00:00:36, FastEthernet1/1
D 172.16.36.0 [90/30720] via 172.16.13.3, 00:00:32, FastEthernet1/0
D 172.16.37.0 [90/30720] via 172.16.13.3, 00:00:28, FastEthernet1/0
D 172.16.34.0 [90/30720] via 172.16.13.3, 00:00:36, FastEthernet1/0
D 172.16.24.0 [90/30720] via 172.16.12.2, 00:00:37, FastEthernet1/1
D 172.16.25.0 [90/30720] via 172.16.15.5, 00:00:38, FastEthernet2/0
[90/30720] via 172.16.12.2, 00:00:38, FastEthernet1/1
D 172.16.23.0 [90/30720] via 172.16.13.3, 00:00:37, FastEthernet1/0
[90/30720] via 172.16.12.2, 00:00:37, FastEthernet1/1
D 172.16.67.0 [90/33280] via 172.16.15.5, 00:00:32, FastEthernet2/0
[90/33280] via 172.16.13.3, 00:00:32, FastEthernet1/0
Notice there are multiple routes for several of the subnets. We are eventually going to manipulate some of the routing metrics so that these don’t have the same FD and then enable unequal cost load balancing so we can examine how Multiprotocol Label Switching interacts with CEF.
With our lab prepped and ready for action with Multiprotocol Label Switching it is the moment we have all been waiting for. It is time to get MPLS running through this network, and it is easier than you would ever believe. It is important to understand how MPLS “labels” packets. The MPLS label sits right between the layer 2 header, and the layer 3 header. With an MPLS label being 4 bytes long, we can cause Maximum Transmission Unit violations (..and consequently fragmentation) on traditional ethernet networks such as the one we are using in this lab. With that being said, we need to increase the MTU by at least 4 bytes if we are using only a single label. In Multiprotocol Label Switching stacked label environments you may want to go even further with an Maximum Transmission Unit of 1508 or even 1512. I am going to have you use 1512 so we can play with stacked labels in later lessons.
The 2nd thing to consider in this lesson is the MPLS label binding protocol we are going to use for label exchange. I am going to keep it simple here and just tell you we are going to use the standards-based Label Distribution Protocol (LDP), although Cisco offers the Tag Distribution Protocol (TDP) which is functionally equivalent as far as I know.
These two little details are going to be important for our interface configurations. To get these interfaces talking MPLS, all we need to do from interface configuration mode on each of our interfaces:
MPLS1(config)#int fa1/0
MPLS1(config-if)#mpls label protocol ldp
MPLS1(config-if)#mpls mtu 1512
MPLS1(config-if)#mpls ip
MPLS1(config-if)#^Z
*May 4 23:12:30.687: %LDP-5-NBRCHG: LDP Neighbor 172.16.37.3:0 (2) is UP
MPLS1#
You’ll notice some LDP console output. The LDP formed an adjacency with another Multiprotocol Label Switching device. There are a few different commands we can use now to verify that we’ve got MPLS configured properly.
Our first show command shows the Multiprotocol Label Switching forwarding table. You’ll see the incoming label, the outgoing label(s), the destination prefix, and the next hop IP. Looking at this table it is pretty self-explanatory, with the exception of the Outgoing label entry of “Pop tag.” The is the indication of the infamous penultimate hop popping (yes that’s a real term), but the details behind it are for later discussion. If you haven’t worked with Multiprotocol Label Switching before, now is the time to get pretty excited.
MPLS1#show mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 172.16.23.0/28 0 Fa1/0 172.16.13.3
Pop tag 172.16.23.0/28 0 Fa1/1 172.16.12.2
17 Pop tag 172.16.24.0/28 0 Fa1/1 172.16.12.2
18 Pop tag 172.16.25.0/28 0 Fa2/0 172.16.15.5
Pop tag 172.16.25.0/28 0 Fa1/1 172.16.12.2
19 Pop tag 172.16.34.0/28 0 Fa1/0 172.16.13.3
20 Pop tag 172.16.36.0/28 0 Fa1/0 172.16.13.3
21 Pop tag 172.16.37.0/28 0 Fa1/0 172.16.13.3
22 Pop tag 172.16.45.0/28 0 Fa2/0 172.16.15.5
23 23 172.16.46.0/28 0 Fa2/0 172.16.15.5
21 172.16.46.0/28 0 Fa1/0 172.16.13.3
22 172.16.46.0/28 0 Fa1/1 172.16.12.2
24 Pop tag 172.16.56.0/28 0 Fa2/0 172.16.15.5
25 Pop tag 172.16.57.0/28 0 Fa2/0 172.16.15.5
26 24 172.16.67.0/28 0 Fa2/0 172.16.15.5
24 172.16.67.0/28 0 Fa1/0 172.16.13.3
The second command we will use simply shows the local interfaces involved in MPLS operations:
MPLS1#show mpls interfaces
Interface IP Tunnel Operational
FastEthernet1/0 Yes (ldp) No Yes
FastEthernet1/1 Yes (ldp) No Yes
FastEthernet2/0 Yes (ldp) No Yes
The 3rd and final command for MPLS Part II shows the multiprotocol label switching ip bindings. The “imp-null” is another instance of Penultimate Hop Popping at work. The “inuse” indicator shows that the outgoing label is in use and it is isntalled in the MPLS forwarding table.
MPLS1#show mpls ip binding
172.16.12.0/28
in label: imp-null
out label: imp-null lsr: 172.16.25.2:0
out label: 17 lsr: 172.16.57.5:0
out label: 16 lsr: 172.16.37.3:0
172.16.13.0/28
in label: imp-null
out label: 16 lsr: 172.16.25.2:0
out label: 16 lsr: 172.16.57.5:0
out label: imp-null lsr: 172.16.37.3:0
172.16.15.0/28
in label: imp-null
out label: 17 lsr: 172.16.25.2:0
out label: imp-null lsr: 172.16.57.5:0
out label: 17 lsr: 172.16.37.3:0
172.16.23.0/28
in label: 16
out label: imp-null lsr: 172.16.25.2:0 inuse
out label: 19 lsr: 172.16.57.5:0
out label: imp-null lsr: 172.16.37.3:0 inuse
172.16.24.0/28
in label: 17
out label: imp-null lsr: 172.16.25.2:0 inuse
out label: 18 lsr: 172.16.57.5:0
out label: 18 lsr: 172.16.37.3:0
172.16.25.0/28
in label: 18
out label: imp-null lsr: 172.16.25.2:0 inuse
out label: imp-null lsr: 172.16.57.5:0 inuse
out label: 19 lsr: 172.16.37.3:0
172.16.34.0/28
in label: 19
out label: 18 lsr: 172.16.25.2:0
out label: 20 lsr: 172.16.57.5:0
out label: imp-null lsr: 172.16.37.3:0 inuse
172.16.36.0/28
in label: 20
out label: 19 lsr: 172.16.25.2:0
out label: 21 lsr: 172.16.57.5:0
out label: imp-null lsr: 172.16.37.3:0 inuse
172.16.37.0/28
in label: 21
out label: 20 lsr: 172.16.25.2:0
out label: 22 lsr: 172.16.57.5:0
out label: imp-null lsr: 172.16.37.3:0 inuse
172.16.45.0/28
in label: 22
out label: 21 lsr: 172.16.25.2:0
out label: imp-null lsr: 172.16.57.5:0 inuse
out label: 20 lsr: 172.16.37.3:0
172.16.46.0/28
in label: 23
out label: 22 lsr: 172.16.25.2:0 inuse
out label: 23 lsr: 172.16.57.5:0 inuse
out label: 21 lsr: 172.16.37.3:0 inuse
172.16.56.0/28
in label: 24
out label: imp-null lsr: 172.16.57.5:0 inuse
out label: 23 lsr: 172.16.25.2:0
out label: 22 lsr: 172.16.37.3:0
172.16.57.0/28
in label: 25
out label: imp-null lsr: 172.16.57.5:0 inuse
out label: 24 lsr: 172.16.25.2:0
out label: 23 lsr: 172.16.37.3:0
172.16.67.0/28
in label: 26
out label: 24 lsr: 172.16.57.5:0 inuse
out label: 25 lsr: 172.16.25.2:0
out label: 24 lsr: 172.16.37.3:0 inuse
I wanted to provide more details in this lab, but I’m getting tired, so I will see you in Multiprotocol Label Switching Part III soon.
About the Author:
Joe Doran is a network engineer working toward the prestigious
Cisco CCIE Routing and Switching. His blog is detailing the journey and providing free tips and insight into this highly sought after certification track. Joe has a new article on
MPLS