MPLS Whatis:

MPLS improves the speed of deciding (finding) the next hop by classifying the various packets arriving at a node (ingress) and then using that classification information for all subsequent packets. This classification is achieved beforehand (using label bindings). The iteration of calculating the next hop for every packet (even though the packets have same forwarding information) in IP networks is avoided in MPLS.


An example:

Scenario: H1 is transmitting to H2

IP Routing:

  1. H1 creates a packet and sends it M1 (it’s default gateway).
  2. M1 receives the packet and from IP header gets the destination address. The routing table (created/updated by routing protocols OSPF, RIP etc) gives the next hop as M2.
  3. for every intermediate node a similar procedure (as in step 2) is followed.

For every service extensions, such as traffic engineering, differentiated service or VPNs a different architecture is used and glued to IP.

MPLS Routing:


 

LIB (Label Information Base)

M1 LIB

Inlabel

Outlabel

Outinterface

FEC

X

20

2

H2

M2 LIB

Inlabel

Outlabel

Outinterface

FEC

20

31

2

H2

M3 LIB

Inlabel

Outlabel

Outinterface

FEC

31

43

2

H2

M4 LIB

Inlabel

Outlabel

Outinterface

FEC

43

X

3

H2

  1. H1 creates a packet and sends it to M1 (it’s default gateway).
  2. M1 is an ingress LSR and decides what label to affix the packet. Here it is label 20. After attaching label the packet is forwarded on corresponding outinterface 2.
  3. M2 gets a packet with label 20, swaps it by 31 & forwards packet on its interface 2.
  4. M3 gets packet with label 31, swaps it by 43 & forwards packet on its interface 2.
  5. M4 gets packet with label 43 but does not have corresponding outlabel. This identifies M4 as an egress LSR for corresponding FEC and hence strips the label information and forwards the IP packet on interface 3.

How MPLS improves routing?

In the preceding eg, routers M2 & M3 have got to do is label swapping i.e. a simple table lookup such as packet.outlabel = LIB[inlabel]. More interestingly this is even true for service extensions such as traffic engineering, differentiated service and VPNs.

How LIB is created?

Assume that LIB table in every LSR is empty.


M1 receives a nonlabeled packet. It extracts the destination address H2 and sends a label request packet to M2 with FEC H2.
  1. M2 receives a label request packet and sees whether there is any label binding for FEC H2. There is none and hence sends a label request to M3 with FEC H2. (This decision of sending packet to M3 is done using L3 protocol).
  2. M3 receives a label request packet and sees whether there is any label binding for FEC H2. There is none and hence sends a label request to M4 with FEC H2.
  3. M4 receives a label request and being an egress LSR attaches a label 43 to the FEC H2. The label binding is a local matter and most often the software picks it up from the pool of numbers. M4 sends label binding information with label-43 & FEC H2 to M3.Now LIB table for M4 is:

Inlabel

Outlabel

Outinterface

FEC

43

X

3

H2

  1. M3 receives label binding packet with outlabel 43, it assigns a inlabel 31 to FEC H2. M3 sends label binding information with label 31 & FEC H2 to M2. Now LIB table for M3 is:

Inlabel

Outlabel

Outinterface

FEC

31

43

2

H2

  1. M2 receives label binding packet with outlabel 31, it assigns a inlabel 20 to FEC H2. M2 sends a label binding information with label 20 and FEC H2 to M1. Now LIB table for M2 is:

Inlabel

Outlabel

Outinterface

FEC

20

31

2

H2

6.      M1 receives label binding packet with outlabel 20. M1 knows it had initiated the label request sequence and hence it is an ingress for FEC H2. Now LIB table for M1 is:

Inlabel

Outlabel

Outinterface

FEC

X

20

2

H2