This post is a continuation of my last two posts:
MPLS in itself doesn’t give you all that much. It’s the applications running over it and the flexibility of these applications in combination with MPLS is what makes it worthwhile.
This will also be a bigger post, so take about 11 minutes to read this.
The previous posts didn’t show much configuration. That will change in this post. When building MPLS L3VPN’s the following tasks need to be completed to succeed:
- Enable MPLS in the provider backbone
- Create VRF’s
- Enable MP-BGP
- Enable PE-CE routing
This list introduces two new terms, VRF’s and MP-BGP. VRF stands for Virtual Routing and Forwarding (some say VPN Routing and Forwarding). You can view a VRF as a virtual router within a router. In normal operations a network known in VRF A cannot be reached from VRF B, comparable to vlans in a switch. One of the other big benefits of VRF’s is that overlapping IP space is allowed. VRF A can use the 192.168.1.0/24 network while VRF B also uses this subnet, without any issues.
MP-BGP is an extension to BGP which makes it possible to transport multiple protocols (MP stands for Multi-Protocol). I haven’t covered BGP on my website, but I’ll assume some familiarity. MP-BGP is required to do any L3VPN routing since it needs to transport new NLRI’s (Network Layer Reachability Information).
In my last post MPLS basics I covered the basics of MPLS. MPLS is a label switching technology that uses labels to decide where to send packets. These labels need to be assigned and distributed. There are several ways to do this, but the default and industry standard is LDP, Label Distribution Protocol. This post zooms in on LDP. This post is going to be a bit larger and more extensive than my normal posts, so take some time for it. The expected reading time is about 10 minutes
For this post I’ll use the following topology:
Actually, to be honest. LDP does not assign labels, it merely distributes them. The assignment of labels is done on the router itself. When the router has been configured for MPLS it assigns a label for every prefix in the routing table. This includes routes it has received from other routers. Labels are only locally significant. This means that each MPLS router within a topology uses different labels for the same prefix.
Multi Protocol Label Switching is a technology which is used in many service provider networks to simplify their networks.
Several reasons exist to use MPLS:
- It enables transparent tunneling over the Service Provider Network
- It enables the possibility to have a BGP free core, which reduces routing table size in provider routers
- Easy implementation of L2/L3 VPN services
- Possibilities for traffic engineering.
MPLS, as the name implies uses labels to forward packets. A normal router uses the destination IP address to make forwarding decisions, but a MPLS enabled router, unless it’s the MPLS border router, only uses the labels.
Both Spanning-Tree port priority and link cost can be used to influence path selection. To select a path to the root Spanning-Tree uses several different values.
The most important one is the total path cost. When Spanning-Tree has two paths to the root, one costing 100 and the other one costing 1000, STP will choose the path costing 100, because this one should be shorter.
If two paths have the same cost, STP will choose the path from the switch with the lowest bridge id. This can be seen in the following example. I use the same topology as last time:
Uplinkfast is a legacy feature of Spanning Tree to speed up convergence in case of a root port failure. When it knows it has a backup path to the root it will put it into forwarding state without waiting for the listening and learning stages of normal STP convergence.
Uplinkfast is designed to be used at the outer edges of your network. When enabling Uplinkfast the switch reconfigures the spanning tree priority to 49152 to make itself less attracting as a transit switch. It also increases the port priority with 3000.
I’m testing this in a very simple topology. I’ve got four switches, these are fully meshed, but for the sake of this test I’ve disabled the crosslinks (so the links between SW1 & SW4 and SW2 & SW3)