MPLS Part 1 provided a quick overview of MPLS and the strength it provides as a WAN switching service. In Part II, 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 start, we will get that Multiprotocol Label Switching terminology outlined. This terminology is sourced directly out of RFC 3031, which defines the MPLS Architecture.
FEC - a collection of IP packets which are forwarded in the same manner (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, usually of local significance.
label swap - basic forwarding operation consisting of looking at an incoming label to determine the outgoing label, the encapsulation, 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 Switched nodes, on which forwarding is done using labels.
label switched path - A path through one or more LSRs at one level of the hierarchy followed by a packet in a particular forwarding equivalence class.
LSR - a MPLS node that is capable of forwarding L3 packets.
label stack - an ordered set of labels
MPLS domain - a set of nodes which operate Multiprotocol Label Switch routing and forwarding and that are also in one Routing or Administrative Domain
MPLS edge node - an MPLS node that connects a Multiprotocol Label Switch domain with another node that is outside the domain, either because it does not run MPLS, or because it is in a different domain. If a LSR has a neighboring host which is not running MPLS, that LSR is an Multiprotocol Label Switch edge node.
MPLS egress node - an MPLS edge node in its role in handling traffic as it leaves an Multiprotocol Label Switch domain.
Multiprotocol Label Switch ingress node - an MPLS 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 Multiprotocol Label Switching topology and MPLS cabling and IP addressing schemes we are working with, and then start by prepping all our devices for the MPLS portion of the lab. Let’s get all these interfaces configured, shall we?
On MPLS1, I have three 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
As you can see below, the interface configuration on these 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 configure the remaining interfaces of the remaining routers in the same way. One requirement of Multiprotocol Label Switching is that Cisco Express Forwarding be enabled, which it should be enabled by default on most modern IOS releases. Just in case, enabling it is simple enough with the following command:
MPLS1(config)#ip cef
MPLS1(config)#^Z
MPLS1#
CEF needs to be enabled on every Multiprotocol Label Switching router. The specifics of Multiprotocol Label Switching reliance on Cisco Express Forwarding will be covered in later labs. Right now we are just excited to get an MPLS network configured and operational. After we have all our interfaces configured we will need to enable an interior gateway protocol. I’m choosing to use EIGRP because of its support for unequal cost load-balancing, which we are going to use in 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 EIGRP is active on every MPLS device, 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 feasible distance and then enable unequal cost load balancing so we can examine how MPLS interacts with Cisco Express Forwarding.
Now that we have prepped our lab for MPLS 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. The first thing we need to consider with MPLS 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 Multiprotocol Label Switching label being 4 bytes long, it is possible that 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 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 2nd 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.
Armed with those two little pieces of knowledge we are ready to get these interfaces talking MPLS. To make this happen, 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 Label Distribution Protocol console output. The Label Distribution Protocol formed an adjacency with another Multiprotocol Label Switching device. There are several commands we can use now to verify that we’ve got MPLS working.
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 MPLS 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
Our second show command just shows us 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 2 shows the mpls 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.