<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-eddy-tcpm-scone-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="SCONE for TCP">SCONE TCP Option</title>
    <seriesInfo name="Internet-Draft" value="draft-eddy-tcpm-scone-00"/>
    <author initials="W." surname="Eddy" fullname="Wesley Eddy">
      <organization>Meta</organization>
      <address>
        <email>wesleyeddy@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Joras" fullname="Matt Joras">
      <organization>Meta</organization>
      <address>
        <email>matt.joras@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Web and Internet Transport</area>
    <workgroup>SCONE</workgroup>
    <keyword>SCONE</keyword>
    <abstract>
      <?line 39?>

<t>This document describes a TCP option that permits network elements to provide
TCP endpoints advice on rate limits within the network.  The functionality for
TCP is analogous to SCONE packets within the QUIC protocol.</t>
    </abstract>
  </front>
  <middle>
    <?line 45?>

<section anchor="scone-background-and-introduction">
      <name>SCONE Background and Introduction</name>
      <t>Standard Communication with Network Elements (SCONE)
<xref target="I-D.ietf-scone-protocol"/> is an extension to QUIC <xref target="RFC9000"/> that provides
the capability for network elements to provide QUIC application endpoints with
guidance on potential permitted throughput, e.g. in order to make explicit the
presence of traffic limiting mechanisms within the network that can be
problematic for video streaming
<xref target="I-D.joras-scone-video-optimization-requirements"/> and other applications.</t>
      <t>In QUIC, SCONE is negotiated between endpoints using a transport parameter, and
the QUIC endpoints send SCONE packets periodically.  The SCONE packets are
visible to network elements that modify the throughput guidance within them.</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?>

</section>
    <section anchor="tcp-option-for-scone">
      <name>TCP Option for SCONE</name>
      <t>This document defines a TCP <xref target="RFC9293"/> option to provide analogous SCONE
functionality for TCP.  This could be viewed as similar to the way that TCP MSS
clamping works traditionally, with the TCP MSS options included by endpoints
being inspected and modified en-route by elements on the network path that can
provide more pertinent guidance.</t>
      <section anchor="option-format">
        <name>Option Format</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="112" width="424" viewBox="0 0 424 112" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,64 L 8,96" fill="none" stroke="black"/>
              <path d="M 104,64 L 104,96" fill="none" stroke="black"/>
              <path d="M 208,64 L 208,96" fill="none" stroke="black"/>
              <path d="M 416,64 L 416,96" fill="none" stroke="black"/>
              <path d="M 8,64 L 416,64" fill="none" stroke="black"/>
              <path d="M 8,96 L 416,96" fill="none" stroke="black"/>
              <g class="text">
                <text x="208" y="36">1</text>
                <text x="312" y="36">2</text>
                <text x="416" y="36">3</text>
                <text x="8" y="52">0</text>
                <text x="104" y="52">8</text>
                <text x="208" y="52">6</text>
                <text x="312" y="52">4</text>
                <text x="416" y="52">2</text>
                <text x="60" y="84">Kind=TBD</text>
                <text x="156" y="84">Length=4</text>
                <text x="276" y="84">Throughput</text>
                <text x="356" y="84">Guidance</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                         1            2            3
0           8            6            4            2
+-----------+------------+-------------------------+
|  Kind=TBD |  Length=4  |   Throughput Guidance   |
+-----------+------------+-------------------------+
]]></artwork>
        </artset>
        <t>The TCP option kind value (TBD) indicates the SCONE-TCP option.  The length
value of 4 is always used, along with a two byte throughput guidance.</t>
        <t>TODO: Explain the throughput guidance values used, which could be based on the QUIC values.</t>
        <t>TODO: note assumed interaction with other options, namely TCP-AO.</t>
      </section>
      <section anchor="use-during-handshake">
        <name>Use During Handshake</name>
        <t>Like other TCP options, SCONE-TCP is sent during connection establishment on
SYN and SYN-ACK segments, and then only used subsequently if it has been
successfully negotiated via use on the handshake.</t>
        <t>Since it is used on the initial SYN, the SCONE-TCP option can serve as a
"client hint" that informs the behavior of traffic limiting mechanisms within
the network.</t>
        <t>Since it is used on the SYN-ACK, the SCONE-TCP option can provide an immediate
signal to the endpoint application about the advised bitrate that can help to
inform the selection of media content to be requested subsequently within the
application.</t>
      </section>
      <section anchor="use-post-handshake">
        <name>Use Post-Handshake</name>
        <t>After TCP connection establishment with successful SCONE-TCP negotiation, the
option can be used at any time.  It does not need to be sent on every segment,
and providing an update may be the sole reason for sending a segment.  Since it
takes up valuable header space, and will be inspected and operated on by
network elements, it is not advisable to set on every segment that is
transmitted.  Instead, SCONE-TCP options may be included either periodically by
an endpoint (e.g. every 10 seconds as a probe before requesting new media
chunks) or generated by network elements on-demand when significant conditions
change.</t>
        <section anchor="endpoint-included">
          <name>Endpoint-Included</name>
          <t>When endpoints desire to send the SCONE-TCP option, they may either include it
within the header of segment carrying data (if there is user data to be sent),
or may include SCONE-TCP on any generated non-data-carrying ACK segment, when
no gaps exist in the received data.</t>
          <t>Pure ACKs (without data or SACK information) <bcp14>MUST NOT</bcp14> carry SCONE-TCP when
there are gaps in the received data, because the other TCP peer would
in-general be challenged to distinguish them from duplicate ACKs that could
towards fast retransmission, for instance.</t>
          <t>Endpoints receiving segments with the SCONE-TCP option <bcp14>MUST NOT</bcp14> treat any pure
ACKs that have SCONE-TCP as potential indicators of loss.</t>
          <t>ACKs that carry SACK information <bcp14>MAY</bcp14> include the SCONE-TCP option.  Endpoints
receiving these <bcp14>MAY</bcp14> use the SACK information to determine reordering, loss
inference, and retransmission behavior.</t>
        </section>
        <section anchor="network-initiated">
          <name>Network-Initiated</name>
          <t>An on-path network element aware of the live TCP flow <bcp14>MAY</bcp14> generate a pure ACK
matching the last observed sequence and acknowledgement values sent to the same
endpoint, that includes the SCONE-TCP option with new or updated throughput
advice, if changed from the last value that it has sent.</t>
          <t>In general, network devices are highly discouraged from generating TCP segments
to the endpoints of connections passing through them.  This can be viewed as a
type of attack, and could be prevented by use of methods like IPsec, TCP-AO, or
by other means between the end hosts.  However, in the cases of applications
that SCONE serves, these network devices are on-path and may drop, delay, or
otherwise manipulate the packet stream.</t>
        </section>
      </section>
    </section>
    <section anchor="api-for-tcp-applications">
      <name>API for TCP Applications</name>
      <t>TODO: describe informationally a possible socket option to request SCONE use.</t>
      <t>TODO: describe informationally a possible socket option to get SCONE info.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations for SCONE-TCP are similar to those for SCONE as
present in QUIC, however, some differences arise because TCP security lacks the
same cryptographic methods that are present in QUIC.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: TCP option kind value is TBD.</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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="I-D.joras-scone-video-optimization-requirements">
          <front>
            <title>SCONE Video Optimization Requirements</title>
            <author fullname="Matt Joras" initials="M." surname="Joras">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <author fullname="Anoop Tomar" initials="A." surname="Tomar">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <author fullname="Abhishek Tiwari" initials="A." surname="Tiwari">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <date day="12" month="May" year="2025"/>
            <abstract>
              <t>   These are the requirements for the "Video Optimization" use-case for
   the SCONE topic, which broadly speaking seeks to optimize video
   playback experience in mobile networks by cooperative communication
   between video content providers and the providers of network services
   to end users.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-joras-scone-video-optimization-requirements-01"/>
        </reference>
        <reference anchor="I-D.ietf-scone-protocol">
          <front>
            <title>Standard Communication with Network Elements (SCONE) Protocol</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Matt Joras" initials="M." surname="Joras">
              <organization>Meta</organization>
            </author>
            <author fullname="Marcus Ihlar" initials="L. M." surname="Ihlar">
              <organization>Ericsson</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   This document describes a protocol where on-path network elements can
   give endpoints their perspective on what the maximum achievable
   throughput might be for QUIC flows.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scone-protocol-02"/>
        </reference>
      </references>
    </references>
    <?line 184?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document represents collaboration and inputs from others, including:</t>
      <ul spacing="normal">
        <li>
          <t>Alan Frindell</t>
        </li>
        <li>
          <t>Bryan Tan</t>
        </li>
        <li>
          <t>Anoop Tomar</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
MiYpUNrFXAS4jLA3nNiKZr21VjRee8yBOubI1mAQ4Yln3HcsGgbzH2qynbg9
H04To8gtjrJKg6TXd/1KjMbpgobaOPoTNDWiqYrpHfb5zt++TWrD5WI81ZJV
apic5UM+P0S9R4dQjfBi0KT8Ikip3OkldcLEI8Ks1ttINZGv2/q9f4TDh1zp
Orme7e7OxZj8CxwdCDeqLZQO6M+IfyA+FWnapZRcxQ77QJ4mE2dnyR0h3q33
hn5Ml8Yl+GLVuoNJHB8ZmARGAofCPDrvpPgihzrwc+XcjrwFk5R8iLJH23Wq
By4uD6x8NBUAgfR0Ckam1EztAaGa4MD+Wa9kVIOnDJGorVypxuMkZ3yQyUyn
c202kEC7gdNVC4uwF+dacoYKCNtFMyCJ7K8mbP1IdoNwdG1kH+uL3tEkz2rv
UziFs7miqk6vhlbUaPzYUntEZZpFNzk3EM+SunfM38IwfVrUCz78yKWzFZpV
rD7Jj1jrWFawW0WHnqUCADhSxCzwnsNKOYzUC6mrn/akiBYTpl1PG+bJO/W6
h4QOsbEANYBUDKaghYz3IS+GA3maXqzzRJzSehoBRl5EmG/FQWK+7znymamn
90YM3uBTAE+buwDckUwY04m3osOB03wjgK1TNo2aBiJcd/VrH9C+WabkS/cm
yD0TGzoco5FgxrPyrfSWaku8sZwiaLGbOPQtS7tlgzviU0lJhBUwOV8nv2RJ
EbYZt3b0KW5SuWYzce6u7bbUxSqqSoOZTw2OSzsmKNFVhWk3BzDA98+VkRBU
xUCi2CrGdyoi3n9NadSJFamIVO1NjaNoVBRnIbIn3lok+k97kApN0vjqAJPK
ao0ajEwAxZ3qJSeECA8ys2OuuDUvMM+G/gsuYsqMILLx8U6hO5bF5jocypQI
u4bDpEIArpEH/ViLUztdQ8QCzqMbDRQoKkjBkmbPsyt0h2maVKfATuDDWAUq
DSr11zLJZLnGDOFhziu7pQYz7YpKjgGaXRnf+QiGM962MBH8NHH+PiA7JvJZ
D0W3cLaZ4otS7dgyNmuLKQpva9O0ZZyjdLrISbdWfP2yuDrrTrRyMTYoTfPd
HcY41biTgs3IK74K8palDgfp1C2TP0Dz4P8St9KdKNrFZl/rHGM+TuPHsBXz
puut5qkwvcz3Xg6XA7GYAci9k7oFXv0ndH8Tbw65/cTbuHUXSm8rDR4vU02h
qBDaXYOILE5GlMCcM1FQqsrc7ZpgV041OFf1FOPwk0W3dLKzZ4uLxV1HGc/7
j5fgPw6Y6TY5g36OdF9LYnZ9mNdtlcGB4vlkqUqvJx9vX5o4ncyha46yxIzu
0rRe09EO1cLHDGbC0XzHhQc5STf2clEiCV+iCIOZJZ5fuB0WblRN72prG3lj
K+XEvwF88yBNWxoAAA==

-->

</rfc>
