Friday, May 15, 2009

Frame Mode MPLS - A Multiprotocol Label Switching Lab

By Richard Hijinx

MPLS Part 1 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 MPLS lab configuration. This lab configuration is going to get a little repetitive because we are going to be configuring 7 of these devices for Frame Mode MPLS. 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.

FEC - a group of IP packets that are forwarded in the same manner (e.g., over the same path, with the same forwarding treatment)

label - a short 4 byte physically contiguous identifier which is used to identify a forwarding equivalence class, typically 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 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, where 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 forwarding equivalence class.

label switching router - a MPLS node that is capable of forwarding 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

Multiprotocol Label Switch edge node - an Multiprotocol Label Switch node that connects a MPLS 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 Switched edge node.

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

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

Now that we've got our terminology out of the way, let's begin by downloading the Multiprotocol Label Switching topology and MPLS cabling and IP addressing schemes we are going to be working with, and then start prepping all our devices for the Multiprotocol Label Switching portion of the lab. First, we'll have to get all these interfaces configured.

On MPLS1, I have three interfaces, with F1/0 attached to MPLS3, F1/1 attached 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 Multiprotocol Label Switching is that 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 Multiprotocol Label Switching 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 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 Enhanced Interior Gateway Routing Protocol 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 Enhanced Interior Gateway Routing Protocol is active on every MPLS 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 Cisco Express Forwarding.

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 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 Maximum Transmission Unit 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 2nd point to ponder in this lesson 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#

You'll notice some LDP console output. The Label Distribution Protocol 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 Multiprotocol Label Switching configured properly.

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 command for MPLS Part II shows the multiprotocol label switching ip bindings. The "imp-null" is another indication of Penultimate Hop Popping at work. The "inuse" indicator shows us that the outgoing label is in use and that 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 Multiprotocol Label Switching Part 2. I look forward to seeing you in MPLS Part III soon.

About the Author:

No comments: