Thursday 14 May 2009

Frame Mode Multiprotocol Label Switching - MPLS Part II

By Richard Hijinx

MPLS Part I provides a summary Multiprotocol Label Switching and the features it provides as a WAN switching service. In Part II, we will go over some important terminology and then get started with a simple Frame Mode Multiprotocol Label Switching lab configuration. This lab configuration is going to get a little repetitive because we are going to be configuring seven of these devices for Frame Mode Multiprotocol Label Switching. This is going to come in handy when we proceed to more challenging labs where we work on some pretty interesting and powerful configurations offered by Multiprotocol Label Switching, such as MPLS Traffic Engineering.

First off, let's get the nitty gritty MPLS terminology out of the way. This terminology is directly out of RFC 3031, which defines the Multiprotocol Label Switching 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 fixed length physically contiguous identifier which is used to identify a FEC. These are 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 - 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 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 Multiprotocol Label Switch node capable of forwarding native L3 packets.

label stack - an ordered set of labels

Multiprotocol Label Switch domain - a contiguous group of nodes that operate MPLS routing and forwarding and are also in one Routing or Administrative Domain

Multiprotocol Label Switch edge node - an Multiprotocol Label Switched 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 Label Switch Router is an Multiprotocol Label Switch edge node.

Multiprotocol Label Switch egress node - an MPLS edge node in its role in handling traffic as it leaves an Multiprotocol Label Switch domain.

MPLS ingress node - an MPLS edge node in its role in handling traffic as it enters an Multiprotocol Label Switch domain.

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

On MPLS1, I have three 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

As shown below, the interface configuration on these is pretty easy.

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 Cisco Express Forwarding 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#

CEF will need to be enabled on every Multiprotocol Label Switching device. We will get more into the specifics of Multiprotocol Label Switching reliance on CEF in later 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 routing 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 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 Multiprotocol Label Switching router, 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.

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 Multiprotocol Label Switching "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 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 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 labs.

The second thing to consider in this lesson is the Multiprotocol Label Switching 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 some LDP console output. The Label Distribution Protocol formed an adjacency with another MPLS device. There are a few different commands we can use now to verify that we've got Multiprotocol Label Switching configured properly.

Our first show command shows the MPLS 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 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 3rd and final command for Multiprotocol Label Switching Part 2 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 had hoped to provide more details in this lab, but I'm getting tired, so I look forward to seeing you in MPLS Part 3 soon.

About the Author:

No comments: