<?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.17 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-joras-scone-quic-protocol-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="QUIC for network property communication">A new QUIC version for network property communication</title>
    <seriesInfo name="Internet-Draft" value="draft-joras-scone-quic-protocol-00"/>
    <author fullname="Matt Joras">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>matt.joras@gmail.com</email>
      </address>
    </author>
    <author fullname="Marcus Ihlar">
      <organization>Ericsson</organization>
      <address>
        <email>marcus.ihlar@ericsson.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 30?>

<t>This document describes a new QUIC version. The proposed wire format and a set
of procedures can be used to communicate throughput advice between an endpoint
and an on-path network element. Throughput advice are sent in QUIC packets of
a new QUIC version. These QUIC packets are sent adjecent to established QUIC
version 1 and 2 connections, within the same UDP 4-tuple.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Secure Communication of Network Properties Working Group mailing list (sadcdn@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/sadcdn/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/mjoras/sconepro-quic-protocol"/>.</t>
    </note>
  </front>
  <middle>
    <?line 39?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes SCONE, a protocol for the purpose of communicating
throughput advice from network elements to endpoints. SCONE uses QUIC
long header packets to send throughput advice in parallel to established
end-to-end QUIC connections.</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="scone-packet-format">
      <name>SCONE Packet Format</name>
      <t>A SCONE packet consists of a QUIC long header optionally followed by
throughput advice fields:</t>
      <artwork><![CDATA[
SCONE Packet {
  Header Form (1) = 1,
  Fixed Bit (1) = 0,
  Throughput Advice Bit (1),
  Average Window Bit (1),
  Forward Bit (1)
  Reserved Bits (3),
  Version (32),
  Destination Connection ID Length (8),
  Destination Connection ID (8..160),
  Source Connection ID Length (8),
  Source Connection ID (8..160),
  [Throughput Advice (32)],
  [Average Window (32)]
}
]]></artwork>
      <dl>
        <dt>Header Form:</dt>
        <dd>
          <t>The most significant bit (0x80) of byte 0 (the first byte) is
set to 1 to indicate a QUIC long header.</t>
        </dd>
        <dt>Fixed Bit:</dt>
        <dd>
          <t>The next bit (0x40) of byte 0 is set to 1.</t>
        </dd>
        <dt>Throughput Advice Bit:</dt>
        <dd>
          <t>The next bit (0x20) indicates the precense of a throughput advice field
in this packet.</t>
        </dd>
        <dt>Average Window Bit:</dt>
        <dd>
          <t>The next bit (0x10) indicates the precense of average window field in
this packet.</t>
        </dd>
        <dt>Forward Bit:</dt>
        <dd>
          <t>The next bit (0x8) is set by clients and indicates whether the SCONE
packet should be forwarded or consumed by the first network element that
sees it.</t>
        </dd>
        <dt>Reserved Bits:</dt>
        <dd>
          <t>These bits are reserved for future use and <bcp14>SHOULD</bcp14> be set to 0.</t>
        </dd>
        <dt>Version:</dt>
        <dd>
          <t>This QUIC version uses the value 0x5509c337, which was chosen at random.</t>
        </dd>
        <dt>Destination Connection ID Length:</dt>
        <dd>
          <t>The byte following the version contains the length in bytes of the Destination
Connection ID field that follows it.  This length is encoded as an 8-bit
unsigned integer.</t>
        </dd>
        <dt>Destination Connection ID:</dt>
        <dd>
          <t>The Destination Connection ID field follows the Destination Connection ID
Length field, which indicates the length of this field. A Destination
Connection ID <bcp14>MUST</bcp14> be at least 8 bytes long.</t>
        </dd>
        <dt>Source Connection ID Length:</dt>
        <dd>
          <t>The byte following the Destination Connection ID contains the length in bytes
of the Source Connection ID field that follows it.  This length is encoded as
an 8-bit unsigned integer.</t>
        </dd>
        <dt>Source Connection ID:</dt>
        <dd>
          <t>The Source Connection ID field follows the Source Connection ID Length field,
which indicates the length of this field. A Source Connection ID <bcp14>MUST</bcp14> be at
least 8 bytes long.</t>
        </dd>
        <dt>Throughput Advice:</dt>
        <dd>
          <t>The throughput advice is a 32bit unsigned integer representing maximum
sustainable throughput through the network element. Expressed in Kb/s.</t>
        </dd>
        <dt>Average Window:</dt>
        <dd>
          <t>Indicates the duration over which the bitrate is enforced. Expressed in
milliseconds.</t>
        </dd>
      </dl>
    </section>
    <section anchor="packet-protection">
      <name>Packet Protection</name>
      <t>SCONE uses packet protection as defined for Initial packets in section 5 of
[QUIC-TLS].</t>
      <t>SCONE packets do not have packet numbers, therefore nonces are created
by combining the initial Destination Connection ID with the Source Connection
ID of the packet. A sender <bcp14>MUST</bcp14> generate a Source Connection ID with a high
probability of being unique for each packet.</t>
      <section anchor="public-salt">
        <name>Public Salt</name>
        <t>A publicly known salt is used to derive the secrets, specifically
scone_salt=0x6784619005cadc9bb961ec4d31b76892eb1b567e.</t>
      </section>
      <section anchor="hkdf-labels">
        <name>HKDF Labels</name>
        <t>The labels used in [QUIC-TLS] to derive packet protection keys (Section 5.1),
header protection keys (Section 5.4) change from "quic key" to "quicscone key",
from "quic iv" to "quicscone iv", from "quic hp" to "quicscone hp", to meet the
guidance for new versions in Section 9.6 of that document.</t>
      </section>
    </section>
    <section anchor="communication-overview">
      <name>Communication Overview</name>
      <t>The goal of SCONE is to provide a way to communicate throughput advice
between an on-path network device and a QUIC client endpoint, with the QUIC
client responsible for the initiation of that communication.</t>
      <t>Before establishing the communication, a QUIC client usually establishes a
QUIC version 1 or 2 end-to-end connection as per RFC 9000. Once this is done,
the client opportunistically sends a SCONE packet destined to the same
endpoint IP address and port. This packet can be parsed by any capable network
element on the path. All capable elements are able to respond to the initial packet in a
similar fashion, by creating their own SCONE packets and sending them to the
QUIC client matching the IP/port tuple being utilized by the end-to-end QUIC
connection.</t>
      <artwork><![CDATA[
+--------+      +---------+       +--------+
|  QUIC  |      | Network |       |  QUIC  |
| Client |      | Element |       | Server |
+---+----+      +----+----+       +---+----+
    |                |                |
    +----------- QUICv1/v2 ---------->|
    |                |                |
    |---- SCONE ---->|---- SCONE ---->|
    |<--- SCONE -----|                |
    |                |                |
]]></artwork>
      <t>A network element that receives a SCONE packet from a client with the forward
bit set to 1 <bcp14>MUST</bcp14> forward the packet. A network element that receives a SCONE
packet with the forward bit set to 0 <bcp14>MAY</bcp14> drop it.</t>
      <t>The QUIC client must be able to distinguish the end-to-end QUIC version 1 or 2
packets and SCONE packets. The QUIC server does not need to be SCONE-aware as
it will ignore the packet based on the (unknown) version number.</t>
      <section anchor="use-of-connection-ids">
        <name>Use of Connection IDs</name>
        <t>SCONE packets contain both Source and Destination Connection IDs. A
client who initiates SCONE communication sets both Source and Destination
Connection IDs to randomly generated values. A network device that 'responds'
to a SCONE packet sets the Destination Connection ID to the value of
the Source Connection ID of the packet it responds to. The network device sets
the Source Connection ID to a randomly generated value.</t>
      </section>
    </section>
    <section anchor="on-path-verification">
      <name>On Path Verification</name>
      <t>Communication using this new QUIC version <bcp14>MUST</bcp14> only be done with network elements that can be
verified to be on the same network path as an end to end QUIC flow. This is
because this communication is only meant to be done with network elements
that have the ability to, for example, modify and drop packets relevant to an
end-to-end QUIC flow. As QUIC packets for this new version are themselves carried in
separate UDP datagrams from the end to end QUIC flow, there is not an inherent
guarantee that they were generated by a network element.</t>
      <t>A capable network device <bcp14>MUST</bcp14> set the Destination Connection ID Length and
Destination Connection ID fields to the values received in the most recently
observed new version QUIC packet sent by a client.</t>
    </section>
    <section anchor="extensibility-to-provide-confidentiality-and-authenticity">
      <name>Extensibility To Provide Confidentiality and Authenticity</name>
      <t>The use of keys derived from a publicly known salt does not allow for
confidentiality or authenticity of the communication. The only manner of
authenticity defined in this document is verification of the on-path nature of
a network element. It may be desirable for this version of QUIC to be extended to allow for
confidentiality and authenticity.</t>
      <t>Confidentiality with this protocol could be achieved by further leveraging the
provisions of QUIC version 1 to do a TLS handshake between the QUIC
client and a capable network element. Authenticity could similarly
leverage the provisions of TLS. However, this comes with significant
complications. TLS achieves authenticity by using Public Key Infrastructure
(PKI), where each participant can choose to trust the certificate offered by
their peer. While this PKI exists today for Internet endpoints, there is no
such existing PKI for network elements. It is important to note that conducting
a TLS handshake would restrict the communication between the QUIC client and
exactly one on-path network element.</t>
      <t>Alternatively, a network element could advertise a set of hosts to which the
client can connect using QUIC version 1.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD - QUIC version.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <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>
    <?line 267?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
1IU6+25vrHKv9z5HbqrZiZLj/9MjaXpKJAAA

-->

</rfc>
