<?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.34 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lcurley-moq-largest-group-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="moq-largest-group">MoQ Largest Group Extension</title>
    <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-largest-group-00"/>
    <author fullname="Luke Curley">
      <organization/>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="22"/>
    <area>wit</area>
    <workgroup>moq</workgroup>
    <abstract>
      <?line 24?>

<t>This document defines a Largest Group subscription filter type for MoQ Transport <xref target="moqt"/>.
A subscriber uses this filter to request delivery starting from the first object of the publisher's largest (most recent) group, ensuring a complete group is received.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Media Over QUIC Working Group mailing list (moq@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/kixelated/moq-drafts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 29?>

<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="introduction">
      <name>Introduction</name>
      <t><xref target="moqt"/> Section 5.1.2 defines four subscription filter types that control where delivery begins:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Next Group Start (0x1)</strong>: Starts at <tt>{Largest.Group + 1, 0}</tt>, skipping the remainder of the current group entirely.</t>
        </li>
        <li>
          <t><strong>Largest Object (0x2)</strong>: Despite the name, starts at <tt>{Largest.Group, Largest.Object + 1}</tt> — the object <em>after</em> the largest, not the largest object itself.</t>
        </li>
        <li>
          <t><strong>AbsoluteStart (0x3)</strong>: Starts at an explicit location specified by the subscriber.</t>
        </li>
        <li>
          <t><strong>AbsoluteRange (0x4)</strong>: Starts and ends at explicit locations specified by the subscriber.</t>
        </li>
      </ul>
      <t>There is no filter that starts from the <em>beginning</em> of the current group.
Next Group Start skips the current group entirely, potentially adding latency equal to the group duration.
Largest Object starts mid-group, delivering objects that may depend on earlier objects in the same group.</t>
      <t>Objects within a group are typically delta encoded (ex. video GOPs), so arbitrary objects in the middle of a group are undecodable without prior objects.
A subscriber using Next Group Start avoids this problem but must wait for the next group to begin, unnecessarily increasing join latency.</t>
      <section anchor="joining-fetch-workaround">
        <name>Joining Fetch Workaround</name>
        <t><xref target="moqt"/> does provide a workaround: a subscriber can issue a separate "joining" FETCH request alongside a SUBSCRIBE to retrieve the beginning of the current group.
However, this approach has several drawbacks:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Complexity</strong>: Libraries emulate Largest Group by coordinating a FETCH and SUBSCRIBE, splitting the group across multiple streams. This requires merging the results into a single coherent group and handling various edge cases, such as one of the two requests failing independently.</t>
          </li>
          <li>
            <t><strong>Head-of-line blocking</strong>: If the group contains multiple sub-groups, the FETCH delivers them sequentially over a single stream, introducing head-of-line blocking that negates the benefits of sub-group parallelism.</t>
          </li>
          <li>
            <t><strong>Priority</strong>: Everything should be delivered in dependency order to improve startup time and avoid potential flow control deadlocks. This requires prioritizing the FETCH higher than the SUBSCRIBE, which may be non-obvious or unsupported.</t>
          </li>
        </ul>
        <t>This extension avoids these issues by defining a Largest Group filter that starts delivery from the first object of the publisher's most recent group within the SUBSCRIBE itself, ensuring a complete group is delivered over the normal subscription path.
Additionally, the first group of a subscription behaves the same as any other group.</t>
      </section>
    </section>
    <section anchor="setup-negotiation">
      <name>Setup Negotiation</name>
      <t>The Largest Group extension is negotiated during the SETUP exchange as defined in <xref target="moqt"/> Section 9.4.</t>
      <t>Both endpoints indicate support by including the following Setup Option:</t>
      <artwork><![CDATA[
LARGEST_GROUP Setup Option {
  Option Key (vi64) = TBD1
  Option Value Length (vi64) = 0
}
]]></artwork>
      <t>If both endpoints include this option, the Largest Group filter is available for the session.
If a peer receives a SUBSCRIBE containing the Largest Group filter without having negotiated the extension, it <bcp14>MUST</bcp14> close the session with a PROTOCOL_VIOLATION.</t>
    </section>
    <section anchor="largest-group-filter">
      <name>Largest Group Filter</name>
      <t>This document defines a new subscription filter type for use in the Subscription Filter field of SUBSCRIBE messages as defined in <xref target="moqt"/> Section 5.1.2.</t>
      <section anchor="filter-type">
        <name>Filter Type</name>
        <artwork><![CDATA[
Subscription Filter {
  Filter Type (vi64) = 0x20
}
]]></artwork>
        <t>The Largest Group filter uses Filter Type value <tt>0x20</tt>.
No additional fields (Start Location or End Group Delta) are present in the Subscription Filter.</t>
      </section>
      <section anchor="semantics">
        <name>Semantics</name>
        <t>When the publisher receives a SUBSCRIBE with the Largest Group filter, it computes the start location as:</t>
        <artwork><![CDATA[
{Largest.Group, 0}
]]></artwork>
        <t>Where <tt>Largest.Group</tt> is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
Delivery begins from the first object (object 0) of that group.</t>
        <t>The subscription is open-ended: the publisher continues delivering subsequent groups until the subscription is cancelled or the session ends.
This is consistent with the behavior of Next Group Start and Largest Object filters.</t>
        <t>The largest group is delivered using normal SUBSCRIBE semantics.
If earlier objects in the group have been evicted from the cache, the publisher <bcp14>MAY</bcp14> attempt to repopulate the cache or simply drop the group as it would for any other subscription.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This extension introduces no new security considerations beyond those described in <xref target="moqt"/>.
The publisher already tracks group state; this filter uses existing state to compute the start location.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests the following registrations:</t>
      <section anchor="moq-setup-option-types">
        <name>MoQ Setup Option Types</name>
        <t>This document registers the following entry in the "MoQ Setup Option Types" registry established by <xref target="moqt"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">LARGEST_GROUP</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="moq-subscription-filter-types">
        <name>MoQ Subscription Filter Types</name>
        <t>This document registers the following entry in the "MoQ Subscription Filter Types" registry established by <xref target="moqt"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x20</td>
              <td align="left">LARGEST_GROUP</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="moqt">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google</organization>
          </author>
          <author fullname="Alan Frindell" initials="A." surname="Frindell">
            <organization>Meta</organization>
          </author>
          <date day="2" month="March" year="2026"/>
          <abstract>
            <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-17"/>
      </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 153?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document was drafted with the assistance of Claude, an AI assistant by Anthropic.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
