<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-boucadair-tcpm-rst-diagnostic-payload-12" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="RST Diagnostic Payload">TCP RST Diagnostic Payload</title>
    <seriesInfo name="Internet-Draft" value="draft-boucadair-tcpm-rst-diagnostic-payload-12"/>
    <author fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author fullname="Jason Xing">
      <organization>Tencent</organization>
      <address>
        <email>kerneljasonxing@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="15"/>
    <area/>
    <workgroup>TCP Maintenance and Minor Extensions</workgroup>
    <keyword>Service diagnostic</keyword>
    <abstract>
      <?line 51?>

<t>This document specifies a diagnostic payload format returned in TCP
   RST segments.  Such payloads are used to share with an endpoint the
   reasons for which a TCP connection has been reset.  Sharing this
   information is meant to ease diagnostic and troubleshooting.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    TCP Maintenance and Minor Extensions  mailing list (tcpm@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tcpm/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/draft-boucadair-tcpm-rst-diagnostic-payload"/>.</t>
    </note>
  </front>
  <middle>
    <?line 58?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A TCP connection <xref target="RFC9293"/> can be reset by a peer for various
   reasons, e.g., received data does not correspond to an active
   connection.  Also, a TCP connection can be reset by an on-path
   service function (e.g., Carrier Grade NAT (CGN) <xref target="RFC6888"/>, NAT64
   <xref target="RFC6146"/>, or firewall) for several reasons.  Typically, a Network
   Address Translator (NAT) function can generate an RST segment to
   notify an endpoint upon the expiry of the lifetime of the
   corresponding mapping entry or because an RST segment was received
   from a peer (<xref section="2.2" sectionFormat="of" target="RFC7857"/>).</t>
      <t>A TCP connection can also be
   closed by a user or an application at any time.  However, the peer
   that receives an RST segment does not have any hint about the reason
   that led to terminating the connection.  Likewise, the application
   that relies upon such a TCP connection may not easily identify the
   reason for the connection closure.  Troubleshooting such events at
   the remote side of the connection that receives the RST segment may
   not be trivial.</t>
      <t>This document fills this void by specifying a format of the
   diagnostic payload that is returned in an RST segment.  Returning
   such data is consistent with the provision in <xref section="3.5.3" sectionFormat="of" target="RFC9293"/> for RST segments, especially:</t>
      <blockquote>
        <t>"TCP implementations <bcp14>SHOULD</bcp14> allow a received RST segment to
 include data (SHLD-2)."</t>
      </blockquote>
      <t>This document does not change the conditions under which an RST
   segment is generated (<xref section="3.5.2" sectionFormat="of" target="RFC9293"/>).</t>
      <t>The generic procedure for processing an RST segment is specified in
   <xref section="3.5.3" sectionFormat="of" target="RFC9293"/>.  Only the deviations from that procedure
   to insert and validate a diagnostic payload is provided in <xref target="payload"/>.
   <xref target="examples"/> provides a set of examples to illustrate the use of TCP RST
   diagnostic payloads.</t>
      <t>This document specifies the format and the overall approach to ease
   maintaining the list of codes while allowing for adding new codes as
   needed in the future and accommodating any existing vendor-specific
   codes.  An initial version of error codes is available in Table 2.
   However, the authoritative source to retrieve the full list of error
   codes is the IANA-maintained registry (<xref target="causes"/>).</t>
      <ul empty="true">
        <li>
          <t>Design note: Other alternate encoding designs may be considered (TLV, Plain text, etc.); each has their own pros and cons, mainly:
amplification impact, need or not of a kernel library and availability of such library (if needed), impact of conversion on CPU, integration with traffic visualisation tools. The encoding will be updated to reflect the WG consensus.</t>
        </li>
      </ul>
      <t>Investigation based on some major CGN vendors revealed
   that RSTs with data are not discarded and are translated according to
   any matching mapping entry. Moreover, implementation and experimental validation in Linux are detailed in <xref target="sec-validation"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to 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>
      <?line -18?>

<t>This document makes use of the terms defined in <xref section="4" sectionFormat="of" target="RFC9293"/>.</t>
    </section>
    <section anchor="payload">
      <name>RST Diagnostic Payload</name>
      <t>The RST diagnostic payload <bcp14>MUST</bcp14> be encoded using Concise Binary
   Object Representation (CBOR) Sequence <xref target="RFC8742"/>.  The Concise Data
   Definition Language (CDDL) <xref target="RFC8610"/> for the diagnostic payload is
   shown in <xref target="cddl"/>.</t>
      <figure anchor="cddl">
        <name>Structure of the RST Diagnostic Payload</name>
        <sourcecode type="CDDL"><![CDATA[
; This defines an array, the elements of which are to be used
; in a CBOR Sequence. There is exactly one occurrence.
diagnostic-payload = [magic-cookie, reason]
; Magic cookie to identify a payload that follows this specification
magic-cookie = 12345
; Reset reason details:
reason= {
  ? reason-code: uint,
  ? pen:uint,
  ? reason-description: tstr,
}
; Map Keys
reason-code = 1
pen = 2
reason-description = 3
]]></sourcecode>
      </figure>
      <t>The RST diagnostic payload comprises a magic cookie that is used to
   unambiguously identify an RST payload that follows this
   specification.  It <bcp14>MUST</bcp14> be set to the RFC number to be assigned to
   this document.</t>
      <ul empty="true">
        <li>
          <t>Note to the RFC Editor: Please replace "12345" with the RFC number
assigned to this document.</t>
        </li>
      </ul>
      <t>All parameters in the reason component of an RST diagnostic payload
   are mapped to their CBOR key values as specified in <xref target="cbor"/>.  The
   description of these parameters is as follows:</t>
      <dl>
        <dt>reason-code:</dt>
        <dd>
          <t>This parameter takes a value from an available registry
such as the "TCP Failure Causes" registry (<xref target="causes"/>).</t>
        </dd>
        <dt>pen:</dt>
        <dd>
          <t>Includes a Private Enterprise Number
<xref target="Private-Enterprise-Numbers"/>.  This parameter <bcp14>MAY</bcp14> be included when
the reason code is not taken from the IANA-maintained registry
(<xref target="causes"/>), but from a vendor-specific registry.</t>
        </dd>
        <dt>reason-description:</dt>
        <dd>
          <t>Includes a brief description of the reset reason
encoded as UTF-8 <xref target="RFC3629"/>.  This parameter <bcp14>MUST NOT</bcp14> be included
if a reason code is supplied.  This parameter is useful only for
reset reasons that are not yet registered or for application-
specific reset reasons.</t>
        </dd>
      </dl>
      <t>At least one of "reason-code" and "reason-description" parameters
   <bcp14>MUST</bcp14> be included in an RST diagnostic payload.  The "pen" parameter
   <bcp14>MUST</bcp14> be omitted if a reason code from the IANA-maintained registry
   (<xref target="causes"/>) fits the reset case.</t>
      <t>Malformed RST diagnostic payload messages that include the magic
   cookie <bcp14>MUST</bcp14> be silently ignored by the receiver.</t>
      <t>A peer that receives a valid diagnostic payload may pass the reset
   reason information to the local application in addition to the
   information (<bcp14>MUST</bcp14>-12) described in <xref section="3.6" sectionFormat="of" target="RFC9293"/>.  That
   information may also be logged locally, unless a local policy
   specifies otherwise.  How the information is passed to an application
   and how it is stored locally is implementation-specific.</t>
      <t>Per <xref section="3.6" sectionFormat="of" target="RFC9293"/>, one or more RST segments can be sent
   to reset a connection.  Whether a TCP endpoint elects to send more
   than one RST with only a subset of them that include the diagnostic
   payload is implementation-specific.</t>
    </section>
    <section anchor="examples">
      <name>Some Examples</name>
      <t>To ease readability, the CBOR diagnostic notation (<xref section="8" sectionFormat="of" target="RFC8949"/>)
   with the parameter names rather than their CBOR key values
   in <xref target="cbor"/> is used in Figures 3, 4, 5, and 6.</t>
      <t><xref target="fig-2"/> depicts an example of an RST diagnostic payload that is
   generated to inform the peer that the TCP connection is reset because
   an ACK was received from that peer while the connection is still in
   the LISTEN state (<xref section="3.10.7.2" sectionFormat="of" target="RFC9293"/>).</t>
      <figure anchor="fig-2">
        <name>Example of an RST Diagnostic Payload with Reason Code (CBOR Encoding)</name>
        <sourcecode type="CDDL"><![CDATA[
   19 3039 # unsigned(12345)
   A1    # map(1)
      01 # unsigned(1)
      02 # unsigned(2)
]]></sourcecode>
      </figure>
      <t><xref target="fig-3"/> depicts the same RST diagnostic payload as the one shown in
   <xref target="fig-2"/> but following the CBOR diagnostic notation.</t>
      <figure anchor="fig-3">
        <name>Example of an RST Diagnostic Payload with Reason Code (Diagnostic Notation)</name>
        <sourcecode type="CBOR"><![CDATA[
   [
     12345,
     {
       1: 2
     }
   ]
]]></sourcecode>
      </figure>
      <t><xref target="fig-4"/> shows an example of an RST diagnostic payload that includes
   a free description to report a case that is not covered by an
   appropriate code from the IANA-maintained registry (<xref target="causes"/>).</t>
      <figure anchor="fig-4">
        <name>Example of an RST Diagnostic Payload with Reason Description (Diagnostic Notation)</name>
        <sourcecode type="CBOR"><![CDATA[
   [
     12345,
     {
       3: "brief human-readable description"
     }
   ]
]]></sourcecode>
      </figure>
      <t>An RST diagnostic payload may also be sent by an on-path service
   function.  For example, the following diagnostic payload is returned
   by a NAT function upon expiry of the mapping entry to which the TCP
   connection is bound (<xref target="fig-5"/>).</t>
      <figure anchor="fig-5">
        <name>Example of an RST Diagnostic Payload to Report Connection Timeout (Diagnostic Notation)</name>
        <sourcecode type="CBOR"><![CDATA[
   [
     12345,
     {
       1: 8
     }
   ]
]]></sourcecode>
      </figure>
      <t><xref target="fig-6"/> illustrates an RST diagnostic payload that is returned by a
   peer that resets a TCP connection for a reason code 1234 defined by a
   vendor with the private enterprise number 32473.</t>
      <figure anchor="fig-6">
        <name>Example of an RST Diagnostic Payload to Report Vendor-Specific Reason Code (Diagnostic Notation)</name>
        <sourcecode type="CBOR"><![CDATA[
   [
     12345,
     {
       1: 1234,
       2: 32473
     }
   ]
]]></sourcecode>
      </figure>
      <t><xref target="fig-6"/> uses the Enterprise Number 32473 defined for documentation
   use <xref target="RFC5612"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="cbor">
        <name>RST Diagnostic Payload CBOR Key Values</name>
        <t>IANA is requested to create a new registry titled "RST Diagnostic
   Payload CBOR Key Values" under the "Transmission Control Protocol
   (TCP) Parameters" registry group <xref target="IANA-TCP"/>.</t>
        <t>The key value <bcp14>MUST</bcp14> be an integer in the 1-255 range.</t>
        <t>The assignment policy for this registry is "IETF Review" (<xref section="4.8" sectionFormat="of" target="RFC8126"/>).</t>
        <t>The structure of this subregistry and the initial values are provided
   in <xref target="sub"/>.</t>
        <table anchor="sub">
          <name>Initial CBOR Keys</name>
          <thead>
            <tr>
              <th align="center">Parameter Name</th>
              <th align="center">CBOR  Key</th>
              <th align="center">CBOR Major Type &amp; Information</th>
              <th align="center">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">reason-code</td>
              <td align="center">1</td>
              <td align="center">0 unsigned</td>
              <td align="center">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">pen</td>
              <td align="center">2</td>
              <td align="center">0 unsigned</td>
              <td align="center">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">reason-description</td>
              <td align="center">3</td>
              <td align="center">3 text string</td>
              <td align="center">[ThisDocument]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="causes">
        <name>New Registry for TCP Failure Causes</name>
        <t>This document requests IANA to create a new registry entitled "TCP
   Failure Causes" under the "Transmission Control Protocol (TCP)
   Parameters" registry group <xref target="IANA-TCP"/>.</t>
        <t>Values are taken from the 1-65535 range.</t>
        <t>The assignment policy for this registry is "Expert Review"
   (<xref section="4.5" sectionFormat="of" target="RFC8126"/>).</t>
        <t>The designated experts may approve registration once they checked
   that the new requested code is not covered by an existing code and if
   the provided reasoning to register the new code is acceptable.  A
   registration request may supply a pointer to a specification where
   that code is defined.  However, a registration may be accepted even
   if no permanent and readily available public specification is
   available.</t>
        <t>The registry is initially populated with the values listed in
   <xref target="initial"/>.</t>
        <table anchor="initial">
          <name>Initial TCP Failure Causes</name>
          <thead>
            <tr>
              <th align="center">Value</th>
              <th align="left">Description</th>
              <th align="left">Specification (if available)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">1</td>
              <td align="left">Illegal Option</td>
              <td align="left">
                <xref section="3.1" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">2</td>
              <td align="left">Desynchronized state</td>
              <td align="left">
                <xref section="3.5.1" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">3</td>
              <td align="left">New data is received after CLOSE is called</td>
              <td align="left">Sections 3.6.1 and  3.10.7.1 of <xref target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">4</td>
              <td align="left">ABORT Process</td>
              <td align="left">
                <xref section="3.10.5" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">5</td>
              <td align="left">Unexpected ACK received by non-synchronized state connection</td>
              <td align="left">
                <xref section="3.10.7" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">6</td>
              <td align="left">Unexpected SYN in the window</td>
              <td align="left">
                <xref section="3.10.7" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">7</td>
              <td align="left">Unexpected security compartment</td>
              <td align="left">
                <xref section="A.1" sectionFormat="of" target="RFC9293"/></td>
            </tr>
            <tr>
              <td align="center">8</td>
              <td align="left">Malformed Message</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">9</td>
              <td align="left">Not Authorized</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">10</td>
              <td align="left">Resource Exceeded</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">11</td>
              <td align="left">Network Failure</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">12</td>
              <td align="left">Reset received from he peer</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">13</td>
              <td align="left">Destination Unreachable</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">14</td>
              <td align="left">Connection Timeout</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <tr>
              <td align="center">15</td>
              <td align="left">Too much outstanding data</td>
              <td align="left">
                <xref section="3.6" sectionFormat="of" target="RFC8684"/></td>
            </tr>
            <tr>
              <td align="center">16</td>
              <td align="left">Unacceptable performance</td>
              <td align="left">
                <xref section="3.6" sectionFormat="of" target="RFC8684"/></td>
            </tr>
            <tr>
              <td align="center">17</td>
              <td align="left">Middlebox interference</td>
              <td align="left">
                <xref section="3.6" sectionFormat="of" target="RFC8684"/></td>
            </tr>
          </tbody>
        </table>
        <t>Note that codes in the 8-14 range can be used by service functions (Carrier Grade NAT (CGN), firewall, proxy, etc.).</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t><xref target="RFC9293"/> discusses TCP-related security considerations. In
   particular, RST-specific attacks and their mitigations are discussed
   in <xref section="3.10.7.3" sectionFormat="of" target="RFC9293"/>.</t>
      <t>In addition to these considerations, it is <bcp14>RECOMMENDED</bcp14> to control the
   size of acceptable diagnostic payload and keep it as brief as
   possible.  The <bcp14>RECOMMENDED</bcp14> acceptable maximum size of the RST
   diagnostic payload is 255 octets.</t>
      <t>Also, it is <bcp14>RECOMMENDED</bcp14> to avoid leaking privacy-related information
   as part of the diagnostic payload (e.g., including a description such
   as "user X resets explicitly the connection" is not recommended).
   The "reason-description" string, when present, <bcp14>MUST NOT</bcp14> include any
   private information that an observer would not otherwise have access
   to.</t>
      <t>The presence of vendor-specific reason codes (Section 3) may be used
   to fingerprint hosts.  Such a concern does not apply if the reason
   codes are taken from the IANA-maintained registry.  Implementers are,
   thus, encouraged to register new codes within IANA instead of
   maintaining specific registries.</t>
      <t>The reason description, when present, <bcp14>MUST NOT</bcp14> be displayed
   to end users but is intended to be consumed by applications. Such a description
   may carry a malicious message to mislead the end-user.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9293">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8684">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <author fullname="A. Ford" initials="A." surname="Ford"/>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure"/>
            <author fullname="C. Paasch" initials="C." surname="Paasch"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
              <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
              <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8684"/>
          <seriesInfo name="DOI" value="10.17487/RFC8684"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA-TCP" target="https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#">
          <front>
            <title>Transmission Control Protocol (TCP) Parameters</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Private-Enterprise-Numbers" target="https://www.iana.org/assignments/enterprise-numbers">
          <front>
            <title>Private Enterprise Numbers</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="May"/>
          </front>
        </reference>
        <reference anchor="RFC6888">
          <front>
            <title>Common Requirements for Carrier-Grade NATs (CGNs)</title>
            <author fullname="S. Perreault" initials="S." role="editor" surname="Perreault"/>
            <author fullname="I. Yamagata" initials="I." surname="Yamagata"/>
            <author fullname="S. Miyakawa" initials="S." surname="Miyakawa"/>
            <author fullname="A. Nakagawa" initials="A." surname="Nakagawa"/>
            <author fullname="H. Ashida" initials="H." surname="Ashida"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines common requirements for Carrier-Grade NATs (CGNs). It updates RFC 4787.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="127"/>
          <seriesInfo name="RFC" value="6888"/>
          <seriesInfo name="DOI" value="10.17487/RFC6888"/>
        </reference>
        <reference anchor="RFC6146">
          <front>
            <title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document describes stateful NAT64 translation, which allows IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP. One or more public IPv4 addresses assigned to a NAT64 translator are shared among several IPv6-only clients. When stateful NAT64 is used in conjunction with DNS64, no changes are usually required in the IPv6 client or the IPv4 server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </reference>
        <reference anchor="RFC7857">
          <front>
            <title>Updates to Network Address Translation (NAT) Behavioral Requirements</title>
            <author fullname="R. Penno" initials="R." surname="Penno"/>
            <author fullname="S. Perreault" initials="S." surname="Perreault"/>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair"/>
            <author fullname="S. Sivakumar" initials="S." surname="Sivakumar"/>
            <author fullname="K. Naito" initials="K." surname="Naito"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document clarifies and updates several requirements of RFCs 4787, 5382, and 5508 based on operational and development experience. The focus of this document is Network Address Translation from IPv4 to IPv4 (NAT44).</t>
              <t>This document updates RFCs 4787, 5382, and 5508.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="127"/>
          <seriesInfo name="RFC" value="7857"/>
          <seriesInfo name="DOI" value="10.17487/RFC7857"/>
        </reference>
        <reference anchor="RFC5612">
          <front>
            <title>Enterprise Number for Documentation Use</title>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="D. Harrington" initials="D." surname="Harrington"/>
            <date month="August" year="2009"/>
            <abstract>
              <t>This document describes an Enterprise Number (also known as SMI Network Management Private Enterprise Code) for use in documentation. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5612"/>
          <seriesInfo name="DOI" value="10.17487/RFC5612"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
      </references>
    </references>
    <?line 386?>

<section anchor="sec-validation">
      <name>Implementation and Experimental Validation in Linux</name>
      <t>Questions and concerns have been raised regarding whether RST with payload affects the normal termination of flows across different software platforms, operating systems, middleboxes, etc. Even though <xref section="3.5.3" sectionFormat="of" target="RFC9293"/> explicitly allows this behavior, a full implementation is needed to widely verify if unexpected cases can happen in the real world.</t>
      <t>The overall design in Linux is to pre-allocate a large enough zeroed buffer, put a reset reason code in the first byte and sent it out to verify whether the RST with payload can be possibly declined by any equipment in between two sides and the other side successfully parses the RST with payload.</t>
      <section anchor="implementation">
        <name>Implementation</name>
        <t>The following implementation is accomplished on top of Linux 6.16:</t>
        <dl>
          <dt><strong>Payload Attachment</strong>:</dt>
          <dd>
            <t>Allocate a 1000-byte data payload attached to all generated RST packets.</t>
          </dd>
          <dt><strong>Reason Code Encoding</strong>:</dt>
          <dd>
            <t>The first byte of the payload is used to store a predefined reset reason code that is listed in include/net/rstreason.h file, while the remainder of the payload is zero-padded. The reason code is generated by the existing mechanism called <eref target="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d5115a55ffb52">TCP reset reasons</eref>.</t>
          </dd>
          <dt><strong>Handling of Reset Types</strong>:</dt>
          <dd>
            <t>The implementation distinguishes between the two primary reset scenarios in <tt>tcp_send_active_reset()</tt> and <tt>tcp_v4_send_reset()</tt> respectively:
</t>
            <ul spacing="normal">
              <li>
                <t>For an <strong>Active Reset</strong>, initiated proactively by the local system, the payload is placed in the linear area of the socket buffer (<tt>sk_buff</tt>).</t>
              </li>
              <li>
                <t>For a <strong>Passive Reset</strong>, sent in response to an unexpected or invalid incoming packet, the payload is stored in the non-linear (paged) area of the <tt>sk_buff</tt>.</t>
              </li>
            </ul>
          </dd>
        </dl>
        <t>Complete patch is shown in <xref target="patch"/>.</t>
        <figure anchor="patch">
          <name>Complete Patch</name>
          <artwork><![CDATA[
diff --git a/include/net/tcp.h b/include/net/tcp.h
index b3815d104340..0b32257774c8 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -62,6 +62,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo);
 #define MAX_TCP_OPTION_SPACE 40
 #define TCP_MIN_SND_MSS                48
 #define TCP_MIN_GSO_SIZE       (TCP_MIN_SND_MSS - MAX_TCP_OPTION_SPACE)
+#define PAYLOAD_LEN 1000

 /*
  * Never offer a window over 32767 without using window scaling. Some
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 84d3d556ed80..49250e6bd6a1 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -741,6 +741,7 @@ static bool tcp_v4_ao_sign_reset(const struct sock *sk, struct sk_buff *skb,
 static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
                              enum sk_rst_reason reason)
 {
+       u32 len = sizeof(struct tcphdr) + REPLY_OPTIONS_LEN + PAYLOAD_LEN;
        const struct tcphdr *th = tcp_hdr(skb);
        struct {
                struct tcphdr th;
@@ -757,6 +758,7 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
 #endif
        u64 transmit_time = 0;
        struct sock *ctl_sk;
+       char buffer[len];
        struct net *net;
        u32 txhash = 0;

@@ -786,7 +788,8 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
        }

        memset(&arg, 0, sizeof(arg));
-       arg.iov[0].iov_base = (unsigned char *)&rep;
+       memset(&buffer, 0, len);
+       arg.iov[0].iov_base = (unsigned char *)buffer;
        arg.iov[0].iov_len  = sizeof(rep.th);

        net = sk ? sock_net(sk) : skb_dst_dev_net_rcu(skb);
@@ -911,6 +914,10 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb,
                ctl_sk->sk_mark = 0;
                ctl_sk->sk_priority = 0;
        }
+       memcpy(buffer, (char *)&rep, arg.iov[0].iov_len);
+       /* put rst reason into the first byte in payload */
+       buffer[arg.iov[0].iov_len] = reason;
+       arg.iov[0].iov_len += PAYLOAD_LEN;
        ip_send_unicast_reply(ctl_sk, sk,
                              skb, &TCP_SKB_CB(skb)->header.h4.opt,
                              ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index b616776e3354..c07dd009a0de 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -3628,12 +3628,14 @@ void tcp_send_fin(struct sock *sk)
 void tcp_send_active_reset(struct sock *sk, gfp_t priority,
                           enum sk_rst_reason reason)
 {
+       u32 len = MAX_TCP_HEADER + PAYLOAD_LEN;
+       char payload[PAYLOAD_LEN];
        struct sk_buff *skb;

        TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTRSTS);

        /* NOTE: No TCP options attached and we never retransmit this. */
-       skb = alloc_skb(MAX_TCP_HEADER, priority);
+       skb = alloc_skb(len, priority);
        if (!skb) {
                NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTFAILED);
                return;
@@ -3641,8 +3643,13 @@ void tcp_send_active_reset(struct sock *sk, gfp_t priority,

        /* Reserve space for headers and prepare control bits. */
        skb_reserve(skb, MAX_TCP_HEADER);
+       skb_put(skb, PAYLOAD_LEN);
        tcp_init_nondata_skb(skb, tcp_acceptable_seq(sk),
                             TCPHDR_ACK | TCPHDR_RST);
+       memset(payload, 0, PAYLOAD_LEN);
+       payload[0] = reason;
+       skb_store_bits(skb, 0, payload, PAYLOAD_LEN);
+       TCP_SKB_CB(skb)->end_seq += PAYLOAD_LEN;
        tcp_mstamp_refresh(tcp_sk(sk));
        /* Send it off. */
        if (tcp_transmit_skb(sk, skb, 0, priority))
]]></artwork>
        </figure>
      </section>
      <section anchor="experimental-validation">
        <name>Experimental Validation</name>
        <t>To ensure a thorough evaluation, a multi-layered experimental methodology was designed, progressing from basic functional checks to complex, real-world compatibility and stability tests. The whole implementation has been deployed in Tencent's production environment for almost six months.</t>
        <section anchor="functional-verification">
          <name>Functional Verification</name>
          <t>The basic functionality test is using iperf or iperf3 to construct a normal termination senario. The <tt>tcpdump</tt> tool with <tt>-X</tt> option effectively helps to show the <tt>[RST+]</tt> flag and the 1000-byte payload, confirming that the kernel correctly generated and transmitted the augmented RST packets.</t>
          <t>Two servers, designated as Client A and Server B. The test is conducted as following:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start the <tt>iperf3</tt> server on Server B (<tt>iperf3 -s</tt>).</t>
            </li>
            <li>
              <t>Initiate a connection from Client A to Server B (<tt>iperf3 -c [IP_of_B]</tt>).</t>
            </li>
            <li>
              <t>After the connection is established, one of the <tt>iperf3</tt> processes is terminated using the <tt>kill</tt> command, triggering the kernel to send an RST packet.</t>
            </li>
            <li>
              <t>Simultaneously, <tt>tcpdump</tt> is run on either host to capture the reset packet using the filter: <tt>'tcp[tcpflags] &amp; tcp-rst != 0' -X -nn -vv -S</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="compatibility-verification">
          <name>Compatibility Verification</name>
          <dl>
            <dt><strong>Hardwares and Kernels</strong>:</dt>
            <dd>
              <t>Tests were conducted on various Linux distributions (e.g., Ubuntu, CentOS) with different kernel versions. The physical hosts were equipped with a range of network interface cards (NICs), including Intel <tt>i40e</tt>, <tt>ixgbe</tt>, and Mellanox <tt>mlx5</tt>.</t>
            </dd>
            <dt><strong>Virtualization</strong>:</dt>
            <dd>
              <t>The mechanism was tested in a virtualized environment where the VM used a <tt>virtio_net</tt> driver and the host employed DPDK to redirect packets in the host.</t>
            </dd>
            <dt><strong>Middleboxes</strong>:</dt>
            <dd>
              <t>Tests were performed with Layer 4 (L4) and Layer 7 (L7) gateways placed between the client and server to verify correct packet parsing and forwarding.</t>
            </dd>
            <dt><strong>Wide Area Network (WAN)</strong>:</dt>
            <dd>
              <t>The setup was tested over long-haul international links to simulate complex conditions, including China-to-Singapore (RTT &gt; 30ms) and China-to-Germany (RTT &gt; 200ms).</t>
            </dd>
          </dl>
          <t>In conclusion, across all complex environment tests, the RST packets with payloads were successfully received by the peer. No instances of packets being dropped or mishandled by intermediate middleboxes, gateways, or diverse hardware and software configurations were observed.</t>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The "diagnostic payload" name is inspired by <xref section="5.5.2" sectionFormat="of" target="RFC7252"/>
  that was cited by Carsten Bormann in the tcpm mailing list.</t>
      <t>Thanks to Jon Shallow for the comments.  Thanks also to Li Jinghui
   for the discussion.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
yZh/bIlbhPho7f8BmVDcyUtdAAA=

-->

</rfc>
