rfc9790v4.txt | rfc9790.txt | |||
---|---|---|---|---|
skipping to change at line 13 ¶ | skipping to change at line 13 ¶ | |||
Request for Comments: 9790 Juniper Networks | Request for Comments: 9790 Juniper Networks | |||
Updates: 4928 S. Bryant | Updates: 4928 S. Bryant | |||
Category: Standards Track University of Surrey 5GIC | Category: Standards Track University of Surrey 5GIC | |||
ISSN: 2070-1721 M. Bocci | ISSN: 2070-1721 M. Bocci | |||
Nokia | Nokia | |||
G. Mirsky, Ed. | G. Mirsky, Ed. | |||
Ericsson | Ericsson | |||
L. Andersson | L. Andersson | |||
J. Dong | J. Dong | |||
Huawei Technologies | Huawei Technologies | |||
May 2025 | June 2025 | |||
IANA Registry and Processing Recommendations for the First Nibble | IANA Registry and Processing Recommendations for the First Nibble | |||
Following a Label Stack | Following a Label Stack | |||
Abstract | Abstract | |||
This document creates a new IANA registry (called the "Post-Stack | This document creates a new IANA registry (called the "Post-Stack | |||
First Nibble" registry) for the first nibble (4-bit field) | First Nibble" registry) for the first nibble (4-bit field) | |||
immediately following an MPLS label stack. Furthermore, this | immediately following an MPLS label stack. Furthermore, this | |||
document presents some requirements for registering new values and | document presents some requirements for registering new values and | |||
skipping to change at line 137 ¶ | skipping to change at line 137 ¶ | |||
packets contains a PSH. This also applies to packets of any new | packets contains a PSH. This also applies to packets of any new | |||
version of IP (see Section 2.4). | version of IP (see Section 2.4). | |||
Section 2.1.1 of this document includes an analysis of load-balancing | Section 2.1.1 of this document includes an analysis of load-balancing | |||
techniques; based on this, Section 2.1.1.1 introduces a requirement | techniques; based on this, Section 2.1.1.1 introduces a requirement | |||
that deprecates the use of the heuristic method for identifying the | that deprecates the use of the heuristic method for identifying the | |||
type of packet encapsulated in MPLS and recommends using a dedicated | type of packet encapsulated in MPLS and recommends using a dedicated | |||
label value for load balancing. The intent is for legacy routers to | label value for load balancing. The intent is for legacy routers to | |||
continue operating as they have, with no new problems introduced as a | continue operating as they have, with no new problems introduced as a | |||
result of this document. However, new implementations that follow | result of this document. However, new implementations that follow | |||
this document enable a more robust network operation. | this document enable more robust network operation. | |||
Furthermore, this document updates [RFC4928] by deprecating the | Furthermore, this document updates [RFC4928] by deprecating the | |||
heuristic method for identifying the type of packet encapsulated in | heuristic method for identifying the type of packet encapsulated in | |||
MPLS. This document clearly states that the type of encapsulated | MPLS. This document clearly states that the type of encapsulated | |||
packet cannot be determined based on the PFN alone. | packet cannot be determined based on the PFN alone. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
skipping to change at line 166 ¶ | skipping to change at line 166 ¶ | |||
if a practice has been deprecated, that practice should not be | if a practice has been deprecated, that practice should not be | |||
included in new implementations or deployed in new deployments. | included in new implementations or deployed in new deployments. | |||
Embedded Packet: A packet that follows immediately after the MPLS | Embedded Packet: A packet that follows immediately after the MPLS | |||
label stack and an optional PSH. The embedded packet could be an | label stack and an optional PSH. The embedded packet could be an | |||
IPv4 or IPv6 packet, an Ethernet packet (for Virtual Private LAN | IPv4 or IPv6 packet, an Ethernet packet (for Virtual Private LAN | |||
Service (VPLS) [RFC4761] [RFC4762] or EVPN [RFC7432]), or some | Service (VPLS) [RFC4761] [RFC4762] or EVPN [RFC7432]), or some | |||
other type of Layer 2 frame [RFC4446]. | other type of Layer 2 frame [RFC4446]. | |||
Label Stack: A label stack is represented as a consecutive sequence | Label Stack: A label stack is represented as a consecutive sequence | |||
of "label stack entries (four-octet fields)" after the Layer 2 | of "label stack entries" (four-octet fields) after the Layer 2 | |||
header but before any network layer header. The last label stack | header but before any network layer header. The last label stack | |||
entry of a label stack has its Bottom of Stack bit set. | entry of a label stack has its Bottom of Stack bit set. | |||
MPLS Packet: A packet whose Layer 2 header declares the type to be | MPLS Packet: A packet whose Layer 2 header declares the type to be | |||
MPLS. For example, the Ethertype is 0x8847 or 0x8848 for | MPLS. For example, the Ethertype is 0x8847 or 0x8848 for | |||
Ethernet, and the Protocol field is 0x0281 or 0x0283 for PPP. | Ethernet, and the Protocol field is 0x0281 or 0x0283 for PPP. | |||
MPLS Payload: All data after the label stack and the optional Post- | MPLS Payload: All data after the label stack and any optional PSHs. | |||
Stack header. | It is possible that more than one type of PSH may be present in a | |||
packet, and some PSH specifications might allow multiple PSHs of | ||||
the same type. The presence rules for multiple PSHs are a matter | ||||
for the documents that define those PSHs, e.g., [MNA-PS-HDR]. | ||||
Post-stack First Nibble (PFN): The most significant four bits of the | Post-stack First Nibble (PFN): The most significant four bits of the | |||
first octet following the label stack. | first octet following the label stack. | |||
Post-Stack Header (PSH): A field containing information that may be | Post-Stack Header (PSH): A field containing information that may be | |||
of interest to the egress Label Switching Router (LSR) or transit | of interest to the egress Label Switching Router (LSR) or transit | |||
LSRs. Examples include a control word [RFC4385] [RFC8964] or an | LSRs. Examples include a control word [RFC4385] [RFC8964] or an | |||
associated channel header [RFC4385] [RFC5586] [RFC9546]. A parser | associated channel header [RFC4385] [RFC5586] [RFC9546]. | |||
needs to be able to determine where the PSH ends in order to find | ||||
the embedded packet. | ||||
1.3. Abbreviations | 1.3. Abbreviations | |||
BIER: Bit Index Explicit Replication | BIER: Bit Index Explicit Replication | |||
FAT: Flow-Aware Transport | FAT: Flow-Aware Transport | |||
LSE: Label Stack Entry | LSE: Label Stack Entry | |||
LSR: Label Switching Router | LSR: Label Switching Router | |||
skipping to change at line 265 ¶ | skipping to change at line 266 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| PSH | | | | PSH | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
... | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| end of PSH | | | | end of PSH | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| embedded packet | | | | embedded packet | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | |||
Figure 2: Examples of an MPLS Packet Payload With and Without | Figure 2: Examples of an MPLS Packet Payload With and Without a | |||
Post-Stack Header | Preceding Post-Stack Header | |||
Figure 1 shows an MPLS packet with a Layer 2 header X and a label | Figure 1 shows an MPLS packet with a Layer 2 header X and a label | |||
stack Y ending with Label-n. Figure 2 displays three examples of an | stack Y ending with Label-n. Figure 2 displays three examples of an | |||
MPLS payload: | MPLS payload: | |||
Example A: The first payload is a bare IP packet, i.e., no PSH. The | Example A: The first payload is a bare IP packet, i.e., no PSH. The | |||
PFN in this case overlaps with the IP version number. | PFN in this case overlaps with the IP version number. | |||
Example B: The next payload is a bare non-IP packet; again, no PSH. | Example B: The next payload is a bare non-IP packet; again, no PSH. | |||
The PFN here is the first nibble of the payload, whatever it | The PFN here is the first nibble of the payload, whatever it | |||
happens to be. | happens to be. | |||
Example C: This example is an MPLS Payload that starts with a PSH | Example C: This example is an MPLS Payload that follows a PSH. | |||
followed by the embedded packet. Here, the embedded packet could | Here, the embedded packet could be IP or non-IP. | |||
be IP or non-IP. | ||||
Thus, the complete MPLS packet would consist of [X Y A], [X Y B], or | Thus, the complete MPLS packet would consist of [X Y A], [X Y B], or | |||
[X Y C]. | [X Y C]. | |||
2. Rationale | 2. Rationale | |||
2.1. Why Look at the First Nibble | 2.1. Why Look at the First Nibble | |||
An MPLS packet can contain one of many types of embedded packets. | An MPLS packet can contain one of many types of embedded packets. | |||
Three common types are: | Three common types are: | |||
skipping to change at line 359 ¶ | skipping to change at line 359 ¶ | |||
and find the relevant fields for load balancing on that basis. | and find the relevant fields for load balancing on that basis. | |||
2. If the PFN is 0x6 (0110b), treat the payload as an IPv6 packet, | 2. If the PFN is 0x6 (0110b), treat the payload as an IPv6 packet, | |||
and find the relevant fields for load balancing on that basis. | and find the relevant fields for load balancing on that basis. | |||
3. If the PFN is anything else, the MPLS payload is not an IP | 3. If the PFN is anything else, the MPLS payload is not an IP | |||
packet; fall back to load balancing using the label stack. | packet; fall back to load balancing using the label stack. | |||
This heuristic has been implemented in many (legacy) routers and | This heuristic has been implemented in many (legacy) routers and | |||
performs well in the case of example A in Figure 2. However, this | performs well in the case of example A in Figure 2. However, this | |||
heuristic can work very badly for non-IP packet as shown in example B | heuristic can work very badly for the non-IP packet as shown in | |||
in Figure 2. For example, if payload B is an Ethernet frame, then | example B in Figure 2. For example, if payload B is an Ethernet | |||
the PFN is the first nibble of the Organizationally Unique Identifier | frame, then the PFN is the first nibble of the Organizationally | |||
of the destination MAC address, which can be 0x4 or 0x6. This would | Unique Identifier of the destination MAC address, which can be 0x4 or | |||
lead to the packet being treated as an IPv4 or IPv6 packet such that | 0x6. This would lead to the packet being treated as an IPv4 or IPv6 | |||
data at the offsets of specific relevant fields would be used as | packet such that data at the offsets of specific relevant fields | |||
input to the load-balancing heuristic, resulting in unpredictable | would be used as input to the load-balancing heuristic, resulting in | |||
load balancing. This behavior can happen to other types of non-IP | unpredictable load balancing. This behavior can happen to other | |||
payloads as well. | types of non-IP payloads as well. | |||
That, in turn, led to the idea of inserting a PSH (e.g., a pseudowire | That, in turn, led to the idea of inserting a PSH (e.g., a pseudowire | |||
control word [RFC4385], a Deterministic Networking (DetNet) control | control word [RFC4385], a Deterministic Networking (DetNet) control | |||
word [RFC8964], a Network Service Header (NSH) [RFC8300], or a BIER | word [RFC8964], a Network Service Header (NSH) [RFC8300], or a BIER | |||
header [RFC8296]) where the PFN is not 0x4 or 0x6; this explicitly | header [RFC8296]) where the PFN is not 0x4 or 0x6; this explicitly | |||
prevents forwarding engines from confusing the MPLS payload with an | prevents forwarding engines from confusing the MPLS payload with an | |||
IP packet. [RFC8469] recommends the use of a control word when the | IP packet. [RFC8469] recommends the use of a control word when the | |||
embedded packet is an Ethernet frame. [RFC8469] was published at the | embedded packet is an Ethernet frame. [RFC8469] was published at the | |||
request of the operator community and the IEEE Registration Authority | request of the operator community and the IEEE Registration Authority | |||
Committee as a result of operational difficulties with pseudowires | Committee as a result of operational difficulties with pseudowires | |||
skipping to change at line 497 ¶ | skipping to change at line 497 ¶ | |||
2.5. Next Step to More Deterministic Load Balancing in MPLS Networks | 2.5. Next Step to More Deterministic Load Balancing in MPLS Networks | |||
Network evolution is impossible to control, but it develops over a | Network evolution is impossible to control, but it develops over a | |||
period of time determined by various factors. | period of time determined by various factors. | |||
This document discourages further proliferation of the | This document discourages further proliferation of the | |||
implementations that could lead to undesired effects on data flows. | implementations that could lead to undesired effects on data flows. | |||
In doing so, it limits the scope of future protocol developments and | In doing so, it limits the scope of future protocol developments and | |||
thus helps to ensure that future network evolution will be smoother. | thus helps to ensure that future network evolution will be smoother. | |||
Obsoleting the use of a PSH for non-IP payloads encapsulated in MPLS | Section 2 of [RFC4385] suggests the use of a PSH solely for the | |||
would assist with the progress toward a simpler, more coherent system | purpose of avoiding IP ECMP treatment of non-IP payloads encapsulated | |||
of MPLS data encapsulation. However, before that can be done, it is | in MPLS. Obsoleting this use of a PSH would assist with the progress | |||
important to collect sufficient evidence that there are no marketed | toward a simpler, more coherent system of MPLS data encapsulation. | |||
or deployed implementations using the heuristic practice to load- | (Other uses of a PSH may still be valid.) However, before that can | |||
balancing MPLS data flows. | be done, it is important to collect sufficient evidence that there | |||
are no marketed or deployed implementations using the heuristic | ||||
practice to load balance MPLS data flows. | ||||
Therefore, the next steps toward more deterministic load balancing in | Therefore, the next steps toward more deterministic load balancing in | |||
MPLS networks are to gradually deprecate non-PSH MPLS encapsulations | MPLS networks are to gradually deprecate non-PSH MPLS encapsulations | |||
of non-IP data, to cease using heuristic load balancing, and to | of non-IP data, to cease using heuristic load balancing, and to | |||
survey the available and deployed implementations to determine when | survey the available and deployed implementations to determine when | |||
obsoletion may be achieved. | obsoletion may be achieved. | |||
3. IANA Considerations | 3. IANA Considerations | |||
Per this document, IANA has created a registry group called "Post- | Per this document, IANA has created a registry group called "Post- | |||
skipping to change at line 649 ¶ | skipping to change at line 651 ¶ | |||
Data Plane: MPLS", RFC 8964, DOI 10.17487/RFC8964, January | Data Plane: MPLS", RFC 8964, DOI 10.17487/RFC8964, January | |||
2021, <https://www.rfc-editor.org/info/rfc8964>. | 2021, <https://www.rfc-editor.org/info/rfc8964>. | |||
[RFC9789] Andersson, L., Bryant, S., Bocci, M., and T. Li, "MPLS | [RFC9789] Andersson, L., Bryant, S., Bocci, M., and T. Li, "MPLS | |||
Network Actions (MNAs) Framework", RFC 9789, | Network Actions (MNAs) Framework", RFC 9789, | |||
DOI 10.17487/RFC9789, May 2025, | DOI 10.17487/RFC9789, May 2025, | |||
<https://www.rfc-editor.org/info/rfc9789>. | <https://www.rfc-editor.org/info/rfc9789>. | |||
5.2. Informative References | 5.2. Informative References | |||
[MNA-PS-HDR] | ||||
Rajamanickam, J., Ed., Gandhi, R., Ed., Zigler, R., Li, | ||||
T., and J. Dong, "Post-Stack MPLS Network Action (MNA) | ||||
Solution", Work in Progress, Internet-Draft, draft-ietf- | ||||
mpls-mna-ps-hdr-01, 30 May 2025, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-mpls- | ||||
mna-ps-hdr-01>. | ||||
[RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge | [RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge | |||
Emulation (PWE3)", BCP 116, RFC 4446, | Emulation (PWE3)", BCP 116, RFC 4446, | |||
DOI 10.17487/RFC4446, April 2006, | DOI 10.17487/RFC4446, April 2006, | |||
<https://www.rfc-editor.org/info/rfc4446>. | <https://www.rfc-editor.org/info/rfc4446>. | |||
[RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private | [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private | |||
LAN Service (VPLS) Using BGP for Auto-Discovery and | LAN Service (VPLS) Using BGP for Auto-Discovery and | |||
Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, | Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, | |||
<https://www.rfc-editor.org/info/rfc4761>. | <https://www.rfc-editor.org/info/rfc4761>. | |||
skipping to change at line 705 ¶ | skipping to change at line 715 ¶ | |||
Acknowledgements | Acknowledgements | |||
The authors express their appreciation and gratitude to Donald | The authors express their appreciation and gratitude to Donald | |||
E. Eastlake 3rd for the review, insightful questions, and helpful | E. Eastlake 3rd for the review, insightful questions, and helpful | |||
comments. Also, the authors are grateful to Amanda Baber for helping | comments. Also, the authors are grateful to Amanda Baber for helping | |||
organize the IANA registry in a clear and concise manner. | organize the IANA registry in a clear and concise manner. | |||
Éric Vyncke, John Scudder, Warren Kumari, Murray Kucherawy, and | Éric Vyncke, John Scudder, Warren Kumari, Murray Kucherawy, and | |||
Gunter Van de Velde provided helpful comments during IESG review. | Gunter Van de Velde provided helpful comments during IESG review. | |||
The authors would also like to thank Adrian Farrel for his patient | ||||
and careful shepherding and for helping to finalize the text. | ||||
Authors' Addresses | Authors' Addresses | |||
Kireeti Kompella | Kireeti Kompella | |||
Juniper Networks | Juniper Networks | |||
1133 Innovation Way | 1133 Innovation Way | |||
Sunnyvale, CA 94089 | Sunnyvale, CA 94089 | |||
United States of America | United States of America | |||
Email: kireeti.ietf@gmail.com | Email: kireeti.ietf@gmail.com | |||
Stewart Bryant | Stewart Bryant | |||
End of changes. 11 change blocks. | ||||
28 lines changed or deleted | 41 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |