Multiprotocol Label Switching Traffic Engineering

In this Multiprotocol Label Switching article we will look at Multiprotocol Label Switching Traffic Engineering. Before getting too far into this I want to point out that Multiprotocol Label Switching traffic engineering does not support by all routing protocols. If you plan to deploy Multiprotocol Label Switching traffic engineering you are going to be limited to using OSPF, or ISIS. With that, we have to depart from the routing protocol implementation used in Multiprotocol Label Switching part II, which was mistakenly EIGRP.

Let’s get started, but be sure you have grabbed the MPLS Lab Topology and IP Address Scheme. If you’ve been following from MPLS Parts I and II, you will want to modify your routing protocol to be OSPF, as that is the routing protocol in use in this lab. I won’t be going over the details of OSPF configuration here, as they are quite simple. The second change we are going to make to all the routers in our MPLS topology is the addition of Loopback addresses in support of consistent OSPF router-id configuration and also to support the end points of our MPLS traffic engineering tunnels. The IP scheme for the Loopback addresses is as follows:

MPLS1: 10.0.0.1/32

MPLS2: 10.0.0.2/32

MPLS3: 10.0.0.3/32

MPLS4: 10.0.0.4/32

MPLS5: 10.0.0.5/32

MPLS6: 10.0.0.6/32

MPLS7: 10.0.0.7/32

We will need to be sure to advertise these addresses via OSPF, as they will need to be globally routable for the tunnels that we are creating, and in support of future MPLS labs as they become available. With that being done, we are going to begin the configuration of Multiprotocol Label Switching Traffic Engineering. As stated in MPLS Part II, it is important to have Cisco Express Forwarding enabled. It can be enabled as follows:

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#ip cef

MPLS1(config)#^Z

MPLS1#

On every MPLS router participating in MPLS Traffic Engineering you will need to enable MPLS Traffic Engineering support as follows:

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#mpls traffic-eng tunnels

MPLS1(config)#^Z

MPLS1#

The next step we are going to take in this demonstration is to enable each Multiprotocol Label Switching device’s interface to support an RSVP-based MPLS Traffic Engineering Tunnel, which is done as follows:

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#int fa1/0

MPLS1(config-if)#mpls traffic-eng tunnels

MPLS1(config-if)#ip rsvp bandwidth 100

MPLS1(config-if)#^Z

MPLS1#

Now that the devices have been configured to support Multiprotocol Label Switching Traffic Engineering, we need to make sure our routing protocol is ready also. We are using OSPF in this example, so that is what we will show here:

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#router ospf 1

MPLS1(config-router)#mpls traffic-eng router-id Loopback0

MPLS1(config-router)#mpls traffic-eng area 0

MPLS1(config-router)#^Z

MPLS1#

Moving on, it is time for us to define the paths that we want our traffic to take through the network. I am going to show the configuration of 3 different paths here. I will make a point about these later, so please do all 3 of them for clarity later on.

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#ip explicit-path name ACG enable

MPLS1(cfg-ip-expl-path)#next-address 172.16.13.3

MPLS1(cfg-ip-expl-path)#next-address 172.16.37.3

MPLS1(cfg-ip-expl-path)#next-address 172.16.37.7

MPLS1(cfg-ip-expl-path)#next-address 10.0.0.7

MPLS1(cfg-ip-expl-path)#^Z

MPLS1#

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#ip explicit-path name ABDFG enable

MPLS1(cfg-ip-expl-path)#next-address 172.16.12.2

MPLS1(cfg-ip-expl-path)#next-address 172.16.24.2

MPLS1(cfg-ip-expl-path)#next-address 172.16.24.4

MPLS1(cfg-ip-expl-path)#next-address 172.16.46.4

MPLS1(cfg-ip-expl-path)#next-address 172.16.46.6

MPLS1(cfg-ip-expl-path)#next-address 172.16.67.6

MPLS1(cfg-ip-expl-path)#next-address 172.16.67.7

MPLS1(cfg-ip-expl-path)#next-address 10.0.0.7

MPLS1(cfg-ip-expl-path)#^Z

MPLS1#

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#ip explicit-path name AEG enable

MPLS1(cfg-ip-expl-path)#next-address 172.16.15.5

MPLS1(cfg-ip-expl-path)#next-address 172.16.57.5

MPLS1(cfg-ip-expl-path)#next-address 172.16.57.7

MPLS1(cfg-ip-expl-path)#next-address 10.0.0.7

MPLS1(cfg-ip-expl-path)#^Z

MPLS1#

We are doing the same thing on MPLS7. The relevant portion of the running config of MPLS7 is shown below:

ipexplicit-pathnameGCAenable

next-address172.16.37.3

next-address172.16.13.3

next-address172.16.13.1

next-address10.0.0.1

ipexplicit-pathnameGFDBAenable

next-address172.16.67.6

next-address172.16.46.6

next-address172.16.46.4

next-address172.16.24.4

next-address172.16.24.2

next-address172.16.12.2

next-address172.16.12.1

next-address10.0.0.1

ipexplicit-pathnameGEAenable

next-address172.16.57.5

next-address172.16.15.5

next-address172.16.15.1

next-address10.0.0.1

We have enabled Multiprotocol Label Switching Traffic Engineering support for all of our routers. We also configured OSPF support for MPLS Traffic Engineering, and now we have created the traffic engineering paths through the Multiprotocol Label Switching network. It is now time for us to begin building the tunnels. This is really easy, but it is also a very powerful tool to use in controlling the flow of traffic through your network. We will start by creating a tunnel interface, setting the destination, encapsulation, defining an MPLS path, and specifying the relative load each path will take, as shown here (note we are creating three tunnels, one for each of our paths):

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#interface Tunnel7

MPLS1(config-if)#ip unnumbered Loopback0

MPLS1(config-if)#tunnel destination 10.0.0.7

MPLS1(config-if)#tunnel mode mpls traffic-eng

MPLS1(config-if)#tunnel mpls traffic-eng priority 7 7

MPLS1(config-if)#tunnel mpls traffic-eng bandwidth 100

MPLS1(config-if)#tunnel mpls traffic-eng path-option 1 explicit name ACG

MPLS1(config-if)#tunnel mpls traffic-eng load-share 10

MPLS1(config-if)#^Z

MPLS1#

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#interface Tunnel702

MPLS1(config-if)#ip unnumbered Loopback0

MPLS1(config-if)#tunnel destination 10.0.0.7

MPLS1(config-if)#tunnel mode mpls traffic-eng

MPLS1(config-if)#tunnel mpls traffic-eng priority 7 7

MPLS1(config-if)#tunnel mpls traffic-eng bandwidth 100

MPLS1(config-if)#tunnel mpls traffic-eng path-option 1 explicit name ABDFG

MPLS1(config-if)#tunnel mpls traffic-eng load-share 10

MPLS1(config-if)#^Z

MPLS1#

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#interface Tunnel703

MPLS1(config-if)#ip unnumbered Loopback0

MPLS1(config-if)#tunnel destination 10.0.0.7

MPLS1(config-if)#tunnel mode mpls traffic-eng

MPLS1(config-if)#tunnel mpls traffic-eng priority 7 7

MPLS1(config-if)#tunnel mpls traffic-eng bandwidth 100

MPLS1(config-if)#tunnel mpls traffic-eng path-option 1 explicit name AEG

MPLS1(config-if)#tunnel mpls traffic-eng load-share 10

MPLS1(config-if)#^Z

MPLS1#

Here I present the running configuration of the tunnel interfaces created on MPLS7, since that is where the endpoint of the tunnel is terminated:

interfaceTunnel1

ipunnumberedLoopback0

tunneldestination10.0.0.1

tunnelmodemplstraffic-eng

tunnelmplstraffic-engpriority77

tunnelmplstraffic-engbandwidth100

tunnelmplstraffic-engpath-option1explicitnameGCA

tunnelmplstraffic-engload-share10

noroutingdynamic

interfaceTunnel102

ipunnumberedLoopback0

tunneldestination10.0.0.1

tunnelmodemplstraffic-eng

tunnelmplstraffic-engpriority77

tunnelmplstraffic-engbandwidth100

tunnelmplstraffic-engpath-option1explicitnameGFDBA

tunnelmplstraffic-engload-share10

noroutingdynamic

interfaceTunnel103

ipunnumberedLoopback0

tunneldestination10.0.0.1

tunnelmodemplstraffic-eng

tunnelmplstraffic-engpriority77

tunnelmplstraffic-engbandwidth100

tunnelmplstraffic-engpath-option1explicitnameGEA

tunnelmplstraffic-engload-share10

noroutingdynamic

Now we are going to verify our tunnels have come up as we expected. We do that with the following command:

MPLS1#showmplstraffic-engtunnelsbrief

SignallingSummary:

LSPTunnelsProcess:running

RSVPProcess:running

Forwarding:enabled

Periodicreoptimization:every3600seconds,nextin125seconds

Periodicauto-bwcollection:disabled

TUNNELNAMEDESTINATIONUPIFDOWNIFSTATE/PROT

MPLS1_t710.0.0.7-Fa1/0up/up

MPLS1_t70210.0.0.7-Fa1/1up/up

MPLS1_t70310.0.0.7-Fa2/0up/up

MPLS7_t110.0.0.1Fa1/0-up/up

MPLS7_t10210.0.0.1Fa1/1-up/up

MPLS7_t10310.0.0.1Fa2/0-up/up

Displayed3(of3)heads,0(of0)midpoints,3(of3)tails

It looks like all THREE of our tunnels are up. Now it’s time to find out what a wrench looks like when thrown at an MPLS tunnel. We’ll start by looking at the MPLS Forwarding Table, also known as the LFIB for the tunnel’s destination endpoint. This is shown below:

MPLS1#shomplsforwarding-table10.0.0.7

LocalOutgoingPrefixBytestagOutgoingNextHop

tagtagorVCorTunnelIdswitchedinterface

323210.0.0.7/320Fa2/0172.16.15.5

3210.0.0.7/320Fa1/0172.16.13.3

Hmmm?? Where is the third tunnel path? Well, since the Label Forwarding Information Base relies on the FIB, let’s look at the FIB. Again, this is below:

MPLS1#showipcef10.0.0.7detail

10.0.0.7/32,version58,epoch0,per-destinationsharing

0packets,0bytes

taginformationset

localtag:32

via172.16.15.5,FastEthernet2/0,0dependencies

trafficshare1

nexthop172.16.15.5,FastEthernet2/0

validadjacency

tagrewritewithFa2/0,172.16.15.5,tagsimposed:32

via172.16.13.3,FastEthernet1/0,0dependencies

trafficshare1

nexthop172.16.13.3,FastEthernet1/0

validadjacency

tagrewritewithFa1/0,172.16.13.3,tagsimposed:32

0packets,0bytesswitchedthroughtheprefix

tmstats:external0packets,0bytes

internal0packets,0bytes

Alright, what is going on? The FIB is received from the Layer 3 Engine in the control plane. Let’s have a look at the routing table to see what on earth is going on.

MPLS1#showiproute10.0.0.7

Routingentryfor10.0.0.7/32

Knownvia”ospf1″,distance110,metric3,typeintraarea

Lastupdatefrom172.16.15.5onFastEthernet2/0,00:22:54ago

RoutingDescriptorBlocks:

*172.16.15.5,from10.0.0.7,00:22:54ago,viaFastEthernet2/0

Routemetricis3,trafficsharecountis1

172.16.13.3,from10.0.0.7,00:22:54ago,viaFastEthernet1/0

Routemetricis3,trafficsharecountis1

Well, that did not do us any good, other than to demonstrate the dependence of the Label Forwarding Information Base on the FIB, and the FIB on the routing table. You should notice in all of the above commands that these are all physical interfaces – none of them are the tunnel interfaces. We have to force OSPF to use the tunnel interfaces in its calculations. We can do THAT by creating the following configuration on each tunnel interface:

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#int tunnel 7

MPLS1(config-if)#tunnel mpls traffic-eng autoroute announce

MPLS1(config-if)#^Z

MPLS1#

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#int tunnel 702

MPLS1(config-if)#tunnel mpls traffic-eng autoroute announce

MPLS1(config-if)#^Z

MPLS1#

MPLS1#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS1(config)#int tunnel 703

MPLS1(config-if)#tunnel mpls traffic-eng autoroute announce

MPLS1(config-if)#^Z

MPLS1#

MPLS7#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS7(config)#int tunnel 1

MPLS7(config-if)#tunnel mpls traffic-eng autoroute announce

MPLS7(config-if)#^Z

MPLS7#

MPLS7#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS7(config)#int tunnel 102

MPLS7(config-if)#tunnel mpls traffic-eng autoroute announce

MPLS7(config-if)#^Z

MPLS7#

MPLS7#conf t

Enter configuration commands, one per line. End with CNTL/Z.

MPLS7(config)#int tunnel 103

MPLS7(config-if)#tunnel mpls traffic-eng autoroute announce

MPLS7(config-if)#^Z

MPLS7#

Now! It’s time to verify our configurations as we did earlier. Again, let’s start by viewing the Label Forwarding Information Base:

MPLS1#shomplsforwarding-table10.0.0.7

LocalOutgoingPrefixBytestagOutgoingNextHop

tagtagorVCorTunnelIdswitchedinterface

32Poptag[T]10.0.0.7/320Tu7point2point

Poptag[T]10.0.0.7/320Tu702point2point

Poptag[T]10.0.0.7/320Tu703point2point

[T]ForwardingthroughaTSPtunnel.

Viewadditionaltagginginfowiththe’detail’option

Spectacular! We have three paths now to the destination endpoint. Let’s take a closer look so let’s see the detailed view:

MPLS1#shomplsforwarding-table10.0.0.7detail

LocalOutgoingPrefixBytestagOutgoingNextHop

tagtagorVCorTunnelIdswitchedinterface

32Poptag10.0.0.7/320Tu7point2point

MAC/Encaps=14/18,MRU=1512,TagStack30,viaFa1/0

CA020ADC001CCA000ADC001C88470001E000

Nooutputfeatureconfigured

Per-destinationload-sharing,slots:036912

Poptag10.0.0.7/320Tu702point2point

MAC/Encaps=14/18,MRU=1512,TagStack32,viaFa1/1

CA010ADC001CCA000ADC001D884700020000

Nooutputfeatureconfigured

Per-destinationload-sharing,slots:1471013

Poptag10.0.0.7/320Tu703point2point

MAC/Encaps=14/18,MRU=1512,TagStack31,viaFa2/0

CA040ADC001CCA000ADC003888470001F000

Nooutputfeatureconfigured

Per-destinationload-sharing,slots:2581114

This view offers details about the interfaces used, and which slots are used in each tunnel for traffic distribution among the tunnels. Now THAT is some good stuff. We now know it is working, but we are going to go ahead and view the FIB to solidify our knowledge of the relationships between the Label Forwarding Information Base and the Forwarding Information Base. The Forwarding Information Base is shown below:

MPLS1#showipcef10.0.0.7detail

10.0.0.7/32,version63,epoch0,per-destinationsharing

0packets,0bytes

taginformationset

localtag:32

via10.0.0.7,Tunnel7,0dependencies

trafficshare1

nexthop10.0.0.7,Tunnel7

validadjacency

tagrewritewithTu7,point2point,tagsimposed:30

via10.0.0.7,Tunnel702,0dependencies

trafficshare1

nexthop10.0.0.7,Tunnel702

validadjacency

tagrewritewithTu702,point2point,tagsimposed:32

via10.0.0.7,Tunnel703,0dependencies

trafficshare1

nexthop10.0.0.7,Tunnel703

validadjacency

tagrewritewithTu703,point2point,tagsimposed:31

0packets,0bytesswitchedthroughtheprefix

tmstats:external0packets,0bytes

internal0packets,0bytes

Now we view the routing table, which shows the relationship between the Forwarding Information Base and the Layer 3 Engine below:

MPLS1#showiproute10.0.0.7

Routingentryfor10.0.0.7/32

Knownvia”ospf1″,distance110,metric3,typeintraarea

Lastupdatefrom10.0.0.7onTunnel703,00:09:26ago

RoutingDescriptorBlocks:

*10.0.0.7,from10.0.0.7,00:09:26ago,viaTunnel7

Routemetricis3,trafficsharecountis1

10.0.0.7,from10.0.0.7,00:09:26ago,viaTunnel702

Routemetricis3,trafficsharecountis1

10.0.0.7,from10.0.0.7,00:09:26ago,viaTunnel703

Routemetricis3,trafficsharecountis1

And now we finally get to do here is a traceroute with the probe option set to 3, since we have 3 paths. Notice the results, and do some reflection. It’s not difficult to see and I’m not giving the answer to this away here, but keep it in mind. This topology was chosen to bring some potential issues to your attention. Check it out:

MPLS1#traceroute10.0.0.7probe3

Typeescapesequencetoabort.

Tracingtherouteto10.0.0.7

1172.16.12.2[MPLS:Label32Exp0]112msec

172.16.15.5[MPLS:Label31Exp0]96msec

172.16.13.3[MPLS:Label30Exp0]96msec

2172.16.24.4[MPLS:Label32Exp0]88msec

172.16.57.792msec

172.16.37.796msec

Hopefully you’ve enjoyed all that has been provided here. If you deal with Multiprotocol Label Switching, I’m sure you will find it useful. Thanks, and goodnight.

About the Author:
VN:F [1.8.0_1031]
Rating: 0.0/10 (0 votes cast)
VN:F [1.8.0_1031]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Similar Posts:
Multiprotocol Label Switching (MPLS) Traffic Engineering
MPLS Traffic Engineering
WoW Engineering Guide
World of Warcraft Engineering Guide
WoW Secrets Revealed in this WoW Engineering Guide
Considerations When Buying A Label Printer
Things To Consider When Buying A Label Printer

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CommentLuv Enabled
Tags:
Separate individual tags by commas