rfc9653.original.xml | rfc9653.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='UTF-8'?> | |||
<?xml-model href="rfc7991bis.rnc"?> | <!DOCTYPE rfc [ | |||
<?rfc toc='yes'?> | <!ENTITY nbsp " "> | |||
<?rfc compact='yes'?> | <!ENTITY zwsp "​"> | |||
<?rfc subcompact='no'?> | <!ENTITY nbhy "‑"> | |||
<!ENTITY wj "⁠"> | ||||
]> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" ipr="trust200902" | |||
xml:lang="en" | submissionType="IETF" consensus="true" category="std" docName="draft-ietf-tsvwg- | |||
ipr="trust200902" | sctp-zero-checksum-11" number="9653" updates="" obsoletes="" tocInclude="true" v | |||
submissionType="IETF" | ersion="3" sortRefs="true" symRefs="true"> | |||
consensus="true" | ||||
category="std" | ||||
docName="draft-ietf-tsvwg-sctp-zero-checksum-11" | ||||
version="3"> | ||||
<front> | <front> | |||
<title abbrev='Zero Checksum for SCTP'> | <title abbrev='Zero Checksum for SCTP'>Zero Checksum for the Stream Control | |||
Zero Checksum for the Stream Control Transmission Protocol | Transmission Protocol</title> | |||
</title> | <seriesInfo name="RFC" value="9653"/> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-sctp-zero-checksum-11" | <author initials="M." surname="Tüxen" fullname="Michael Tüxen"> | |||
/> | <organization abbrev='Münster Univ. of Appl. Sciences'>Münster University | |||
of Applied Sciences</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Stegerwaldstrasse 39</street> | ||||
<city>48565 Steinfurt</city> | ||||
<country>Germany</country> | ||||
</postal> | ||||
<email>tuexen@fh-muenster.de</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M." surname="Tüxen" fullname="Michael Tüxen"> | <author initials='V.' surname='Boivie' fullname='Victor Boivie'> | |||
<organization abbrev='Münster Univ. of Appl. Sciences'> | <organization>Google</organization> | |||
Münster University of Applied Sciences</organization> | <address> | |||
<address> | <postal> | |||
<postal> | <street>Kungsbron 2</street> | |||
<street>Stegerwaldstrasse 39</street> | <city>Stockholm</city> | |||
<city>48565 Steinfurt</city> | <code>11122</code> | |||
<country>Germany</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<email>tuexen@fh-muenster.de</email> | <email>boivie@google.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials='V.' surname='Boivie' fullname='Victor Boivie'> | <author initials='F.' surname='Castelli' fullname='Florent Castelli'> | |||
<organization>Google</organization> | <organization>Google</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Kungsbron 2</street> | <street>Kungsbron 2</street> | |||
<city>Stockholm</city> | <city>Stockholm</city> | |||
<code>11122</code> | <code>11122</code> | |||
<country>Sweden</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<email>boivie@google.com</email> | <email>orphis@google.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials='F.' surname='Castelli' fullname='Florent Castelli'> | <author initials="R." surname="Jesup" fullname="Randell Jesup"> | |||
<organization>Google</organization> | <organization abbrev='Mozilla'>Mozilla Corporation</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Kungsbron 2</street> | <street>1835 Horse Shoe Trl</street> | |||
<city>Stockholm</city> | <city>Malvern</city> | |||
<code>11122</code> | <region>PA</region> | |||
<country>Sweden</country> | <code>19355</code> | |||
</postal> | <country>United States of America</country> | |||
<email>orphis@google.com</email> | </postal> | |||
</address> | <email>randell-ietf@jesup.org</email> | |||
</author> | </address> | |||
</author> | ||||
<author initials="R." surname="Jesup" fullname="Randell Jesup"> | <date year="2024" month="September"/> | |||
<organization abbrev='Mozilla'> | ||||
Mozilla Corporation</organization> | ||||
<address> | ||||
<postal> | ||||
<street>1835 Horse Shoe Trl</street> | ||||
<city>Malvern</city> | ||||
<region>PA</region> | ||||
<code>19355</code> | ||||
<country>US</country> | ||||
</postal> | ||||
<email>randell-ietf@jesup.org</email> | ||||
</address> | ||||
</author> | ||||
<date /> | <area>WIT</area> | |||
<workgroup>tsvwg</workgroup> | ||||
<abstract> | <abstract> | |||
<t>The Stream Control Transmission Protocol (SCTP) uses a 32-bit checksum in | <t>The Stream Control Transmission Protocol (SCTP) uses a 32-bit checksum in | |||
the common header of each packet to provide some level of data integrity. | the common header of each packet to provide some level of data integrity. | |||
If another method used by SCTP already provides the same or a higher level of | If another method used by SCTP already provides the same or a higher level of | |||
data integrity, computing this checksum does not provide any additional | data integrity, computing this checksum does not provide any additional | |||
protection, but does consume computing resources.</t> | protection but does consume computing resources.</t> | |||
<t>This document provides a simple extension allowing SCTP to save these | <t>This document provides a simple extension allowing SCTP to save these | |||
computing resources by using zero as the checksum in a backwards compatible | computing resources by using zero as the checksum in a backwards-compatible | |||
way. | way. | |||
It also defines how this feature can be used when SCTP packets are encapsulated | It also defines how this feature can be used when SCTP packets are encapsulated | |||
in Datagram Transport Layer Security (DTLS) packets.</t> | in Datagram Transport Layer Security (DTLS) packets.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section> | <section> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t>SCTP as specified in <xref target="RFC9260"/> uses a CRC32c checksum to | <t>SCTP as specified in <xref target="RFC9260"/> uses a CRC32c checksum to | |||
provide some level of data integrity. | provide some level of data integrity. | |||
When using, for example, Datagram Transport Layer Security (DTLS) as the | When using, for example, Datagram Transport Layer Security (DTLS) as the | |||
lower layer for SCTP as specified in <xref target="RFC8261"/>, using the CRC32c | lower layer for SCTP as specified in <xref target="RFC8261"/>, using the CRC32c | |||
checksum does not provide any additional protection over that already provided | checksum does not provide any additional protection over that already provided | |||
by DTLS. | by DTLS. | |||
However, computing the CRC32c checksum at the sender and receiver side does | However, computing the CRC32c checksum at the sender and receiver sides does | |||
consume computational resources for no benefit. | consume computational resources for no benefit. | |||
This is particularly important for endpoints that are computationally limited | This is particularly important for endpoints that are computationally limited | |||
and use SCTP over DTLS.</t> | and use SCTP over DTLS.</t> | |||
<t>The extension described in this document allows an SCTP endpoint to declare | <t>The extension described in this document allows an SCTP endpoint to declare | |||
that it accepts SCTP packets with a checksum of zero when using a specific | that it accepts SCTP packets with a checksum of zero when using a specific | |||
alternate error detection method. | alternate error detection method. | |||
This declaration happens during the setup of the SCTP association and allows | This declaration | |||
endpoints supporting this extension to be interoperable with endpoints not | happens during the setup of the SCTP association and allows endpoints | |||
supporting the extension described in this document. | that support this extension to be interoperable with endpoints that don't. | |||
To provide this backwards compatibility, endpoints using this extension still | To provide this backwards compatibility, endpoints using this extension still | |||
need to implement the CRC32c checksum algorithm.</t> | need to implement the CRC32c checksum algorithm.</t> | |||
</section> | </section> | |||
<section anchor='conventions'> | <section anchor='conventions'> | |||
<name>Conventions</name> | <name>Conventions</name> | |||
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | <t> | |||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
be interpreted as described in | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
they appear in all capitals, as shown here.</t> | be | |||
interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | ||||
target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
shown here. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor='alternate_error_detection_methods'> | <section anchor='alternate_error_detection_methods'> | |||
<name>Alternate Error Detection Methods</name> | <name>Alternate Error Detection Methods</name> | |||
<t>SCTP uses a CRC32c checksum to provide some level of data integrity. | <t>SCTP uses a CRC32c checksum to provide some level of data integrity. | |||
The CRC32c checksum is computed based on the SCTP common header and the chunks | The CRC32c checksum is computed based on the SCTP common header and the chunks | |||
contained in the packet. | contained in the packet. | |||
In particular, the computation of the CRC32c checksum does not involve a pseudo | In particular, the computation of the CRC32c checksum does not involve a pseudo | |||
header for IPv4 or IPv6 like the computation of the TCP checksum, as specified | header for IPv4 or IPv6 like the computation of the TCP checksum, as specified | |||
in <xref target='RFC9293'/>, or the UDP checksum, as specified in | in <xref target='RFC9293'/>, or the UDP checksum, as specified in | |||
<xref target='RFC0768'/>.</t> | <xref target='RFC0768'/>.</t> | |||
<t>Zero is a valid result of the CRC32c checksum algorithm. | <t>Zero is a valid result of the CRC32c checksum algorithm. | |||
For example, the following figure depicts an SCTP packet containing a minimal | For example, the following figure depicts an SCTP packet containing a minimal | |||
INIT chunk with a correct CRC32c checksum of zero.</t> | INIT chunk with a correct CRC32c checksum of zero.</t> | |||
<figure> | <figure> | |||
<name>SCTP Packet with a correct CRC32c checksum of zero</name> | <name>SCTP Packet with a Correct CRC32c Checksum of Zero</name> | |||
<artwork align='center'> | <artwork align='center'> | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Source Port Number = 5001 |Destination Port Number = 5001 | | | Source Port Number = 5001 |Destination Port Number = 5001 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Verification Tag = 0 | | | Verification Tag = 0 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Checksum = 0 | | | Checksum = 0 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at line 172 ¶ | skipping to change at line 167 ¶ | |||
</figure> | </figure> | |||
<t>Using SCTP in combination with other mechanisms or protocol extensions might | <t>Using SCTP in combination with other mechanisms or protocol extensions might | |||
provide data integrity protection with an equal or lower probability of false | provide data integrity protection with an equal or lower probability of false | |||
negatives than the one provided by using the CRC32c checksum algorithm. | negatives than the one provided by using the CRC32c checksum algorithm. | |||
When using such alternate error detection methods, the SCTP common header | When using such alternate error detection methods, the SCTP common header | |||
containing the 32-bit checksum field might or might not be visible to | containing the 32-bit checksum field might or might not be visible to | |||
middleboxes on the paths between the two endpoints.</t> | middleboxes on the paths between the two endpoints.</t> | |||
<t>Alternate error detection methods have two requirements:</t> | <t>Alternate error detection methods have two requirements:</t> | |||
<ol> | <ol> | |||
<li><t>An alternate error detection method <bcp14>MUST</bcp14> provide an equal | <li><t>An alternate error detection method <bcp14>MUST</bcp14> provide an equa | |||
or lower probability of false negatives than the one provided by using the | l | |||
CRC32c checksum algorithm. | or lower probability of false negatives than the one provided by using the | |||
This <bcp14>MAY</bcp14> only apply to packets satisfying some method specific | CRC32c checksum algorithm. | |||
constraints.</t></li> | This <bcp14>MAY</bcp14> only apply to packets satisfying some method-specific | |||
<li><t>Using an alternate error detection method <bcp14>MUST NOT</bcp14> | constraints.</t></li> | |||
result in a path failure for more than two retransmission timeouts (RTO) | <li><t>Using an alternate error detection method <bcp14>MUST NOT</bcp14> | |||
due to middleboxes on the path expecting correct CRC32c checksums.</t></li> | result in a path failure for more than two retransmission timeouts (RTOs) | |||
due to middleboxes on the path expecting correct CRC32c checksums.</t></li> | ||||
</ol> | </ol> | |||
<t>To fulfill the second requirement, alternate error detection methods could | <t>To fulfill the second requirement, alternate error detection methods could | |||
use a heuristic to detect the existence of such middleboxes and use correct | use a heuristic to detect the existence of such middleboxes and use correct | |||
CRC32c checksums on these affected paths.</t> | CRC32c checksums on these affected paths.</t> | |||
<t>One example fulfilling the first requirement is using DTLS as the lower layer | <t> | |||
of SCTP as specified in <xref target="RFC8261"/>. | Using DTLS as the lower layer of SCTP as specified in <xref target="RFC8261"/ | |||
> | ||||
is one example that fulfills the first requirement. | ||||
Another example is using SCTP Authentication as specified in | Another example is using SCTP Authentication as specified in | |||
<xref target="RFC4895"/>. | <xref target="RFC4895"/>. | |||
Of course, this only applies to all SCTP packets having an AUTH chunk as its | Of course, this only applies to each SCTP packet having an AUTH chunk as its | |||
first chunk. | first chunk. | |||
However, using SCTP Authentication without any heuristic does not fulfill the | However, using SCTP Authentication without any heuristic does not fulfill the | |||
second requirement. | second requirement. | |||
Since using DTLS as the lower layer of SCTP as specified in | Since using DTLS as the lower layer of SCTP as specified in | |||
<xref target="RFC8261"/> also fulfills the second requirement, it can be used | <xref target="RFC8261"/> also fulfills the second requirement, it can be used | |||
as an alternate error detection method | as an alternate error detection method | |||
(see <xref target="edm_sctp_over_dtls"/>).</t> | (see <xref target="edm_sctp_over_dtls"/>).</t> | |||
<t>If an alternate error detection method is used, the computation of the | <t>If an alternate error detection method is used, the computation of the | |||
CRC32c checksum consumes computational resources without providing any benefit. | CRC32c checksum consumes computational resources without providing any benefit. | |||
To avoid this, an SCTP endpoint could be willing to accept SCTP packets with | To avoid this, an SCTP endpoint could be willing to accept SCTP packets with | |||
skipping to change at line 219 ¶ | skipping to change at line 215 ¶ | |||
<section> | <section> | |||
<name>A New Chunk Parameter</name> | <name>A New Chunk Parameter</name> | |||
<t>The Zero Checksum Acceptable Chunk Parameter is defined by the | <t>The Zero Checksum Acceptable Chunk Parameter is defined by the | |||
following figure.</t> | following figure.</t> | |||
<figure> | <figure> | |||
<name>Zero Checksum Acceptable Chunk Parameter</name> | <name>Zero Checksum Acceptable Chunk Parameter</name> | |||
<artwork align="center"> | <artwork align="center"> | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 0x8001 (suggested) | Length = 8 | | | Type = 0x8001 | Length = 8 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Error Detection Method Identifier (EDMID) | | | Error Detection Method Identifier (EDMID) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
</artwork> | </artwork> | |||
</figure> | </figure> | |||
<dl newline="true"> | <dl newline="true"> | |||
<dt>Type: 16 bits (unsigned integer)</dt> | <dt>Type: 16 bits (unsigned integer)</dt> | |||
<dd> | <dd> | |||
<t>This field holds the IANA defined parameter type for the | This field holds the IANA-defined parameter type for the | |||
"Zero Checksum Acceptable" chunk parameter. | "Zero Checksum Acceptable" chunk parameter. | |||
IANA is requested to assign the value 32769 (0x8001) (suggested) for this | IANA has assigned the value 32769 (0x8001) for this | |||
parameter type.</t> | parameter type. | |||
</dd> | </dd> | |||
<dt>Length: 16 bits (unsigned integer)</dt> | <dt>Length: 16 bits (unsigned integer)</dt> | |||
<dd> | <dd> | |||
<t>This field holds the length in bytes of the chunk parameter; | This field holds the length in bytes of the chunk parameter; | |||
the value <bcp14>MUST</bcp14> be 8.</t> | the value <bcp14>MUST</bcp14> be 8. | |||
</dd> | </dd> | |||
<dt>Error Detection Method Identifier (EDMID): 32 bits (unsigned integer)</dt> | <dt>Error Detection Method Identifier (EDMID): 32 bits (unsigned integer)</dt> | |||
<dd> | <dd> | |||
<t>An IANA registered value specifying the alternate error detection method | An IANA-registered value specifying the alternate error detection method | |||
the sender of this parameter is willing to use for received packets.</t> | the sender of this parameter is willing to use for received packets. | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>All transported integer numbers are in "network byte order" a.k.a., | <t>All transported integer numbers are in network byte order, a.k.a. | |||
Big Endian.</t> | big endian.</t> | |||
<t>The Zero Checksum Acceptable Chunk Parameter <bcp14>MAY</bcp14> appear | <t>The Zero Checksum Acceptable Chunk Parameter <bcp14>MAY</bcp14> appear | |||
in INIT and INIT ACK chunks and <bcp14>MUST NOT</bcp14> appear in any other | in INIT and INIT ACK chunks and <bcp14>MUST NOT</bcp14> appear in any other | |||
chunk. | chunk. | |||
The Parameter <bcp14>MUST NOT</bcp14> appear more than once in any chunk.</t> | The Parameter <bcp14>MUST NOT</bcp14> appear more than once in any chunk.</t> | |||
<t>If an endpoint not supporting the extension described in this document | <t>If an endpoint not supporting the extension described in this document | |||
receives this parameter in an INIT or INIT ACK chunk, it is | receives this parameter in an INIT or INIT ACK chunk, it is | |||
<bcp14>REQUIRED</bcp14> to skip this parameter and continue to process further | <bcp14>REQUIRED</bcp14> to skip this parameter and continue to process further | |||
parameters in the chunk. | parameters in the chunk. | |||
This behavior is specified by <xref target="RFC9260"/> because the highest-order | This behavior is specified by <xref target="RFC9260"/> because the highest-order | |||
two bits of the Type are '10'.</t> | two bits of the Type are '10'.</t> | |||
skipping to change at line 273 ¶ | skipping to change at line 269 ¶ | |||
<t>An endpoint willing to accept SCTP packets with an incorrect checksum of | <t>An endpoint willing to accept SCTP packets with an incorrect checksum of | |||
zero <bcp14>MUST</bcp14> include the Zero Checksum Acceptable Chunk Parameter | zero <bcp14>MUST</bcp14> include the Zero Checksum Acceptable Chunk Parameter | |||
indicating the alternate error detection method it is willing to use in the | indicating the alternate error detection method it is willing to use in the | |||
INIT or INIT ACK chunk it sends.</t> | INIT or INIT ACK chunk it sends.</t> | |||
<t>An SCTP implementation <bcp14>MAY</bcp14> also require the upper layer to | <t>An SCTP implementation <bcp14>MAY</bcp14> also require the upper layer to | |||
indicate that it is fine to use a specific alternate error detection method | indicate that it is fine to use a specific alternate error detection method | |||
before including the corresponding Zero Checksum Acceptable Chunk Parameter.</t> | before including the corresponding Zero Checksum Acceptable Chunk Parameter.</t> | |||
</section> | </section> | |||
<section anchor='sender_side_considerations'> | <section anchor='sender_side_considerations'> | |||
<name>Sender Side Considerations</name> | <name>Sender-Side Considerations</name> | |||
<t>An SCTP endpoint cannot just use an incorrect CRC32c checksum value of zero | <t>An SCTP endpoint cannot just use an incorrect CRC32c checksum value of zero | |||
for all SCTP packets it sends. | for all SCTP packets it sends. | |||
The following restrictions apply:</t> | The following restrictions apply:</t> | |||
<ol> | <ol> | |||
<li><t>If an endpoint has not received an INIT or INIT ACK chunk containing a | <li><t>If an endpoint has not received an INIT or INIT ACK chunk containing a | |||
Zero Checksum Acceptable Chunk Parameter indicating an alternate error detection | Zero Checksum Acceptable Chunk Parameter indicating an alternate error detection | |||
method it supports from its peer during the association setup, | method it supports from its peer during the association setup, | |||
it <bcp14>MUST</bcp14> use a correct CRC32c checksum. | it <bcp14>MUST</bcp14> use a correct CRC32c checksum. | |||
In particular, when an endpoint</t> | In particular, when an endpoint</t> | |||
<ol type='%c.'> | <ol type='%c.'> | |||
skipping to change at line 297 ¶ | skipping to change at line 293 ¶ | |||
<bcp14>MUST</bcp14> include a correct CRC32c checksum in the response | <bcp14>MUST</bcp14> include a correct CRC32c checksum in the response | |||
packet.</t></li> | packet.</t></li> | |||
</ol></li> | </ol></li> | |||
<li><t>When an endpoint sends a packet containing a COOKIE ECHO chunk, it | <li><t>When an endpoint sends a packet containing a COOKIE ECHO chunk, it | |||
<bcp14>MUST</bcp14> include a correct CRC32c checksum in the packet containing | <bcp14>MUST</bcp14> include a correct CRC32c checksum in the packet containing | |||
the COOKIE ECHO chunk.</t></li> | the COOKIE ECHO chunk.</t></li> | |||
<li><t>When an endpoint supports the dynamic address reconfiguration specified | <li><t>When an endpoint supports the dynamic address reconfiguration specified | |||
in <xref target='RFC5061'/> and sends a packet containing an ASCONF chunk, it | in <xref target='RFC5061'/> and sends a packet containing an ASCONF chunk, it | |||
<bcp14>MUST</bcp14> include a correct CRC32c checksum in the packet containing | <bcp14>MUST</bcp14> include a correct CRC32c checksum in the packet containing | |||
the ASCONF chunk.</t></li> | the ASCONF chunk.</t></li> | |||
<li><t>If an alternate error detection method has some method specific | <li><t>If an alternate error detection method has some method-specific | |||
constraints, the sender <bcp14>MUST</bcp14> include a correct CRC32c checksum | constraints, the sender <bcp14>MUST</bcp14> include a correct CRC32c checksum | |||
in all packets not fulfilling these method specific constraints.</t></li> | in all packets that don't fulfill these method-specific constraints.</t></li> | |||
</ol> | </ol> | |||
<t>The first restriction allows backwards compatibility. | <t>The first restriction allows backwards compatibility. | |||
The second and third restrictions allow a simpler implementation of the | The second and third restrictions allow a simpler implementation of the | |||
extension defined in this document, because looking up the association | extension defined in this document, because looking up the association | |||
for SCTP packets containing a COOKIE ECHO chunk or an ASCONF chunk might | for SCTP packets containing a COOKIE ECHO chunk or an ASCONF chunk might | |||
be more complex than for other packets. | be more complex than for other packets. | |||
Finally, the last restriction covers alternate error detection method | Finally, the last restriction covers constraints specific to the alternate error | |||
specific constraints.</t> | detection method.</t> | |||
<t>An SCTP end point <bcp14>MAY</bcp14> require that the upper layer allowed | <t>An SCTP endpoint <bcp14>MAY</bcp14> require that the upper layer allow | |||
the use of the alternate error detection method that was announced by the peer | the use of the alternate error detection method that was announced by the peer | |||
before sending packets with an incorrect checksum of zero.</t> | before sending packets with an incorrect checksum of zero.</t> | |||
<t>If none of the above restrictions apply, an endpoint <bcp14>SHOULD</bcp14> | <t>If none of the above restrictions apply, an endpoint <bcp14>SHOULD</bcp14> | |||
use zero as the checksum when sending an SCTP packet.</t> | use zero as the checksum when sending an SCTP packet.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Receiver Side Considerations</name> | <name>Receiver-Side Considerations</name> | |||
<t>If an endpoint has sent the Zero Checksum Acceptable Chunk Parameter | <t>If an endpoint has sent the Zero Checksum Acceptable Chunk Parameter | |||
indicating the support of an alternate error detection method in an INIT or | indicating the support of an alternate error detection method in an INIT or | |||
INIT ACK chunk, it <bcp14>MUST</bcp14> accept SCTP packets fulfilling the | INIT ACK chunk, in addition to SCTP packets containing the | |||
requirements of the announced alternate error detection method using | correct CRC32c checksum value it <bcp14>MUST</bcp14> accept SCTP packets that ha | |||
an incorrect checksum value of zero in addition to SCTP packets containing the | ve an | |||
correct CRC32c checksum value for this association. | incorrect checksum value of zero and that fulfill the requirements of | |||
the announced alternate error detection method used for this association. | ||||
Otherwise, the endpoint <bcp14>MUST</bcp14> drop all SCTP packets with an | Otherwise, the endpoint <bcp14>MUST</bcp14> drop all SCTP packets with an | |||
incorrect CRC32c checksum.</t> | incorrect CRC32c checksum.</t> | |||
<t>In addition to processing OOTB packets with a correct CRC32c checksum as | <t>In addition to processing OOTB packets with a correct CRC32c checksum as | |||
specified in <xref target='RFC9260'/>, an SCTP implementation | specified in <xref target='RFC9260'/>, an SCTP implementation | |||
<bcp14>MAY</bcp14> also process OOTB packets having an incorrect zero checksum. | <bcp14>MAY</bcp14> also process OOTB packets having an incorrect zero checksum. | |||
Doing so might result in faster SCTP association failure detection.</t> | Doing so might result in faster SCTP association failure detection.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor='edm_sctp_over_dtls'> | <section anchor='edm_sctp_over_dtls'> | |||
<name>Error Detection via SCTP over DTLS</name> | <name>Error Detection via SCTP over DTLS</name> | |||
<t>Using SCTP over DTLS as specified in <xref target="RFC8261"/> provides | <t>Using SCTP over DTLS as specified in <xref target="RFC8261"/> provides | |||
a stronger error detection method than using the CRC32c checksum algorithm. | a stronger error detection method than using the CRC32c checksum algorithm. | |||
Since middleboxes will not observe the unencrypted SCTP packet, there is | Since middleboxes will not observe the unencrypted SCTP packet, there is | |||
no risk in interfering with using zero as an incorrect checksum. | no risk in interfering with using zero as an incorrect checksum. | |||
There are no additional error detection method specific constraints on packets | There are no additional constraints (specific to the error detection method) on packets | |||
when using DTLS encapsulation.</t> | when using DTLS encapsulation.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Socket API Considerations</name> | <name>Socket API Considerations</name> | |||
<t>This section describes how the socket API defined in | <t>This section describes how the socket API defined in | |||
<xref target='RFC6458'/> needs to be extended to provide a way for the | <xref target='RFC6458'/> needs to be extended to provide a way for the | |||
application to control the acceptance of a zero checksum.</t> | application to control the acceptance of a zero checksum.</t> | |||
<t>A 'Socket API Considerations' section is contained in all SCTP related | <t>A 'Socket API Considerations' section is contained in all SCTP-related | |||
specifications published after <xref target='RFC6458'/> describing an extension | specifications published after <xref target='RFC6458'/> describing an extension | |||
for which implementations using the socket API as specified in | for which implementations using the socket API as specified in | |||
<xref target='RFC6458'/> would require some extension of the socket API. | <xref target='RFC6458'/> would require some extension of the socket API. | |||
Please note that this section is informational only.</t> | Please note that this section is informational only.</t> | |||
<t>A socket API implementation based on <xref target='RFC6458'/> is extended by | <t>A socket API implementation based on <xref target='RFC6458'/> is extended by | |||
supporting one new write-only IPPROTO_SCTP-level socket option.</t> | supporting one new write-only IPPROTO_SCTP-level socket option.</t> | |||
<section> | <section> | |||
<name>Set Accepting a Zero Checksum (SCTP_ACCEPT_ZERO_CHECKSUM)</name> | <name>Set Accepting a Zero Checksum (SCTP_ACCEPT_ZERO_CHECKSUM)</name> | |||
<t>This IPPROTO_SCTP-level socket option with the name SCTP_ACCEPT_ZERO_CHECKSUM | <t>This IPPROTO_SCTP-level socket option with the name SCTP_ACCEPT_ZERO_CHECKSUM | |||
skipping to change at line 382 ¶ | skipping to change at line 379 ¶ | |||
<t>An implementation might only send packets with an incorrect checksum of zero, | <t>An implementation might only send packets with an incorrect checksum of zero, | |||
if the alternate error detection method announced by the peer is also enabled | if the alternate error detection method announced by the peer is also enabled | |||
locally via this socket option.</t> | locally via this socket option.</t> | |||
<t>The default for this socket option is that the use of alternate error | <t>The default for this socket option is that the use of alternate error | |||
detection methods is disabled.</t> | detection methods is disabled.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<t>[NOTE to RFC-Editor: "RFCXXXX" is to be replaced by the RFC number you | <t>A new chunk parameter type has been assigned by IANA in the "Chunk Parameter | |||
assign this document.]</t> | Types" registry for SCTP:</t> | |||
<t>[NOTE to RFC-Editor: The suggested value for the parameter type is tentative | ||||
and to be confirmed by IANA.]</t> | ||||
<t>This document (RFCXXXX) is the reference for the registration described | ||||
in this section.</t> | ||||
<t>A new chunk parameter type has to be assigned by IANA. | ||||
This requires an additional line in the "Chunk Parameter Types" registry for | ||||
SCTP:</t> | ||||
<table> | <table> | |||
<name>New entry in "Chunk Parameter Types" registry</name> | <name>New Entry in "Chunk Parameter Types" Registry</name> | |||
<thead> | <thead> | |||
<tr><th>ID Value</th> <th>Chunk Parameter Type</th> | <tr> | |||
<th>Reference</th></tr> | <th>ID Value</th> | |||
</thead> | <th>Chunk Parameter Type</th> | |||
<tbody> | <th>Reference</th> | |||
<tr><td>32769 (suggested)</td> <td>Zero Checksum Acceptable (0x8001 (suggeste | </tr> | |||
d))</td> <td>[RFCXXXX]</td></tr> | </thead> | |||
</tbody> | <tbody> | |||
<tr><td>32769</td> | ||||
<td>Zero Checksum Acceptable (0x8001)</td> | ||||
<td>RFC 9653</td></tr> | ||||
</tbody> | ||||
</table> | </table> | |||
<t>Furthermore, IANA is requested to establish a new "Error Detection Method" | <t>Furthermore, IANA has established a new "Error Detection Method" | |||
registry for SCTP. | registry for SCTP. | |||
The assignment of new error detection methods is done through the Specification | The assignment of new error detection methods is done through the Specification | |||
Required policy as defined in <xref target='RFC8126'/>. | Required policy as defined in <xref target='RFC8126'/>. | |||
Documentation for a new error detection method <bcp14>MUST</bcp14> contain the | Documentation for a new error detection method <bcp14>MUST</bcp14> contain the | |||
following information:</t> | following information:</t> | |||
<ol> | <ol> | |||
<li><t>A name of an alternate error detection method.</t></li> | <li><t>A name of an alternate error detection method.</t></li> | |||
<li><t>A reference to a specification describing:</t> | <li><t>A reference to a specification describing:</t> | |||
<ol type='(%c)'> | <ol type='(%c)'> | |||
<li><t>the alternate error detection method,</t></li> | <li><t>the alternate error detection method,</t></li> | |||
<li><t>why the alternate error detection method provides an equal or | <li><t>why the alternate error detection method provides an equal or | |||
lower probability of false negatives than the one provided by using the CRC32c | lower probability of false negatives than the one provided by using the CRC3 | |||
checksum,</t></li> | 2c | |||
<li><t>any alternate error detection method specific constraints referred to in | checksum,</t></li> | |||
the fourth exception in <xref target='sender_side_considerations'/>, and</t></li | <li><t>any constraints (specific to the alternate error detection method) th | |||
> | at are referred to in the fourth exception in <xref target='sender_side_consider | |||
<li><t>why using the alternate error detection method does not result in | ations'/>, and</t></li> | |||
path failures due to middleboxes expecting correct CRC32c checksums for more | <li><t>why using the alternate error detection method does not result in | |||
than two RTOs. | path failures due to middleboxes expecting correct CRC32c checksums for more | |||
In case the alternate error detection method uses a heuristic for detecting | than two RTOs. | |||
such middleboxes, this heuristic needs to be described.</t></li> | In case the alternate error detection method uses a heuristic for detecting | |||
</ol></li> | such middleboxes, this heuristic needs to be described.</t></li> | |||
</ol></li> | ||||
</ol> | </ol> | |||
<t>IANA is requested to use the following as the initial contents of the | <t>The initial contents of the registry are as follows:</t> | |||
registry:</t> | ||||
<table> | <table> | |||
<name>Initial Contents of the "Error Detection Method" registry</name> | <name>Initial Contents of the "Error Detection Method" Registry</name> | |||
<thead> | <thead> | |||
<tr><th>ID Value</th> <th>Error Detection Method</th> <th>Reference</th></ | <tr><th>ID Value</th> <th>Error Detection Method</th> <th>Reference</t | |||
tr> | h></tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr><td>0 </td> <td>Reserved</td> <td>[RFCXXXX]</td></ | <tr><td>0 </td> <td>Reserved</td> <td>RFC 9653</td>< | |||
tr> | /tr> | |||
<tr><td>1 </td> <td>SCTP over DTLS</td> <td>[RFCXXXX]</td></ | <tr><td>1 </td> <td>SCTP over DTLS</td> <td>RFC 9653</td>< | |||
tr> | /tr> | |||
<tr><td>2 - 4294967295</td> <td>Unassigned</td> <td> </td></ | <tr><td>2 - 4294967295</td> <td>Unassigned</td> <td></td></tr> | |||
tr> | </tbody> | |||
</tbody> | ||||
</table> | </table> | |||
<t>A Designated Expert (DE) is expected to ascertain the existence of suitable | <t>A designated expert (DE) is expected to ascertain the existence of suitable | |||
documentation (a specification) as described in <xref target='RFC8126'/> and to | documentation (a specification) as described in <xref target='RFC8126'/> and to | |||
verify that the document is permanently and publicly available. | verify that the document is permanently and publicly available. | |||
Furthermore, the DE is expected to ensure that the above four points have been | Furthermore, the DE is expected to ensure that the above four points have been | |||
addressed appropriately.</t> | addressed appropriately.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<t>This document does not change the considerations given in | <t>This document does not change the considerations given in | |||
<xref target="RFC9260"/>.</t> | <xref target="RFC9260"/>.</t> | |||
<t>Using an alternate error detection method provides an equal or better level | <t>Due to the first requirement in <xref target="alternate_error_detection_metho | |||
of data integrity than the one provided by using the CRC32c checksum algorithm | ds"/>, using an alternate error | |||
due to the first requirement of alternate error detection methods. | detection method provides an equal or better level of data integrity | |||
The second requirement of alternate error detection methods ensures that the | than the one provided by using the CRC32c checksum algorithm. The | |||
second requirement in <xref target="alternate_error_detection_methods"/> ensu | ||||
res that the | ||||
existence of middleboxes expecting correct CRC32c checksums does not result in | existence of middleboxes expecting correct CRC32c checksums does not result in | |||
permanent path failures.</t> | permanent path failures.</t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml" | |||
.2119.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5061.xml" | |||
.5061.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml" | |||
.8126.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml" | |||
.8174.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8261.xml" | |||
.8261.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9260.xml" | |||
.9260.xml"/> | /> | |||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0768.xml" | |||
.0768.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4895.xml" | |||
.4895.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6458.xml" | |||
.6458.xml"/> | /> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9293.xml" | |||
.9293.xml"/> | /> | |||
</references> | </references> | |||
</references> | </references> | |||
<section numbered='false'> | <section numbered='false'> | |||
<name>Acknowledgments</name> | <name>Acknowledgments</name> | |||
<t>The authors wish to thank | <t>The authors wish to thank | |||
<contact fullname="Bernard Aboba"/>, | <contact fullname="Bernard Aboba"/>, | |||
<contact fullname="Deb Cooley"/>, | <contact fullname="Deb Cooley"/>, | |||
<contact fullname="Martin Duke"/>, | <contact fullname="Martin Duke"/>, | |||
<contact fullname="Gorry Fairhurst"/>, | <contact fullname="Gorry Fairhurst"/>, | |||
End of changes. 38 change blocks. | ||||
204 lines changed or deleted | 209 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |