A good presentation on this topic: https://ripe66.ripe.net/presentations/141-RIPE66_Understanding_MPLS_Hashing-Snijders.pdf
- MPLS Lable doesn't have encapsulated protocol information. So after the bottom label, 2 possibilities:
- IPv4/v6 packets if L3VPN, the 1st 4-bit is ipVersion, 4=ipv4, 6=ipv6
- Ethernet frames if L2VPN, the 1st 48-bit is dstMAC
- Along the LSP, if P routers like to do ECMP by hashing, it has to guess like above to do hashing the 5-tuple fields (src/dstAddr, src/dstPort, protoNum)
- So the problem happens if the dstMac starts with 4 or 6
The solution for the above issue is MPLS control word (RFC 4385, Feb 2006), a 4-byte all-zero (same length as a label) control word after the bottom label.
- Arista EOS 4.21.3F: Configurable L2 EVPN MPLS control word
- mpls evpn; label-stack control-word
- Arista EOS 4.22.1F: Control Word support on LDP Pseudowire
- mpls ldp; pseudowire <name>; control-word
So the MPLS control word is to prevent incorrect hashing. How does the LSR do the load-balancing? The answer is Entropy Label (RFC 6790, Nov 2012)
- Increase the label stack by 2: 1 for ELI (entropy label indicator = 7), 1 for EL (entropy label)
- Aristea EOS 4.26.0F: LDP Entropy Label Support
- 4.25.2F: LSR support
- 4.26.0F: LER support
- mpls ldp; entropy-label
- This feature has a limitation: PHP LSR can't pop ELI + EL labels, so has to rely on LER to pop up [ELI, ELI, VPN] labels.
Another solution is FAT - Flow Aware Transport on LDP pseudowires (4.24.0F) based on RFC 6391
- mpls ldp; pseudowire; pseudowire <name>; label flow
No comments:
Post a Comment