Multiprotocol Label Switching Part 1 provides an overview of MPLS and the strength it provides as a WAN switching service. In Part II, we will explore some more terminology and then proceed with a simple Frame Mode Multiprotocol Label Switching lab configuration. This is going to be a pretty repetitive because we are going to configure a bunch of these devices for Frame Mode MPLS. These are going to come in handy when we move on to more advanced labs where we get into some pretty slick configurations offered by Multiprotocol Label Switching, such as MPLS Traffic Engineering.
To begin, let’s get that all-important Multiprotocol Label Switching terminology out of the way. This is taken directly from RFC 3031, which defines the MPLS Architecture.
forwarding equivalence class – a collection of IP packets which are forwarded in the same manner (over the same path, with the same forwarding treatment)
label – a short 4 byte physically contiguous identifier which is used to identify a FEC, typically of local significance.
label swap – the forwarding operation that consists of looking up an incoming label and determining the outgoing label, the encapsulation, the port, and other data handling information.
label swapping – a method of packet forwarding allowing streamlined forwarding of data by using labels to identify classes of data packets which are treated similarly 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 packet in a particular FEC.
LSR – a Multiprotocol Label Switch node which is capable of forwarding native L3 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
MPLS edge node – an Multiprotocol Label Switched node connecting a Multiprotocol Label Switch domain with a node which is outside of the domain, either because it does not run MPLS, or because it is in a different MPLS domain. Note that if a LSR has a neighboring host which is not running MPLS, that that LSR is an Multiprotocol Label Switched edge node.
MPLS 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.
Since we’ve got the important terminology out of the way, let’s get started by downloading the MPLS topology and lab cabling and IP addressing schemes we are working with, and then start by prepping all our devices for the Multiprotocol Label Switching portion of the lab. Let’s get all these interfaces configured, shall we?
On MPLS1, I have 3 interfaces, with F1/0 connected to MPLS3, F1/1 connected to MPLS2, and F2/0 connected to MPLS5. As detailed in the cabling scheme, you can see that these subnets are in 172.16.13.0/28, 172.16.12.0/28, and 172.16.15.0/28, respectively. Here’s a quick overview of the local IP addresses:
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
Continue configuring the rest of the interfaces on the devices in the same manner. One important requirement of Multiprotocol Label Switching is that CEF be enabled, which is the default on most modern IOS releases, but enabling it is simple with the following command:
MPLS1(config)#ip cef
MPLS1(config)#^Z
MPLS1#
Cisco Express Forwarding will have to be enabled on each MPLS router. We will get more into the finer details of MPLS reliance on CEF in forthcoming labs. Right now we are just super excited to get an MPLS cloud configured and ready to forward traffic. After we have all our interface configurations complete we are going to enable an routing protocol. I love using Enhanced Interior Gateway Routing Protocol because of its support for unequal cost load-balancing, which is going to provide us with hours of fun in some of our more advanced MPLS configurations. For the scenarios I have provided here, you can enable EIGRP on each MPLS router 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#
Once you have done that 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 the multiple routes for several of the subnets. When the time comes, we are going to manipulate some of the routing metrics so that these don’t have the same feasible distance and then enable unequal cost load balancing so we can take a good look at how Multiprotocol Label Switching interacts with CEF.
Now that we have prepped our lab for Multiprotocol Label Switching it is the moment we have all been waiting for. It is time to get Multiprotocol Label Switching running through this network, and it is easier than you would ever believe. The first thing we need to consider with Multiprotocol Label Switching is the way in which it “labels” packets. The MPLS label lies right between the layer 2 frame header, and the layer 3 packet header. With an MPLS label being 4 bytes long, it is possible that we can cause MTU 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 MPLS stacked label environments you may want to bump the Maximum Transmission Unit even further to 1508 or 1512. I’m going to go ahead and have you use 1512 so we can play with stacked labels in later lessons.
The second point to ponder in this lab is the Multiprotocol Label Switching label binding protocol we will 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 are both functionally the same 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#
Notice here that I caught some LDP console output. The Label Distribution Protocol formed an adjacency with another Multiprotocol Label Switching router. There are several commands we can use now to verify that we’ve got Multiprotocol Label Switching working.
The first command we look at shows the MPLS forwarding table. It provides the incoming label, the outgoing label(s), the destination prefix, and the next hop IP. This is a pretty self-explanatory table, with the exception of the “Pop tag” outgoing label entry. “Pop tag” is used to indicate the infamous penultimate hop popping (yes that’s a real term), but the details behind it are for later discussion. For now, we just want to see that our Multiprotocol Label Switching labels are actually there.
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 Multiprotocol Label Switching 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 third and final command for Multiprotocol Label Switching 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 Multiprotocol Label Switching 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
That wraps up MPLS Part II. I look forward to seeing you in MPLS Part III soon.
