<?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-13" 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-13"/>
    <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="11"/>
    <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>
    </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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          magic-cookie         |           Length              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Reason Length          |          reason-code          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              pen                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               :
   :                     reason-description                        :
   :                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></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 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>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>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. The presence of
this field can be inferred from the values of Length and Reason Length fields.</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; Reason Length <bcp14>MUST</bcp14> be set to 0 for such a case. 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>
    </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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          magic-cookie         |              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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          magic-cookie         |              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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          magic-cookie         |              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 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="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 RST 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 set a maximum length of acceptable reason-description.</t>
          </li>
          <li>
            <t>A parameter to control whether "empty" RSTs are also sent together with 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 362?>

<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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

-->

</rfc>
