<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-boucadair-tcpm-rst-diagnostic-payload-14" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="RST Diagnostic Payload">TCP RST Diagnostic Payload</title>
    <seriesInfo name="Internet-Draft" value="draft-boucadair-tcpm-rst-diagnostic-payload-14"/>
    <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="2026" month="February" 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>
      <t>This specification builds on provisions that are already present in RFC 9293 "Transmission Control Protocol (TCP)".
   As such, this document does not require any change to RFC 9293.</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 60?>

<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>
      <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>
      <t>SEG.LEN is defined in <xref section="3.3.1" sectionFormat="of" target="RFC9293"/>.</t>
    </section>
    <section anchor="payload">
      <name>RST Diagnostic Payload</name>
      <t>The format of the RST diagnostic payload is shown in <xref target="format"/>.</t>
      <figure anchor="format">
        <name>Structure of the RST Diagnostic Payload</name>
        <artwork><![CDATA[
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |           Length              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Reason Length          |          reason-code          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               :
   :                     reason-description                        :
   :                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              pen                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </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 0x33AA.</t>
      <t>The descriptions of other fields shown in <xref target="format"/> are as follows:</t>
      <dl>
        <dt>Length:</dt>
        <dd>
          <t>Indicates the total length, in octets, of the diagnostic payload that follows.</t>
        </dd>
        <dt>Reason Length:</dt>
        <dd>
          <t>Indicates the length, in octets, of the reason-description field.</t>
        </dd>
        <dt/>
        <dd>
          <t>If set to a non-null zero, this means that the reason code is not present.</t>
        </dd>
        <dt>reason-code:</dt>
        <dd>
          <t>This field, if present, takes a value from an available registry
such as the "TCP Failure Causes" registry (<xref target="causes"/>). Value 0 is
reserved and <bcp14>MUST NOT</bcp14> be used.</t>
        </dd>
        <dt>reason-description:</dt>
        <dd>
          <t>Includes a brief description of the reset reason
encoded as UTF-8 <xref target="RFC3629"/>.</t>
        </dd>
        <dt/>
        <dd>
          <t>This parameter <bcp14>MUST NOT</bcp14> be included
 if a reason code is supplied; Reason Length <bcp14>MUST</bcp14> be set to 0 for such a case.</t>
        </dd>
        <dt/>
        <dd>
          <t>This parameter is useful only for
 reset reasons that are not yet registered or for application-specific reset reasons.</t>
        </dd>
        <dt>pen:</dt>
        <dd>
          <t>Includes a Private Enterprise Number (PEN) <xref target="Private-Enterprise-Numbers"/>.</t>
        </dd>
        <dt/>
        <dd>
          <t>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. That is, if the "pen" parameter is present, then the reason code refers to the
  registry of the entity specified by the "pen" parameter.</t>
        </dd>
        <dt/>
        <dd>
          <t>The "pen" parameter <bcp14>MUST</bcp14> be omitted if a reason code refers to the IANA-maintained registry (<xref target="causes"/>).</t>
        </dd>
        <dt/>
        <dd>
          <t>The presence of this field is inferred from the values of Length and Reason Length fields.
Specifically, 'Length' <bcp14>MUST</bcp14> be set to "'Reason Length' + 4" if no reason-code is supplied
or "8" if a reason code is present.</t>
        </dd>
      </dl>
      <t>At least one of "reason-code" and "reason-description" parameters
   <bcp14>MUST</bcp14> be included in an RST diagnostic payload.</t>
      <t>If SEG.LEN &gt; Length + 4, the receiver processes the diagnostic payload
   but ignores the rest of the data in the segment payload. If SEG.LEN &lt; Length + 4,
   the segment is consided as malformed RST.</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>
    </section>
    <section anchor="examples">
      <name>Some Examples</name>
      <t><xref target="fig-1"/> 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-1">
        <name>Example of an RST Diagnostic Payload with Reason Code</name>
        <artwork><![CDATA[
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |              0x04             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              0x00             |              0x02             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </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-2"/>).</t>
      <figure anchor="fig-2">
        <name>Example of an RST Diagnostic Payload to Report Connection Timeout</name>
        <artwork><![CDATA[
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |              0x04             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              0x00             |              0x08             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t><xref target="fig-3"/> 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-3">
        <name>Example of an RST Diagnostic Payload to Report Vendor-Specific Reason Code</name>
        <artwork><![CDATA[
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             0x33AA            |              0x08             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              0x00             |              0x4DE            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             0x7D9                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t><xref target="fig-3"/> uses the Enterprise Number 32473 defined for documentation
   use <xref target="RFC5612"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <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">0</td>
              <td align="left">Reserved</td>
              <td align="left">[ThisDocument]</td>
            </tr>
            <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 the 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="ops-cons">
      <name>Operational Considerations</name>
      <section anchor="multiple-rsts">
        <name>Multiple RSTs</name>
        <t>Per <xref section="3.6" sectionFormat="of" target="RFC9293"/>, one or more RST segments can be sent
   to reset a connection.</t>
        <t>Sending more RST segments to reset a connection can be used
   to mitigate deployment contexts where some on-path devices may
   discard RSTs with payload data.</t>
        <t>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="manageability">
        <name>Manageability</name>
        <t>TCP server implementations should support the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>A parameter to control the activation of the RST diagnostic.</t>
          </li>
          <li>
            <t>A parameter to accept/discard RSTs with diagnostic payload other than reason cause (i.e., accept or deny RSTs with reason-description).</t>
          </li>
          <li>
            <t>A parameter to set a maximum length of acceptable reason-description, when enabled.</t>
          </li>
          <li>
            <t>A parameter to control whether "empty" RSTs are also sent together with RST with diagnostic payload.</t>
          </li>
          <li>
            <t>A rate-limit of RST with diagnostic payload.</t>
          </li>
          <li>
            <t>Counters to track sent/received RSTs with diagnostic payload.</t>
          </li>
          <li>
            <t>Counters to track received invalid RSTs with diagnostic payload.</t>
          </li>
        </ul>
      </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="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="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 369?>

<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 or 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 and Gleb Smirnoff for the comments. Thanks also to Li Jinghui
   for the discussion.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
g6mXiUNHvPVw3TRE/Yv/A7IfEliwYgAA

-->

</rfc>
