<?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.6.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-seemann-quic-stream-groups-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="QUIC Stream Groups">QUIC Stream Groups</title>
    <seriesInfo name="Internet-Draft" value="draft-seemann-quic-stream-groups-00"/>
    <author initials="M." surname="Seemann" fullname="Marten Seemann">
      <organization>Protocol Labs</organization>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>QUIC, flow control, stream groups</keyword>
    <abstract>
      <?line 29?>

<t>QUIC (<xref target="RFC9000"/>) defines a few different mechanism flow control mechanisms:
Stream flow control, connection-level flow control and flow control for the
number of (unidirectional / bidirectional) streams</t>
      <t>This allows a single application running on of a QUIC connection to apply backpressure.</t>
      <t>However, when multiple independent applications share a single underlying QUIC connection,
these mechanisms are not sufficient to prevent one resource-hungry application from consuming
all the resources (streams and / or connection-level flow control credit) available on the
connection, effectively starving the other application.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    QUIC Working Group mailing list (quic@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/marten-seemann/draft-seemann-quic-stream-groups"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a QUIC extension that introduces the concept of stream
groups. Unidirectional and bidirectional streams are added to different
stream groups. Additional limits for the number of streams and the flow
controlled data are applied to each group.</t>
      <t>This extension adds another layer of flow control for data sent on streams, by
adding a data limit per stream group. For the number of streams opened, this
extension replaces the mechanism described in (<xref target="RFC9000"/>).</t>
      <t>Logically, the flow control mechanisms of QUIC (<xref target="RFC9000"/>) can be regarded
as the degenerate case of this extension: A connection that only has a single
stream group.</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="using-stream-groups">
      <name>Using Stream Groups</name>
      <t>This extension doesn't prescribe any specific usage pattern for stream groups.
Applicationsrunning on top of a QUIC connection might check the peer assigns
streams to the correct stream groups, based on some application-defined logic.</t>
    </section>
    <section anchor="negotiating-this-extension">
      <name>Negotiating this Extension</name>
      <t>Endpoints advertise their support of the extension described in this document by
sending at least one of the following transport parameters (Section 7.4 of <xref target="RFC9000"/>).</t>
      <dl>
        <dt>initial_max_stream_groups (0x2a4c1f8e9b6d2c01):</dt>
        <dd>
          <t>The initial maximum stream group is an integer value that contains the
initial value for the maximum stream group.</t>
        </dd>
        <dt>initial_max_group_streams_bidi (0x2a4c1f8e9b6d2c02):</dt>
        <dd>
          <t>The initial maximum bidirectional streams group parameter is an integer value
that contains the initial maximum number of bidirectional streams the endpoint
that receives this transport parameter is permitted to initiate in a new stream
group. If this parameter is absent or zero, the peer cannot open bidirectional
streams until a MAX_GROUP_STREAMS frame is sent.</t>
        </dd>
        <dt>initial_max_group_streams_uni (0x2a4c1f8e9b6d2c03):</dt>
        <dd>
          <t>The initial maximum unidirectional streams group parameter is an integer value
that contains the initial maximum number of unidirectional streams the endpoint
that receives this transport parameter is permitted to initiate in a new stream
group. If this parameter is absent or zero, the peer cannot open unidirectional
streams until a MAX_GROUP_STREAMS frame is sent.</t>
        </dd>
        <dt>initial_max_group_data (0x2a4c1f8e9b6d2c04):</dt>
        <dd>
          <t>The initial maximum data parameter is an integer value that contains the
initial value for the maximum amount of data that can be sent on a newly
established stream group. This is equivalent to sending a MAX_GROUP_DATA
frame for the stream group immediately after establishment of the stream group.</t>
        </dd>
      </dl>
      <t>Any of these transport parameters enables the use of this extension. The missing
transport parameters take a default value of 0.</t>
      <t>An implementation that understands these transport parameters <bcp14>MUST</bcp14> treat the
receipt of an empty value or a value that is not a QUIC varint for any of
these parameters as a connection error of type TRANSPORT_PARAMETER_ERROR.</t>
      <t>When negotiating this extension, the initial_max_streams_bidi (0x08) and the
initial_max_streams_uni (0x09) transport parameters <bcp14>MUST NOT</bcp14> be used. The
receiver <bcp14>MUST</bcp14> treat receipt of any of these parameters as  a connection error
of type TRANSPORT_PARAMETER_ERROR.</t>
      <t>TODO: define which of these parameters need to be remembered for 0-RTT</t>
    </section>
    <section anchor="limiting-the-number-of-streams">
      <name>Limiting the Number of Streams</name>
      <t>QUIC (<xref target="RFC9000"/>) identifies a stream by one number, its stream ID. When
using this extension, a stream is identified by the tuple of the stream group
and the stream ID.</t>
      <section anchor="opening-a-new-stream-group">
        <name>Opening a New Stream Group</name>
        <t>A new stream group is initialized implicitly, by sending a STREAM,
RESET_STREAM or STREAMS_BLOCKED frame with a new Stream Group ID. Stream Group
IDs are integers, starting at 0 and are incremented by 1 for every new stream
group.</t>
        <t>Initially, the number of stream groups is limited by the value provided in the
initial_max_stream_groups transport parameter. Receiving a MAX_STREAM_GROUP
frame updates this value.</t>
        <t>Note that due to packet reordering, MAX_STREAM_GROUP frames might be received
out of order. Endpoints <bcp14>MUST</bcp14> therefore ignore MAX_STREAM_GROUP frames that
decrease the Maximum Stream Group value received so far.</t>
        <t>When a peer wishes to initialize a new stream group, but is unable to do so due
to the maximum stream group limit set by the peer, it <bcp14>SHOULD</bcp14> send a
STREAM_GROUP_BLOCKED frame.</t>
      </section>
      <section anchor="opening-new-streams">
        <name>Opening New Streams</name>
        <t>Every stream is associated with an existing stream group, or it opens a new
stream group (see previous section).</t>
        <t>When an endpoint wishes to open a new stream for an existing stream group, but
is unable to do so due the stream group limit, it <bcp14>SHOULD</bcp14> send a STREAMS_BLOCKED
frame.</t>
        <t>When receiving a frame that would cause a new stream to be opened, the receiver
<bcp14>MUST</bcp14> check if the sender was permitted to open this stream in the respective
stream group, and close the connection with a STREAM_LIMIT_ERROR if the peer
violated the limit.</t>
      </section>
    </section>
    <section anchor="flow-control">
      <name>Flow Control</name>
      <section anchor="sending-and-receiving-stream-data">
        <name>Sending and Receiving Stream Data</name>
        <t>In addition to the flow control mechanism described in (Section 4.1 of <xref target="RFC9000"/>),
senders need to respect the stream group flow control. In specific, when sending
data on the stream, this means the sender has to check:
1. The stream flow control window
2. The stream group flow control window
3. The connection flow control window</t>
        <t>When receiving a frame that advances the highest offset received on stream, the
receiver <bcp14>MUST</bcp14> check that none of the flow control windows was violated. In case
of a violating, it <bcp14>MUST</bcp14> close the connection using a FLOW_CONTROL_ERROR.</t>
      </section>
    </section>
    <section anchor="changes-to-existing-frames">
      <name>Changes to Existing Frames</name>
      <t>When this extension is negotiated, an additional Stream Group varint is added to a number
of QUIC frames:</t>
      <section anchor="stream-frame">
        <name>STREAM frame</name>
        <artwork><![CDATA[
STREAM Frame {
  Type (i) = 0x08..0x0f,
  Stream Group (i),
  Stream ID (i),
  [Offset (i)],
  [Length (i)],
  Stream Data (..),
}
]]></artwork>
      </section>
      <section anchor="resetstream-frame">
        <name>RESET_STREAM frame</name>
        <artwork><![CDATA[
RESET_STREAM Frame {
  Type (i) = 0x04,
  Stream Group (i),
  Stream ID (i),
  Application Protocol Error Code (i),
  Final Size (i),
}
]]></artwork>
      </section>
      <section anchor="streamsblocked-frame">
        <name>STREAMS_BLOCKED frame</name>
        <artwork><![CDATA[
STREAMS_BLOCKED Frame {
  Type (i) = 0x16..0x17,
  Stream Group (i),
  Maximum Streams (i),
}
]]></artwork>
      </section>
    </section>
    <section anchor="new-frames">
      <name>New Frames</name>
      <t>The following new frames are defined.</t>
      <t>TODO: define eligibility for 0-RTT</t>
      <section anchor="maxstreamgroup">
        <name>MAX_STREAM_GROUP</name>
        <t>A MAX_STREAM_GROUP frame informs the peer of the maximum stream group that
it can create new streams for.</t>
        <artwork><![CDATA[
MAX_STREAM_GROUP Frame {
  Type (i) = 0x1b37fd9a08c2e500,
  Maximum Stream Group (i),
}
]]></artwork>
      </section>
      <section anchor="maxgroupdata">
        <name>MAX_GROUP_DATA</name>
        <t>A MAX_GROUP_DATA frame is used in flow control to inform the peer of the
maximum amount of data that can be sent on the stream group as a whole.</t>
        <artwork><![CDATA[
MAX_GROUP_DATA Frame {
  Type (i) = 0x1b37fd9a08c2e501,
  Stream Group (i),
  Maximum Data (i),
}
]]></artwork>
      </section>
      <section anchor="groupdatablocked">
        <name>GROUP_DATA_BLOCKED</name>
        <t>A sender <bcp14>SHOULD</bcp14> send a GROUP_DATA_BLOCKED frame when it wishes to send data but
is unable to do so due to stream group-level flow control. GROUP_DATA_BLOCKED
frames can be used as input to tuning of flow control algorithms;
see (Section 4.2 of <xref target="RFC9000"/>).</t>
        <artwork><![CDATA[
GROUP_DATA_BLOCKED Frame {
  Type (i) = 0x1b37fd9a08c2e520,
  Stream Group (i),
  Maximum Data (i),
}
]]></artwork>
      </section>
      <section anchor="streamgroupblocked">
        <name>STREAM_GROUP_BLOCKED</name>
        <t>A sender <bcp14>SHOULD</bcp14> send a STREAM_GROUP_BLOCKED frame when it wishes to open a
new stream group, but is unable to do so because the maximum stream group limit
set by the peer.</t>
        <artwork><![CDATA[
GROUP_DATA_BLOCKED Frame {
  Type (i) = 0x1b37fd9a08c2e521,
  Stream Group (i),
}
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>We succeeded at encrypting all the things.
Isn't it wonderful to have a protocol that middleboxes can't mess with?</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative 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="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 301?>

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

-->

</rfc>
