draft-ietf-mpls-1stnibble-08.txt | draft-ietf-mpls-1stnibble-09.txt | |||
---|---|---|---|---|
MPLS Working Group K. Kompella | MPLS Working Group K. Kompella | |||
Internet-Draft Juniper Networks | Internet-Draft Juniper Networks | |||
Updates: 4928 (if approved) S. Bryant | Updates: 4928 (if approved) S. Bryant | |||
Intended status: Standards Track University of Surrey 5GIC | Intended status: Standards Track University of Surrey 5GIC | |||
Expires: 20 December 2024 M. Bocci | Expires: 26 January 2025 M. Bocci | |||
Nokia | Nokia | |||
G. Mirsky, Ed. | G. Mirsky, Ed. | |||
Ericsson | Ericsson | |||
L. Andersson | L. Andersson | |||
J. Dong | J. Dong | |||
Huawei Technologies | Huawei Technologies | |||
18 June 2024 | 25 July 2024 | |||
IANA Registry for the First Nibble Following a Label Stack | IANA Registry for the First Nibble Following a Label Stack | |||
draft-ietf-mpls-1stnibble-08 | draft-ietf-mpls-1stnibble-09 | |||
Abstract | Abstract | |||
The goal of this memo is to create a new IANA registry (called the | This memo creates a new IANA registry (called the Post-stack First | |||
Post-stack First Nibble registry) for the first nibble (4-bit field) | Nibble registry) for the first nibble (4-bit field) immediately | |||
immediately following an MPLS label stack. The memo offers a | following an MPLS label stack. The memo offers a rationale for such | |||
rationale for such a registry, describes how the registry should be | a registry, describes how the registry should be managed, and | |||
managed, and provides some initial entries. Furthermore, this memo | provides some initial entries. Furthermore, this memo sets out some | |||
sets out some documentation requirements for registering new values. | documentation requirements for registering new values. Finally, it | |||
Finally, it provides some recommendations that make processing MPLS | provides some recommendations that make processing MPLS packets | |||
packets easier and more robust. | easier and more robust. | |||
The relationship between the IANA IP Version Numbers (RFC 2780) and | The relationship between the IANA IP Version Numbers (RFC 2780) and | |||
the Post-stack First Nibble registry is described in this document. | the Post-stack First Nibble registry is described in this document. | |||
This memo, if published, would update RFC 4928. | This document updates RFC 4928 by deprecating the heuristic method | |||
for identifying the type of packet encapsulated in MPLS. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on 20 December 2024. | This Internet-Draft will expire on 26 January 2025. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Revised BSD License text as | extracted from this document must include Revised BSD License text as | |||
described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Revised BSD License. | provided without warranty as described in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Conventions and Definitions . . . . . . . . . . . . . . . 3 | 1.1. Conventions and Definitions . . . . . . . . . . . . . . . 4 | |||
1.2. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 6 | 1.2. Reference Figures . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 7 | |||
2.1. Why Look at the First Nibble . . . . . . . . . . . . . . 6 | 2. Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
2.1.1. Load Balancing . . . . . . . . . . . . . . . . . . . 6 | 2.1. Why Look at the First Nibble . . . . . . . . . . . . . . 7 | |||
2.2. Updates of RFC 4928 . . . . . . . . . . . . . . . . . . . 8 | 2.1.1. Load Balancing . . . . . . . . . . . . . . . . . . . 8 | |||
2.3. Why Create a Registry . . . . . . . . . . . . . . . . . . 10 | 2.2. Updates of RFC 4928 . . . . . . . . . . . . . . . . . . . 9 | |||
2.3. Why Create a Registry . . . . . . . . . . . . . . . . . . 11 | ||||
2.4. IP Version Numbers versus Post-stack First Nibble | 2.4. IP Version Numbers versus Post-stack First Nibble | |||
Values . . . . . . . . . . . . . . . . . . . . . . . . . 10 | Values . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 2.5. Next Step to More Deterministic Load -balancing in an MPLS | |||
3.1. The Post-stack First Nibble Registry . . . . . . . . . . 11 | Network . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | |||
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | 3.1. The Post-stack First Nibble Registry . . . . . . . . . . 12 | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 14 | 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.1. Normative References . . . . . . . . . . . . . . . . . . 14 | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 15 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
1. Introduction | 1. Introduction | |||
An MPLS packet consists of a label stack, an optional "post-stack | An MPLS packet consists of a label stack, an optional "post-stack | |||
header" (PSH) and an optional embedded packet (in that order). By | header" (PSH) and an optional embedded packet (in that order). By | |||
PSH, we mean existing artifacts such as Control Words, BIER headers | PSH, we mean existing artifacts such as Control Words [RFC4385], BIER | |||
and the like, as well as new types of PSH being discussed by the MPLS | headers [RFC8296] and the like, as well as new types of PSH being | |||
Working Group. However, in the data plane, there are scant clues | discussed by the MPLS Working Group. However, in the data plane, | |||
regarding the PSH, and no clue as to the type of embedded packet; | there are scant clues regarding the PSH, and no clue as to the type | |||
this information is communicated via other means, such as the routing | of embedded packet; this information is communicated via other means, | |||
protocols that signal the labels in the stack. Nonetheless, in order | such as the routing protocols that signal the labels in the stack. | |||
to better handle an MPLS packet in the data plane, it is common | Nonetheless, in order to better handle an MPLS packet in the data | |||
practice for network equipment to "guess" the type of embedded | plane, it is common practice for network equipment to "guess" the | |||
packet. Such equipment may also need to process the PSH. Both of | type of embedded packet. Such equipment may also need to process the | |||
these require parsing the data after the label stack. To do this, | PSH. Both of these require parsing the data after the label stack. | |||
the "first nibble" (the top four bits of the first octet following | To do this, the "first nibble" (the top four bits of the first octet | |||
the label stack) is often used. Although some existing network | following the label stack) is often used. Although some existing | |||
devices may use such a method, it needs to be stressed that the | network devices may use such a method, it needs to be stressed that | |||
correct interpretation of the Post-stack First Nibble (PFN) in a PSH | the correct interpretation of the Post-stack First Nibble (PFN) in a | |||
can be made only in the context of the Label Stack Element (LSE) or | PSH can be made only in the context associated using the control or | |||
group of LSEs in the preceding label stack that characterize the type | management plane with the Label Stack Element (LSE) or group of LSEs | |||
of the PSH, and that any attempt to rely on the value in any other | in the preceding label stack that characterize the type of the PSH, | |||
context is unreliable. | and that any attempt to rely on the value in any other context is | |||
unreliable. | ||||
The semantics and usage of the first nibble are not well documented, | The semantics and usage of the first nibble are not well documented, | |||
nor are the assignments of values. This memo serves four purposes: | nor are the assignments of values. This memo serves four purposes: | |||
* To document the assignments already made. | * To document the values already in use. | |||
* To provide straightforward documentation of future assignments | * To provide a mechanism to document future assignments through the | |||
through the creation of a "Post-stack First Nibble registry". | creation of a "Post-stack First Nibble registry". | |||
* Provide a method for tracking usage by requiring more consistent | * Provide a method for tracking usage by requiring more detailed | |||
documentation. | documentation. | |||
* To stress the importance that any MPLS packet not carrying plain | * To stress the importance that any MPLS packet not carrying plain | |||
IPv4 or IPv6 packets contains a PSH. | IPv4 or IPv6 packets contains a PSH, including any new version of | |||
IP (Section 2.4). | ||||
This memo introduces a requirement and a recommendation. The first | This memo introduces a requirement and a recommendation. The first | |||
builds on Section 2.1.1, and the second deprecates the use of the | builds on Section 2.1.1, and the second deprecates the use of the | |||
heuristic in Section 2.1.1.1 and recommends using a dedicated label | heuristic in Section 2.1.1.1 and recommends using a dedicated label | |||
value for load balancing. The intent of both is for legacy routers | value for load balancing. The intent of both is for legacy routers | |||
to continue operating as they have, with no new problems introduced | to continue operating as they have, with no new problems introduced | |||
as a result of this memo. However, new implementations that follow | as a result of this memo. However, new implementations that follow | |||
this memo enable a more robust network operation. | this memo enable a more robust network operation. | |||
This document, if published, would update [RFC4928] by deprecating | This document updates [RFC4928] by deprecating the heuristic method | |||
the heuristic method for identifying the type of packet encapsulated | for identifying the type of packet encapsulated in MPLS. This | |||
in MPLS. This document clearly states that the type of encapsulated | document clearly states that the type of encapsulated packet cannot | |||
packet cannot be determined based on the PFN alone. | be determined based on the PFN alone. | |||
1.1. Conventions and Definitions | 1.1. Conventions and Definitions | |||
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 | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
BCP14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
MPLS packet: one whose Layer 2 header declares the type to be MPLS. | MPLS packet: one whose Layer 2 header declares the type to be MPLS. | |||
For Ethernet, that means the Ethertype is 0x8847 or 0x8848. | For Ethernet, that means the Ethertype is 0x8847 or 0x8848. | |||
Label Stack: (of an MPLS packet) all labels (four-octet fields) | Label Stack: (of an MPLS packet) all labels (four-octet fields) | |||
after the Layer 2 header, up to and including the label with the | after the Layer 2 header, up to and including the label with the | |||
BoS bit set ([RFC3032]). | Bottom of Stack bit set ([RFC3032]). | |||
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. | |||
MPLS Payload: all data after the label stack, including the PFN, an | MPLS Payload: all data after the label stack, including the PFN, an | |||
optional post-stack header, and the embedded packet. | optional post-stack header, and the embedded packet. | |||
Post-stack Header (PSH): optional field of interest to the egress | Post-stack Header (PSH): optional field of interest to the egress | |||
LSR (and possibly to transit LSRs). Examples include a control | Label Switching Router (LSR) (and possibly to transit LSRs). | |||
word or an associated channel. The PSH MUST indicate its length, | Examples include a control word [RFC4385] or an associated channel | |||
so that a parser knows where the embedded packet starts. | [RFC4385], [RFC5586]. The PSH MUST indicate its length, so that a | |||
parser knows where the embedded packet starts. | ||||
Embedded Packet: all octets beyond the PSH (if any). That could be | Embedded Packet: an embedded packet follows immediately after the | |||
an IPv4 or IPv6 packet , an Ethernet packet (for VPLS ([RFC4761], | MPLS Label Stack and an optional PSH. That could be an IPv4 or | |||
[RFC4762]) or EVPN [RFC7432]), or some other type of Layer 2 frame | IPv6 packet, an Ethernet packet (for VPLS ([RFC4761], [RFC4762]) | |||
[RFC4446]. | or EVPN [RFC7432]), or some other type of Layer 2 frame [RFC4446]. | |||
Deprecation: regardless of how the deprecation is understood in | Deprecation: regardless of how the deprecation is understood in | |||
other IETF documents, the interpretation in this document is that | other IETF documents, the interpretation in this document is that | |||
if a practice has been deprecated, that practice should not be | if a practice has been deprecated, that practice should not be | |||
included in the new implementations or deployed in deployments. | included in new implementations or deployed in deployments. | |||
1.2. Reference Figures | ||||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ | |||
X | Layer 2 Header | | | X | Layer 2 Header | | | |||
| | | | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | |||
TC S TTL | TC S TTL | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ | |||
Y | Label-1 | TC |0| TTL | | | Y | Label-1 | TC |0| TTL | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 5, line 37 ¶ | skipping to change at page 6, line 37 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| PSH | | | | PSH | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
... | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| end of PSH | | | | end of PSH | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| embedded packet | | | | embedded packet | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ | |||
Figure 2 | Figure 2: Examples of an MPLS Packet Payload With and Without | |||
Post-Stack Header | ||||
Figure 1 shows an MPLS packet with Layer 2 header X and a label stack | Figure 1 shows an MPLS packet with Layer 2 header X and a label stack | |||
Y ending with Label-n. Then, there are three examples of an MPLS | Y ending with Label-n. Then, there are three examples of an MPLS | |||
payload. The complete MPLS packet thus would consist of [X Y A], or | payload displayed in Figure 2. The complete MPLS packet thus would | |||
[X Y B], or [X Y C]. | consist of [X Y A], or [X Y B], or [X Y C]. | |||
A. The first payload is a bare IP packet, i.e., no PSH. The PFN in | A. The first payload is a bare IP packet, i.e., no PSH. The PFN in | |||
this case overlaps with the IP version number. | this case overlaps with the IP version number. | |||
B. The next payload is a bare non-IP packet; again, no PSH. The PFN | 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 happens to be. | here is the first nibble of the payload, whatever it happens to be. | |||
C. The last example is an MPLS Payload that starts with a PSH | C. The last example is an MPLS Payload that starts with a PSH | |||
followed by the embedded packet. Here, the embedded packet could be | followed by the embedded packet. Here, the embedded packet could be | |||
IP or non-IP. | IP or non-IP. | |||
1.2. Abbreviations | 1.3. Abbreviations | |||
LSR: Label Switching Router | LSR: Label Switching Router | |||
LSE: Label Stack Element | LSE: Label Stack Element | |||
PSH: Post-Stack Header | PSH: Post-Stack Header | |||
PFN: Post-stack First Nibble | PFN: Post-stack First Nibble | |||
FAT: Flow-Aware Transport | FAT: Flow-Aware Transport | |||
SPL: Special Purpose Label | SPL: Special Purpose Label | |||
PW: Pseudowire | PW: Pseudowire | |||
MNA: MPLS Network Action | ||||
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 many types of embedded packets. The most | An MPLS packet can contain one of many types of embedded packets. | |||
common types are: | Three common types are: | |||
1. An IPv4 packet (whose IP header has version number 4). | 1. An IPv4 packet (whose IP header has version number 4). | |||
2. An IPv6 packet (whose IP header has version number 6). | 2. An IPv6 packet (whose IP header has version number 6). | |||
3. A Layer 2 Ethernet frame (i.e., not including the Preamble or the | 3. A Layer 2 Ethernet frame (i.e., not including the Preamble or the | |||
Start frame delimiter), starting with the destination MAC | Start frame delimiter), starting with the destination MAC | |||
address. | address. | |||
Many other packet types are possible; in principle, any Layer 2 | Many other packet types are possible; in principle, any Layer 2 | |||
embedded packet is permissible. Indeed, in the past, packets of | embedded packet is permissible. Indeed, in the past, packets of | |||
Point-to-Point Protocol, Frame Relay, and Asynchronous Transfer Mode | Point-to-Point Protocol, Frame Relay, and Asynchronous Transfer Mode | |||
protocols were reasonably common. | protocols were reasonably common. | |||
In addition, there may be a PSH ahead of the embedded packet, and it | In addition, there may be a PSH ahead of the embedded packet. The | |||
needs to be parsed. The PFN is currently used for both of these | value of PFN is considered to ensure that the PSH can be correctly | |||
purposes. | parsed. If no PSH follows the label stack, then the value of PFN | |||
indicates the version number of the IP packet header. | ||||
2.1.1. Load Balancing | 2.1.1. Load Balancing | |||
There are four common ways to load balance an MPLS packet: | There are four common ways to load balance an MPLS packet: | |||
1. One can use the top label alone. | 1. One can use the top label alone. | |||
2. One can do better by using all of the non-SPL (Special Purpose | 2. One can do better by using all of the non-SPLs (Special Purpose | |||
Label) labels in the stack. | Labels) labels[RFC7274] in the stack. | |||
3. One can do even better by "divining" the type of embedded packet, | 3. One can do even better by "divining" the type of embedded packet, | |||
and using fields from the guessed header. The ramifications of | and using fields from the guessed header. The ramifications of | |||
using this load-balancing technique are discussed in detail in | using this load-balancing technique are discussed in detail in | |||
Section 2.2. | Section 2.1.1.1. | |||
4. One can do best by using either an Entropy Label [RFC6790] or a | 4. One can do best by using either an Entropy Label [RFC6790] or a | |||
Flow-Aware Transport (FAT) Pseudowire Label [RFC6391]; see | Flow-Aware Transport (FAT) Pseudowire Label [RFC6391] (see | |||
Section 2.2.) | Section 2.1.1.1). | |||
Load balancing based on just the top label means that all packets | Load balancing based on just the top label means that all packets | |||
with that top label will go the same way -- this is far from ideal. | with that top label will go the same way -- this is far from ideal. | |||
Load balancing based on the entire label stack (not including SPLs) | Load balancing based on the entire label stack (not including SPLs) | |||
is better, but it may still be uneven. If, however, the embedded | is better, but it may still be uneven. If, however, the embedded | |||
packet is an IP packet, then the combination of (<source IP address>, | packet is an IP packet, then the combination of (<source IP address>, | |||
<dest IP address>, <transport protocol>, <source port>, and <dest | <dest IP address>, <transport protocol>, <source port>, and <dest | |||
port>) from the IP header of the embedded packet forms an excellent | port>) from the IP header of the embedded packet forms an excellent | |||
basis for load-balancing. This is what is typically used for load | basis for load-balancing. This is what is typically used for load | |||
balancing IP packets. | balancing IP packets. | |||
An MPLS packet doesn't, however, carry a payload type identifier. | An MPLS packet doesn't, however, carry a payload type identifier. | |||
There is a simple (but dangerous) heuristic that is commonly used to | There is a simple (but risky) heuristic that is commonly used to | |||
guess the type of the embedded packet. The first nibble, i.e., the | guess the type of the embedded packet. The first nibble, i.e., the | |||
four most significant bits of the first octet, of an IP header | four most significant bits of the first octet, of an IP header | |||
contains the IP version number. That, in turn, indicates where to | contains the IP version number. That, in turn, indicates where to | |||
find the relevant fields for load-balancing. The heuristic goes | find the relevant fields for load-balancing. The heuristic goes | |||
roughly as described in Section 2.1.1.1. | roughly as described in Section 2.1.1.1. | |||
2.1.1.1. Heuristic for Load Balancing | 2.1.1.1. Heuristic for Load Balancing | |||
1. If the PFN is 0x4 (0100b), treat the payload as an IPv4 packet, | 1. If the PFN is 0x4 (0100b), treat the payload as an IPv4 packet, | |||
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 Figure 2, A. However, this heuristic | performs well in the case of Figure 2, A. However, this heuristic | |||
can work very badly for Figure 2, B. For example, if payload B is an | can work very badly for Figure 2, B. For example, if payload B is an | |||
Ethernet frame, then the PFN is the first nibble of the OUI of the | Ethernet frame, then the PFN is the first nibble of the | |||
destination MAC address, which can be 0x4 or 0x6, and if so would | Organizationally Unique Identifier of the destination MAC address, | |||
lead to very bad load-balancing. This behavior can happen to other | which can be 0x4 or 0x6, and if so would lead to the packet being | |||
types of non-IP payloads as well. | treated as an IPv4 or IPv6 packet such that data at the offsets of | |||
specific relevant fields would be used as input to the load-balancing | ||||
heuristic resulting in unpredictable load balancing. This behavior | ||||
can happen to other 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 DetNet control word [RFC8964] or a BIER | control word [RFC4385], a DetNet control word [RFC8964] or a BIER | |||
header [RFC8296]) where the PFN is not 0x4 or 0x6, to explicitly | header [RFC8296]) where the PFN is not 0x4 or 0x6, to explicitly | |||
prevent forwarding engines from confusing the MPLS payload with an IP | prevent forwarding engines from confusing the MPLS payload with an IP | |||
packet. [RFC8469] recommends the use of a control word when the | packet. [RFC8469] recommends the use of a control word when the | |||
embedded packet is an Ethernet frame. RFC 8469 was published at the | embedded packet is an Ethernet frame. RFC 8469 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 | |||
that did not contain the control word. | that did not contain the control word. | |||
It is RECOMMENDED that where load-balancing of MPLS packets is | It is RECOMMENDED that where load-balancing of MPLS packets is | |||
desired, the load-balancing mechanism uses the value of a dedicated | desired, the load-balancing mechanism uses the value of a dedicated | |||
label, for example, either an Entropy Label [RFC6790] or a FAT | label, for example, either an Entropy Label [RFC6790] or a FAT | |||
Pseudowire Label [RFC6391]. Furthermore, the heuristic of guessing | Pseudowire Label [RFC6391]. Furthermore, the heuristic of guessing | |||
the type of the embedded packet, as discussed above, SHOULD NOT be | the type of the embedded packet, as discussed above, SHOULD NOT be | |||
used. | used. | |||
A consequence of that heuristic approach is that while legacy routers | A consequence of the heuristic approach is that while legacy routers | |||
may look for a PFN of 0x4 [RFC0791] or 0x6 [RFC8200], no router will | may look for a PFN of 0x4 [RFC0791] or 0x6 [RFC8200], no legacy | |||
look for any other PFN, regardless of what future IP version numbers | router will look for any other PFN, regardless of what future IP | |||
will be, for load-balancing purposes. This means that the values 0x4 | version numbers will be, for load-balancing purposes. This means | |||
and 0x6 are used to (sometimes incorrectly) identify IPv4 and IPv6 | that the values 0x4 and 0x6 are used to (sometimes incorrectly) | |||
packets, but no other First Nibble values will be used to identify IP | identify IPv4 and IPv6 packets, but no other of PFN values will be | |||
packets. | used to identify IP packets. | |||
This document creates a new PFN Registry for all 16 possible values. | This document creates a new PFN Registry for all 16 possible values. | |||
2.2. Updates of RFC 4928 | 2.2. Updates of RFC 4928 | |||
Paragraph 3 in Section 3 of RFC 4928 [RFC4928] states that: | Paragraph 3 in Section 3 of RFC 4928 [RFC4928] states that: | |||
OLD TEXT | OLD TEXT | |||
| It is REQUIRED, however, that applications dependent upon in-order | | It is REQUIRED, however, that applications dependent upon in-order | |||
| packet delivery restrict the first nibble values to 0x0 and 0x1. | | packet delivery restrict the first nibble values to 0x0 and 0x1. | |||
| This will ensure that their traffic flows will not be affected if | | This will ensure that their traffic flows will not be affected if | |||
| some future routing equipment does similar snooping on some future | | some future routing equipment does similar snooping on some future | |||
| version(s) of IP. | | version(s) of IP. | |||
END | END | |||
The text in RFC 4928 [RFC4928] concerning the first nibble after the | The text in RFC 4928 [RFC4928] concerning the first nibble after the | |||
MPLS Label Stack has been updated by this document and the heuristic | MPLS Label Stack has been updated by this document and the heuristic | |||
for snooping this nibble has been deprecated. RFC 4928 is now | for snooping this nibble has been deprecated. RFC 4928 is now | |||
updated as follows: | updated as follows: | |||
NEW TEXT: | NEW TEXT: | |||
| Network equipment that complies with RFC XXXX MUST use a PSH | | Network equipment MUST use a PSH (Post-Stack Header) with a PFN | |||
| (Post-Stack Header) with a PFN (Post-stack First Nibble) value | | (Post-stack First Nibble) value that is neither 0x4 nor 0x6 in all | |||
| that is neither 0x4 nor 0x6 in all cases when the MPLS payload is | | cases when the MPLS payload is not an IP packet. | |||
| not an IP packet. | ||||
END | END | |||
[RFC Ed.: Throughout the docuemnt, replace XXXX with the actual RFC | ||||
number assigned to this document and remove this note.] | ||||
The recommendation (see Section 2.1.1.1) replaces the paragraph 4 in | The recommendation (see Section 2.1.1.1) replaces the paragraph 4 in | |||
Section 3 of RFC 4928 [RFC4928] as follows: | Section 3 of RFC 4928 [RFC4928] as follows: | |||
OLD TEXT: | OLD TEXT: | |||
| This behavior implies that if in the future an IP version is | | This behavior implies that if in the future an IP version is | |||
| defined with a version number of 0x0 or 0x1, then equipment | | defined with a version number of 0x0 or 0x1, then equipment | |||
| complying with this BCP would be unable to look past one or more | | complying with this BCP would be unable to look past one or more | |||
| MPLS headers, and load-split traffic from a single LSP across | | MPLS headers, and load-split traffic from a single LSP across | |||
| multiple paths based on a hash of specific fields in the IPv0 or | | multiple paths based on a hash of specific fields in the IPv0 or | |||
| IPv1 headers. That is, IP traffic employing these version numbers | | IPv1 headers. That is, IP traffic employing these version numbers | |||
| would be safe from disturbances caused by inappropriate load- | | would be safe from disturbances caused by inappropriate load- | |||
| splitting, but would also not be able to get the performance | | splitting, but would also not be able to get the performance | |||
| benefits. | | benefits. | |||
NEW TEXT: | NEW TEXT: | |||
| RFC XXXX deprecated the practice of deducing the payload type to | | The practice of deducing the payload type based on the PFN value | |||
| avoid inaccurate load balancing based on the PFN value. This | | is deprecated to avoid inaccurate load balancing. This means that | |||
| means that older implementations and deployments can continue to | | means that older implementations and deployments can continue to | |||
| use that heuristic, while it must not be part of new | | use that heuristic, while it must not be part of new | |||
| implementations or deployments. The deprecation also means that | | implementations or deployments. It also means that concerns about | |||
| concerns about load balancing for future IP versions with a | | load balancing for future IP versions with a version number of 0x0 | |||
| version number of 0x0 or 0x1 are now moot. | | or 0x1 are no longer relevant. | |||
| | ||||
| At the time RFC XXXX was written, it was planned to obsolete MPLS | ||||
| encapsulations without PSH of non-IP payload when sufficient | ||||
| evidence exists that there are no marketed or deployed | ||||
| implementations using the heuristic practice. | ||||
END | END | |||
Furthermore, the following text is appended to Section 1.1 of RFC | Furthermore, the following text is appended to Section 1.1 of RFC | |||
4928 [RFC4928]: | 4928 [RFC4928]: | |||
NEW TEXT: | NEW TEXT: | |||
| PSH: Post-Stack Header | | PSH: Post-Stack Header | |||
| | | | |||
| PFN: Post-stack First Nibble | | PFN: Post-stack First Nibble | |||
END | END | |||
2.3. Why Create a Registry | 2.3. Why Create a Registry | |||
The MPLS WG is currently engaged in updating the MPLS architecture; | Support for MPLS Network Actions (MNAs) is described in | |||
part of this work may involve the use of PSHs. That might be more | [I-D.ietf-mpls-mna-fwk] and is an enhancement to the MPLS | |||
challenging if PFN values are allocated on an ad hoc basis, and their | architecture. The use of post-stack data (PSD) to encode the MNA | |||
parsing and semantics are ill-specified. Consider that the PFN value | indicators and ancillary data is described in section 3.6 might place | |||
of 0x0 has two different formats, depending on whether the PSH is a | data in the PFN that could conflict with other uses of that nibble. | |||
pseudowire control word or a DetNet control word; disambiguation | This issue is described in section 3.6.1 of [I-D.ietf-mpls-mna-fwk] | |||
requires the context of the service label. This was a considered | and is further illustrated by the PFN value of 0x0 which has two | |||
decision; documenting this would be helpful to future implementors. | different formats depending on whether the PSH is a pseudowire | |||
control word or a DetNet control word: disambiguation requires the | ||||
context of the service label. | ||||
With a registry, PSHs become easier to parse; not needing means | ||||
outside the data plane to interpret them correctly; and their | ||||
semantics and usage are documented. | ||||
With a registry, PSHs become easier to parse; not needing means | With a registry, PSHs become easier to parse; not needing means | |||
outside the data plane to interpret them correctly; and their | outside the data plane to interpret them correctly; and their | |||
semantics and usage are documented. | semantics and usage are documented. | |||
2.4. IP Version Numbers versus Post-stack First Nibble Values | 2.4. IP Version Numbers versus Post-stack First Nibble Values | |||
The use of the PFN stemmed from the desire to heuristically identify | The use of the PFN stemmed from the desire to heuristically identify | |||
IP packets for load-balancing purposes. It was then discovered that | IP packets for load-balancing purposes. It was then discovered that | |||
non-IP packets, misidentified as IP when the heuristic failed, were | non-IP packets, misidentified as IP when the heuristic failed, were | |||
skipping to change at page 11, line 5 ¶ | skipping to change at page 12, line 10 ¶ | |||
version numbers in an IP header. | version numbers in an IP header. | |||
2. The Post-stack First Nibble registry's purpose is to track PSH | 2. The Post-stack First Nibble registry's purpose is to track PSH | |||
types. | types. | |||
The only intersection points between the two registries is for values | The only intersection points between the two registries is for values | |||
0x4 and 0x6 (for backward compatibility). There is no need to track | 0x4 and 0x6 (for backward compatibility). There is no need to track | |||
future IP version number allocations in the Post-stack First Nibble | future IP version number allocations in the Post-stack First Nibble | |||
registry. | registry. | |||
2.5. Next Step to More Deterministic Load -balancing in an MPLS Network | ||||
Network evolution is impossible to control, but it develops over a | ||||
period of time determined by various factors. This document prevents | ||||
further proliferation of the implementations that could lead to | ||||
undesired effects affecting data flow. At some time in the future, | ||||
it was planned to obsolete MPLS encapsulations without PSH of non-IP | ||||
payload. Before that it is paramount to collect sufficient evidence | ||||
that there are no marketed or deployed implementations using the | ||||
heuristic practice to load-balancing MPLS data flows. | ||||
3. IANA Considerations | 3. IANA Considerations | |||
3.1. The Post-stack First Nibble Registry | 3.1. The Post-stack First Nibble Registry | |||
This memo requests IANA to create a registry group called “Post-Stack | This memo requests IANA to create a registry group called "Post-Stack | |||
First Nibble Registry” that consists of a single registry called | First Nibble Registry" that consists of a single registry called | |||
"Post-Stack First Nibble Registry". The registry should be created | "Post-Stack First Nibble Registry". The registry should be created | |||
as shown in Table 1. The assignment policy for the registry is | as shown in Table 1. The assignment policy for the registry is | |||
Standards Action. It is important to note, that the same PFN value | Standards Action. It is important to note, that the same PFN value | |||
can be used in more than one protocol. The correct interpretation of | can be used in more than one protocol. The correct interpretation of | |||
the PFN in a PSH can be made only in the context of the LSE or a | the PFN in a PSH can be made only in the context of the LSE or a | |||
group of LSEs in the preceding label stack that characterize the type | group of LSEs in the preceding label stack that characterize the type | |||
of the PSH and, consequently, PFN. | of the PSH and, consequently, PFN. | |||
+==========+===========+==============================+===========+ | +==========+=======+==============================+===========+ | |||
| Protocol | Value | Description | Reference | | | Protocol | Value | Description | Reference | | |||
+==========+===========+==============================+===========+ | +==========+=======+==============================+===========+ | |||
| DetNet | 0x0 | DetNet Control Word | RFC 8964 | | | DetNet | 0x0 | DetNet Control Word | RFC 8964 | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| NSH | 0x0 | NSH Base Header, payload | RFC 8300 | | | NSH | 0x0 | NSH (Network Service Header) | RFC 8300 | | |||
+----------+-----------+------------------------------+-----------+ | | | | Base Header, payload | | | |||
| PW | 0x0 | PW Control Word | RFC 4385 | | +----------+-------+------------------------------+-----------+ | |||
+----------+-----------+------------------------------+-----------+ | | PW | 0x0 | PW Control Word | RFC 4385 | | |||
| DetNet | 0x1 | DetNet Associated Channel | RFC 9546 | | +----------+-------+------------------------------+-----------+ | |||
+----------+-----------+------------------------------+-----------+ | | DetNet | 0x1 | DetNet Associated Channel | RFC 9546 | | |||
| MPLS | 0x1 | MPLS G-ACh | RFC 5586 | | +----------+-------+------------------------------+-----------+ | |||
+----------+-----------+------------------------------+-----------+ | | MPLS | 0x1 | MPLS Generic Associated | RFC 5586 | | |||
| PW | 0x1 | PW Associated Channel | RFC 4385 | | | | | Channel | | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| NSH | 0x2 | NSH Base Header, OAM | RFC 8300 | | | PW | 0x1 | PW Associated Channel | RFC 4385 | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| | 0x3 | Unassigned | | | | NSH | 0x2 | NSH Base Header, OAM | RFC 8300 | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| | 0x4 | Reserved, not to be assigned | | | | | 0x3 | Unassigned | | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| BIER | 0x5 | BIER Header | RFC 8296 | | | | 0x4 | Reserved, not to be assigned | | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| | 0x6 | Reserved, not to be assigned | | | | BIER | 0x5 | BIER Header | RFC 8296 | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| | 0x7 - 0xF | Unassigned | | | | | 0x6 | Reserved, not to be assigned | | | |||
+----------+-----------+------------------------------+-----------+ | +----------+-------+------------------------------+-----------+ | |||
| | 0x7 - | Unassigned | | | ||||
| | 0xF | | | | ||||
+----------+-------+------------------------------+-----------+ | ||||
Table 1: Post-stack First Nibble Values | Table 1: Post-stack First Nibble Values | |||
4. Security Considerations | 4. Security Considerations | |||
This document creates a new IANA registry for and specifies changes | This document creates a new IANA registry for and specifies changes | |||
to the treatment in the data plane of packets based on the first | to the treatment in the data plane of packets based on the first | |||
nibble of data beyond the MPLS label stack. One intent of this is to | nibble of data beyond the MPLS label stack. One intent of this is to | |||
reduce or eliminate errors in determining whether a packet being | reduce or eliminate errors in determining whether a packet being | |||
transported by MPLS is IP or not. While such errors have primarily | transported by MPLS is IP or not. While such errors have primarily | |||
skipping to change at page 14, line 18 ¶ | skipping to change at page 16, line 5 ¶ | |||
2021, <https://www.rfc-editor.org/info/rfc8964>. | 2021, <https://www.rfc-editor.org/info/rfc8964>. | |||
[RFC9546] Mirsky, G., Chen, M., and B. Varga, "Operations, | [RFC9546] Mirsky, G., Chen, M., and B. Varga, "Operations, | |||
Administration, and Maintenance (OAM) for Deterministic | Administration, and Maintenance (OAM) for Deterministic | |||
Networking (DetNet) with the MPLS Data Plane", RFC 9546, | Networking (DetNet) with the MPLS Data Plane", RFC 9546, | |||
DOI 10.17487/RFC9546, February 2024, | DOI 10.17487/RFC9546, February 2024, | |||
<https://www.rfc-editor.org/info/rfc9546>. | <https://www.rfc-editor.org/info/rfc9546>. | |||
6.2. Informative References | 6.2. Informative References | |||
[I-D.ietf-mpls-mna-fwk] | ||||
Andersson, L., Bryant, S., Bocci, M., and T. Li, "MPLS | ||||
Network Actions (MNA) Framework", Work in Progress, | ||||
Internet-Draft, draft-ietf-mpls-mna-fwk-09, 19 June 2024, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-mpls- | ||||
mna-fwk-09>. | ||||
[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>. | |||
[RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private | [RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private | |||
LAN Service (VPLS) Using Label Distribution Protocol (LDP) | LAN Service (VPLS) Using Label Distribution Protocol (LDP) | |||
Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007, | Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007, | |||
<https://www.rfc-editor.org/info/rfc4762>. | <https://www.rfc-editor.org/info/rfc4762>. | |||
[RFC5586] Bocci, M., Ed., Vigoureux, M., Ed., and S. Bryant, Ed., | ||||
"MPLS Generic Associated Channel", RFC 5586, | ||||
DOI 10.17487/RFC5586, June 2009, | ||||
<https://www.rfc-editor.org/info/rfc5586>. | ||||
[RFC7274] Kompella, K., Andersson, L., and A. Farrel, "Allocating | ||||
and Retiring Special-Purpose MPLS Labels", RFC 7274, | ||||
DOI 10.17487/RFC7274, June 2014, | ||||
<https://www.rfc-editor.org/info/rfc7274>. | ||||
[RFC7432] Sajassi, A., Ed., Aggarwal, R., Bitar, N., Isaac, A., | [RFC7432] Sajassi, A., Ed., Aggarwal, R., Bitar, N., Isaac, A., | |||
Uttaro, J., Drake, J., and W. Henderickx, "BGP MPLS-Based | Uttaro, J., Drake, J., and W. Henderickx, "BGP MPLS-Based | |||
Ethernet VPN", RFC 7432, DOI 10.17487/RFC7432, February | Ethernet VPN", RFC 7432, DOI 10.17487/RFC7432, February | |||
2015, <https://www.rfc-editor.org/info/rfc7432>. | 2015, <https://www.rfc-editor.org/info/rfc7432>. | |||
Authors' Addresses | Authors' Addresses | |||
Kireeti Kompella | Kireeti Kompella | |||
Juniper Networks | Juniper Networks | |||
1133 Innovation Way | 1133 Innovation Way | |||
End of changes. 45 change blocks. | ||||
149 lines changed or deleted | 191 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |