RFC 4950
ICMP Extensions for Multiprotocol Label Switching
RFC 4950: ICMP Extensions for Multiprotocol Label Switching π
Okay bestie, let's start with the basics π This one came out of the Network Working Group in August 2007. It's a Standards Track document, so it's the real deal, not just a suggestion.
The authors are Ronald P. Bonica (Juniper Networks), Der-Hwa Gan (Consultant), Daniel C. Tappan (Consultant), and Carlos Pignataro (Cisco Systems, Inc.). The header doesn't list any document it obsoletes or updates, so this one stands on its own β¨
Status of This Memo π
Here's the official status stuff. This document specifies an Internet standards track protocol for the Internet community, and it's basically inviting everyone to talk about it and suggest improvements π«Ά For the current standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). And distribution of this memo is unlimited, so share away πΈ
Copyright Notice Β©οΈ
Copyright (C) The IETF Trust (2007).
Abstract π¦
Okay so the big idea: this memo defines an extension object that can be tacked onto certain multi-part ICMP messages. It lets Label Switching Routers add MPLS information to ICMP messages, and it's already widely deployed out in the wild, which is giving "proven" energy π₯
Table of Contents π§
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions Used in This Document . . . . . . . . . . . . . . . 3
3. Application to TRACEROUTE . . . . . . . . . . . . . . . . . . . 3
4. Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5. MPLS Label Stack Object . . . . . . . . . . . . . . . . . . . . 4
6. Security Considerations . . . . . . . . . . . . . . . . . . . . 5
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 5
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 6
8.1. Normative References . . . . . . . . . . . . . . . . . . . 6
8.2. Informative References . . . . . . . . . . . . . . . . . . 6
1. Introduction β¨
Okay so IP routers use the Internet Control Message Protocol, which is ICMPv4 [RFC0792] and ICMPv6 [RFC4443], to send control information back to source hosts. Network operators lean on that info to figure out what's going wrong with routing π΅οΈββοΈ
Here's the vibe check: when a router gets an IP datagram it can't deliver, it can send an ICMP message to the host that sent it. That message says why the datagram couldn't be delivered. It also carries the IP header and leading payload octets of the "original datagram" the ICMP message is responding to π
Label Switching Routers (LSRs) use ICMP too, to send control info to source hosts. Section 2.3 of [RFC3032] describes how MPLS and ICMP interact, and Sections 2.4 and 3 of [RFC3032] show applications of that interaction π
Now here's where it gets spicy πΆοΈ When an LSR gets an MPLS-encapsulated datagram it can't deliver, it strips off the entire MPLS label stack, which exposes the IP datagram that was wrapped up inside. The LSR then hands that IP datagram to an error processing module. Error processing can include generating an ICMP message.
That ICMP message says why the original datagram couldn't be delivered, and it has the IP header and leading octets of the original datagram. But here's the tea β It has zero info about the MPLS label stack that encapsulated the original datagram when it showed up at the LSR. That's a big deal, because the LSR forwarded the datagram based on information in that exact label stack π
So this memo defines an ICMP extension object that lets an LSR add MPLS info to ICMP messages. Selected ICMP messages SHOULD include the MPLS label stack, exactly as it arrived at the router sending the ICMP message π The ICMP message MUST also include the IP header and leading payload octets of the original datagram.
The ICMP extensions in this document must be preceded by an ICMP Extension Structure Header and an ICMP Object Header. Both are defined in [RFC4884] π§
The ICMP extension in this document works just as well for ICMPv4 [RFC0792] and ICMPv6 [RFC4443]. Unless it says otherwise, when this document says ICMP, it means multi-part ICMP messages, covering both ICMPv4 and ICMPv6 π¦
2. Conventions Used in This Document π
Okay, the BCP 14 key words in this doc are the ones listed here: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL". They're meant to be read the way RFC2119 [RFC2119] describes them. Literally, read the rules π
3. Application to TRACEROUTE πΊοΈ
The ICMP extension in this memo makes TRACEROUTE even better β¨ Enhanced TRACEROUTE apps, just like the older ones, show which nodes the original datagram visited on its way to the destination. The difference is that they also show the original datagram's MPLS encapsulation status as it arrived at each node. Iconic, honestly π
Here's what sample output from an enhanced TRACEROUTE implementation looks like (Figure 1):
> traceroute 192.0.2.1
traceroute to 192.0.2.1 (192.0.2.1), 30 hops max, 40 byte packets
1 192.0.2.13 (192.0.2.13) 0.661 ms 0.618 ms 0.579 ms
2 192.0.2.9 (192.0.2.9) 0.861 ms 0.718 ms 0.679 ms
MPLS Label=100048 Exp=0 TTL=1 S=1
3 192.0.2.5 (192.0.2.5) 0.822 ms 0.731 ms 0.708 ms
MPLS Label=100016 Exp=0 TTL=1 S=1
4 192.0.2.1 (192.0.2.1) 0.961 ms 8.676 ms 0.875 ms
Figure 1: Enhanced TRACEROUTE Sample Output
4. Disclaimer β οΈ
Quick heads up, this memo does NOT define the general relationship between ICMP and MPLS. Section 2.3 of [RFC3032] is the one that defines that relationship π«Ά
This memo also doesn't define encapsulation-specific TTL (Time to Live) manipulation procedures. For that, it defers to Section 5.4 of RFC 3034 [RFC3034] and Section 10 of [RFC3035] π
And one more thing π When encapsulation-specific TTL manipulation procedures break the basic TRACEROUTE mechanism, they'll break enhanced TRACEROUTE implementations too.
5. MPLS Label Stack Object π§ββοΈ
Okay this is the main event. The MPLS Label Stack Object can be appended to ICMP Time Exceeded and Destination Unreachable messages. One instance of the object represents the entire MPLS label stack, formatted exactly as it was when it arrived at the LSR that sends the ICMP message π
Figure 2 shows the MPLS Label Stack Object. It must be preceded by an ICMP Extension Structure Header and an ICMP Object Header. Both are defined in [RFC4884] π
Here are the header values:
Class-Num = 1, MPLS Label Stack Class
C-Type = 1, Incoming MPLS Label Stack
Length = 4 + 4 * (number of MPLS LSEs)
And here's the layout:
0 1 2 3
+-------------+-------------+-------------+-------------+
| Label |EXP |S| TTL |
+-------------+-------------+-------------+-------------+
| |
| // Remaining MPLS Label Stack Entries // |
| |
+-------------+-------------+-------------+-------------+
Figure 2: MPLS Label Stack Object
In the object payload, octets 0-3 hold the first member of the MPLS label stack. Every remaining member gets its own 4 octets, in the same format π
The fields are:
Label: 20 bitsExp: Experimental Use, 3 bitsS: Bottom of Stack, 1 bitTTL: Time to Live, 8 bits
Part 2 picks up with Security Considerations, which is seriously dramatic energy, so stay tuned ππ
Full Copyright Statement β¨
okay so this part is the legal bits, but bestie, they matter π The IETF Trust owns the copyright on this document, and it's from 2007 π This document is covered by the rights, licenses, and restrictions in BCP 78. Except for what BCP 78 says, the authors keep all their rights π¦
Also, this whole document is handed over "AS IS" π«Ά The contributor, the organization they represent or are sponsored by (if any), the Internet Society, the IETF Trust, and the Internet Engineering Task Force all say there are no warranties, express or implied. That includes no promise that using the info won't infringe anyone's rights, and no implied warranty of merchantability or fitness for a particular purpose π Not gonna lie, that's a lot of legalese, but it basically means nobody is promising this will work for your specific use case π
Intellectual Property
The IETF doesn't take a side on whether any IPR or other rights claimed for the tech in this document are valid, how wide they are, or whether any license for them exists π It also doesn't claim it went looking for those rights itself. If you want the rules about rights in RFC docs, check BCP 78 and BCP 79 π
If you want copies of IPR disclosures sent to the IETF Secretariat, or the assurances of licenses that come with them, or the results of trying to get a general license or permission for implementers or users, you can find them at the IETF online IPR repository: http://www.ietf.org/ipr π₯
The IETF also invites anyone to flag any copyrights, patents, patent applications, or other proprietary rights that might cover tech needed to implement this standard. Send that info to the IETF at ietf-ipr@ietf.org π
Acknowledgement
The RFC Editor function is currently funded by the Internet Society π Thank you for funding the people who keep these docs running, periodt β¨
π¦ where this page comes from
- ietf: rfc4950 2007-08
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms