rfc9740v1.txt | rfc9740.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) M. Boucadair | Internet Engineering Task Force (IETF) M. Boucadair | |||
Request for Comments: 9740 Orange | Request for Comments: 9740 Orange | |||
Category: Standards Track B. Claise | Category: Standards Track B. Claise | |||
ISSN: 2070-1721 Huawei | ISSN: 2070-1721 Huawei | |||
February 2025 | February 2025 | |||
Extended TCP Options and IPv6 Extension Headers IPFIX Information | New IPFIX Information Elements for TCP Options and IPv6 Extensions | |||
Elements | Headers | |||
Abstract | Abstract | |||
This document specifies new IP Flow Information Export (IPFIX) | This document specifies new IP Flow Information Export (IPFIX) | |||
Information Elements (IEs) to solve issues with existing | Information Elements (IEs) to solve issues with existing | |||
ipv6ExtensionHeaders and tcpOptions IPFIX IEs, especially the ability | ipv6ExtensionHeaders and tcpOptions IPFIX IEs, especially the ability | |||
to export any observed IPv6 extension headers or TCP options. | to export any observed IPv6 extension headers or TCP options. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at line 129 ¶ | skipping to change at line 129 ¶ | |||
headers can be exported using the ipv6ExtensionHeaders IE. For | headers can be exported using the ipv6ExtensionHeaders IE. For | |||
example, the ipv6ExtensionHeaders IE can't report some IPv6 EHs, | example, the ipv6ExtensionHeaders IE can't report some IPv6 EHs, | |||
specifically EHs for the Host Identity Protocol (139), Shim6 | specifically EHs for the Host Identity Protocol (139), Shim6 | |||
Protocol (140), or extension headers for experimentation and | Protocol (140), or extension headers for experimentation and | |||
testing. | testing. | |||
* Specify whether the exported values match the full enclosed values | * Specify whether the exported values match the full enclosed values | |||
or only up to a limit imposed by hardware or software (e.g., | or only up to a limit imposed by hardware or software (e.g., | |||
Section 1.1 of [RFC8883]). Note that some implementations may not | Section 1.1 of [RFC8883]). Note that some implementations may not | |||
be able to export all observed extension headers in a Flow because | be able to export all observed extension headers in a Flow because | |||
of a hardware or software limit (see, e.g., [EH-LIMITS]). The | of a hardware or software limit (see, e.g., [EH-LIMITS]). | |||
specification of the ipv6ExtensionHeaders IE does not discuss | ||||
whether it covers all enclosed extension headers or only up to a | * Discuss whether it covers all enclosed extension headers or only | |||
limit. | up to a limit. | |||
* Specify how to report the length of IPv6 extension headers. | * Specify how to report the length of IPv6 extension headers. | |||
* Optimize the encoding. | * Optimize the encoding. | |||
* Explain the reasoning for reporting values that do not correspond | * Explain the reasoning for reporting values that do not correspond | |||
to extension headers (e.g., "Unknown Layer 4 header" or "Payload | to extension headers (e.g., "Unknown Layer 4 header" or "Payload | |||
compression header"). | compression header"). | |||
* Specify how to report extension header chains or aggregate | * Specify how to report extension header chains or aggregate lengths | |||
extension headers length. | of extension headers. | |||
Section 3 addresses these issues. | Section 3 addresses these issues. | |||
This specification deprecates the ipv6ExtensionHeaders IPFIX IE in | This specification deprecates the ipv6ExtensionHeaders IPFIX IE in | |||
favor of the new IEs defined in this document. | favor of the new IEs defined in this document. | |||
1.2. Issues with tcpOptions Information Element | 1.2. Issues with tcpOptions Information Element | |||
The specification of the tcpOptions IPFIX IE (209) does not: | The specification of the tcpOptions IPFIX IE (209) does not: | |||
skipping to change at line 194 ¶ | skipping to change at line 194 ¶ | |||
In addition, the document makes use of the following terms: | In addition, the document makes use of the following terms: | |||
Extension header chain: Refers to the chain of extension headers | Extension header chain: Refers to the chain of extension headers | |||
that are present in an IPv6 packet. | that are present in an IPv6 packet. | |||
This term should not be confused with the IPv6 header chain, which | This term should not be confused with the IPv6 header chain, which | |||
includes the IPv6 header, zero or more IPv6 extension headers, and | includes the IPv6 header, zero or more IPv6 extension headers, and | |||
zero or a single Upper-Layer Header. | zero or a single Upper-Layer Header. | |||
Flow with varying extension header chain: Refers to a Flow where | Flow with varying extension header chains: Refers to a Flow where | |||
distinct extension header chains are observed. Concretely, | distinct extension header chains are observed. Concretely, | |||
different packets in such a Flow will have a different sequence of | different packets in such a Flow will have a different sequence of | |||
extension header type codes. | extension header type codes. | |||
3. Information Elements for IPv6 Extension Headers | 3. Information Elements for IPv6 Extension Headers | |||
3.1. ipv6ExtensionHeaderType Information Element | 3.1. ipv6ExtensionHeaderType Information Element | |||
Name: ipv6ExtensionHeaderType | Name: ipv6ExtensionHeaderType | |||
skipping to change at line 277 ¶ | skipping to change at line 277 ¶ | |||
so, few octets will be needed to encode common IPv6 extension | so, few octets will be needed to encode common IPv6 extension | |||
headers when observed in a Flow. | headers when observed in a Flow. | |||
The "No Next Header" (bit 2) value (Section 4.7 of [RFC8200]) is | The "No Next Header" (bit 2) value (Section 4.7 of [RFC8200]) is | |||
used if there is no upper-layer header in an IPv6 packet. Even if | used if there is no upper-layer header in an IPv6 packet. Even if | |||
the value is not considered as an extension header as such, the | the value is not considered as an extension header as such, the | |||
corresponding bit is set in the ipv6ExtensionHeadersFull IE | corresponding bit is set in the ipv6ExtensionHeadersFull IE | |||
whenever that value is encountered in the Flow. | whenever that value is encountered in the Flow. | |||
Extension headers observed in a Flow with varying extension header | Extension headers observed in a Flow with varying extension header | |||
chain MUST NOT be grouped in the ipv6ExtensionHeadersFull IE if | chains MUST NOT be grouped in the ipv6ExtensionHeadersFull IE if | |||
the ipv6ExtensionHeaderChainLengthList IE is also present. | the ipv6ExtensionHeaderChainLengthList IE is also present. | |||
If the ipv6ExtensionHeaderChainLengthList IE is not present, then | If the ipv6ExtensionHeaderChainLengthList IE is not present, then | |||
extension headers observed in a Flow with varying extension header | extension headers observed in a Flow with varying extension header | |||
chain MAY be grouped in one single ipv6ExtensionHeadersFull IE or | chains MAY be grouped in one single ipv6ExtensionHeadersFull IE or | |||
be exported in separate ipv6ExtensionHeadersFull IEs, one for each | be exported in separate ipv6ExtensionHeadersFull IEs, one for each | |||
extension header chain. | extension header chain. | |||
The ipv6ExtensionHeadersFull IE MUST NOT be exported if | The ipv6ExtensionHeadersFull IE MUST NOT be exported if | |||
ipv6ExtensionHeaderTypeCountList IE is also present because of the | ipv6ExtensionHeaderTypeCountList IE is also present because of the | |||
overlapping scopes of these two IEs. | overlapping scopes of these two IEs. | |||
The value of ipv6ExtensionHeadersFull IE may be encoded in fewer | The value of ipv6ExtensionHeadersFull IE may be encoded in fewer | |||
octets per the guidelines in Section 6.2 of [RFC7011]. | octets per the guidelines in Section 6.2 of [RFC7011]. | |||
skipping to change at line 329 ¶ | skipping to change at line 329 ¶ | |||
Description: As per Section 4.1 of [RFC8200], IPv6 nodes must accept | Description: As per Section 4.1 of [RFC8200], IPv6 nodes must accept | |||
and attempt to process extension headers occurring any number of | and attempt to process extension headers occurring any number of | |||
times in the same packet. This IE echoes the order of extension | times in the same packet. This IE echoes the order of extension | |||
headers and number of consecutive occurrences of the same | headers and number of consecutive occurrences of the same | |||
extension header type in a Flow. | extension header type in a Flow. | |||
This IE is a subTemplateList of ipv6ExtensionHeaderType and | This IE is a subTemplateList of ipv6ExtensionHeaderType and | |||
ipv6ExtensionHeaderCount IEs. | ipv6ExtensionHeaderCount IEs. | |||
Each header chain in a Flow with varying extension header chain | Each header chain in a Flow with varying extension header chains | |||
MUST be exported in a separate IE. | MUST be exported in a separate IE. | |||
The same extension header type may appear several times in an | The same extension header type may appear several times in an | |||
ipv6ExtensionHeaderTypeCountList IE. For example, if an IPv6 | ipv6ExtensionHeaderTypeCountList IE. For example, if an IPv6 | |||
packet of a Flow includes a Hop-by-Hop Options header, a | packet of a Flow includes a Hop-by-Hop Options header, a | |||
Destination Options header, a Fragment header, and Destination | Destination Options header, a Fragment header, and Destination | |||
Options header, the ipv6ExtensionHeaderTypeCountList IE will | Options header, the ipv6ExtensionHeaderTypeCountList IE will | |||
report: | report: | |||
* the count of Hop-by-Hop Options headers, | * the count of Hop-by-Hop Options headers, | |||
skipping to change at line 424 ¶ | skipping to change at line 424 ¶ | |||
or deferred to a slow path. | or deferred to a slow path. | |||
The ipv6ExtensionHeadersChainLength IE is used to report, in | The ipv6ExtensionHeadersChainLength IE is used to report, in | |||
octets, the length of an extension header chain observed in a | octets, the length of an extension header chain observed in a | |||
Flow. The length is the sum of the lengths of all extension | Flow. The length is the sum of the lengths of all extension | |||
headers of the chain. Exporting such information might help | headers of the chain. Exporting such information might help | |||
identifying root causes of performance degradation, including | identifying root causes of performance degradation, including | |||
packet drops. | packet drops. | |||
Each header chain length of a Flow with varying extension header | Each header chain length of a Flow with varying extension header | |||
chain MUST be exported in a separate | chains MUST be exported in a separate | |||
ipv6ExtensionHeadersChainLength IE. | ipv6ExtensionHeadersChainLength IE. | |||
Abstract Data Type: unsigned32 | Abstract Data Type: unsigned32 | |||
Data Type Semantics: identifier | Data Type Semantics: identifier | |||
Units: octets | Units: octets | |||
Additional Information: See Section 4 of [RFC8200] for the general | Additional Information: See Section 4 of [RFC8200] for the general | |||
definition of IPv6 extension headers. | definition of IPv6 extension headers. | |||
skipping to change at line 448 ¶ | skipping to change at line 448 ¶ | |||
Reference: RFC 9740 | Reference: RFC 9740 | |||
3.7. ipv6ExtensionHeaderChainLengthList Information Element | 3.7. ipv6ExtensionHeaderChainLengthList Information Element | |||
Name: ipv6ExtensionHeaderChainLengthList | Name: ipv6ExtensionHeaderChainLengthList | |||
ElementID: 519 | ElementID: 519 | |||
Description: This IE is used to report the chains and their lengths | Description: This IE is used to report the chains and their lengths | |||
as observed in a Flow with varying extension header chain. | as observed in a Flow with varying extension header chains. | |||
This IE is a subTemplateList of ipv6ExtensionHeadersFull and | This IE is a subTemplateList of ipv6ExtensionHeadersFull and | |||
ipv6ExtensionHeadersChainLength IEs. | ipv6ExtensionHeadersChainLength IEs. | |||
If several extension header chains are observed in a Flow, each | If several extension header chains are observed in a Flow, each | |||
header chain MUST be exported in a separate | header chain MUST be exported in a separate | |||
ipv6ExtensionHeaderChainLengthList IE. | ipv6ExtensionHeaderChainLengthList IE. | |||
Abstract Data Type: subTemplateList | Abstract Data Type: subTemplateList | |||
skipping to change at line 659 ¶ | skipping to change at line 659 ¶ | |||
Destination Options (0) header is observed. The bits are set | Destination Options (0) header is observed. The bits are set | |||
following the table provided in Section 8.4.1. | following the table provided in Section 8.4.1. | |||
MSB LSB | MSB LSB | |||
1 25 | 1 25 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ... 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ... 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | |||
|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| |0|0|0|0|0|0|0|1| | |0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| |0|0|0|0|0|0|0|1| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | |||
Figure 1: A First Example of EH/Bit Mappings in the | Figure 1: Example of EH/Bit Mappings in the | |||
ipv6ExtensionHeadersFull IE | ipv6ExtensionHeadersFull IE | |||
The leading zeros are dropped per the reduced-size encoding guidance. | The leading zeros are dropped per the reduced-size encoding guidance. | |||
One octet is thus sufficient to send these observed options on the | One octet is thus sufficient to send these observed options on the | |||
wire. Concretely, the ipv6ExtensionHeadersFull IE will be set to | wire. Concretely, the ipv6ExtensionHeadersFull IE will be set to | |||
0x01 (Figure 2). | 0x01 (Figure 2). | |||
MSB LSB | MSB LSB | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|0|0|0|0|0|0|0|1| | |0|0|0|0|0|0|0|1| | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
Figure 2: A First Example of ipv6ExtensionHeadersFull IE with | Figure 2: Example A of ipv6ExtensionHeadersFull IE with Reduced- | |||
Reduced-Size Encoding | Size Encoding | |||
Figure 3 provides another example of reported values in an | Figure 3 provides another example of reported values in an | |||
ipv6ExtensionHeadersFull IE for an IPv6 Flow in which the Destination | ipv6ExtensionHeadersFull IE for an IPv6 Flow in which the Destination | |||
Options (0), IPv6 Hop-by-Hop Options (1), and Routing (5) headers are | Options (0), IPv6 Hop-by-Hop Options (1), and Routing (5) headers are | |||
observed. One octet is sufficient to report these observed options. | observed. One octet is sufficient to report these observed options. | |||
Concretely, the ipv6ExtensionHeadersFull IE will be set to 0x23. | Concretely, the ipv6ExtensionHeadersFull IE will be set to 0x23. | |||
MSB LSB | MSB LSB | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|0|0|1|0|0|0|1|1| | |0|0|1|0|0|0|1|1| | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
Figure 3: A Second Example of ipv6ExtensionHeadersFull IE with | Figure 3: Example B of ipv6ExtensionHeadersFull IE with Reduced- | |||
Reduced-Size Encoding | Size Encoding | |||
Let us now consider an IPv6 Flow in which the following EH chain is | Let us now consider an IPv6 Flow in which the following EH chain is | |||
observed: Routing (5), Mobility (7), and Authentication (9) header. | observed: Routing (5), Mobility (7), and Authentication (9) header. | |||
Figure 4 shows the ipv6ExtensionHeadersFull IE (0x02A0) to report | Figure 4 shows the ipv6ExtensionHeadersFull IE (0x02A0) to report | |||
this individual chain. | this individual chain. | |||
MSB LSB | MSB LSB | |||
1 | 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|0|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0| | |0|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 4: An Example of ipv6ExtensionHeadersFull IE Reported for | Figure 4: Example of ipv6ExtensionHeadersFull IE Reported for an | |||
an Extension Header Chain | Extension Header Chain | |||
6.2. TCP Options | 6.2. TCP Options | |||
6.2.1. Reduced-Size Encoding | 6.2.1. Reduced-Size Encoding | |||
Given TCP Kind allocation practices and the option mapping defined in | Given TCP Kind allocation practices and the option mapping defined in | |||
Section 4.1, fewer octets are likely to be used for Flows with common | Section 4.1, fewer octets are likely to be used for Flows with common | |||
TCP options. | TCP options. | |||
Figure 5 shows an example of Kind/bit mappings in a tcpOptionsFull IE | Figure 5 shows an example of Kind/bit mappings in a tcpOptionsFull IE | |||
for a TCP Flow in which End of Option List (0), Maximum Segment Size | for a TCP Flow in which End of Option List (0), Maximum Segment Size | |||
(2), and Window Scale (3) options are observed. | (2), and Window Scale (3) options are observed. | |||
MSB LSB | MSB LSB | |||
1 25 | 1 25 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ... 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ... 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | |||
|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| |0|0|0|0|1|1|0|1| | |0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| |0|0|0|0|1|1|0|1| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+ | |||
Figure 5: An Example of TCP Options / Bit Mappings in a | Figure 5: Example of TCP Options / Bit Mappings in a | |||
tcpOptionsFull IE | tcpOptionsFull IE | |||
One octet is sufficient to report these observed options. | One octet is sufficient to report these observed options. | |||
Concretely, the tcpOptionsFull IE will be set to 0x0D (Figure 6). | Concretely, the tcpOptionsFull IE will be set to 0x0D (Figure 6). | |||
MSB LSB | MSB LSB | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|0|0|0|0|1|1|0|1| | |0|0|0|0|1|1|0|1| | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
Figure 6: An Example of tcpOptionsFull IE with Reduced-Size Encoding | Figure 6: Example of tcpOptionsFull IE with Reduced-Size Encoding | |||
6.2.2. Shared Options | 6.2.2. Shared Options | |||
Let us consider a TCP Flow in which shared options with ExIDs 0x0348 | Let us consider a TCP Flow in which shared options with ExIDs 0x0348 | |||
(HOST_ID) [RFC7974], 0x454E (TCP-ENO) [RFC8547], and 0xE2D4C3D9 | (HOST_ID) [RFC7974], 0x454E (TCP-ENO) [RFC8547], and 0xE2D4C3D9 | |||
(Shared Memory Communications over RDMA protocol) [RFC7609] are | (Shared Memory Communications over RDMA protocol) [RFC7609] are | |||
observed. Figure 7 shows an excerpt of the Data Set encoding with a | observed. Figure 7 shows an excerpt of the Data Set encoding with a | |||
focus on the tcpSharedOptionExID16 and tcpSharedOptionExID32 IEs. | focus on the tcpSharedOptionExID16 and tcpSharedOptionExID32 IEs. | |||
The meaning of the fields is defined in [RFC6313]. | The meaning of the fields is defined in [RFC6313]. | |||
End of changes. 15 change blocks. | ||||
23 lines changed or deleted | 23 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |