Monday, May 4, 2009

Multiprotocol Label Switching Part II - Frame Mode MPLS Configuration

Multiprotocol Label Switching Part I 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 MPLS 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 MPLS. 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 MPLS, such as MPLS Traffic Engineering.



First off, let's get the nitty gritty terminology out of the way. This terminology is directly out of RFC 3031, which defines the MPLS Architecture.



forwarding equivalence class - 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 FEC, usually 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 - a forwarding paradigm allowing streamlined forwarding of data by using labels to identify classes of data packets which are treated indistinguishably when forwarding.



label switched hop - the hop between two MPLS nodes, on which forwarding is done using labels.



label switched path - The path through one or more LSRs at one level of the hierarchy followed by a packets in a particular FEC.



label switching router - an MPLS node which is capable of forwarding native L3 packets



label stack - an ordered set of labels



MPLS domain - a contiguous set of nodes which operate MPLS routing and forwarding and which are also in one Routing or Administrative Domain



MPLS edge node - an MPLS 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 that LSR is an MPLS 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 MPLS edge node in its role in handling traffic as it enters an MPLS domain.



Now, that we've got some important terminology out of the way, let's start off by downloading the lab topology and cabling and IP addressing schemes we will be working with, and then begin by prepping all our devices for the MPLS portion of the lab. The first thing we have to do is get all these interfaces configured.

On MPLS1, I have three interfaces, with one F1/0 connected to MPLS3, F1/1 connected to MPLS2, and F2/0 connected to MPLS5. Per the cabling scheme provided, 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 run down 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


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 continue configuring the interfaces on the remaining devices in the same manner. One of the requirements of MPLS is that Cisco Express Forwarding (CEF) 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#





Cisco Express Forwarding will need to be enabled on every MPLS device. We will get more into the specifics of MPLS reliance on CEF in later labs/lessons. 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 IGP. In this case I'm choosing to use EIGRP becuase 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#



Once you have done that on each of your MPLS devices, 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



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 MPLS label being 4 bytes long, it is possible that we can cause MTU violations (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 MTU 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 labs.

The 2nd thing to consider in this lab 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.

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#



You'll notice here that I caught some LDP console output. The LDP protocol formed an adjacency with another MPLS device. There are several commands we can use now to verify that we've go MPLS working. Since this post is starting to get rather lengthy I'm just going to rattle them off real quick, and more detail can follow in Part III.

The first command shows the MPLS forwarding table. You'll see 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 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.

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 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 third and final command for MPLS Part II 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 had hoped to provide more details in this lab, but I'm getting tired, so I look forward to seeing you in MPLS Part III soon.

2 comments:

SGT CCIE said...

Looks great bro. Some really good info there. I really like how your post reads more like you're being taught as opposed to reading an RFC. Can't wait for MPLS Part III..

J.D. said...

Thanks. I appreciate the feedback. MPLS Part III should be available in a week or two.