<?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.1 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-17" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-17"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Frindell" fullname="Alan Frindell" role="editor">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 59?>

<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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/moq-transport/draft-ietf-moq-transport.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-transport/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/moq-transport"/>.</t>
    </note>
  </front>
  <middle>
    <?line 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a protocol that is optimized
for the QUIC protocol <xref target="QUIC"/>, either directly or via WebTransport
<xref target="WebTransport"/>, for the dissemination of media. MOQT utilizes a
publish/subscribe workflow in which producers of media publish data in
response to subscription requests from a multiplicity of endpoints. MOQT
supports wide range of use-cases with different resiliency and latency
(live, interactive) needs without compromising the scalability and cost
effectiveness associated with content delivery networks.</t>
      <t>MOQT is a generic protocol designed to work in concert with multiple
MoQ Streaming Formats. These MoQ Streaming Formats define how content is
encoded, packaged, and mapped to MOQT objects, along with policies for
discovery and subscription.</t>
      <ul spacing="normal">
        <li>
          <t><xref target="model"/> describes the data model employed by MOQT.</t>
        </li>
        <li>
          <t><xref target="session"/> covers aspects of setting up an MOQT session.</t>
        </li>
        <li>
          <t><xref target="priorities"/> covers mechanisms for prioritizing subscriptions.</t>
        </li>
        <li>
          <t><xref target="relays-moq"/> covers behavior at the relay entities.</t>
        </li>
        <li>
          <t><xref target="message"/> covers how control messages are encoded on the wire.</t>
        </li>
        <li>
          <t><xref target="data-streams"/> covers how data messages are encoded on the wire.</t>
        </li>
      </ul>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>The development of MOQT is driven by goals in a number of areas -
specifically latency, the robust feature set of QUIC and relay
support.</t>
        <section anchor="latency">
          <name>Latency</name>
          <t>Latency is necessary to correct for variable network throughput. Ideally live
content is consumed at the same bitrate it is produced. End-to-end latency would
be fixed and only subject to encoding and transmission delays. Unfortunately,
networks have variable throughput, primarily due to congestion. Attempting to
deliver content encoded at a higher bitrate than the network can cause
queuing along the path from producer to consumer. The speed at which a protocol
can detect and respond to congestion determines the overall latency. TCP-based
protocols are simple but are slow to detect congestion and suffer from
head-of-line blocking. Protocols utilizing UDP directly can avoid queuing, but
the application is then responsible for the complexity of fragmentation,
congestion control, retransmissions, receiver feedback, reassembly, and
more. One goal of MOQT is to achieve the best of both these worlds: leverage the
features of QUIC to create a simple yet flexible low latency protocol that can
rapidly detect and respond to congestion.</t>
        </section>
        <section anchor="leveraging-quic">
          <name>Leveraging QUIC</name>
          <t>The parallel nature of QUIC streams can provide improvements in the face
of loss. A goal of MOQT is to design a streaming protocol to leverage
the transmission benefits afforded by parallel QUIC streams as well as
exercising options for flexible loss recovery.</t>
        </section>
        <section anchor="convergence">
          <name>Convergence</name>
          <t>Some live media architectures today have separate protocols for ingest and
distribution, for example RTMP and HTTP based HLS or DASH. Switching protocols
necessitates intermediary origins which re-package the
media content. While specialization can have its benefits, there are efficiency
gains to be had in not having to re-package content. A goal of MOQT is to
develop a single protocol which can be used for transmission from contribution
to distribution. A related goal is the ability to support existing encoding and
packaging schemas, both for backwards compatibility and for interoperability
with the established content preparation ecosystem.</t>
        </section>
        <section anchor="relays">
          <name>Relays</name>
          <t>An integral feature of a protocol being successful is its ability to
deliver media at scale. Greatest scale is achieved when third-party
networks, independent of both the publisher and subscriber, can be
leveraged to relay the content. These relays must cache content for
distribution efficiency while simultaneously routing content and
deterministically responding to congestion in a multi-tenant network. A
goal of MOQT is to treat relays as first-class citizens of the protocol
and ensure that objects are structured such that information necessary
for distribution is available to relays while the media content itself
remains opaque and private.</t>
        </section>
      </section>
      <section anchor="terms-and-definitions">
        <name>Terms 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>The following terms are used with the first letter capitalized.</t>
        <dl>
          <dt>Application:</dt>
          <dd>
            <t>The entity using MOQT to transmit and receive data.</t>
          </dd>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>A Client or Server.</t>
          </dd>
          <dt>Peer:</dt>
          <dd>
            <t>The other endpoint than the one being described.</t>
          </dd>
          <dt>Publisher:</dt>
          <dd>
            <t>An endpoint that handles subscriptions by sending requested Objects from the requested track.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>An endpoint that subscribes to and receives tracks.</t>
          </dd>
          <dt>Original Publisher:</dt>
          <dd>
            <t>The initial publisher of a given track.</t>
          </dd>
          <dt>End Subscriber:</dt>
          <dd>
            <t>A subscriber that initiates a subscription and does not send the data on to other subscribers.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>An entity that is both a Publisher and a Subscriber, is not the Original
Publisher or End Subscriber, and conforms to all requirements in <xref target="relays-moq"/>.</t>
          </dd>
          <dt>Upstream:</dt>
          <dd>
            <t>In the direction of the Original Publisher.</t>
          </dd>
          <dt>Downstream:</dt>
          <dd>
            <t>In the direction of the End Subscriber(s).</t>
          </dd>
          <dt>Transport Session:</dt>
          <dd>
            <t>A raw QUIC connection or a WebTransport session.</t>
          </dd>
          <dt>Stream:</dt>
          <dd>
            <t>A bidirectional or unidirectional bytestream provided by the
QUIC transport or WebTransport.</t>
          </dd>
          <dt>Congestion:</dt>
          <dd>
            <t>Packet loss and queuing caused by degraded or overloaded networks.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>A temporal sequence of objects. A group represents a join point in a
track. See (<xref target="model-group"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence of
bytes. Objects form the base element in the MOQT data model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>A track is a collection of groups. See (<xref target="model-track"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-management-terms">
        <name>Stream Management Terms</name>
        <t>This document uses stream management terms described in <xref section="1.3" sectionFormat="comma" target="RFC9000"/> including STOP_SENDING, RESET_STREAM and FIN.</t>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
        <section anchor="variable-length-integers">
          <name>Variable-Length Integers</name>
          <t>MoQT requires a variable-length integer encoding with the following properties:</t>
          <ol spacing="normal" type="1"><li>
              <t>The encoded length can be determined from the first encoded byte.</t>
            </li>
            <li>
              <t>The range of 1 byte values is as large as possible.</t>
            </li>
            <li>
              <t>All 64 bit numbers can be encoded.</t>
            </li>
          </ol>
          <t>The variable-length integer encoding uses the number of leading 1 bits of the
first byte to indicate the length of the encoding in bytes. The remaining bits
after the first 0 and subsequent bytes, if any, represent the integer value,
encoded in network byte order.</t>
          <t>Integers are encoded in 1, 2, 3, 4, 5, 6, 8, or 9 bytes and can encode up to 64
bit unsigned integers. The following table summarizes the encoding properties.</t>
          <table>
            <name>Summary of Integer Encodings</name>
            <thead>
              <tr>
                <th align="left">Leading Bits</th>
                <th align="left">Length (bytes)</th>
                <th align="left">Usable Bits</th>
                <th align="left">Range</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">1</td>
                <td align="left">7</td>
                <td align="left">0-127</td>
              </tr>
              <tr>
                <td align="left">10</td>
                <td align="left">2</td>
                <td align="left">14</td>
                <td align="left">0-16383</td>
              </tr>
              <tr>
                <td align="left">110</td>
                <td align="left">3</td>
                <td align="left">21</td>
                <td align="left">0-2097151</td>
              </tr>
              <tr>
                <td align="left">1110</td>
                <td align="left">4</td>
                <td align="left">28</td>
                <td align="left">0-268435455</td>
              </tr>
              <tr>
                <td align="left">11110</td>
                <td align="left">5</td>
                <td align="left">35</td>
                <td align="left">0-34359738367</td>
              </tr>
              <tr>
                <td align="left">111110</td>
                <td align="left">6</td>
                <td align="left">42</td>
                <td align="left">0-4398046511103</td>
              </tr>
              <tr>
                <td align="left">11111110</td>
                <td align="left">8</td>
                <td align="left">56</td>
                <td align="left">0-72057594037927935</td>
              </tr>
              <tr>
                <td align="left">11111111</td>
                <td align="left">9</td>
                <td align="left">64</td>
                <td align="left">0-18446744073709551615</td>
              </tr>
            </tbody>
          </table>
          <t>The following table contains some example encodings:</t>
          <table>
            <name>Example Integer Encodings</name>
            <thead>
              <tr>
                <th align="left">Byte Sequence</th>
                <th align="left">Decimal Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x25</td>
                <td align="left">37</td>
              </tr>
              <tr>
                <td align="left">0x8025</td>
                <td align="left">37</td>
              </tr>
              <tr>
                <td align="left">0xbbbd</td>
                <td align="left">15,293</td>
              </tr>
              <tr>
                <td align="left">0xdd7f3e7d</td>
                <td align="left">494,878,333</td>
              </tr>
              <tr>
                <td align="left">0xfaa1a0e403d8</td>
                <td align="left">2,893,212,287,960</td>
              </tr>
              <tr>
                <td align="left">0xfefa318fa8e3ca11</td>
                <td align="left">70,423,237,261,249,041</td>
              </tr>
              <tr>
                <td align="left">0xffffffffffffffffff</td>
                <td align="left">18,446,744,073,709,551,615</td>
              </tr>
            </tbody>
          </table>
          <t>11111100 is an invalid code point.  An endpoint that receives this value <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>To reduce unnecessary use of bandwidth, variable length integers <bcp14>SHOULD</bcp14> be
encoded using the least number of bytes possible to represent the required
value.</t>
          <dl>
            <dt>x (vi64):</dt>
            <dd>
              <t>Indicates that x holds an integer value using the variable-length
encoding as described above.</t>
            </dd>
          </dl>
        </section>
        <section anchor="location-structure">
          <name>Location Structure</name>
          <t>Location identifies a particular Object in a Group within a Track.</t>
          <figure anchor="moq-location">
            <name>Location structure</name>
            <artwork><![CDATA[
Location {
  Group (vi64),
  Object (vi64)
}
]]></artwork>
          </figure>
          <t>In this document, a Location can be expressed in the form of {GroupID,
ObjectID}, where GroupID and ObjectID indicate the Group ID and Object ID of the
Location, respectively.  The constituent parts of any Location A can be referred
to using A.Group or A.Object.</t>
          <t>Location A &lt; Location B if:</t>
          <t><tt>A.Group &lt; B.Group || (A.Group == B.Group &amp;&amp; A.Object &lt; B.Object)</tt></t>
        </section>
        <section anchor="key-value-pair-structure">
          <name>Key-Value-Pair Structure</name>
          <t>Key-Value-Pair is a flexible structure designed to carry key/value
pairs in which the key is a variable length integer and the value
is either a variable length integer or a byte field of arbitrary
length.</t>
          <t>Key-Value-Pairs encode a Type value as a delta from the previous Type value,
or from 0 if there is no previous Type value. This is efficient on the wire
and makes it easy to ensure there is only one instance of a type when needed.
The previous Type value plus the Delta Type <bcp14>MUST NOT</bcp14> be greater than 2^64 - 1.
If a Delta Type is received that would be too large, the Session <bcp14>MUST</bcp14> be closed
with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>Key-Value-Pair is used in both the data plane and control plane, but
is optimized for use in the data plane.</t>
          <figure anchor="moq-key-value-pair">
            <name>MOQT Key-Value-Pair</name>
            <artwork><![CDATA[
Key-Value-Pair {
  Delta Type (vi64),
  [Length (vi64),]
  Value (..)
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Delta Type: an unsigned integer, encoded as a varint, identifying the Type
as a delta encoded value from the previous Type, if any. The Type identifies
the type of value and also the subsequent serialization.</t>
            </li>
            <li>
              <t>Length: Only present when Type is odd. Specifies the length of the Value field
in bytes. The maximum length of a value is 2^16-1 bytes.  If an endpoint
receives a length larger than the maximum, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
            <li>
              <t>Value: A single varint encoded value when Type is even, otherwise a
sequence of Length bytes.</t>
            </li>
          </ul>
          <t>If a receiver understands a Type, and the following Value or Length/Value does
not match the serialization defined by that Type, the receiver <bcp14>MUST</bcp14> close
the session with error code <tt>KEY_VALUE_FORMATTING_ERROR</tt>.</t>
        </section>
        <section anchor="reason-phrase">
          <name>Reason Phrase Structure</name>
          <t>Reason Phrase provides a way for the sender to encode additional diagnostic
information about the error condition, where appropriate.</t>
          <artwork><![CDATA[
Reason Phrase {
  Reason Phrase Length (vi64),
  Reason Phrase Value (..)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Reason Phrase Length: A variable-length integer specifying the length of the
reason phrase in bytes. The reason phrase length has a maximum value of
1024 bytes. If an endpoint receives a length exceeding the maximum, it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt></t>
            </li>
            <li>
              <t>Reason Phrase Value: Additional diagnostic information about the error condition.
The reason phrase value is encoded as UTF-8 string and does not carry information,
such as language tags, that would aid comprehension by any entity other than
the one that created the text.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="representing-namespace-and-track-names">
        <name>Representing Namespace and Track Names</name>
        <t>There is often a need to render namespace tuples and track names for
purposes such as logging, representing track filenames, or use in
certain authorization verification schemes. The namespace and track name
are binary, so they need to be converted to a safe form.</t>
        <t>The following format is <bcp14>RECOMMENDED</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Each of the namespace tuples are rendered in order with a hyphen (-)
between them followed by the track name with a double hyphen (--)
between the last namespace and track name.</t>
          </li>
          <li>
            <t>Bytes in the range a-z, A-Z, 0-9 as well as _ (0x5f) are output as is,
while all other bytes are encoded as a period (.) symbol followed by
exactly two lower case hex digits.</t>
          </li>
        </ul>
        <t>The goal of this format is to have a format that is both filename and
URL safe. It allows many common names to be rendered in an easily human
readable form while still supporting binary values.</t>
        <section anchor="parsing-serialized-names">
          <name>Parsing Serialized Names</name>
          <t>When parsing a serialized namespace or track name back to its binary form,
implementations <bcp14>MUST</bcp14> apply the following rules to ensure a canonical encoding:</t>
          <ul spacing="normal">
            <li>
              <t>The hex digits following a period (.) <bcp14>MUST</bcp14> be lowercase (a-f). Uppercase
hex digits (A-F) are invalid and <bcp14>MUST</bcp14> cause parsing to fail.</t>
            </li>
            <li>
              <t>Bytes that can be represented literally (a-z, A-Z, 0-9, _) <bcp14>MUST NOT</bcp14> appear
in their hex-encoded form. For example, <tt>.61</tt> is invalid because <tt>a</tt> must
be represented as the literal character <tt>a</tt>. A parser <bcp14>MUST</bcp14> reject such
redundant encodings.</t>
            </li>
            <li>
              <t>A period (.) <bcp14>MUST</bcp14> be followed by exactly two hex digits. A trailing period
or a period followed by fewer than two hex digits is invalid.</t>
            </li>
          </ul>
          <t>These rules ensure that the encoding is bijective: every binary value has
exactly one valid serialized representation, and every valid serialized
string maps to exactly one binary value. This property simplifies comparison
of serialized names without requiring full deserialization.</t>
          <t>Implementations that receive an invalid serialized name <bcp14>SHOULD</bcp14> treat it as
an error. The specific error handling behavior is application-defined.</t>
          <t>Example:</t>
          <artwork><![CDATA[
example.2enet-team2-project_x--report
  Namespace tuples: (example.net, team2, project_x)
  Track name: report
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="model">
      <name>Object Data Model</name>
      <t>MOQT has a hierarchical data model, comprised of tracks which contain
groups, and groups that contain objects. Inside of a group, the objects
can be organized into subgroups.</t>
      <t>To give an example of how an application might use this data model,
consider an application sending high and low resolution video using a
codec with temporal scalability. Each resolution is sent as a separate
track to allow the subscriber to pick the appropriate resolution given
the display environment and available bandwidth. Each independently
coded sequence of pictures in a resolution is sent as a group as the
first picture in the sequence can be used as a random access point.
This allows the client to join at the logical points where decoding
of the media can start without needing information before the join
points. The temporal layers are sent as separate subgroups to allow
the priority mechanism to favor lower temporal layers when there is
not enough bandwidth to send all temporal layers. Each frame of video
is sent as a single object.</t>
      <section anchor="model-object">
        <name>Objects</name>
        <t>The basic data element of MOQT is an object.  An object is an
addressable unit whose payload is a sequence of bytes.  All objects
belong to a group, indicating ordering and potential
dependencies (see <xref target="model-group"/>).  An object is uniquely identified by
its track namespace, track name, group ID, and object ID, and must be an
identical sequence of bytes regardless of how or where it is retrieved.
An Object can become unavailable, but its contents <bcp14>MUST NOT</bcp14> change over
time.</t>
        <t>Objects are comprised of two parts: metadata and a payload.  The metadata is
never encrypted and is always visible to relays (see <xref target="relays-moq"/>). The
payload portion may be encrypted, in which case it is only visible to the
Original Publisher and End Subscribers. The Original Publisher is solely
responsible for the content of the object payload. This includes the
underlying encoding, compression, any end-to-end encryption, or
authentication. A relay <bcp14>MUST NOT</bcp14> combine, split, or otherwise modify object
payloads.</t>
        <t>Objects within a Group are in ascending order by Object ID.</t>
        <t>From the perspective of a subscriber or a cache, an Object can be in three
possible states:</t>
        <ol spacing="normal" type="1"><li>
            <t>The Object is known to not exist. This state is permanent. MOQT has multiple
ways to communicate that a certain range of objects does not exist,
including the Object Status field, and the use of gaps in FETCH responses.</t>
          </li>
          <li>
            <t>The Object is known to exist. From this state, it can transition to not
existing, but not vice versa.</t>
          </li>
          <li>
            <t>The state of the Object is unknown, either because it has not been yet
received, or it has not been produced yet.</t>
          </li>
        </ol>
        <t>Whenever the publisher communicates that certain objects do not exist, this
fact is expressed as a contiguous range of non-existent objects and
by including Properties indicating the group/object gaps; MOQT
implementers should take that into account when selecting appropriate data
structures.</t>
      </section>
      <section anchor="model-subgroup">
        <name>Subgroups</name>
        <t>A subgroup is a sequence of one or more objects from the same group
(<xref target="model-group"/>) in ascending order by Object ID. Objects in a subgroup
have a dependency and priority relationship consistent with sharing a
stream and are sent on a single stream whenever possible. A Group is delivered
using at least as many streams as there are Subgroups,
typically with a one-to-one mapping between Subgroups and streams.</t>
        <t>When an Object's forwarding preference (see <xref target="object-properties"/>) is
"Datagram", it is not sent in Subgroups, does not belong to a Subgroup in any
way, and the description in the remainder of this section does not apply.</t>
        <t>Streams offer in-order reliable delivery and the ability to cancel sending and
retransmission of data. Furthermore, many QUIC and WebTransport implementations
offer the ability to control the relative scheduling priority of pending stream
data.</t>
        <t>Every Object within a Group belongs to exactly one Subgroup or Datagram.</t>
        <t>When Objects are sent in a subscription (see <xref target="subscriptions"/>),  Objects
from two subgroups <bcp14>MUST NOT</bcp14> be sent on the same stream, and Objects from the
same Subgroup <bcp14>MUST NOT</bcp14> be sent on different streams, unless one of the streams
was reset prematurely, or upstream conditions have forced objects from a Subgroup
to be sent out of Object ID order.</t>
        <t>Original publishers assign each Subgroup a Subgroup ID, and do so as they see fit.  The
scope of a Subgroup ID is a Group, so Subgroups from different Groups <bcp14>MAY</bcp14> share a Subgroup
ID without implying any relationship between them. In general, publishers assign
objects to subgroups in order to leverage the features of streams as described
above.</t>
        <t>In general, if Object B is dependent on Object A, then delivery of B can follow
A, i.e. A and B can be usefully delivered over a single stream.  If an Object is
dependent on all previous Objects in a Subgroup, it likely fits best in that
Subgroup.  If an Object is not dependent on any of the Objects in a Subgroup, it
likely belongs in a different Subgroup.</t>
        <t>When assigning Objects to different Subgroups, the Original Publisher makes a
reasonable tradeoff between having an optimal mapping of Object relationships in
a Group and minimizing the number of streams used.</t>
      </section>
      <section anchor="model-group">
        <name>Groups</name>
        <t>A group is a collection of Objects and is a sub-unit of a Track
(<xref target="model-track"/>).  Groups <bcp14>SHOULD</bcp14> be independently useful, so Objects within a
Group <bcp14>SHOULD NOT</bcp14> depend on Objects in other Groups. A Group provides a join
point for subscriptions, so a subscriber that does not want to receive the
entire Track can opt to receive only Groups starting from a given Group ID.
Groups can contain any number of Objects.</t>
        <section anchor="group-ids">
          <name>Group IDs</name>
          <t>Within a track, the original publisher <bcp14>SHOULD</bcp14> publish Group IDs which increase
with time (where "time" is defined according to the internal clock of the media
being sent). In some cases, Groups will be produced in increasing order, but sent
to subscribers in a different order, for example when the subscription's Group
Order is Descending.  Due to network reordering and the partial reliability
features of MOQT, Groups can always be received out of order.</t>
          <t>As a result, subscribers cannot infer the existence of a Group until an object in
the Group is received. This can create gaps in a cache that can be filled
by doing a Fetch upstream, if necessary.</t>
          <t>Applications that cannot produce Group IDs that increase with time are limited
to the subset of MOQT that does not compare group IDs. Subscribers to these
Tracks <bcp14>SHOULD NOT</bcp14> use range filters which span multiple Groups in FETCH or
SUBSCRIBE.  SUBSCRIBE and FETCH delivery use Group Order, so they could have
an unexpected delivery order if Group IDs do not increase with time.</t>
          <t>The amount of time elapsed between publishing an Object in Group ID N and in a
Group ID &gt; N, or even which will be published first, is not defined by this
specification and is defined by the applications using MOQT.</t>
        </section>
      </section>
      <section anchor="model-track">
        <name>Track</name>
        <t>A track is a sequence of groups (<xref target="model-group"/>). It is the entity
against which a subscriber issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the publisher while the track is
active.</t>
        <section anchor="track-name">
          <name>Track Naming</name>
          <t>In MOQT, every track is identified by a Full Track Name, consisting of a Track
Namespace and a Track Name.</t>
          <t>Track Namespace is an ordered set of between 0 and 32 Track Namespace Fields,
encoded as follows:</t>
          <artwork><![CDATA[
Track Namespace {
  Number of Track Namespace Fields (vi64),
  Track Namespace Field (..) ...
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Number of Track Namespace Fields: A variable-length integer specifying
the number of Track Namespace Fields in the Track Namespace.</t>
            </li>
          </ul>
          <t>Each Track Namespace Field is encoded as follows:</t>
          <artwork><![CDATA[
Track Namespace Field {
  Track Namespace Field Length (vi64),
  Track Namespace Field Value (..)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Track Namespace Field Length: A variable-length integer specifying the length
of the Track Namespace Field in bytes.</t>
            </li>
            <li>
              <t>Track Namespace Field Value: A sequence of bytes that forms a Track Namespace
Field.</t>
            </li>
          </ul>
          <t>Each Track Namespace Field Value <bcp14>MUST</bcp14> contain at least one byte. If an endpoint
receives a Track Namespace Field with a Track Namespace Field Length of 0, it
<bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace. If an endpoint receives a Track Namespace
consisting of greater than 32 Track Namespace Fields, it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>Track Name is a sequence of bytes, possibly empty, that identifies an individual
track within the namespace.</t>
          <t>The maximum total length of a Full Track Name is 4,096 bytes. The length of a
Full Track Name is computed as the sum of the Track Namespace Field Length
fields and the Track Name Length field. The length of a Track Namespace is the
sum of the Track Namespace Field Length fields. If an endpoint receives a Track
Namespace or a Full Track Name exceeding 4,096 bytes, it <bcp14>MUST</bcp14> close the session
with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>In this specification, both the Track Namespace Fields and the Track Name
are not constrained to a specific encoding. They carry a sequence of bytes and
comparison between two Track Namespace Fields or Track Names is done by
exact comparison of the bytes. Specifications that use MOQT may constrain the
information in these fields, for example by restricting them to UTF-8. Any such
specification needs to specify the canonicalization into the bytes in the Track
Namespace Fields or Track Name such that exact comparison works.</t>
        </section>
        <section anchor="malformed-tracks">
          <name>Malformed Tracks</name>
          <t>There are multiple ways a publisher can transmit a Track that does not conform
to MOQT constraints. Such a Track is considered malformed.  Some example
conditions that constitute a malformed track when detected by a receiver
include:</t>
          <ol spacing="normal" type="1"><li>
              <t>An Object is received in a FETCH response with the same Group ID as the
previous Object, but whose Object ID is not strictly larger than the previous
object.</t>
            </li>
            <li>
              <t>In a FETCH response, an Object with a particular Subgroup ID is received, but its
 Publisher Priority is different from that of the previous Object with the same
 Subgroup ID.</t>
            </li>
            <li>
              <t>An Object is received in an Ascending FETCH response whose Group ID is smaller
than the previous Object in the response.</t>
            </li>
            <li>
              <t>An Object is received in a Descending FETCH response whose Group ID is larger
than the previous Object in the response.</t>
            </li>
            <li>
              <t>An Object is received whose Object ID is larger than the final Object in the
Subgroup.  The final Object in a Subgroup is the last Object received on a
Subgroup stream before a FIN.</t>
            </li>
            <li>
              <t>A Subgroup is received over multiple transport streams terminated by FIN with
different final Objects.</t>
            </li>
            <li>
              <t>An Object is received in a Group whose Object ID is larger than the final
Object in the Group.  The final Object in a Group is the Object with Status
END_OF_GROUP, the last Object before a FIN in a Subgroup which has the
END_OF_GROUP bit set, or the last Object sent in a FETCH that requested the
entire Group.</t>
            </li>
            <li>
              <t>An Object is received on a Track whose Group and Object ID are larger than the
final Object in the Track.  The final Object in a Track is the Object with
Status END_OF_TRACK or the last Object sent in a FETCH whose response indicated
End of Track.</t>
            </li>
            <li>
              <t>The same Object is received more than once with different Payload or
 other immutable properties.</t>
            </li>
            <li>
              <t>An Object is received with a different Forwarding Preference than previously
observed.</t>
            </li>
          </ol>
          <t>The above list of conditions is not considered exhaustive.</t>
          <t>When a subscriber detects a Malformed Track, it <bcp14>MUST</bcp14> cancel any corresponding
subscription or fetches for that Track from that publisher
(see <xref target="request-cancellation"/>), and <bcp14>SHOULD</bcp14> deliver an error to the application.
If a relay detects a Malformed Track, it <bcp14>MUST</bcp14> immediately terminate downstream
subscriptions with PUBLISH_DONE and reset any fetch streams with
Status Code <tt>MALFORMED_TRACK</tt>. Object(s) triggering Malformed Track status
<bcp14>MUST NOT</bcp14> be cached.</t>
        </section>
        <section anchor="track-scope">
          <name>Scope</name>
          <t>An MOQT scope is a set of servers (as identified by their connection
URIs) for which a Full Track Name is guaranteed to be unique and identify a
specific track. It is up to the application using MOQT to define how broad or
narrow the scope is. An application that deals with connections between devices
on a local network may limit the scope to a single connection; by
contrast, an application that uses multiple CDNs to serve media may
require the scope to include all of those CDNs.</t>
          <t>Because each Full Track Name is unique within an MOQT scope, they can be used as
a cache key for the track. If, at a given moment in time, two tracks within the
same scope contain different data, they <bcp14>MUST</bcp14> have different names and/or
namespaces. MOQT provides subscribers with the ability to alter the specific
manner in which tracks are delivered via Parameters, but the actual content of
the tracks does not depend on those parameters; this is in contrast to protocols
like HTTP, where request headers can alter the server response.</t>
          <t>A publisher that loses state (e.g. crashes) and intends to resume publishing on
the same Track risks colliding with previously published Objects and violating
the above requirements.  A publisher can handle this in application specific
ways, for example:</t>
          <ol spacing="normal" type="1"><li>
              <t>Select a unique Track Name or Track Namespace whenever it resumes
publishing. For example, it can base one of the Namespace Fields on the
current time, or select a sufficiently large random value.</t>
            </li>
            <li>
              <t>Resume publishing under a previous Track Name and Namespace and set the
initial Group ID to a unique value guaranteed to be larger than all
previously used groups.  This can be done by choosing a Group ID based on the
current time.</t>
            </li>
            <li>
              <t>Use TRACK_STATUS or similar mechanism to query the previous state to
determine the largest published Group ID.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="properties">
        <name>Properties</name>
        <t>Tracks and Objects can have additional relay-visible fields, known as
Properties, which do not require negotiation, and can be used to alter
MoQT Object distribution.</t>
        <t>Properties are defined in <xref target="moqt-properties"/> as well as external
specifications and are registered in an IANA table <xref target="iana"/>. These
specifications define the type and value of the property, along with any rules
concerning processing, modification, caching and forwarding.</t>
        <t>If a Relay does not support a Property, it <bcp14>MUST NOT</bcp14> be modified, <bcp14>MUST</bcp14> be
forwarded, and <bcp14>MUST</bcp14> be cached with the Track or Object.  If a Track or Object
arrives with a different set of unknown properties than previously cached,
the most recent set <bcp14>SHOULD</bcp14> replace any cached values, removing any unknown
values not present in the new set.  Relays <bcp14>MUST NOT</bcp14> attempt to merge sets
of unknown properties received in different messages.</t>
        <t>If a Relay supports a Property, it <bcp14>MAY</bcp14> be modified, added, removed, and/or
cached, subject to the processing rules specified in the definition.</t>
        <t>Properties are serialized as Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
        <t>Property types are registered in the IANA table 'MOQ Properties'.
See <xref target="iana"/>.</t>
        <t>Certain Property type ranges are reserved for application-specific
use and will never be allocated by IANA in future MOQT specifications:</t>
        <ul spacing="normal">
          <li>
            <t>0x38 to 0x3F (1-byte encoding): 8 code points for applications with
tight space constraints</t>
          </li>
          <li>
            <t>0x3800 to 0x3FFF (2-byte encoding): 2048 code points (including grease
<xref target="grease"/>) for applications with moderate space constraints</t>
          </li>
        </ul>
        <t>Applications <bcp14>MAY</bcp14> use code points in these ranges without registration for
format-specific metadata or other application-defined purposes. Relays that
do not understand the application format <bcp14>MUST</bcp14> forward these properties
unchanged but <bcp14>MUST NOT</bcp14> attempt to interpret their semantic meaning. Different
applications using the same code point in these ranges may assign different
meanings; the interpretation depends on the track or application
context known to the publisher and subscriber.</t>
      </section>
    </section>
    <section anchor="session">
      <name>Sessions</name>
      <section anchor="session-establishment">
        <name>Session establishment</name>
        <t>This document defines a protocol that can be used interchangeably both
over a QUIC connection directly <xref target="QUIC"/>, and over WebTransport
<xref target="WebTransport"/>.  Both provide streams and datagrams with similar
semantics (see <xref section="4" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>); thus, the
main difference lies in how the servers are identified and how the
connection is established. The QUIC DATAGRAM extension (<xref target="RFC9221"/>)
<bcp14>MUST</bcp14> be supported and negotiated in the QUIC connection used for MOQT,
which is already a requirement for WebTransport over HTTP/3. The
RESET_STREAM_AT <xref target="I-D.draft-ietf-quic-reliable-stream-reset"/>
extension to QUIC can be used by MOQT, but the protocol is also
designed to work correctly when the extension is not supported.</t>
        <t>There is no definition of the protocol over other transports,
such as TCP, and applications using MoQ might need to fallback to
another protocol when QUIC or WebTransport aren't available.</t>
        <t>MOQT uses ALPN in QUIC and "WT-Available-Protocols" in WebTransport
(<xref section="3.3" sectionFormat="comma" target="WebTransport"/>) to perform version negotiation.</t>
        <t>[[RFC editor: please remove the remainder of this section before publication.]]</t>
        <t>The ALPN value <xref target="RFC7301"/> for the final version of this specification
is <tt>moqt</tt>.  ALPNs used to identify IETF drafts are created by appending
the draft number to "moqt-". For example, draft-ietf-moq-transport-13
would be identified as "moqt-13".</t>
        <t>Note: Draft versions prior to -15 all used moq-00 ALPN, followed by version
negotiation in the SETUP messages.</t>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>An MOQT server that is accessible via WebTransport can be identified
using an HTTPS URI (<xref section="4.2.2" sectionFormat="comma" target="RFC9110"/>).  An MOQT session can be
established by sending an extended CONNECT request to the host and the
path indicated by the URI, as described in
(<xref section="3" sectionFormat="comma" target="WebTransport"/>).</t>
        </section>
        <section anchor="quic">
          <name>QUIC</name>
          <t>An MOQT server that is accessible via native QUIC can be identified by a
URI with a "moqt" scheme.  The "moqt" URI scheme is defined as follows,
using definitions from <xref target="RFC3986"/>:</t>
          <artwork><![CDATA[
moqt-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
          <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain an empty <tt>host</tt> portion.
The <tt>moqt</tt> URI scheme supports the <tt>/.well-known/</tt> path prefix defined in
<xref target="RFC8615"/>.</t>
          <t>This protocol does not specify any semantics on the <tt>path-abempty</tt> and
<tt>query</tt> portions of the URI.  The contents of those are left up to the
application.</t>
          <t>The client can establish a connection to an MOQT server identified by a given
URI by setting up a QUIC connection to the host and port identified by the
<tt>authority</tt> section of the URI. The <tt>authority</tt>, <tt>path-abempty</tt> and <tt>query</tt>
portions of the URI are also transmitted in Setup Options (see
<xref target="setup-options"/>). If the port is omitted in the URI, a default port of 443 is
used for setting up the QUIC connection.</t>
        </section>
        <section anchor="connection-url">
          <name>Connection URL</name>
          <t>Each track <bcp14>MAY</bcp14> have one or more associated connection URLs specifying
network hosts through which a track may be accessed. The syntax of the
Connection URL and the associated connection setup procedures are
specific to the underlying transport protocol usage (see <xref target="session"/>).</t>
        </section>
      </section>
      <section anchor="extension-negotiation">
        <name>Extension Negotiation</name>
        <t>Endpoints use the exchange of Setup messages to negotiate MOQT extensions.
Extensions can define new Message types, new Parameters, or new framing for
Data Streams and Datagrams.</t>
        <t>The client and server <bcp14>MUST</bcp14> include all Setup Options <xref target="setup-options"/>
required for the negotiated MOQT version in SETUP.</t>
        <t>Each endpoint declares the extensions it supports and provides any initial
values required by those extensions as Setup Options in SETUP. Once an endpoint
has both sent and received SETUP messages, it determines the set of negotiated
extensions.</t>
        <t>New versions of MOQT <bcp14>MUST</bcp14> specify which existing extensions can be used with
that version. New extensions <bcp14>MUST</bcp14> specify the existing versions with which they
can be used.</t>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>MOQT uses a pair of unidirectional streams for creating the session and
exchanging control messages. Each peer opens one control stream beginning with
a SETUP message. Using a pair of unidirectional streams rather than a single
bidirectional stream allows either peer to send data as soon as it is able.
Depending on whether 0-RTT is available on the QUIC connection, either client or
server might be able to send stream data first.</t>
        <t>In addition to the control streams, this specification uses bidirectional streams
to carry requests.  A request stream begins with one of these six message types:
TRACK_STATUS, SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE, and
SUBSCRIBE_NAMESPACE. Bidirectional streams <bcp14>MUST NOT</bcp14>
begin with any other message type unless negotiated. If they do, the peer <bcp14>MUST</bcp14>
close the Session with a <tt>PROTOCOL_VIOLATION</tt>. Objects are sent on unidirectional
streams.</t>
        <t>Unidirectional streams containing Objects or bidirectional stream(s) beginning
with a request message could arrive prior to the control streams, in which case
the data <bcp14>SHOULD</bcp14> be buffered until both control streams arrive and setup is
complete. If an implementation does not want to buffer or if the message type is
not supported, it <bcp14>MAY</bcp14> reset such bidirectional streams before the session and
control streams are established.</t>
        <t>A control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer during the
session's lifetime.  Doing so results in the session being closed as a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <section anchor="request-cancellation">
          <name>Request Cancellation and Rejection</name>
          <t>Once a request stream has been opened, the request <bcp14>MAY</bcp14> be cancelled by either
endpoint. Senders cancel requests if the response is no longer of interest;
Receivers cancel requests if they are unable to or choose not to respond.</t>
          <t>Implementations <bcp14>SHOULD</bcp14> cancel requests by abruptly terminating any directions of
a stream that are still open using RESET_STREAM / RESET_STREAM_AT or
STOP_SENDING.</t>
          <t>When an endpoint rejects a request without performing any application processing,
it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR and FIN the stream.</t>
        </section>
      </section>
      <section anchor="stream-types">
        <name>Unidirectional Stream Types</name>
        <t>All unidirectional MOQT streams start with a variable-length integer indicating
the type of the stream.</t>
        <table>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x05</td>
              <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
            </tr>
            <tr>
              <td align="right">0x10-0x1D</td>
              <td align="left">SUBGROUP_HEADER  (<xref target="subgroup-header"/>)</td>
            </tr>
            <tr>
              <td align="right">0x2F00</td>
              <td align="left">SETUP (<xref target="message-setup"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>An endpoint that receives an unknown stream type <bcp14>MUST</bcp14> close the session.</t>
        <t>Control streams (SETUP) are described in <xref target="session-init"/>.
Data streams (FETCH_HEADER, SUBGROUP_HEADER) are described in <xref target="data-streams"/>.</t>
      </section>
      <section anchor="session-termination">
        <name>Termination</name>
        <t>The Transport Session can be terminated at any point.  When native QUIC
is used, the session is closed using the CONNECTION_CLOSE frame
(<xref section="19.19" sectionFormat="comma" target="QUIC"/>).  When WebTransport is used, the session is
closed using the CLOSE_WEBTRANSPORT_SESSION capsule (<xref section="6" sectionFormat="comma" target="WebTransport"/>).</t>
        <t>When terminating the Session, the application <bcp14>MAY</bcp14> use any error message
and <bcp14>SHOULD</bcp14> use a relevant code, as defined below:</t>
        <dl>
          <dt>NO_ERROR (0x0):</dt>
          <dd>
            <t>The session is being terminated without an error.</t>
          </dd>
          <dt>INTERNAL_ERROR (0x1):</dt>
          <dd>
            <t>An implementation specific error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x2):</dt>
          <dd>
            <t>The client is not authorized to establish a session.</t>
          </dd>
          <dt>PROTOCOL_VIOLATION (0x3):</dt>
          <dd>
            <t>The remote endpoint performed an action that was disallowed by the
specification.</t>
          </dd>
          <dt>INVALID_REQUEST_ID (0x4):</dt>
          <dd>
            <t>The endpoint received a Request ID with an incorrect least significant
bit for the sender, or a duplicate Request ID. See <xref target="request-id"/>.</t>
          </dd>
          <dt>INVALID_REQUIRED_REQUEST_ID (0x7):</dt>
          <dd>
            <t>The endpoint received a Required Request ID Delta that results
in an invalid Request ID. See <xref target="required-request-id"/>.</t>
          </dd>
          <dt>DUPLICATE_TRACK_ALIAS (0x5):</dt>
          <dd>
            <t>The endpoint attempted to use a Track Alias that was already in use.</t>
          </dd>
          <dt>KEY_VALUE_FORMATTING_ERROR (0x6):</dt>
          <dd>
            <t>The key-value pair has a formatting error.</t>
          </dd>
          <dt>INVALID_PATH (0x8):</dt>
          <dd>
            <t>The PATH parameter was used by a server, on a WebTransport session, or the
server does not support the path.</t>
          </dd>
          <dt>MALFORMED_PATH (0x9):</dt>
          <dd>
            <t>The PATH parameter does not conform to the rules in <xref target="path"/>.</t>
          </dd>
          <dt>GOAWAY_TIMEOUT (0x10):</dt>
          <dd>
            <t>The session was closed because the peer took too long to close the session
in response to a GOAWAY (<xref target="message-goaway"/>) message. See session migration
(<xref target="session-migration"/>).</t>
          </dd>
          <dt>CONTROL_MESSAGE_TIMEOUT (0x11):</dt>
          <dd>
            <t>The session was closed because the peer took too long to respond to a
control message.</t>
          </dd>
          <dt>DATA_STREAM_TIMEOUT (0x12):</dt>
          <dd>
            <t>The session was closed because the peer took too long to send data expected
on an open Data Stream (see <xref target="data-streams"/>). This includes fields of a
stream header or an object header within a data stream. If an endpoint
times out waiting for a new object header on an open subgroup stream, it
<bcp14>MAY</bcp14> send a STOP_SENDING on that stream or terminate the subscription.</t>
          </dd>
          <dt>AUTH_TOKEN_CACHE_OVERFLOW (0x13):</dt>
          <dd>
            <t>The Session limit <xref target="max-auth-token-cache-size"/> of the size of all
registered Authorization tokens has been exceeded.</t>
          </dd>
          <dt>DUPLICATE_AUTH_TOKEN_ALIAS (0x14):</dt>
          <dd>
            <t>Authorization Token attempted to register an Alias that was in use (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>VERSION_NEGOTIATION_FAILED (0x15):</dt>
          <dd>
            <t>The client didn't offer a version supported by the server.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x16):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>UNKNOWN_AUTH_TOKEN_ALIAS (0x17):</dt>
          <dd>
            <t>No registered token found for the provided Alias (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x18):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
          <dt>INVALID_AUTHORITY (0x19):</dt>
          <dd>
            <t>The specified AUTHORITY does not correspond to this server or cannot be
used in this context.</t>
          </dd>
          <dt>MALFORMED_AUTHORITY (0x1A):</dt>
          <dd>
            <t>The AUTHORITY value is syntactically invalid.</t>
          </dd>
        </dl>
        <t>An endpoint <bcp14>MAY</bcp14> choose to treat a subscription or request specific error as a
session error under certain circumstances, closing the entire session in
response to a condition with a single subscription or message. Implementations
need to consider the impact on other outstanding subscriptions before making
this choice.</t>
      </section>
      <section anchor="session-migration">
        <name>Migration</name>
        <t>MOQT requires a long-lived and stateful session. However, a service
provider needs the ability to shutdown/restart a server without waiting for all
sessions to drain naturally, as that can take days for long-form media.
MOQT enables proactively draining sessions via the GOAWAY message (<xref target="message-goaway"/>).</t>
        <t>The server sends a GOAWAY message, signaling the client to establish a new
session and migrate any <tt>Established</tt> subscriptions. The GOAWAY message optionally
contains a new URI for the new session, otherwise the current URI is
reused. The GOAWAY message contains a Timeout indicating how long, in
milliseconds, the sender intends to wait before closing the session. The sender
<bcp14>SHOULD</bcp14> close the session with <tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if
there are still open subscriptions or fetches on a connection.</t>
        <t>When the server is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream
subscribers prior to unsubscribing from upstream publishers.</t>
        <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more <tt>Established</tt> subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating <tt>Established</tt> subscriptions
and published namespaces. The client can choose to delay closing the session if
it expects more OBJECTs to be delivered. The sender closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the peer doesn't close the session within the
indicated Timeout.</t>
      </section>
      <section anchor="congestion-control">
        <name>Congestion Control</name>
        <t>MOQT does not specify a congestion controller, but there are important attributes
to consider when selecting a congestion controller for use with an application
built on top of MOQT.</t>
        <section anchor="bufferbloat">
          <name>Bufferbloat</name>
          <t>Traditional AIMD congestion controllers (ex. CUBIC <xref target="RFC9438"/> and Reno <xref target="RFC6582"/>)
are prone to Bufferbloat. Bufferbloat occurs when elements along the path build up
a substantial queue of packets, commonly more than doubling the round trip time.
These queued packets cause head-of-line blocking and latency, even when there is
no packet loss.</t>
        </section>
        <section anchor="application-limited">
          <name>Application-Limited</name>
          <t>The average bitrate for latency sensitive content needs to be less than the available
bandwidth, otherwise data will be queued and/or dropped. As such,
many MOQT applications will typically be limited by the available data to send, and
not the congestion controller. Many congestion control algorithms
only increase the congestion window or bandwidth estimate if fully utilized. This
combination can lead to underestimating the available network bandwidth. As a result,
applications might need to periodically ensure the congestion controller is not
app-limited for at least a full round trip to ensure the available bandwidth can be
measured.</t>
          <t>Some applications might have APIs to allow sending duplicate data or forward error
correction to probe for more bandwidth while also limiting the impact of probing
in case it causes packet loss. Applications wanting to switch to an alternate
representation of a Track can request that Track at a lower priority to probe.
Applications can subscribe to additional tracks at the lowest (255) priority
to fill the congestion window during probing intervals while minimizing the
impact on higher priority media.
Network-assisted bandwidth estimation mechanisms such as SCONE
<xref target="I-D.ietf-scone-protocol"/> can provide receivers with sustainable bandwidth hints,
which subscribers can use to inform track selection decisions and potentially avoid
unnecessary probing.</t>
        </section>
        <section anchor="consistent-throughput">
          <name>Consistent Throughput</name>
          <t>Congestion control algorithms are commonly optimized for throughput, not consistency.
For example, BBR's PROBE_RTT state halves the sending rate for more than a round trip
in order to obtain an accurate minimum RTT. Similarly, Reno halves it's congestion
window upon detecting loss.  In both cases, the large reduction in sending rate might
cause issues with latency sensitive applications.</t>
        </section>
      </section>
    </section>
    <section anchor="modularity">
      <name>Modularity</name>
      <t>MOQT defines all messages necessary to implement both simple publishing or
subscribing endpoints as well as highly functional Relays.  Non-Relay endpoints
<bcp14>MAY</bcp14> implement only the subset of functionality required to perform necessary
tasks.  For example, a limited media player could operate using only SUBSCRIBE
related messages.  Limited endpoints <bcp14>SHOULD</bcp14> respond to any unsupported messages
with the appropriate <tt>NOT_SUPPORTED</tt> error code, rather than ignoring them.</t>
      <t>Relays <bcp14>MUST</bcp14> implement all MOQT messages defined in this document, as well as
processing rules described in <xref target="relays-moq"/>.</t>
    </section>
    <section anchor="publishing-and-retrieving-tracks">
      <name>Publishing and Retrieving Tracks</name>
      <section anchor="subscriptions">
        <name>Subscriptions</name>
        <t>All subscriptions begin in the <tt>Idle</tt> state. A subscription can be
initiated and moved to the <tt>Pending</tt> state by either a publisher or a
subscriber.  A publisher initiates a subscription to a track by
sending the PUBLISH message.  The subscriber either accepts or rejects
the subscription using PUBLISH_OK or REQUEST_ERROR.  A subscriber
initiates a subscription to a track by sending the SUBSCRIBE message.
The publisher either accepts or rejects the subscription using
SUBSCRIBE_OK or REQUEST_ERROR.  Once either of these sequences is
successful, the subscription moves to the <tt>Established</tt> state and can
be updated by the subscriber using REQUEST_UPDATE.  Either endpoint
can terminate an <tt>Established</tt> subscription, moving it to the
<tt>Terminated</tt> state.  The subscriber terminates a subscription in the
<tt>Pending (Subscriber)</tt> or <tt>Established</tt> states by sending STOP_SENDING.
The publisher terminates a subscription in the
<tt>Pending (Publisher)</tt> or <tt>Established</tt> states by sending PUBLISH_DONE
and closing the stream.</t>
        <t>This diagram shows the subscription state machine:</t>
        <artwork><![CDATA[
                              +--------+
                              |  Idle  |
                              +--------+
                                |    |
                      SUBSCRIBE |    | PUBLISH
                    (subscriber)|    | (publisher)
                                V    V
                   +--------------+ +--------------+
                   | Pending      | | Pending      |
              +----| (Subscriber) | | (Publisher)  |----+
              |    +--------------+ +--------------+    |
              |                 |    |                  |
REQUEST_ERROR |    SUBSCRIBE_OK |    | PUBLISH_OK       | REQUEST_ERROR
(publisher)   |      (publisher)|    | (subscriber)     | (subscriber)
              |                 V    V                  |
              |            +-------------+              |
              |            | Established | ------+
              |            |             |       | REQUEST_UPDATE
              |            +-------------+ <-----+
              |                 |    |                  |
              +--- STOP_SENDING |    | PUBLISH_DONE ----+
              |     (subscriber)|    | (publisher)      |
              |                 V    V                  |
              |            +-------------+              |
              +----------->| Terminated  | <------------+
                           +-------------+
]]></artwork>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_OK or REQUEST_ERROR in response to
a SUBSCRIBE. A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_OK or REQUEST_ERROR in
response to a PUBLISH. The peer <bcp14>SHOULD</bcp14> close the session with a protocol error
if it receives more than one.</t>
        <t>All <tt>Established</tt> subscriptions have a Forward State which is either 0 or 1.
The publisher does not send Objects if the Forward State is 0, and does send them
if the Forward State is 1.  The initiator of the subscription sets the initial
Forward State in either PUBLISH or SUBSCRIBE.  The subscriber can send PUBLISH_OK
or REQUEST_UPDATE to update the Forward State. Control messages, such as
PUBLISH_DONE (<xref target="message-publish-done"/>) are sent regardless of the forward state.</t>
        <t>A publisher <bcp14>MUST</bcp14> save the Largest Location communicated in SUBSCRIBE_OK, PUBLISH
or REQUEST_OK (in response to a REQUEST_UPDATE) that changes the Forward State
from 0 to 1.  This value is called the Joining Location and can be used in a
Joining FETCH (see <xref target="joining-fetches"/>) while the subscription is in the
<tt>Established</tt> state.</t>
        <t>Either endpoint can initiate a subscription to a track without exchanging any
prior messages other than SETUP.  Relays <bcp14>MUST NOT</bcp14> send any PUBLISH messages
without knowing the client is interested in and authorized to receive the
content. The communication of intent and authorization can be accomplished by
the client sending SUBSCRIBE_NAMESPACE, or conveyed in other mechanisms out of
band.</t>
        <t>An endpoint <bcp14>MAY</bcp14> SUBSCRIBE to a Track it is publishing, though only Relays are
required to handle such a SUBSCRIBE.  Such self-subscriptions are identical to
subscriptions initiated by other endpoints, and all published Objects will be
forwarded back to the endpoint, subject to priority and congestion response
rules.</t>
        <t>For a given Track, an endpoint can have at most one subscription to a Track
acting as the publisher and at most one acting as a subscriber.  If an endpoint
receives a message attempting to establish a second subscription to a Track
with the same role, it <bcp14>MUST</bcp14> fail that request with a <tt>DUPLICATE_SUBSCRIPTION</tt>
error.</t>
        <t>If a publisher receives a SUBSCRIBE request for a Track with an existing
subscription in <tt>Pending (publisher)</tt> state, it <bcp14>MUST</bcp14> fail that request with
a <tt>DUPLICATE_SUBSCRIPTION</tt> error. If a subscriber receives a PUBLISH for a Track
with a subscription in the <tt>Pending (Subscriber)</tt> state, it <bcp14>MUST</bcp14> ensure the
subscription it initiated transitions to the <tt>Terminated</tt> state before sending
PUBLISH_OK.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to avoid
incurring additional latency.</t>
        <t>Publishers <bcp14>MAY</bcp14> start sending Objects on PUBLISH-initiated subscriptions before
receiving a PUBLISH_OK response to reduce latency.  Doing so can consume
unnecessary resources in cases where the Subscriber rejects the subscription
with REQUEST_ERROR or sets Forward State=0 in PUBLISH_OK. It can also result in
the Subscriber dropping Objects if its buffering limits are exceeded (see
<xref target="datagrams"/> and <xref target="subgroup-header"/>).</t>
        <section anchor="subscription-state-management">
          <name>Subscription State Management</name>
          <t>A subscriber keeps subscription state until it cancels the request
(see <xref target="request-cancellation"/>), or after receipt of a PUBLISH_DONE or
REQUEST_ERROR. Note that PUBLISH_DONE does not usually indicate that state
can immediately be destroyed, see <xref target="message-publish-done"/>.</t>
          <t>The Publisher can destroy subscription state as soon as it has received
STOP_SENDING. It <bcp14>MUST</bcp14> reset any open streams associated with the SUBSCRIBE.</t>
          <t>The Publisher can also immediately delete subscription state after sending
PUBLISH_DONE, but <bcp14>MUST NOT</bcp14> send it until it has closed all related streams.</t>
          <t>A REQUEST_ERROR indicates no objects will be delivered, and both endpoints can
immediately destroy relevant state. Objects <bcp14>MUST NOT</bcp14> be sent for requests that
end with an error.</t>
        </section>
        <section anchor="subscription-filters">
          <name>Subscription Filters</name>
          <t>Subscribers can specify a filter on a subscription indicating to the publisher
which Objects to send.  Subscriptions without a filter pass all Objects
published or received via upstream subscriptions.</t>
          <t>All filters have a Start Location and an optional End Group Delta.  Only objects
published or received via a subscription having Locations greater than or
equal to Start Location and strictly less than or equal to the End Group (when
present) pass the filter.</t>
          <t>Some filters are defined to be relative to the <tt>Largest Object</tt>. The <tt>Largest
Object</tt> is the Object with the largest Location (<xref target="location-structure"/>) in the
Track from the perspective of the publisher processing the message. Largest
Object updates when the first byte of an Object with a Location larger than the
previous value is published or received through a subscription.</t>
          <t>A Subscription Filter has the following structure:</t>
          <artwork><![CDATA[
Subscription Filter {
  Filter Type (vi64),
  [Start Location (Location),]
  [End Group Delta (vi64),]
}
]]></artwork>
          <t>Filter Type can have one of the following values:</t>
          <t>Largest Object (0x2): The filter Start Location is <tt>{Largest Object.Group,
Largest Object.Object + 1}</tt> and <tt>Largest Object</tt> is communicated in
SUBSCRIBE_OK. If no content has been delivered yet, the filter Start Location is
{0, 0}. There is no End Group - the subscription is open ended.  Note that due
to network reordering or prioritization, relays can receive Objects with
Locations smaller than  <tt>Largest Object</tt> after the SUBSCRIBE is processed, but
these Objects do not pass the Largest Object filter.</t>
          <t>Next Group Start (0x1): The filter Start Location is <tt>{Largest Object.Group + 1,
0}</tt> and <tt>Largest Object</tt> is communicated in SUBSCRIBE_OK. If no content has been
delivered yet, the filter Start Location is {0, 0}.  There is no End Group -
the subscription is open ended. For scenarios where the subscriber intends to
start from more than one group in the future, it can use an AbsoluteStart filter
instead.</t>
          <t>AbsoluteStart (0x3): The filter Start Location is specified explicitly. The
specified <tt>Start Location</tt> <bcp14>MAY</bcp14> be less than the <tt>Largest Object</tt> observed at the
publisher. There is no End Group - the subscription is open ended.  An
AbsoluteStart filter with <tt>Start</tt> = {0, 0} is equivalent to an unfiltered
subscription.</t>
          <t>AbsoluteRange (0x4): The filter Start Location and End Group are specified
explicitly. The specified <tt>Start Location</tt> <bcp14>MAY</bcp14> be less than the <tt>Largest Object</tt>
observed at the publisher. If the specified <tt>End Group Delta</tt> is zero, the
remainder of that Group passes the filter. Otherwise, the last Group ID to be
delivered will be the Group ID in <tt>Start Location</tt> plus the <tt>End Group Delta</tt>.</t>
          <t>An endpoint that receives a filter type other than the above <bcp14>MUST</bcp14> close the
session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        </section>
        <section anchor="joining-an-ongoing-track">
          <name>Joining an Ongoing Track</name>
          <t>The MOQT Object model is designed with the concept that the beginning of a Group
is a join point, so in order for a subscriber to join a Track, it needs to
request an existing Group or wait for a future Group.  Different applications
will have different approaches for when to begin a new Group.</t>
          <t>To join a Track at a past Group, the subscriber sends a SUBSCRIBE, PUBLISH_OK or
REQUEST_UPDATE with Forward State 1 followed by a Joining FETCH (see
<xref target="joining-fetches"/>) for the intended start Group, which can be relative.  To
join a Track at the next Group, the subscriber sends a SUBSCRIBE with Filter
Type <tt>Next Group Start</tt>.</t>
          <section anchor="dynamically-starting-new-groups">
            <name>Dynamically Starting New Groups</name>
            <t>While some publishers will deterministically create new Groups, other
applications might want to only begin a new Group when needed.  A subscriber
joining a Track might detect that it is more efficient to request the Original
Publisher create a new group than issue a Joining FETCH.  Publishers indicate a
Track supports dynamic group creation using the DYNAMIC_GROUPS parameter
(<xref target="dynamic-groups"/>).</t>
            <t>One possible subscriber pattern is to SUBSCRIBE to a Track using Filter Type
<tt>Largest Object</tt> and observe the <tt>Largest Location</tt> in the response.  If the
Object ID is below the application's threshold, the subscriber sends a FETCH for
the beginning of the Group.  If the Object ID is above the threshold and the
Track supports dynamic groups, the subscriber sends a REQUEST_UPDATE message with the
NEW_GROUP_REQUEST parameter equal to the Largest Location's Group, plus one (see
<xref target="new-group-request"/>).</t>
            <t>Another possible subscriber pattern is to send a SUBSCRIBE with Filter Type
<tt>Next Group Start</tt> and NEW_GROUP_REQUEST equal to 0.  The value of
DYNAMIC_GROUPS in SUBSCRIBE_OK will indicate if the publisher supports dynamic
groups. A publisher that does will begin the next group as soon as practical.</t>
          </section>
        </section>
      </section>
      <section anchor="fetch-state-management">
        <name>Fetch State Management</name>
        <t>The publisher <bcp14>MUST</bcp14> send exactly one FETCH_OK or REQUEST_ERROR in response to a
FETCH.</t>
        <t>A subscriber keeps FETCH state until it cancels the request
(see <xref target="request-cancellation"/>), receives REQUEST_ERROR, or receives a FIN or
RESET_STREAM for the FETCH data stream. If the data stream is already open,
the subscriber wishing to cancel the FETCH <bcp14>MAY</bcp14> send STOP_SENDING for the
data stream as well as the the bidi request stream. It <bcp14>MUST</bcp14> send STOP_SENDING
for the bidi request stream.</t>
        <t>The Publisher can destroy fetch state as soon as it has received a
STOP_SENDING. It <bcp14>MUST</bcp14> reset the bidi request stream and unidirectional
data stream associated with the FETCH. It can also destroy state after closing
the FETCH data stream.</t>
        <t>It can destroy all FETCH state after closing the data stream with a FIN.</t>
        <t>A REQUEST_ERROR indicates that both endpoints can immediately destroy state.
Since a relay can start delivering FETCH Objects from cache before determining
the result of the request, some Objects could be received even if the FETCH
results in error.</t>
      </section>
    </section>
    <section anchor="track-discovery">
      <name>Namespace Discovery</name>
      <t>Discovery of MOQT servers is always done out-of-band. Namespace discovery can be
done in the context of an established MOQT session.</t>
      <t>Given sufficient out of band information, it is valid for a subscriber to send a
SUBSCRIBE or FETCH message to a publisher (including a relay) without any
previous MOQT messages besides SETUP. However, SUBSCRIBE_NAMESPACE, PUBLISH and
PUBLISH_NAMESPACE messages provide an in-band means of discovery of publishers
for a namespace.</t>
      <t>The syntax of these messages is described in <xref target="message"/>.</t>
      <section anchor="subscribing-to-namespaces">
        <name>Subscribing to Namespaces</name>
        <t>If the subscriber is aware of a namespace of interest, it can send
SUBSCRIBE_NAMESPACE to publishers/relays it has established a session with. The
recipient of this message will send any relevant NAMESPACE,
NAMESPACE_DONE or PUBLISH messages for that namespace, or more specific
part of that namespace.  This includes echoing back published Tracks and/or Track
Namespaces under the SUBSCRIBE_NAMESPACE prefix to the endpoint that sent them.
If an endpoint accepts its own PUBLISH, this behaves as self-subscription described
in <xref target="subscriptions"/>.</t>
        <t>A SUBSCRIBE_NAMESPACE with zero Track Namespace fields indicates the sender is
interested in all tracks and/or namespaces from the receiver.</t>
        <t>The subscriber sends SUBSCRIBE_NAMESPACE on a new bidirectional stream and the
publisher <bcp14>MUST</bcp14> send a single REQUEST_OK or REQUEST_ERROR as the first message on the
bidirectional stream in response to a SUBSCRIBE_NAMESPACE. The subscriber
<bcp14>SHOULD</bcp14> close the session with a protocol error if it detects receiving more
than one.</t>
        <t>If a Subscription cannot be created because there is no available Request ID,
the Publisher sends a PUBLISH_BLOCKED message on the response stream to indicate
the Full Track Name of the Subscription that could not be established. The Publisher
<bcp14>MUST NOT</bcp14> send a PUBLISH for a Track after PUBLISH_BLOCKED has been sent.  The subscriber can instead issue a SUBSCRIBE to establish a subscription to that track.</t>
        <t>The receiver of a REQUEST_OK or REQUEST_ERROR ought to
forward the result to the application, so the application can decide which other
publishers to contact, if any.</t>
        <t>A SUBSCRIBE_NAMESPACE can be cancelled by closing the stream with
either a FIN or RESET_STREAM. Cancelling does not prohibit original publishers
from sending further PUBLISH_NAMESPACE or PUBLISH messages, but relays <bcp14>MUST NOT</bcp14>
send any further PUBLISH messages to a client without knowing the client is
interested in and authorized to receive the content.</t>
      </section>
      <section anchor="publishing-namespaces">
        <name>Publishing Namespaces</name>
        <t>A publisher <bcp14>MAY</bcp14> send PUBLISH_NAMESPACE messages to any subscriber. A
PUBLISH_NAMESPACE indicates to the subscriber that the publisher has tracks
available in that namespace. A subscriber <bcp14>MAY</bcp14> send SUBSCRIBE or FETCH for tracks
in a namespace without having received a PUBLISH_NAMESPACE for it.</t>
        <t>If a publisher is authoritative for a given namespace, or is a relay that has
received an authorized PUBLISH_NAMESPACE for that namespace from an upstream
publisher, it <bcp14>MUST</bcp14> send a PUBLISH_NAMESPACE to any subscriber that has
subscribed via SUBSCRIBE_NAMESPACE for that namespace, or a prefix of that
namespace. A publisher <bcp14>MAY</bcp14> send the PUBLISH_NAMESPACE to any other subscriber.</t>
        <t>An endpoint <bcp14>SHOULD</bcp14> report the reception of a REQUEST_OK or
REQUEST_ERROR to the application to inform the search for additional
subscribers for a namespace, or to abandon the attempt to publish under this
namespace. This might be especially useful in upload or chat applications. A
subscriber <bcp14>MUST</bcp14> send exactly one REQUEST_OK or REQUEST_ERROR as the first
message on the bidi stream in response to a PUBLISH_NAMESPACE. The publisher
<bcp14>SHOULD</bcp14> close the session with a protocol error if it receives more than one.</t>
        <t>A PUBLISH_NAMESPACE is withdrawn by cancelling the request
(see <xref target="request-cancellation"/>), although it is not a protocol error for
the subscriber to send a SUBSCRIBE or FETCH message for a track in a
namespace after the namespace is withdrawn.</t>
        <t>A subscriber can cancel the request (see <xref target="request-cancellation"/>) to revoke
acceptance of a PUBLISH_NAMESPACE. If the reason for cancellation is expiration
of authorization credentials, the publisher can send PUBLISH_NAMESPACE again
on a new bidi stream with refreshed authorization, or close the stream and
discard associated state.</t>
        <t>While PUBLISH_NAMESPACE indicates to relays how to connect publishers and
subscribers, it is not a full-fledged routing protocol and does not protect
against loops and other phenomena. In particular, PUBLISH_NAMESPACE <bcp14>SHOULD NOT</bcp14>
be used to find paths through richly connected networks of relays.</t>
        <t>A subscriber <bcp14>MAY</bcp14> send a SUBSCRIBE or FETCH for a track to any publisher. If it
has accepted a PUBLISH_NAMESPACE with a namespace that exactly matches the
namespace for that track, it <bcp14>SHOULD</bcp14> only request it from the senders of those
PUBLISH_NAMESPACE messages.</t>
      </section>
    </section>
    <section anchor="priorities">
      <name>Priorities</name>
      <t>MoQ priorities allow a subscriber and original publisher to influence
the transmission order of Objects within a session in the presence of
congestion.</t>
      <section anchor="definitions">
        <name>Definitions</name>
        <t>MOQT maintains priorities between different schedulable objects.
A schedulable object in MOQT is either:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first or next Object in a Subgroup that is in response to a subscription.</t>
          </li>
          <li>
            <t>An Object with forwarding preference Datagram.</t>
          </li>
          <li>
            <t>An Object in response to a FETCH where that Object is the next
Object in the response.</t>
          </li>
        </ol>
        <t>An Object is not schedulable if it is known that no part of it can be written
due to underlying transport flow control limits.</t>
        <t>A single subgroup or datagram has a single publisher priority. Within a
response to SUBSCRIBE, it can be useful to conceptualize this process as
scheduling subgroups or datagrams instead of individual objects on them.
FETCH responses however can contain objects with different publisher
priorities.</t>
        <t>A <tt>priority number</tt>is an unsigned integer with a value between 0 and 255.
A lower priority number indicates higher priority; the highest priority is 0.</t>
        <t><tt>Subscriber Priority</tt> is a priority number associated with an individual
request.  It is specified in the SUBSCRIBE or FETCH message, and can be
updated via REQUEST_UPDATE message.  The subscriber priority of an individual
schedulable object is the subscriber priority of the request that caused that
object to be sent. When subscriber priority is changed, a best effort <bcp14>SHOULD</bcp14> be
made to apply the change to all objects that have not been scheduled, but it is
implementation dependent what happens to objects that have already been
scheduled.</t>
        <t><tt>Publisher Priority</tt> is a priority number associated with an individual
schedulable object.  A default can be specified in the parameters of PUBLISH, or
SUBSCRIBE_OK. Publisher priority can also be specified in a subgroup header or
datagram (see <xref target="data-streams"/>).</t>
        <t><tt>Group Order</tt> is a property of an individual subscription.  It can be either
'Ascending' (groups with lower group ID are sent first), or 'Descending'
(groups with higher group ID are sent first).  The subscriber optionally
communicates its group order preference in the SUBSCRIBE message; the
publisher's preference is used if the subscriber did not express one (by
setting Group Order field to value 0x0).  The group order of an existing
subscription cannot be changed.</t>
      </section>
      <section anchor="scheduling-algorithm">
        <name>Scheduling Algorithm</name>
        <t>When an MOQT publisher has multiple schedulable objects it can choose between,
the objects <bcp14>SHOULD</bcp14> be selected as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>If two objects have different subscriber priorities associated with them,
the one with <strong>the highest subscriber priority</strong> is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects have the same subscriber priority, but different publisher
priorities, the one with <strong>the highest publisher priority</strong> is scheduled to be
sent first.</t>
          </li>
          <li>
            <t>If two objects in response to the same request have the same subscriber
and publisher priority, but belong to two different groups of the same track,
<strong>the group order</strong> of the associated subscription is used to
decide the one that is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects in response to the same request have the same subscriber
and publisher priority and belong to the same group of the same track, the
one with <strong>the lowest Subgroup ID</strong> (for objects with forwarding preference
Subgroup), or <strong>the lowest Object ID</strong> (for objects with forwarding preference
Datagram) is scheduled to be sent first.  If the two objects have
different Forwarding Preferences the order is implementation dependent.</t>
          </li>
        </ol>
        <t>The definition of "scheduled to be sent first" in the algorithm is implementation
dependent and is constrained by the prioritization interface of the underlying
transport. For some implementations, it could mean that the object is serialized
and passed to the underlying transport first.  Other implementations can
control the order packets are initially transmitted.</t>
        <t>This algorithm does not provide a well-defined ordering for objects that belong
to different subscriptions or FETCH responses, but have the same subscriber and
publisher priority.  The ordering in those cases is implementation-defined,
though the expectation is that all subscriptions will be able to send some data.</t>
        <t>A publisher might not utilize the entire available congestion window,
session flow control, or all available streams for lower
priority Objects if it expects higher priority Objects will be available to send
in the near future or it wants to reserve some bandwidth for control messages.</t>
        <t>Given the critical nature of control messages and their relatively
small size, the control streams <bcp14>SHOULD</bcp14> be prioritized highest, followed by the
bidi request streams and then all subscribed Objects. Bidi request streams <bcp14>MAY</bcp14> be
prioritized within themselves by Subscriber Priority if specified.</t>
      </section>
      <section anchor="considerations-for-setting-priorities">
        <name>Considerations for Setting Priorities</name>
        <t>For downstream subscriptions, relays <bcp14>SHOULD</bcp14> respect the subscriber and original
publisher's priorities.  Relays can receive subscriptions with conflicting
subscriber priorities or Group Order preferences.  Relays <bcp14>SHOULD NOT</bcp14> directly
use Subscriber Priority or Group Order from incoming subscriptions for upstream
subscriptions. Relays' use of these fields for upstream subscriptions can be
based on factors specific to it, such as the popularity of the content or
policy, or relays can specify the same value for all upstream subscriptions.</t>
        <t>MoQ Sessions can span multiple namespaces, and priorities might not
be coordinated across namespaces.  The subscriber's priority is
considered first, so there is a mechanism for a subscriber to fix
incompatibilities between different namespaces prioritization schemes.
Additionally, it is anticipated that when multiple namespaces
are present within a session, the namespaces could be coordinating,
possibly part of the same application.  In cases when pooling among
namespaces is expected to cause issues, multiple MoQ sessions, either
within a single connection or on multiple connections can be used.</t>
        <t>Implementations that have a default priority <bcp14>SHOULD</bcp14> set it to a value in
the middle of the range (eg: 128) to allow non-default priorities to be
set either higher or lower.</t>
      </section>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MoQ
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <t>Relays are endpoints, which means they terminate Transport Sessions in order to
have visibility of MoQ Object metadata.</t>
      <section anchor="caching-relays">
        <name>Caching Relays</name>
        <t>Relays <bcp14>MAY</bcp14> cache Objects, but are not required to.</t>
        <t>A caching relay saves Objects to its cache identified by the Object's Full Track
Name, Group ID and Object ID. If multiple objects are received with the same
Full Track Name, Group ID and Object ID, Relays <bcp14>MAY</bcp14> ignore subsequently received
Objects or <bcp14>MAY</bcp14> use them to update certain cached fields. Implementations that
update the cache need to protect against cache poisoning.  The only Object
fields that can be updated are the following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Object can transition from existing to not existing in cases where the
object is no longer available.</t>
          </li>
          <li>
            <t>Object Properties can be added, removed or updated, subject
to the constraints of the specific property.</t>
          </li>
        </ol>
        <t>An endpoint that receives a duplicate Object with a different Forwarding
Preference, Subgroup ID, Priority or Payload <bcp14>MUST</bcp14> treat the track as Malformed.</t>
        <t>For ranges of objects that do not exist, relays <bcp14>MAY</bcp14> change the representation
of a missing range to a semantically equivalent one.  For instance, a relay may
change an End-of-Group="Y" Subgroup Header to an equivalent object with an End
of Group status, or a Prior Group ID Gap extension could be removed in FETCH,
where it's redundant.</t>
        <t>Note that due to reordering, an implementation can receive an Object after
receiving an indication that the Object in question does not exist.  The
endpoint <bcp14>SHOULD NOT</bcp14> cache or forward the object in this case.</t>
        <t>A cache <bcp14>MUST</bcp14> store all fields of an Object defined in <xref target="object-header"/>,
with the exception of any Object Properties (<xref target="object-properties"/>)
that specify otherwise.</t>
      </section>
      <section anchor="forward-handling">
        <name>Forward Handling</name>
        <t>Relays <bcp14>SHOULD</bcp14> set the <tt>Forward</tt> flag to 1 when a new subscription needs to be
sent upstream, regardless of the value of the <tt>Forward</tt> field from the
downstream subscription. Subscriptions that are not forwarded consume resources
from the publisher, so a publisher might deprioritize, reject, or close those
subscriptions to ensure other subscriptions can be delivered.</t>
      </section>
      <section anchor="multiple-publishers">
        <name>Multiple Publishers</name>
        <t>A Relay can receive PUBLISH_NAMESPACE for the same Track Namespace or PUBLISH
messages for the same Track from multiple publishers.  The following sections
explain how Relays maintain subscriptions to all available publishers for a
given Track.</t>
        <t>There is no specified limit to the number of publishers of a Track Namespace or
Track.  An implementation can use mechanisms such as REQUEST_ERROR or
unsubscribing (see <xref target="request-cancellation"/>) if it cannot accept an additional
publisher due to implementation constraints. Implementations can consider the
establishment or idle time of the session or subscription to determine which
publisher to reject or disconnect.</t>
        <t>Relays <bcp14>MUST</bcp14> handle Objects for the same Track from multiple publishers and
forward them to matching <tt>Established</tt> subscriptions. The Relay <bcp14>SHOULD</bcp14> attempt to
deduplicate Objects before forwarding, subject to implementation constraints.</t>
      </section>
      <section anchor="subscriber-interactions">
        <name>Subscriber Interactions</name>
        <t>Subscribers request Tracks by sending a SUBSCRIBE (see
<xref target="message-subscribe-req"/>) or FETCH (see <xref target="message-fetch"/>) control message for
each Track of interest. Relays <bcp14>MUST</bcp14> ensure subscribers are authorized to access
the content associated with the Track. The authorization information can be part
of request itself or part of the encompassing session. The specifics of how a
relay authorizes a user are outside the scope of this specification.</t>
        <t>The relay <bcp14>MUST</bcp14> have an <tt>Established</tt> upstream subscription before sending
SUBSCRIBE_OK in response to a downstream SUBSCRIBE.  If a relay does not have
sufficient information to send a FETCH_OK immediately in response to a FETCH, it
<bcp14>MUST</bcp14> withhold sending FETCH_OK until it does.</t>
        <t>Publishers maintain a list of <tt>Established</tt> downstream subscriptions for
each Track. Relays use the Track Alias (<xref target="track-alias"/>) of an incoming Object
to identify its Track and find the current subscribers.  Each new Object
belonging to the Track is forwarded to each subscriber, as allowed by the
subscription's filter (see <xref target="message-subscribe-req"/>), and delivered according
to the priority (see <xref target="priorities"/>) and delivery timeout (see
<xref target="delivery-timeout"/>).</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers, unless it has application specific information.</t>
        <t>Relays <bcp14>MAY</bcp14> aggregate authorized subscriptions for a given Track when
multiple subscribers request the same Track. Subscription aggregation
allows relays to make only a single upstream subscription for the
Track. The published content received from the upstream subscription
request is cached and shared among the pending subscribers.
Because MOQT restricts widening a subscription, relays that
aggregate upstream subscriptions can subscribe using the Largest Object
filter to avoid churn as downstream subscribers with disparate filters
subscribe and unsubscribe from a Track.</t>
        <t>A subscriber remains subscribed to a Track at a Relay until it unsubscribes, the
upstream publisher terminates the subscription, or the subscription expires (see
<xref target="message-subscribe-ok"/>).  A subscription with a filter can reach a state where
all possible Objects matching the filter have been delivered to the subscriber.
Since tracking this can be prohibitively expensive, Relays are not required or
expected to do so.</t>
        <section anchor="graceful-subscriber-switchover">
          <name>Graceful Subscriber Relay Switchover</name>
          <t>This section describes a behavior that a Subscriber <bcp14>MAY</bcp14> implement to improve
user experience when a relay sends a GOAWAY or the Subscriber switches between
networks, such as WiFi to Cellular, and QUIC Connection Migration is not possible.</t>
          <t>When a subscriber receives the GOAWAY message, it starts the process
of connecting to a new relay and sending the SUBSCRIBE requests for
all <tt>Established</tt> subscriptions to the new relay. The new relay will send a
response to the subscribes and if they are successful, the subscriptions
to the old relay can be cancelled (see <xref target="request-cancellation"/>).</t>
        </section>
      </section>
      <section anchor="publisher-interactions">
        <name>Publisher Interactions</name>
        <t>There are two ways to publish through a relay:</t>
        <ol spacing="normal" type="1"><li>
            <t>Send a PUBLISH message for a specific Track to the relay. The relay <bcp14>MAY</bcp14>
respond with PUBLISH_OK in Forward State=0 until there are known subscribers for
new Tracks.</t>
          </li>
          <li>
            <t>Send a PUBLISH_NAMESPACE message for a Track Namespace to the relay. This
enables the relay to send SUBSCRIBE or FETCH messages to publishers for Tracks
in this Namespace in response to requests received from subscribers.</t>
          </li>
        </ol>
        <t>Relays <bcp14>MUST</bcp14> verify that publishers are authorized to publish the set of Tracks
whose Track Namespace matches the namespace in a PUBLISH_NAMESPACE, or the Full
Track Name in PUBLISH. Relays <bcp14>MUST NOT</bcp14> assume that an authorized publisher of a single
Track is implicitly authorized to publish any other Tracks or Track Namespaces.
If a Publisher would like Subscriptions in a Namespace routed to it, it <bcp14>MUST</bcp14> send
an explicit PUBLISH_NAMESPACE.
The authorization and identification of the publisher depends on the way the
relay is managed and is application specific.</t>
        <t>When a publisher wants to stop new subscriptions for a published namespace, it
cancels the request (see <xref target="request-cancellation"/>) to withdraw the PUBLISH_NAMESPACE.
A subscriber indicates it will no longer subscribe to Tracks in a namespace it
previously responded REQUEST_OK to by cancelling the PUBLISH_NAMESPACE request.</t>
        <t>A Relay connects publishers and subscribers by managing sessions based on the
Track Namespace or Full Track Name. When a SUBSCRIBE message is sent, its Full
Track Name is matched exactly against existing upstream subscriptions.</t>
        <t>Namespace Prefix Matching is further used to decide which publishers receive a
SUBSCRIBE and which subscribers receive a PUBLISH. In this process, the fields
in the Track Namespace are matched sequentially, requiring an exact match for
each field. If the published or subscribed Track Namespace has the same or fewer
fields than the Track Namespace in the message, it qualifies as a match.</t>
        <t>For example:
A SUBSCRIBE message with namespace=(foo, bar) and name=x will match sessions
that sent PUBLISH_NAMESPACE messages with namespace=(foo) or namespace=(foo,
bar).  It will not match a session with namespace=(foobar).</t>
        <t>Relays <bcp14>MUST</bcp14> send SUBSCRIBE messages to all matching publishers. This includes
matching both Established subscriptions on the Full Track Name and Namespace
Prefix Matching against published Namespaces.  Relays <bcp14>MUST</bcp14> forward
PUBLISH_NAMESPACE or PUBLISH messages to all matching subscribers.</t>
        <t>When a Relay needs to make an upstream FETCH request, it determines the
available publishers using the same matching rules as SUBSCRIBE. When more than
one publisher is available, the Relay <bcp14>MAY</bcp14> send the FETCH to any of them.</t>
        <t>When a Relay receives an authorized SUBSCRIBE for a Track with one or more
<tt>Established</tt> upstream subscriptions, it <bcp14>MUST</bcp14> reply with SUBSCRIBE_OK.  If the
SUBSCRIBE has Forward State=1 and the upstream subscriptions are in Forward
State=0, the Relay <bcp14>MUST</bcp14> send REQUEST_UPDATE with Forward=1 to all publishers.
If there are no <tt>Established</tt> upstream subscriptions for the requested Track, the Relay
<bcp14>MUST</bcp14> send a SUBSCRIBE request to each publisher that has published the
subscription's namespace or prefix thereof.  If the SUBSCRIBE has Forward=1,
then the Relay <bcp14>MUST</bcp14> use Forward=1 when subscribing upstream.</t>
        <t>When a relay receives an incoming PUBLISH message, it <bcp14>MUST</bcp14> send a PUBLISH
request to each subscriber that has subscribed (via SUBSCRIBE_NAMESPACE)
to the Track's namespace or prefix thereof.</t>
        <t>When a relay receives an authorized PUBLISH_NAMESPACE for a namespace that
matches one or more existing subscriptions to other upstream sessions, it <bcp14>MUST</bcp14>
send a SUBSCRIBE to the publisher that sent the PUBLISH_NAMESPACE for each
matching subscription.  When it receives an authorized PUBLISH message for a
Track that has <tt>Established</tt> downstream subscriptions, it <bcp14>MUST</bcp14> respond with
PUBLISH_OK.  If at least one downstream subscriber for the Track has
Forward State=1, the Relay <bcp14>MUST</bcp14> use Forward State=1 in the reply.</t>
        <t>If a Session is closed due to an unknown or invalid control message or Object,
the Relay <bcp14>MUST NOT</bcp14> propagate that message or Object to another Session, because
it would enable a single Session error to force an unrelated Session, which
might be handling other subscriptions, to be closed.</t>
        <section anchor="graceful-publisher-switchover">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes a behavior that a publisher <bcp14>MAY</bcp14> implement to improve
user experience when a relay sends a GOAWAY or the publisher switches between
networks, such as WiFi to Cellular, and QUIC Connection Migration is not possible.</t>
          <t>A new Session is established, to a new URI if specified in a GOAWAY. The
publisher sends PUBLISH_NAMESPACE and/or PUBLISH messages to begin publishing
on the new Session, but it does not immediately stop publishing Objects on the
old Session.</t>
          <t>Once the subscriptions have migrated over to the new session, the publisher
can stop publishing Objects on the old session. The relay will attempt
to deduplicate Objects received on both subscriptions. Ideally, the
subscriptions downstream from the relay do not observe this change, and keep
receiving the Objects on the same subscription.</t>
        </section>
      </section>
      <section anchor="relay-track-handling">
        <name>Relay Track Handling</name>
        <t>A relay <bcp14>MUST</bcp14> include all Properties associated with a Track when sending any PUBLISH,
SUBSCRIBE_OK, REQUEST_OK when in response to a TRACK_STATUS, or FETCH_OK, unless
allowed by the property's specification (see <xref target="properties"/>).</t>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information in the Object header (<xref target="object-header"/>).
A relay <bcp14>MUST NOT</bcp14> modify Object fields when forwarding, except for
Object Properties as specified in <xref target="properties"/>.</t>
        <t>A relay <bcp14>MUST</bcp14> treat the object payload as opaque.  A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.  A relay <bcp14>SHOULD</bcp14>
prioritize sending Objects based on <xref target="priorities"/>.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a pair of unidirectional streams to exchange control messages, as
defined in <xref target="session-init"/>.  Every message on a control or request stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Control Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (vi64),
  Message Length (16),
  Message Payload (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined:</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for versions &lt;= 10)</td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for versions &lt;= 10)</td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">RESERVED (CLIENT_SETUP in versions &lt;= 16)</td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">RESERVED (SERVER_SETUP in versions &lt;= 16)</td>
          </tr>
          <tr>
            <td align="right">0x2F00</td>
            <td align="left">SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">REQUEST_OK (<xref target="message-request-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">REQUEST_ERROR  (<xref target="message-request-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">REQUEST_UPDATE (<xref target="message-request-update"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH  (<xref target="message-publish"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">PUBLISH_OK (<xref target="message-publish-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">FETCH_OK (<xref target="message-fetch-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">PUBLISH_NAMESPACE  (<xref target="message-pub-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">NAMESPACE  (<xref target="message-namespace"/>)</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">NAMESPACE_DONE  (<xref target="message-namespace-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0x11</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0xF</td>
            <td align="left">PUBLISH_BLOCKED  (<xref target="message-publish-blocked"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
Control messages have a length to make parsing easier, but no control messages
are intended to be ignored. The length is set to the number of bytes in Message
Payload, which is defined by each message type.  If the length does not match
the length of the Message Payload, the receiver <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
      <section anchor="request-id">
        <name>Request ID</name>
        <t>Request ID is included in request messages and is used to identify
requests across messages. For example, Joining Fetch references
the Request ID of a SUBSCRIBE.</t>
        <t>The client generates even numbered Request IDs, starting at 0, and the
server generates odd numbered Request IDs, starting at 1.  Each
endpoint increments its Request ID by 2 for each new request.</t>
        <t>Each SUBSCRIBE, PUBLISH, FETCH, SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE,
REQUEST_UPDATE, and TRACK_STATUS message consumes a Request ID. Only
request messages include a Request ID; response messages do not, since
they are sent on the same bidirectional stream as the request.</t>
        <t>If an endpoint receives a Request ID where the least significant bit is
incorrect for the sender, or a duplicate Request ID, it <bcp14>MUST</bcp14> close the
session with <tt>INVALID_REQUEST_ID</tt>.</t>
      </section>
      <section anchor="required-request-id">
        <name>Required Request ID</name>
        <t>Every request message includes a Required Request ID Delta field
that specifies a dependency on a prior request. The Required Request ID
is computed as:</t>
        <artwork><![CDATA[
    Required Request ID = Request ID - (2 × Required Request ID
  Delta)
]]></artwork>
        <t>A Required Request ID Delta of 0 indicates no dependency. When
a dependency exists, the receiver <bcp14>MUST</bcp14> deliver the referenced
request to the application before delivering the dependent
request. If the required request does not arrive, the receiver
will time out the dependent request.</t>
        <t>The delta is scaled by two because request IDs from each endpoint
use alternating parity (odd or even), so valid dependencies always
differ by a multiple of two. An endpoint <bcp14>MUST</bcp14> close the session with
INVALID_REQUIRED_REQUEST_ID if it receives a delta where
2 × Required Request ID Delta exceeds the Request ID.</t>
      </section>
      <section anchor="message-params">
        <name>Message Parameters</name>
        <t>Some control messages include a field that encodes optional Message Parameters.
Message Parameters are serialized as follows:</t>
        <figure anchor="moq-message-param">
          <name>Message Parameter</name>
          <artwork><![CDATA[
Message Parameter {
  Type Delta (vi64),
  Value (..)
}
]]></artwork>
        </figure>
        <t>Type Delta: The difference between this Parameter Type and the previous
   Parameter Type in the message, or the Parameter Type itself for the first
   parameter. Parameters <bcp14>MUST</bcp14> be serialized in ascending order by Type.</t>
        <ul spacing="normal">
          <li>
            <t>Value: The encoding is specified by each parameter definition.
The encodings defined in this draft are:
            </t>
            <ul spacing="normal">
              <li>
                <t>uint8: A single-byte unsigned integer (0-255)</t>
              </li>
              <li>
                <t>varint: A variable-length integer</t>
              </li>
              <li>
                <t>Location: Two consecutive varints (Group, Object)</t>
              </li>
              <li>
                <t>Length-prefixed: A varint length followed by that many bytes</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Message Parameters are intended for the peer only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request.</t>
        <t>All Message Parameters <bcp14>MUST</bcp14> be defined in the negotiated version of MOQT or
negotiated via Setup Options. An endpoint that receives an unknown Message
Parameter <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>. Because the receiver
has to understand every Message Parameter, there is no need for a mechanism to
skip unknown parameters.</t>
        <t>The Message Parameter types defined in this version of MOQT are listed below.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same Parameter Type in a message unless the
parameter definition explicitly allows multiple instances of that type to
be sent in a single message. Receivers <bcp14>SHOULD</bcp14> check that there are no
unexpected duplicate parameters and close the session with <tt>PROTOCOL_VIOLATION</tt>
if found.</t>
        <t>The number of Message Parameters is not specifically limited, but the total
length of a control message is limited to 2^16-1 bytes.</t>
        <t>Message Parameters in SUBSCRIBE, PUBLISH_OK and FETCH <bcp14>MUST NOT</bcp14> cause the
publisher to alter the payload of the objects it sends, as that would violate
the track uniqueness guarantee described in <xref target="track-scope"/>.</t>
        <t>Message Parameters in SUBSCRIBE, PUBLISH_OK and FETCH <bcp14>MUST NOT</bcp14> cause the publisher
to alter the payload of the objects it sends, as that would violate the track
uniqueness guarantee described in <xref target="track-scope"/>.</t>
        <section anchor="parameter-scope">
          <name>Parameter Scope</name>
          <t>Message Parameters are always intended for the peer endpoint only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request. Track information not specific to the Message or Session
is encoded in Track Properties. See <xref target="properties"/>.</t>
          <t>Each Message Parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, the receiving
endpoint <bcp14>MUST</bcp14> close the connection with a <tt>PROTOCOL_VIOLATION</tt>.
Note that since Setup Options use a separate namespace, it is impossible for
Message Parameters to appear in Setup messages.</t>
        </section>
        <section anchor="authorization-token">
          <name>AUTHORIZATION TOKEN Parameter</name>
          <t>The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) uses Length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a PUBLISH, SUBSCRIBE, REQUEST_UPDATE,
SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, TRACK_STATUS or FETCH message. This
parameter conveys information to authorize the sender to perform the operation
carrying the parameter.</t>
          <t>The parameter value is a Token structure containing an optional Session-specific
Alias. The Alias allows the sender to reference a previously transmitted Token
Type and Token Value in future messages. The Token structure is serialized as
follows:</t>
          <figure anchor="moq-token">
            <name>Token structure</name>
            <artwork><![CDATA[
Token {
  Alias Type (vi64),
  [Token Alias (vi64),]
  [Token Type (vi64),]
  [Token Value (..)]
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Alias Type - an integer defining both the serialization and the processing
behavior of the receiver. This Alias type has the following code points:</t>
            </li>
          </ul>
          <dl>
            <dt>DELETE (0x0):</dt>
            <dd>
              <t>There is an Alias but no Type or Value. This Alias and the Token Value it was
previously associated with| <bcp14>MUST</bcp14> be retired. Retiring removes them from the pool
of actively registered tokens.</t>
            </dd>
            <dt>REGISTER (0x1):</dt>
            <dd>
              <t>There is an Alias, a Type and a Value. This Alias <bcp14>MUST</bcp14> be associated with the
Token Value for the duration of the Session or it is deleted. This action is
termed "registering" the Token.</t>
            </dd>
            <dt>USE_ALIAS (0x2):</dt>
            <dd>
              <t>There is an Alias but no Type or Value. Use the Token Type and Value
previously registered with this Alias.</t>
            </dd>
            <dt>USE_VALUE (0x3):</dt>
            <dd>
              <t>There is no Alias and there is a Type and Value. Use the Token Value as
provided. The Token Value may be discarded after processing.</t>
            </dd>
          </dl>
          <t>If a server receives Alias Type DELETE (0x0) or USE_ALIAS (0x2) in a SETUP
message, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <ul spacing="normal">
            <li>
              <t>Token Alias - a Session-specific integer identifier that references a Token
Value. There are separate Alias spaces for the client and server (e.g.: they
can each register Alias=1). Once a Token Alias has been registered, it cannot
be re-registered by the same endpoint in the Session without first being
deleted. Use of the Token Alias is optional.</t>
            </li>
            <li>
              <t>Token Type - a numeric identifier for the type of Token payload being
transmitted. This type is defined by the IANA table "MOQT Auth Token Type" (see
<xref target="iana"/>). Type 0 is reserved to indicate that the type is not defined in the
table and is negotiated out-of-band between client and receiver.</t>
            </li>
            <li>
              <t>Token Value - the payload of the Token. The contents and serialization of this
payload are defined by the Token Type.</t>
            </li>
          </ul>
          <t>If the Token structure cannot be decoded, the receiver <bcp14>MUST</bcp14> close the Session
with <tt>KEY_VALUE_FORMATTING_ERROR</tt>.  The receiver of a message attempting to
register an Alias which is already registered <bcp14>MUST</bcp14> close the Session with
<tt>DUPLICATE_AUTH_TOKEN_ALIAS</tt>. The receiver of a message referencing an Alias
that is not currently registered <bcp14>MUST</bcp14> reject the message with
<tt>UNKNOWN_AUTH_TOKEN_ALIAS</tt>.</t>
          <t>The receiver of a message containing a well-formed Token structure but otherwise
invalid AUTHORIZATION TOKEN parameter <bcp14>MUST</bcp14> reject that message with an
<tt>MALFORMED_AUTH_TOKEN</tt> error.</t>
          <t>The receiver of a message carrying an AUTHORIZATION TOKEN with Alias Type
REGISTER that does not result in a Session error <bcp14>MUST</bcp14> register the Token Alias,
in the token cache, even if the message fails for other reasons, including
<tt>Unauthorized</tt>.  This allows senders to pipeline messages that refer to
previously registered tokens without potentially terminating the entire Session.
A receiver <bcp14>MAY</bcp14> store an error code (eg: <tt>UNAUTHORIZED</tt> or
<tt>MALFORMED_AUTH_TOKEN</tt>) in place of the Token Type and Token Alias if any future
message referencing the Token Alias will result in that error. However, it is
important to not store an error code for a token that might be valid in the
future or due to some other property becoming fulfilled which currently
isn't. The size of a registered cache entry includes the length of the Token
Value, regardless of whether it is stored.</t>
          <t>If a receiver detects that an authorization token has expired, it <bcp14>MUST</bcp14> retain
the registered Alias until it is deleted by the sender, though it <bcp14>MAY</bcp14> discard
other state associated with the token that is no longer needed.  Expiration does
not affect the size occupied by a token in the token cache.  Any message that
references the token with Alias Type USE_ALIAS fails with <tt>EXPIRED_AUTH_TOKEN</tt>.</t>
          <t>Using an Alias to refer to a previously registered Token Type and Value is for
efficiency only and has the same effect as if the Token Type and Value was
included directly.  Retiring an Alias that was previously used to authorize a
message has no retroactive effect on the original authorization, nor does it
prevent that same Token Type and Value from being re-registered.</t>
          <t>Senders of tokens <bcp14>SHOULD</bcp14> only register tokens which they intend to re-use during
the Session and <bcp14>SHOULD</bcp14> retire previously registered tokens once their utility
has passed.</t>
          <t>By registering a Token, the sender is requiring the receiver to store the Token
Alias and Token Value until they are deleted, or the Session ends. The receiver
can protect its resources by sending a Setup Option defining the
MAX_AUTH_TOKEN_CACHE_SIZE limit (see <xref target="max-auth-token-cache-size"/>) it is
willing to accept. If a registration is attempted which would cause this limit
to be exceeded, the receiver <bcp14>MUST</bcp14> terminate the Session with a
<tt>AUTH_TOKEN_CACHE_OVERFLOW</tt> error.</t>
          <t>The AUTHORIZATION TOKEN parameter <bcp14>MAY</bcp14> be repeated within a message as long as
the combination of Token Type and Token Value are unique after resolving any
aliases.</t>
          <t>Messages carrying the AUTHORIZATION TOKEN parameter can appear on different
control streams. Because stream processing order can be different than send order, the
receiver and sender can have inconsistent views of the token cache state.</t>
          <t>Senders <bcp14>MUST NOT</bcp14> send USE_ALIAS on one control stream for an alias registered on a
different stream until the sender has received a response to the message
containing the REGISTER. Senders <bcp14>MAY</bcp14> use USE_ALIAS on the same control stream as the
REGISTER without waiting for a response.</t>
          <t>Senders <bcp14>MUST NOT</bcp14> send DELETE for an alias while any message using USE_ALIAS with
that alias has not received a response.</t>
        </section>
        <section anchor="delivery-timeout">
          <name>DELIVERY TIMEOUT Parameter</name>
          <t>The DELIVERY TIMEOUT parameter (Parameter Type 0x02) is a varint. It <bcp14>MAY</bcp14> appear
in a PUBLISH_OK, SUBSCRIBE, or REQUEST_UPDATE message.</t>
          <t>It is the duration in milliseconds the relay <bcp14>SHOULD</bcp14> continue to attempt
forwarding Objects after they have been received.  The start time for the timeout
is based on when the Object header is received, and does not depend upon
the forwarding preference. Objects with forwarding preference 'Datagram' are
not retransmitted when lost, so the Delivery Timeout only limits the amount of
time they can be queued before being sent. There is no explicit signal that an
Object was not sent because the delivery timeout was exceeded.</t>
          <t>A DELIVERY_TIMEOUT value of 0 indicates no timeout; Objects do not expire
due to delivery timeout.</t>
          <t>If both the subscriber specifies this parameter and the Track has a
DELIVERY_TIMEOUT extension, the endpoints use the min of
the two non-zero values for the subscription. If either value is 0, the
non-zero value is used. If both are 0, there is no delivery timeout.</t>
          <t>Publishers can, at their discretion, discontinue forwarding Objects earlier than
the negotiated DELIVERY TIMEOUT, subject to stream closure and ordering
constraints described in <xref target="closing-subgroup-streams"/>.  However, if neither the
subscriber nor publisher specifies DELIVERY TIMEOUT, all Objects in the track
matching the subscription filter are delivered as indicated by their Group Order
and Priority.  If a subscriber fails to consume Objects at a sufficient rate,
causing the publisher to exceed its resource limits, the publisher <bcp14>MAY</bcp14> terminate
the subscription using PUBLISH_DONE with error <tt>TOO_FAR_BEHIND</tt>.</t>
          <t>If an object in a subgroup exceeds the delivery timeout, the publisher <bcp14>MUST</bcp14>
reset the underlying transport stream (see <xref target="closing-subgroup-streams"/>) and
<bcp14>SHOULD NOT</bcp14> attempt to open a new stream to deliver additional Objects in that
Subgroup.</t>
          <t>This parameter is intended to be specific to a
subscription, so it <bcp14>SHOULD NOT</bcp14> be forwarded upstream by a relay that intends
to serve multiple subscriptions for the same track.</t>
          <t>Publishers <bcp14>SHOULD</bcp14> consider whether the entire Object can likely be
successfully delivered within the timeout period before sending any data
for that Object, taking into account priorities, congestion control, and
any other relevant information.</t>
        </section>
        <section anchor="rendezvous-timeout">
          <name>RENDEZVOUS TIMEOUT Parameter</name>
          <t>The RENDEZVOUS_TIMEOUT parameter (Parameter Type 0x04) <bcp14>MAY</bcp14> appear in a
SUBSCRIBE message.</t>
          <t>It is the duration in milliseconds the subscriber is willing to wait for a
publisher to become available. This applies when a relay receives a SUBSCRIBE
for a Track that has no current publisher.</t>
          <t>If the RENDEZVOUS_TIMEOUT is present, the relay <bcp14>SHOULD</bcp14> hold the subscription
and wait for a publisher to appear, up to the specified duration. The relay
does not send SUBSCRIBE_OK until a publisher becomes available. If a publisher
becomes available within this time, the relay proceeds with the subscription
normally. If the timeout expires without a publisher, the relay <bcp14>SHOULD</bcp14> respond
with REQUEST_ERROR with error code TIMEOUT.</t>
          <t>The relay <bcp14>MAY</bcp14> use a shorter timeout than requested by the subscriber. For
example, a relay might limit the maximum rendezvous timeout to protect its
resources.</t>
          <t>A value of 0 indicates the subscriber does not want to wait and expects an
immediate response.  The relay <bcp14>MUST</bcp14> immediately return REQUEST_ERROR with error
code DOES_NOT_EXIST if no publisher is available</t>
          <t>If RENDEZVOUS_TIMEOUT is absent, the default is 0.</t>
        </section>
        <section anchor="subscriber-priority">
          <name>SUBSCRIBER PRIORITY Parameter</name>
          <t>The SUBSCRIBER_PRIORITY parameter (Parameter Type 0x20) is a uint8. It <bcp14>MAY</bcp14>
appear in a SUBSCRIBE, FETCH, REQUEST_UPDATE (for a subscription or FETCH),
or PUBLISH_OK message. It is an integer expressing the priority of a
subscription relative to other subscriptions and fetch responses in the same
session. Lower numbers get higher priority. See <xref target="priorities"/>.</t>
          <t>If omitted from SUBSCRIBE, PUBLISH_OK or FETCH, the publisher uses
the value 128.</t>
        </section>
        <section anchor="group-order">
          <name>GROUP ORDER Parameter</name>
          <t>The GROUP_ORDER parameter (Parameter Type 0x22) is a uint8. It <bcp14>MAY</bcp14> appear in a
SUBSCRIBE, PUBLISH_OK, or FETCH.</t>
          <t>Its value indicates how to prioritize Objects from different groups within
the same subscription (see <xref target="priorities"/>), or how to order Groups in a Fetch
response (see <xref target="fetch-handling"/>). The allowed values are Ascending (0x1) or
Descending (0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If omitted from SUBSCRIBE, the publisher's preference from
the Track is used. If omitted from FETCH, the receiver uses Ascending (0x1).</t>
        </section>
        <section anchor="subscription-filter">
          <name>SUBSCRIPTION FILTER Parameter</name>
          <t>The SUBSCRIPTION_FILTER parameter (Parameter Type 0x21) uses length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH_OK or REQUEST_UPDATE (for a
subscription) message. It is a Subscription Filter (see <xref target="subscription-filters"/>).</t>
          <t>If omitted from SUBSCRIBE or PUBLISH_OK, the subscription is
unfiltered.  If omitted from REQUEST_UPDATE, the value is unchanged.</t>
        </section>
        <section anchor="expires">
          <name>EXPIRES Parameter</name>
          <t>The EXPIRES parameter (Parameter Type 0x8) is a varint. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE_OK, PUBLISH, PUBLISH_OK, or REQUEST_OK. It encodes the time
in milliseconds after which the sender of the parameter will terminate
the subscription. The sender will terminate the subscription using PUBLISH_DONE
or by cancelling the request (see <xref target="request-cancellation"/>).  This value is advisory and the sender
can terminate the subscription prior to or after the expiry time.</t>
          <t>The receiver of the parameter can attempt to extend the subscription by sending
a REQUEST_UPDATE with 0 or more updated parameters. If the receiver has one or
more updated AUTHORIZATION_TOKENs, it <bcp14>SHOULD</bcp14> include those in the
REQUEST_UPDATE. If the extension is granted, the sender includes a new EXPIRES
value in REQUEST_OK. Relays that send this parameter and applications that
receive it <bcp14>MAY</bcp14> introduce jitter to prevent many endpoints from updating
simultaneously.</t>
          <t>If the EXPIRES parameter is 0 or is not present in a message, the subscription
does not expire or expires at an unknown time.</t>
        </section>
        <section anchor="largest-param">
          <name>LARGEST OBJECT Parameter</name>
          <t>The LARGEST_OBJECT parameter (Parameter Type 0x9) is a Location. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE_OK, PUBLISH or in REQUEST_OK (in response to REQUEST_UPDATE or
TRACK_STATUS). It contains the largest Location (see <xref target="location-structure"/>) in the
Track observed by the sending endpoint (see <xref target="subscription-filters"/>). If Objects
have been published on this Track the Publisher <bcp14>MUST</bcp14> include this parameter.</t>
          <t>If omitted from a message, the sending endpoint has not published or received
any Objects in the Track.</t>
        </section>
        <section anchor="forward-parameter">
          <name>FORWARD Parameter</name>
          <t>The FORWARD parameter (Parameter Type 0x10) is a uint8. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE, REQUEST_UPDATE (for a subscription), PUBLISH, PUBLISH_OK and
SUBSCRIBE_NAMESPACE. It specifies the Forwarding State on affected subscriptions
(see <xref target="subscriptions"/>). The allowed values are 0 (don't forward) or 1 (forward).
If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14> close the session
with <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If the parameter is omitted from REQUEST_UPDATE, the value for the
subscription remains unchanged.  If the parameter is omitted from any other
message, the default value is 1.</t>
        </section>
        <section anchor="new-group-request">
          <name>NEW GROUP REQUEST Parameter</name>
          <t>The NEW_GROUP_REQUEST parameter (Parameter Type 0x32) is a varint. It <bcp14>MAY</bcp14> appear
in PUBLISH_OK, SUBSCRIBE or REQUEST_UPDATE for a subscription.  It represents the largest Group
ID in the Track known by the subscriber, plus 1. A value of 0 indicates that the
subscriber has no Group information for the Track.  A subscriber <bcp14>MUST NOT</bcp14> send
this parameter in PUBLISH_OK or REQUEST_UPDATE if the Track did not
include the DYNAMIC_GROUPS Property with value 1.  A subscriber <bcp14>MAY</bcp14>
include this parameter in SUBSCRIBE without foreknowledge of support.  If the
original publisher does not support dynamic Groups, it ignores the parameter in that
case.</t>
          <t>When an Original Publisher that supports dynamic Groups receives a
NEW_GROUP_REQUEST with a value of 0 or a value larger than the current Group,
it <bcp14>SHOULD</bcp14> end the current Group and begin a new Group as soon as practical.  The
Original Publisher <bcp14>MAY</bcp14> delay the NEW_GROUP_REQUEST subject to
implementation specific concerns, for example, achieving a minimum duration for
each Group. The Original Publisher chooses the next Group ID; there are no
requirements that it be equal to the NEW_GROUP_REQUEST parameter value.</t>
          <t>Relay Handling:</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for a Track without an <tt>Established</tt>
subscription <bcp14>MUST</bcp14> include the NEW_GROUP_REQUEST when subscribing upstream.</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for an <tt>Established</tt> subscription with a
value of 0 or a value larger than the Largest Group <bcp14>MUST</bcp14> send a REQUEST_UPDATE
including the NEW_GROUP_REQUEST to the publisher unless:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Track does not support dynamic Groups</t>
            </li>
            <li>
              <t>There is already an outstanding NEW_GROUP_REQUEST from this Relay with a
greater or equal value</t>
            </li>
          </ol>
          <t>If a relay receives a NEW_GROUP_REQUEST with a non-zero value less than or equal
to the Largest Group, it does not send a NEW_GROUP_REQUEST upstream.</t>
          <t>After sending a NEW_GROUP_REQUEST upstream, the request is considered
outstanding until the Largest Group increases.</t>
        </section>
      </section>
      <section anchor="message-setup">
        <name>SETUP</name>
        <t>The <tt>SETUP</tt> message is the first message each endpoint sends on its control
stream (see <xref target="session-init"/>); it allows the endpoints to agree on the initial
configuration before any other control messages are exchanged. An endpoint that
is not offering extensions which modify control message semantics <bcp14>MAY</bcp14> pipeline
other control messages after SETUP without waiting for the peer's SETUP.</t>
        <t>The messages contain a sequence of key-value pairs called Setup Options; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, endpoints <bcp14>MUST</bcp14> ignore unknown
Setup Options.</t>
        <t>The wire format of the Setup message is as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT SETUP Message</name>
          <artwork><![CDATA[
SETUP Message {
  Type (vi64) = 0x2F00,
  Length (16),
  Setup Options (..) ...,
}
]]></artwork>
        </figure>
        <t>Setup Options are serialized as Key-Value-Pairs <xref target="moq-key-value-pair"/>.
Setup Options use a namespace that is constant across all MOQT versions,
separate from Message Parameters.  Receivers <bcp14>MUST</bcp14> ignore unrecognized Setup
Options.  Senders <bcp14>MUST NOT</bcp14> repeat the same Option Type in a message unless
the option definition explicitly allows multiple instances. Receivers <bcp14>MUST</bcp14>
allow duplicates of unknown Setup Options.</t>
        <t>The available Setup Options are detailed in the next sections.</t>
        <section anchor="setup-options">
          <name>Setup Options</name>
          <section anchor="authority">
            <name>AUTHORITY</name>
            <t>The AUTHORITY option (Option Type 0x05) allows the client to specify the
authority component of the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST
NOT</bcp14> be used by the server, or when WebTransport is used.  When an AUTHORITY
option is received from a server, or when an AUTHORITY option is received
while WebTransport is used, or when an AUTHORITY option is received by a
server but the server does not support the specified authority, the session <bcp14>MUST</bcp14>
be closed with <tt>INVALID_AUTHORITY</tt>.</t>
            <t>The AUTHORITY option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the AUTHORITY option to the <tt>authority</tt> portion of the
URI. If an AUTHORITY option does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_AUTHORITY</tt>.</t>
          </section>
          <section anchor="path">
            <name>PATH</name>
            <t>The PATH option (Option Type 0x01) allows the client to specify the path
of the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  When a PATH option is received
from a server, or when a PATH option is received while WebTransport is used,
or when a PATH option is received by a server but the server does not
support the specified path, the session <bcp14>MUST</bcp14> be closed with <tt>INVALID_PATH</tt>.</t>
            <t>The PATH option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the PATH option to the <tt>path-abempty</tt> portion of the
URI; if <tt>query</tt> is present, the client <bcp14>MUST</bcp14> concatenate <tt>?</tt>, followed by
the <tt>query</tt> portion of the URI to the option. If a PATH does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_PATH</tt>.</t>
          </section>
          <section anchor="max-auth-token-cache-size">
            <name>MAX_AUTH_TOKEN_CACHE_SIZE</name>
            <t>The MAX_AUTH_TOKEN_CACHE_SIZE option (Option Type 0x04) communicates the
maximum size in bytes of all actively registered Authorization tokens that the
endpoint is willing to store per Session. This option is optional. The default
value is 0 which prohibits the use of token Aliases.</t>
            <t>The token size is calculated as 16 bytes + the size of the Token Value field
(see <xref target="moq-token"/>). The total size as restricted by the
MAX_AUTH_TOKEN_CACHE_SIZE option is calculated as the sum of the token sizes
for all registered tokens (Alias Type value of 0x01) minus the sum of the token
sizes for all deregistered tokens (Alias Type value of 0x00), since Session
initiation.</t>
          </section>
          <section anchor="setup-auth-token">
            <name>AUTHORIZATION TOKEN</name>
            <t>The AUTHORIZATION TOKEN Setup Option (Option Type 0x03) is functionally
equivalent to the AUTHORIZATION TOKEN message parameter, see <xref target="authorization-token"/>.
The endpoint can specify one or more tokens in SETUP
that the peer can use to authorize MOQT session establishment.</t>
            <t>If an endpoint receives an AUTHORIZATION TOKEN option in SETUP with Alias
Type REGISTER that exceeds its MAX_AUTH_TOKEN_CACHE_SIZE, it <bcp14>MUST NOT</bcp14> fail
the session with <tt>AUTH_TOKEN_CACHE_OVERFLOW</tt>.  Instead, it <bcp14>MUST</bcp14> treat the
option as Alias Type USE_VALUE.  Since each endpoint's SETUP may be sent before
the peer's SETUP is received, the sender <bcp14>MUST</bcp14> handle registration failures
of this kind by purging any Token Aliases that failed to register based on the
peer's MAX_AUTH_TOKEN_CACHE_SIZE option in SETUP (or the default value of 0).</t>
          </section>
          <section anchor="moqt-implementation">
            <name>MOQT IMPLEMENTATION</name>
            <t>The MOQT_IMPLEMENTATION option (Option Type 0x07) identifies the name and
version of the sender's MOQT implementation.  This <bcp14>SHOULD</bcp14> be a UTF-8 encoded
string <xref target="RFC3629"/>, though the message does not carry information, such as
language tags, that would aid comprehension by any entity other than the one
that created the text.</t>
            <t>An endpoint <bcp14>SHOULD</bcp14> send a MOQT_IMPLEMENTATION option unless specifically
configured not to do so. This option helps identify the scope of interoperability
problems and work around implementation-specific limitations.</t>
            <t>Senders <bcp14>SHOULD</bcp14> limit the value to the implementation name and version, avoiding
advertising or other nonessential information. Implementations <bcp14>SHOULD NOT</bcp14> use
the identifiers of other implementations to declare compatibility, as this
undermines the usefulness of implementation identification for debugging.</t>
          </section>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>An endpoint sends a <tt>GOAWAY</tt> message to inform the peer it intends to close
the session soon.  When sent by a server, it can initiate session migration
(<xref target="session-migration"/>) with an optional URI.  When sent by a client, the New
Session URI <bcp14>MUST</bcp14> be zero length.</t>
        <t>The GOAWAY message does not impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually UNSUBSCRIBE for each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new requests after sending a GOAWAY.</t>
        <t>Upon receiving a GOAWAY, an endpoint <bcp14>SHOULD NOT</bcp14> initiate new requests to the
peer including SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE and TRACK_STATUS.</t>
        <t>Sending a GOAWAY does not prevent the sender from initiating new requests,
though the sender <bcp14>SHOULD</bcp14> avoid initiating requests unless required by migration
(see (<xref target="graceful-subscriber-switchover"/> and <xref target="graceful-publisher-switchover"/>).
An endpoint that receives a GOAWAY <bcp14>MAY</bcp14> reject new requests with an appropriate
error code (e.g., REQUEST_ERROR with error code GOING_AWAY).</t>
        <t>The endpoint <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>
(<xref target="session-termination"/>) if it receives multiple GOAWAY messages.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (vi64) = 0x10,
  Length (16),
  New Session URI Length (vi64),
  New Session URI (..),
  Timeout (vi64),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: When received by a client, indicates where the client can
connect to continue this session.  The client <bcp14>MUST</bcp14> use this URI for the new
session if provided. If the URI is zero bytes long, the current URI is reused
instead. The new session URI <bcp14>SHOULD</bcp14> use the same scheme
as the current URI to ensure compatibility.  The maximum length of the New
Session URI is 8,192 bytes.  If an endpoint receives a length exceeding the
maximum, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.  </t>
            <t>
If a server receives a GOAWAY with a non-zero New Session URI Length it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Timeout: The time in milliseconds the sender will wait for the session to be
gracefully closed before closing the session with <tt>GOAWAY_TIMEOUT</tt>. A value of
0 indicates the sender has no specific timeout, and the recipient <bcp14>SHOULD</bcp14> still
close the session as quickly as possible. This is a hint; the sender of the
GOAWAY <bcp14>MAY</bcp14> close the session before the indicated timeout has elapsed.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-ok">
        <name>REQUEST_OK</name>
        <t>The REQUEST_OK message is sent to a response to REQUEST_UPDATE, TRACK_STATUS,
SUBSCRIBE_NAMESPACE and PUBLISH_NAMESPACE requests.</t>
        <figure anchor="moq-transport-request-ok">
          <name>MOQT REQUEST_OK Message</name>
          <artwork><![CDATA[
REQUEST_OK Message {
  Type (vi64) = 0x7,
  Length (16),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-error">
        <name>REQUEST_ERROR</name>
        <t>The REQUEST_ERROR message is sent to a response to any request (SUBSCRIBE, FETCH,
PUBLISH, SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, TRACK_STATUS, REQUEST_UPDATE).</t>
        <figure anchor="moq-transport-request-error">
          <name>MOQT REQUEST_ERROR Message</name>
          <artwork><![CDATA[
REQUEST_ERROR Message {
  Type (vi64) = 0x5,
  Length (16),
  Error Code (vi64),
  Retry Interval (vi64),
  Error Reason (Reason Phrase),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Error Code: Identifies an integer error code for request failure.</t>
          </li>
          <li>
            <t>Retry Interval: The minimum time (in milliseconds) before the request <bcp14>SHOULD</bcp14> be
sent again, plus one. If the value is 0, the request <bcp14>SHOULD NOT</bcp14> be retried.</t>
          </li>
          <li>
            <t>Error Reason: Provides a text description of the request error. See
 <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in REQUEST_ERROR,
as defined below and assigned in <xref target="iana-request-error"/>. Most codepoints have
identical meanings for various request types, but some have request-specific
meanings.</t>
        <t>If a request is retryable with the same parameters at a later time, the sender
of REQUEST_ERROR includes a non-zero Retry Interval in the message. To minimize
the risk of synchronized retry storms, the sender can apply randomization to
each retry interval so that retries are spread out over time.  A Retry Interval
value of 1 indicates the request can be retried immediately.</t>
        <dl>
          <dt>INTERNAL_ERROR:</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED:</dt>
          <dd>
            <t>The subscriber is not authorized to perform the requested action on the given
track.  This might be retryable if the authorization token is not yet valid.</t>
          </dd>
          <dt>TIMEOUT:</dt>
          <dd>
            <t>The subscription could not be completed before an implementation specific
timeout. For example, a relay could not establish an upstream subscription
within the timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED:</dt>
          <dd>
            <t>The endpoint does not support the type of request.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN:</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN:</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
          <dt>GOING_AWAY:</dt>
          <dd>
            <t>The endpoint has received a GOAWAY and <bcp14>MAY</bcp14> reject new requests.</t>
          </dd>
          <dt>EXCESSIVE_LOAD:</dt>
          <dd>
            <t>The responder is overloaded and cannot process the request at this time. The
sender <bcp14>SHOULD</bcp14> use the Retry Interval to indicate when the request can be retried.</t>
          </dd>
          <dt>DUPLICATE_SUBSCRIPTION (0x19):</dt>
          <dd>
            <t>The PUBLISH or SUBSCRIBE request attempted to create a subscription to a Track
with the same role as an existing subscription.</t>
          </dd>
        </dl>
        <t>Below are errors for use by the publisher. They can appear in response to
SUBSCRIBE, FETCH, TRACK_STATUS, and SUBSCRIBE_NAMESPACE, unless otherwise noted.</t>
        <dl>
          <dt>DOES_NOT_EXIST:</dt>
          <dd>
            <t>The track or namespace is not available at the publisher.</t>
          </dd>
          <dt>INVALID_RANGE:</dt>
          <dd>
            <t>In response to SUBSCRIBE or FETCH, specified Filter or range of Locations
cannot be satisfied.</t>
          </dd>
          <dt>MALFORMED_TRACK:</dt>
          <dd>
            <t>In response to a FETCH, a relay publisher detected the track was
malformed (see <xref target="malformed-tracks"/>).</t>
          </dd>
        </dl>
        <t>The following are errors for use by the subscriber. They can appear in response
to PUBLISH or PUBLISH_NAMESPACE, unless otherwise noted.</t>
        <dl>
          <dt>UNINTERESTED:</dt>
          <dd>
            <t>The subscriber is not interested in the track or namespace.</t>
          </dd>
        </dl>
        <t>Errors below can only be used in response to one message type.</t>
        <dl>
          <dt>PREFIX_OVERLAP:</dt>
          <dd>
            <t>In response to SUBSCRIBE_NAMESPACE, the namespace prefix overlaps with another
SUBSCRIBE_NAMESPACE in the same session.</t>
          </dd>
          <dt>NAMESPACE_TOO_LARGE:</dt>
          <dd>
            <t>In response to SUBSCRIBE_NAMESPACE, the namespace prefix matches more
publishers than the relay is willing to enumerate.</t>
          </dd>
          <dt>INVALID_JOINING_REQUEST_ID:</dt>
          <dd>
            <t>In response to a Joining FETCH, the referenced Request ID is not an
<tt>Established</tt> Subscription.</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>A subscription causes the publisher to send newly published objects for a track.</t>
        <t>Subscribe only requests newly published or received Objects.  Objects from the
past are retrieved using FETCH (<xref target="message-fetch"/>).</t>
        <t>The format of SUBSCRIBE is as follows:</t>
        <figure anchor="moq-transport-subscribe-format">
          <name>MOQT SUBSCRIBE Message</name>
          <artwork><![CDATA[
SUBSCRIBE Message {
  Type (vi64) = 0x3,
  Length (16),
  Request ID (vi64),
  Required Request ID Delta (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Required Request ID Delta: See <xref target="required-request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>On successful subscription, the publisher <bcp14>MUST</bcp14> reply with a SUBSCRIBE_OK,
allowing the subscriber to determine the start group/object when not explicitly
specified, and start sending objects.</t>
        <t>If the publisher cannot satisfy the requested Subscription Filter (see
<xref target="subscription-filter"/>) or if the entire End Group has already been published
it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR with code <tt>INVALID_RANGE</tt>.  A publisher <bcp14>MUST
NOT</bcp14> send objects from outside the requested range.</t>
        <t>Subscribing with the FORWARD parameter (<xref target="forward-parameter"/>) equal to 0 allows
publisher or relay to prepare to serve the subscription in advance, reducing the
time to receive objects in the future.</t>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK as the first response message on the
bidi stream for successful subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (vi64) = 0x4,
  Length (16),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>). The same Track Alias <bcp14>MUST NOT</bcp14> be used by a publisher to refer to
two different Tracks simultaneously in the same session. If a subscriber receives a
SUBSCRIBE_OK that uses the same Track Alias as a different track with an
<tt>Established</tt> subscription, it <bcp14>MUST</bcp14> close the session with error <tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-update">
        <name>REQUEST_UPDATE</name>
        <t>The sender of a request (SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE) can later send a REQUEST_UPDATE on the
same bidi stream as the request to modify it.  A subscriber can also send
REQUEST_UPDATE to modify parameters of a subscription established with PUBLISH.</t>
        <t>The receiver of a REQUEST_UPDATE <bcp14>MUST</bcp14> respond with exactly one REQUEST_OK
or REQUEST_ERROR message indicating if the update was successful.</t>
        <t>If a parameter previously set on the request is not present in
<tt>REQUEST_UPDATE</tt>, its value remains unchanged.</t>
        <t>There is no mechanism to remove a parameter from a request.</t>
        <t>The format of REQUEST_UPDATE is as follows:</t>
        <figure anchor="moq-transport-request-update-format">
          <name>MOQT REQUEST_UPDATE Message</name>
          <artwork><![CDATA[
REQUEST_UPDATE Message {
  Type (vi64) = 0x2,
  Length (16),
  Request ID (vi64),
  Required Request ID Delta (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Required Request ID Delta: See <xref target="required-request-id"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <section anchor="updating-subscriptions">
          <name>Updating Subscriptions</name>
          <t>When a subscriber decreases the Start Location of the Subscription Filter
(see <xref target="subscription-filters"/>), the Start Location can be smaller than the Track's
Largest Location, similar to a new Subscription. FETCH can be used to retrieve
any necessary Objects smaller than the current Largest Location.</t>
          <t>When a subscriber increases the End Location, the Largest Object at
the publisher might already be larger than the previous End Location. This will
create a gap in the subscription. The REQUEST_OK in response to the
REQUEST_UPDATE will include the LARGEST_OBJECT parameter, and the subscriber
can issue a FETCH to retrieve the omitted Objects, if any.</t>
          <t>When a subscriber narrows their subscription (increase the Start Location and/or
decrease the End Group), it might still receive Objects outside the
new range if the publisher sent them before the update was processed.</t>
          <t>When a subscription
update is unsuccessful, the publisher <bcp14>MUST</bcp14> also terminate the subscription with
PUBLISH_DONE with error code <tt>UPDATE_FAILED</tt>.</t>
        </section>
      </section>
      <section anchor="message-publish">
        <name>PUBLISH</name>
        <t>The publisher sends PUBLISH as the first message on a new bidirectional stream
to initiate a subscription for a Track. The receiver verifies the publisher is
authorized to publish this track.</t>
        <figure anchor="moq-transport-publish-format">
          <name>MOQT PUBLISH Message</name>
          <artwork><![CDATA[
PUBLISH Message {
  Type (vi64) = 0x1D,
  Length (16),
  Request ID (vi64),
  Required Request ID Delta (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Required Request ID Delta: See <xref target="required-request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in (<xref target="track-name"/>)</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>). The same Track Alias <bcp14>MUST NOT</bcp14> be used by a publisher to refer to
two different Tracks simultaneously in the same session. If a subscriber receives a
PUBLISH that uses the same Track Alias as a different track with an <tt>Established</tt>
subscription, it <bcp14>MUST</bcp14> close the session with error <tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
        <t>A subscriber receiving a PUBLISH for a Track it does not wish to receive <bcp14>SHOULD</bcp14>
send REQUEST_ERROR with error code <tt>UNINTERESTED</tt>, and abandon reading any
publisher initiated streams associated with that subscription using a
STOP_SENDING frame.</t>
        <t>A publisher that sends the FORWARD parameter (<xref target="forward-parameter"/>) equal to 0
indicates that it will not transmit any objects until the subscriber sets the
Forward State to 1. If the FORWARD parameter is omitted or equal to 1, the
publisher will start transmitting objects immediately, possibly before
PUBLISH_OK.</t>
      </section>
      <section anchor="message-publish-ok">
        <name>PUBLISH_OK</name>
        <t>The subscriber sends a PUBLISH_OK as the first response message on the
bidi stream to acknowledge the successful authorization and acceptance of a
PUBLISH message, and establish a subscription.</t>
        <figure anchor="moq-transport-publish-ok">
          <name>MOQT PUBLISH_OK Message</name>
          <artwork><![CDATA[
PUBLISH_OK Message {
  Type (vi64) = 0x1E,
  Length (16),
  Number of Parameters (vi64),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>TODO: A similar section to SUBSCRIBE about how the publisher handles a
filter that is entirely behind Largest Object or is otherwise invalid.</t>
      </section>
      <section anchor="message-publish-done">
        <name>PUBLISH_DONE</name>
        <t>A publisher sends a <tt>PUBLISH_DONE</tt> message as the final message before
closing the subscription's bidi stream to indicate it is done publishing Objects
for that subscription.  The Status Code indicates why the subscription
ended, and whether it was an error. Because PUBLISH_DONE is sent on the control
stream, it is likely to arrive at the receiver before late-arriving objects, and
often even late-opening streams. However, the receiver uses it as an indication
that it should receive any late-opening streams in a relatively short time.</t>
        <t>Note that some objects in the subscribed track might never be delivered,
because a stream was reset, or never opened in the first place, due to the
delivery timeout.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> send PUBLISH_DONE until it has closed all streams it will ever
open, and has no further datagrams to send, for a subscription. After sending
PUBLISH_DONE, the sender can immediately destroy subscription state, although
stream state can persist until delivery completes. The sender might persist
subscription state to enforce the delivery timeout by resetting streams on which
it has already sent FIN, only deleting it when all such streams have received
ACK of the FIN.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> destroy subscription state until it sends PUBLISH_DONE, though
it can choose to stop sending objects (and thus send PUBLISH_DONE) for any
reason.</t>
        <t>A subscriber that receives PUBLISH_DONE <bcp14>SHOULD</bcp14> set a timer of at least its
delivery timeout in case some objects are still inbound due to prioritization or
packet loss. The subscriber <bcp14>MAY</bcp14> dispense with a timer if it unsubscribed or
is otherwise no longer interested in objects from the track. Once the timer has
expired, the receiver destroys subscription state once all open streams for the
subscription have closed. A subscriber <bcp14>MAY</bcp14> discard subscription state earlier,
at the cost of potentially not delivering some late objects to the
application. The subscriber <bcp14>SHOULD</bcp14> send STOP_SENDING on all streams related to
the subscription when it deletes subscription state.</t>
        <t>The format of <tt>PUBLISH_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT PUBLISH_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_DONE Message {
  Type (vi64) = 0xB,
  Length (16),
  Status Code (vi64),
  Stream Count (vi64),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Stream Count: An integer indicating the number of data streams the publisher
opened for this subscription, including streams that contained no Objects (e.g.,
an empty Subgroup).  This helps the subscriber know if it has received
all of the data published in this subscription by comparing the number of
streams received.  The subscriber can immediately remove all subscription state
once the same number of streams have been processed.  If the publisher did not open any streams
for this subscription, the publisher <bcp14>MUST</bcp14> set Stream Count to 0.  If
the publisher is unable to set Stream Count to the exact number of streams
opened for the subscription, it <bcp14>MUST</bcp14> set Stream Count to 2^62 - 1. Subscribers
<bcp14>SHOULD</bcp14> use a timeout or other mechanism to remove subscription state in case
the publisher set an incorrect value, reset a stream before the SUBGROUP_HEADER,
or set the maximum value.  If a subscriber receives more streams for a
subscription than specified in Stream Count, it <bcp14>MAY</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for subscription error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant status code in PUBLISH_DONE, as defined
below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is no longer authorized to subscribe to the given track.</t>
          </dd>
          <dt>TRACK_ENDED (0x2):</dt>
          <dd>
            <t>The track is no longer being published.</t>
          </dd>
          <dt>SUBSCRIPTION_ENDED (0x3):</dt>
          <dd>
            <t>The publisher reached the end of an associated subscription filter.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The subscriber or publisher issued a GOAWAY message.</t>
          </dd>
          <dt>EXPIRED (0x5):</dt>
          <dd>
            <t>The publisher reached the timeout specified in SUBSCRIBE_OK.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x6):</dt>
          <dd>
            <t>The publisher's queue of objects to be sent to the given subscriber exceeds
its implementation defined limit.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x12):</dt>
          <dd>
            <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
          <dt>UPDATE_FAILED (0x8):</dt>
          <dd>
            <t>REQUEST_UPDATE failed on this subscription (see
<xref target="message-request-update"/>).</t>
          </dd>
          <dt>EXCESSIVE_LOAD (0x9):</dt>
          <dd>
            <t>The publisher is overloaded and is terminating the subscription.</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber sends FETCH as the first message on a new bidi stream to a
publisher to request a range of already published objects within a track.</t>
        <t>There are three types of Fetch messages.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Fetch Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1</td>
              <td align="left">Standalone Fetch</td>
            </tr>
            <tr>
              <td align="left">0x2</td>
              <td align="left">Relative Joining Fetch</td>
            </tr>
            <tr>
              <td align="left">0x3</td>
              <td align="left">Absolute Joining Fetch</td>
            </tr>
          </tbody>
        </table>
        <t>An endpoint that receives a Fetch Type other than 0x1, 0x2 or 0x3 <bcp14>MUST</bcp14> close
the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <section anchor="standalone-fetch">
          <name>Standalone Fetch</name>
          <t>A Fetch of Objects performed independently of any Subscribe.</t>
          <t>A Standalone Fetch includes this structure:</t>
          <artwork><![CDATA[
Standalone Fetch {
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Start Location (Location),
  End Location (Location)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Start Location: The start Location.</t>
            </li>
            <li>
              <t>End Location: The end Location, plus 1. A Location.Object value of 0
means the entire group is requested.</t>
            </li>
          </ul>
        </section>
        <section anchor="joining-fetches">
          <name>Joining Fetches</name>
          <t>A Joining Fetch is associated with a Subscribe request by
specifying the Request ID of a subscription in the <tt>Established</tt> or
<tt>Pending (subscriber)</tt> state. Because Joining Fetch references an existing
subscription, if that subscription has not yet been established, the Publisher
receiving the Joining Fetch buffers the pending Joining Fetch until either
the Subscription is established or the request times out.</t>
          <t>A publisher receiving a Joining Fetch uses properties of the associated
subscription to determine the Track Namespace, Track Name
and End Location such that it is contiguous with the associated
subscription.  The subscriber can set the Start Location to an absolute
Location or a Location relative to the Largest group.</t>
          <t>A Subscriber can use a Joining Fetch to, for example, fill a playback buffer
with a certain number of groups prior to the live edge of a track.</t>
          <t>A Joining Fetch is only permitted when the associated subscription has
Forward State 1; otherwise the publisher <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If no Objects have been published for the track the publisher <bcp14>MUST</bcp14>
respond with a REQUEST_ERROR with error code <tt>INVALID_RANGE</tt>.</t>
          <t>A Joining Fetch includes this structure:</t>
          <artwork><![CDATA[
Joining Fetch {
  Joining Request ID (vi64),
  Joining Start (vi64)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Joining Request ID: The Request ID of the subscription to be joined. If a
publisher receives a Joining Fetch with a Request ID that does not correspond
to a subscription in the same session in the <tt>Established</tt> or <tt>Pending
(subscriber)</tt> states, it <bcp14>MUST</bcp14> return a REQUEST_ERROR with error code
<tt>INVALID_JOINING_REQUEST_ID</tt>.</t>
            </li>
            <li>
              <t>Joining Start : A relative or absolute value used to determine the Start
Location, described below.</t>
            </li>
          </ul>
          <section anchor="joining-fetch-range-calculation">
            <name>Joining Fetch Range Calculation</name>
            <t>The Joining Location value from the corresponding
subscription is used to calculate the end of a Joining Fetch, so the
Objects retrieved by the FETCH and SUBSCRIBE are contiguous and non-overlapping.</t>
            <t>The publisher receiving a Joining Fetch sets the End Location to
{Joining Location.Group, Joining Location.Object + 1} (see <xref target="subscriptions"/>.</t>
            <t>Note: the last Object included in the Joining FETCH response is the Object
at the Joining Location.  The <tt>+ 1</tt> above indicates the equivalent Standalone
Fetch encoding.</t>
            <t>For a Relative Joining Fetch, the publisher sets the Start Location to
{Joining Location.Group - Joining Start, 0}.</t>
            <t>For an Absolute Joining Fetch, the publisher sets the Start Location to
{Joining Start, 0}.</t>
          </section>
        </section>
        <section anchor="fetch-handling">
          <name>Fetch Handling</name>
          <t>The format of FETCH is as follows:</t>
          <figure anchor="moq-transport-fetch-format">
            <name>MOQT FETCH Message</name>
            <artwork><![CDATA[
FETCH Message {
  Type (vi64) = 0x16,
  Length (16),
  Request ID (vi64),
  Required Request ID Delta (vi64),
  Fetch Type (vi64),
  [Standalone (Standalone Fetch),]
  [Joining (Joining Fetch),]
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Request ID: See <xref target="request-id"/>.</t>
            </li>
            <li>
              <t>Required Request ID Delta: See <xref target="required-request-id"/>.</t>
            </li>
            <li>
              <t>Fetch Type: Identifies the type of Fetch, whether Standalone, Relative
Joining or Absolute Joining.</t>
            </li>
            <li>
              <t>Standalone: Standalone Fetch structure included when Fetch Type is 0x1</t>
            </li>
            <li>
              <t>Joining: Joining Fetch structure included when Fetch Type is 0x2 or 0x3.</t>
            </li>
            <li>
              <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
            </li>
          </ul>
          <t>A publisher responds to a FETCH request with either a FETCH_OK or a REQUEST_ERROR
message.  The publisher creates a new unidirectional stream that is used to send the
Objects.  The FETCH_OK or REQUEST_ERROR can come at any time relative to object
delivery.</t>
          <t>The publisher responding to a FETCH is
responsible for delivering all available Objects in the requested range in the
requested order (see <xref target="group-order"/>). The Objects in the response are delivered on a single
unidirectional stream. Any gaps in the Group and Object IDs in the response
stream indicate objects that do not exist.  For Ascending Group Order this
includes ranges between the first requested object and the first object in the
stream; between objects in the stream; and between the last object in the
stream and the Largest Group/Object indicated in FETCH_OK, so long as the fetch
stream is terminated by a FIN.  If no Objects exist in the requested range, the
publisher opens the unidirectional stream, sends the FETCH_HEADER (see
<xref target="fetch-header"/>) and closes the stream with a FIN.</t>
          <t>A relay that has cached objects from the beginning of the range <bcp14>MAY</bcp14> start
sending objects immediately in response to a FETCH.  If it encounters an object
in the requested range that is not cached and has unknown status, the relay <bcp14>MUST</bcp14>
pause subsequent delivery until it has confirmed the object's status upstream.
If the upstream FETCH fails, the relay sends a REQUEST_ERROR and can reset the
unidirectional stream.  It can choose to do so immediately or wait until the
cached objects have been delivered before resetting the stream.</t>
          <t>The Object Forwarding Preference does not apply to fetches.</t>
          <t>Fetch specifies an inclusive range of Objects starting at Start Location and
ending at End Location. End Location <bcp14>MUST</bcp14> specify the same or a larger Location
than Start Location for Standalone and Absolute Joining Fetches.</t>
          <t>Objects that are not yet published will not be retrieved by a FETCH.  The
Largest available Object in the requested range is indicated in the FETCH_OK,
and is the last Object a fetch will return if the End Location have not yet been
published.</t>
          <t>If Start Location is greater than the <tt>Largest Object</tt>
(<xref target="message-subscribe-req"/>) the publisher <bcp14>MUST</bcp14> return REQUEST_ERROR with error
code <tt>INVALID_RANGE</tt>.</t>
          <t>A publisher <bcp14>MUST</bcp14> send fetched groups in the requested group order, either
ascending or descending. Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.</t>
          <t>If a Publisher receives a FETCH with a range that includes one or more Objects with
unknown status (e.g. a Relay has temporarily lost contact with the Original
Publisher and does not have the Object in cache), it can choose to reset the
FETCH data stream with UNKNOWN_OBJECT_STATUS, or indicate the range of unknown
Objects and continue serving other known Objects.</t>
        </section>
      </section>
      <section anchor="message-fetch-ok">
        <name>FETCH_OK</name>
        <t>A publisher sends a FETCH_OK as the first message on the bidi stream in response
to a successful fetch. A publisher <bcp14>MAY</bcp14> send Objects in response to a FETCH before
the FETCH_OK message is sent, but the FETCH_OK <bcp14>MUST NOT</bcp14> be sent until the
End Location is known.</t>
        <figure anchor="moq-transport-fetch-ok">
          <name>MOQT FETCH_OK Message</name>
          <artwork><![CDATA[
FETCH_OK Message {
  Type (vi64) = 0x18,
  Length (16),
  End Of Track (8),
  End Location (Location),
  Number of Parameters (vi64),
  Parameters (..) ...
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>End Of Track: 1 if all Objects have been published on this Track, and
the End Location is the final Object in the Track, 0 if not.</t>
          </li>
          <li>
            <t>End Location: The largest object covered by the FETCH response.
The End Location is determined as follows:
            </t>
            <ul spacing="normal">
              <li>
                <t>If the requested FETCH End Location was beyond the Largest known (possibly
final) Object, End Location is {Largest.Group, Largest.Object + 1}</t>
              </li>
              <li>
                <t>If End Location.Object in the FETCH request was 0 and the response covers
the last Object in the Group, End Location is {Fetch.End Location.Group, 0}</t>
              </li>
              <li>
                <t>Otherwise, End Location is Fetch.End Location
Where Fetch.End Location is either Fetch.Standalone.End Location or the computed
End Location described in <xref target="joining-fetch-range-calculation"/>.</t>
              </li>
            </ul>
            <t>
If the relay is subscribed to the track, it uses its knowledge of the largest
{Group, Object} to set End Location.  If it is not subscribed and the
requested End Location exceeds its cached data, the relay makes an upstream
request to complete the FETCH, and uses the upstream response to set End
Location.  </t>
            <t>
If End Location is smaller than the Start Location in the corresponding FETCH
the receiver <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A potential subscriber sends <tt>TRACK_STATUS</tt> as the first and only message on a
new bidi stream to obtain information about the current status of a given track.</t>
        <t>The TRACK_STATUS message format is identical to the SUBSCRIBE message
(<xref target="message-subscribe-req"/>), but subscriber parameters related to Track
delivery (e.g. SUBSCRIBER_PRIORITY) are not included.</t>
        <t>The receiver of a TRACK_STATUS message treats it identically as if it had
received a SUBSCRIBE message, except it does not create downstream subscription
state or send any Objects.  If successful, the publisher responds with a
REQUEST_OK message with the same parameters it would have set in a SUBSCRIBE_OK.
Track Alias is not used.  A publisher responds to a failed TRACK_STATUS with an
appropriate REQUEST_ERROR message.  The bidi stream is closed with a FIN after
REQUEST_OK or REQUEST_ERROR are sent.</t>
        <t>Relays without an <tt>Established</tt> subscription <bcp14>MAY</bcp14> forward TRACK_STATUS to one or more
publishers, or <bcp14>MAY</bcp14> initiate a subscription (subject to authorization) as
described in <xref target="publisher-interactions"/> to determine the response. The publisher
does not send PUBLISH_DONE for this request, and the subscriber cannot send
REQUEST_UPDATE.</t>
      </section>
      <section anchor="message-pub-ns">
        <name>PUBLISH_NAMESPACE</name>
        <t>The publisher sends the PUBLISH_NAMESPACE message as the first message on a
new bidi stream to advertise that it has tracks available within a Track Namespace.
The receiver verifies the publisher is authorized to publish tracks under this
namespace.</t>
        <figure anchor="moq-transport-pub-ns-format">
          <name>MOQT PUBLISH_NAMESPACE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE Message {
  Type (vi64) = 0x6,
  Length (16),
  Request ID (vi64),
  Required Request ID Delta (vi64),
  Track Namespace (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Required Request ID Delta: See <xref target="required-request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
<xref target="track-name"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-namespace">
        <name>NAMESPACE</name>
        <t>The NAMESPACE message is similar to the PUBLISH_NAMESPACE message, except
it is sent on the response stream of a SUBSCRIBE_NAMESPACE request.
All NAMESPACE messages are in response to a SUBSCRIBE_NAMESPACE, so only
the namespace tuples after the 'Track Namespace Prefix' are included
in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-ns-format">
          <name>MOQT NAMESPACE Message</name>
          <artwork><![CDATA[
NAMESPACE Message {
  Type (i) = 0x8,
  Length (16),
  Track Namespace Suffix (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-name"/> after removing namespace tuples included in
'Track Namespace Prefix' {message-subscribe-ns}.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-namespace-done">
        <name>NAMESPACE_DONE</name>
        <t>The publisher sends the <tt>NAMESPACE_DONE</tt> control message to indicate its
intent to stop serving new subscriptions for tracks within the provided Track
Namespace. All NAMESPACE_DONE messages are in response to a SUBSCRIBE_NAMESPACE,
so only the namespace tuples after the 'Track Namespace Prefix' are included
in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-ns-done-format">
          <name>MOQT NAMESPACE_DONE Message</name>
          <artwork><![CDATA[
NAMESPACE_DONE Message {
  Type (i) = 0xE,
  Length (16),
  Track Namespace Suffix (..)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-name"/>. The namespace begins with the
'Track Namespace Prefix' specified in {message-subscribe-ns}.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_NAMESPACE</name>
        <t>The subscriber sends a SUBSCRIBE_NAMESPACE control message on a new
bidirectional stream to a publisher to request the current set of matching
published namespaces and/or <tt>Established</tt> subscriptions, as well as future
updates to the set.</t>
        <figure anchor="moq-transport-subscribe-ns-format">
          <name>MOQT SUBSCRIBE_NAMESPACE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE Message {
  Type (vi64) = 0x11,
  Length (16),
  Request ID (vi64),
  Required Request ID Delta (vi64),
  Track Namespace Prefix (..),
  Subscribe Options (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Required Request ID Delta: See <xref target="required-request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-name"/> with between 0 and 32 Track Namespace Fields.  This prefix is
matched against track namespaces known to the publisher.  For example, if the
publisher is a relay that has received PUBLISH_NAMESPACE messages for
namespaces ("example.com", "meeting=123", "participant=100") and
("example.com", "meeting=123", "participant=200"), a SUBSCRIBE_NAMESPACE for
("example.com", "meeting=123") would match both.  If an endpoint receives a
Track Namespace Prefix consisting of greater than than 32 Track Namespace
Fields, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Subscribe Options: Allows subscribers to request PUBLISH (0x00),
NAMESPACE (0x01), or both (0x02) for a given SUBSCRIBE_NAMESPACE request.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>The publisher will respond with REQUEST_OK or REQUEST_ERROR on the response half
of the stream. If the subscriber receives any frame other than a REQUEST_OK or a
REQUEST_ERROR as the first frame on the response half of the stream, then it <bcp14>MUST</bcp14>
close the session with a PROTOCOL_VIOLATION. If the SUBSCRIBE_NAMESPACE is
successful, the publisher will send matching NAMESPACE messages on the response
stream if they are requested. If it is an error, the stream will be immediately
closed via FIN. Also, any matching PUBLISH messages without an <tt>Established</tt>
Subscription will be established on new bidirectional streams. When there are
changes to the namespaces or subscriptions being published and the subscriber
is subscribed to them, the publisher sends the corresponding NAMESPACE,
NAMESPACE_DONE, or PUBLISH messages.</t>
        <t>A subscriber cannot make overlapping namespace subscriptions on a single
session. Within a session, if a publisher receives a SUBSCRIBE_NAMESPACE with a
Track Namespace Prefix that shares a common prefix with an established namespace
subscription, it <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code
<tt>PREFIX_OVERLAP</tt>.</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>SUBSCRIBE_NAMESPACE is not required for a publisher to send PUBLISH_NAMESPACE
or PUBLISH messages to a subscriber.  It is useful in applications or relays
where subscribers are only interested in or authorized to access a subset of
available namespaces and tracks.</t>
        <t>If the FORWARD parameter (<xref target="forward-parameter"/>) is present in this message and
equal to 0, PUBLISH messages resulting from this SUBSCRIBE_NAMESPACE will set
the FORWARD parameter to 0. If the FORWARD parameter is equal to 1 or omitted
from this message, PUBLISH messages resulting from this SUBSCRIBE_NAMESPACE will
set the FORWARD parameter to 1, or indicate that value by omitting the parameter
(see <xref target="subscriptions"/>).</t>
        <t>The publisher <bcp14>MUST NOT</bcp14> send NAMESPACE_DONE for a namespace suffix before the
corresponding NAMESPACE. If a subscriber receives a NAMESPACE_DONE before the
corresponding NAMESPACE, it <bcp14>MUST</bcp14> close the session with a 'PROTOCOL_VIOLATION'.</t>
        <t>If the publisher is unable to send NAMESPACE or NAMESPACE_DONE messages in a
timely manner because the SUBSCRIBE_NAMESPACE response stream is blocked by flow
control, the publisher <bcp14>MAY</bcp14> reset the SUBSCRIBE_NAMESPACE response stream.  When
a subscriber receives a stream reset on a SUBSCRIBE_NAMESPACE response stream, it
<bcp14>SHOULD</bcp14> treat this as though each active namespace received a NAMESPACE_DONE.</t>
      </section>
      <section anchor="message-publish-blocked">
        <name>PUBLISH_BLOCKED</name>
        <t>The publisher sends the <tt>PUBLISH_BLOCKED</tt> control message to indicate it cannot
send a PUBLISH message to initiate a new Subscription for a Track in the
SUBSCRIBE_NAMESPACE's Track Namespace. All PUBLISH_BLOCKED messages are in
response to a SUBSCRIBE_NAMESPACE, so only the namespace tuples after the
'Track Namespace Prefix' are included in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-publish-blocked-format">
          <name>MOQT PUBLISH_BLOCKED Message</name>
          <artwork><![CDATA[
PUBLISH_BLOCKED Message {
  Type (vi64) = 0xF,
  Length (16),
  Track Namespace Suffix (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-name"/>. The namespace begins with the
'Track Namespace Prefix' specified in {message-subscribe-ns}.</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams and Datagrams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams or Datagrams
and sends Objects matching a FETCH request on one Data Stream.</t>
      <t>Unidirectional stream types are defined in <xref target="stream-types"/>. Data streams
use SUBGROUP_HEADER or FETCH_HEADER types.</t>
      <t>All MOQT datagrams start with a variable-length integer indicating the type of
the datagram.  See <xref target="object-datagram"/>.</t>
      <t>An endpoint that receives an unknown datagram type <bcp14>MUST</bcp14> close the session.</t>
      <t>Every Object has a 'Object Forwarding Preference' and the Original Publisher
<bcp14>MAY</bcp14> use both Subgroups and Datagrams within a Group or Track.</t>
      <section anchor="track-alias">
        <name>Track Alias</name>
        <t>To optimize wire efficiency, Subgroups and Datagrams refer to a track by a
numeric identifier, rather than the Full Track Name.  Track Alias is chosen by
the publisher and included in SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or PUBLISH
(<xref target="message-publish"/>).</t>
        <t>Objects can arrive after a subscription has been cancelled.  Subscribers <bcp14>SHOULD</bcp14>
retain sufficient state to quickly discard these unwanted Objects, rather than
treating them as belonging to an unknown Track Alias.</t>
      </section>
      <section anchor="message-object">
        <name>Objects</name>
        <t>An Object contains a range of contiguous bytes from the
specified track, as well as associated metadata required to deliver,
cache, and forward it.  Objects are sent by publishers.</t>
        <section anchor="object-header">
          <name>Object Header</name>
          <t>A canonical MoQ Object has the following fields:</t>
          <ul spacing="normal">
            <li>
              <t>Track Namespace and Track Name: The track this object belongs to.</t>
            </li>
            <li>
              <t>Group ID: The identifier of the Object's Group (see <xref target="model-group"/>) within
the Track.</t>
            </li>
            <li>
              <t>Object ID: The order of the object within the group.</t>
            </li>
            <li>
              <t>Publisher Priority: An 8 bit integer indicating the publisher's priority for
the Object (<xref target="priorities"/>).</t>
            </li>
            <li>
              <t>Object Forwarding Preference: An enumeration indicating how a publisher sends
an object. The preferences are Subgroup and Datagram.  <tt>Object Forwarding
Preference</tt> is a property of an individual Object and can vary among
Objects in the same Track.  In a subscription, an Object <bcp14>MUST</bcp14> be sent
according to its <tt>Object Forwarding Preference</tt>.</t>
            </li>
            <li>
              <t>Subgroup ID: The identifier of the Object's Subgroup (see <xref target="model-subgroup"/>)
within the Group. This field is omitted if the <tt>Object Forwarding Preference</tt>
is Datagram.</t>
            </li>
            <li>
              <t>Object Status: An enumeration used to indicate whether the Object is a normal Object
or mark the end of a group or track. See <xref target="object-status"/> below.</t>
            </li>
            <li>
              <t>Object Properties : A sequence of Properties associated with the object.
See <xref target="object-properties"/>.</t>
            </li>
            <li>
              <t>Object Payload: An opaque payload intended for an End Subscriber and <bcp14>SHOULD
NOT</bcp14> be processed by a relay. Only present when 'Object Status' is Normal (0x0).</t>
            </li>
          </ul>
          <section anchor="object-status">
            <name>Object Status</name>
            <t>The Object Status is a field that is only present in objects that are delivered
via a SUBSCRIPTION, and is absent in Objects delivered via a FETCH.  It allows
the publisher to explicitly communicate that a specific range of objects does
not exist.</t>
            <t><tt>Status</tt> can have following values:</t>
            <ul spacing="normal">
              <li>
                <t>0x0 := Normal object. This status is implicit for any non-zero length object.
       Zero-length objects explicitly encode the Normal status.</t>
              </li>
              <li>
                <t>0x3 := Indicates End of Group. Indicates that no objects with the specified
       Group ID and the Object ID that is greater than or equal to the one
       specified exist in the group identified by the Group ID.</t>
              </li>
              <li>
                <t>0x4 := Indicates End of Track. Indicates that no objects with the location
       that is equal to or greater than the one specified exist.</t>
              </li>
            </ul>
            <t>All of those <bcp14>SHOULD</bcp14> be cached.</t>
            <t>Any other value <bcp14>SHOULD</bcp14> be treated as a protocol error and the session <bcp14>SHOULD</bcp14>
be closed with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).
Any object with a status code other than zero <bcp14>MUST</bcp14> have an empty payload.</t>
          </section>
          <section anchor="object-properties">
            <name>Object Properties</name>
            <t>Any Object with status Normal can have properties (<xref target="properties"/>).
If an endpoint receives properties on an Object with status that is
not Normal, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>Object Properties are visible to relays and are intended to be relevant
to MOQT Object distribution. Any Object metadata never intended to be accessed
by the transport or Relays <bcp14>SHOULD</bcp14> be serialized as part of the Object payload
and not as an Object Property.</t>
            <t>Object Properties are serialized as a length in bytes followed by
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
            <artwork><![CDATA[
Object Properties {
  Properties Length (vi64),
  Properties (..),
}
]]></artwork>
            <t>Object Property types are registered in the IANA table
'MOQ Properties'. See <xref target="iana"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="datagrams">
        <name>Datagrams</name>
        <t>A single object can be conveyed in a datagram.  The Track Alias field
(<xref target="track-alias"/>) indicates the track this Datagram belongs to.  If an endpoint
receives a datagram with an unknown Track Alias, it <bcp14>MAY</bcp14> drop the datagram or
choose to buffer it for a brief period to handle reordering with the control
message that establishes the Track Alias.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> message has an <tt>Object Forwarding
Preference</tt> = <tt>Datagram</tt>.</t>
        <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Datagram</tt>, determine
the length of the header and payload and send the Object as datagram.  When the
total size is larger than the maximum datagram size for the session, the Object
will be dropped without any explicit notification.</t>
        <t>Each session along the path between the Original Publisher and End Subscriber
might have different maximum datagram sizes. Additionally, Object Properties
(<xref target="object-properties"/>) can be added to Objects as they pass
through the MOQT network, increasing the size of the Object and the chances it
will exceed the maximum datagram size of a downstream session and be dropped.</t>
        <section anchor="object-datagram">
          <name>Object Datagram</name>
          <t>An <tt>OBJECT_DATAGRAM</tt> carries a single object in a datagram.</t>
          <figure anchor="object-datagram-format">
            <name>MOQT OBJECT_DATAGRAM</name>
            <artwork><![CDATA[
OBJECT_DATAGRAM {
  Type (i) = 0x00..0x0F / 0x20..0x21 / 0x24..0x25 /
             0x28..0x29 / 0x2C..0x2D,
  Track Alias (vi64),
  Group ID (vi64),
  [Object ID (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Type field in the OBJECT_DATAGRAM takes the form 0b00X0XXXX (or the set of
values from 0x00 to 0x0F, 0x20 to 0x2F). However, not all Type values in this
range are valid. The four low-order bits and bit 5 of the Type field determine
which fields are present in the datagram:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is
present. When set to 1, the Object Properties structure defined in
<xref target="object-properties"/> is present. When set to 0, the field is absent.
If an endpoint receives a datagram with the PROPERTIES bit set and an
Properties Length of 0, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
            <li>
              <t>The <strong>END_OF_GROUP</strong> bit (0x02) indicates End of Group. When set to 1, this
indicates that no Object with the same Group ID and an Object ID greater than
the Object ID in this datagram exists.</t>
            </li>
            <li>
              <t>The <strong>ZERO_OBJECT_ID</strong> bit (0x04) indicates when the Object ID field is
present.  When set to 1, the Object ID field is omitted and the Object ID is
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>When set to 0, the Object ID field is present.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x08) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Object inherits
the Publisher Priority specified in the control message that established the
subscription. When set to 0, the Priority field is present.</t>
            </li>
            <li>
              <t>The <strong>STATUS</strong> bit (0x20) indicates whether the datagram contains an Object
Status or Object Payload. When set to 1, the Object Status field is present
and there is no Object Payload. When set to 0, the Object Payload is present
and the Object Status field is omitted. There is no explicit length field for
the Object Payload; the entirety of the transport datagram following the
Object header contains the payload.</t>
            </li>
          </ul>
          <t>The following Type values are invalid. If an endpoint receives a datagram with
any of these Type values, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Type values with both the STATUS bit (0x20) and END_OF_GROUP bit (0x02) set: 0x22,
0x23, 0x26, 0x27, 0x2A, 0x2B, 0x2E, 0x2F. An object status message cannot signal
end of group.</t>
            </li>
            <li>
              <t>Type values that do not match the form 0b00X0XXXX (i.e., Type values outside the
ranges 0x00..0x0F and 0x20..0x2F).</t>
            </li>
          </ul>
          <t>If an Object Datagram includes both the STATUS bit and PROPERTIES bit, and the
Object Status is not Normal (0x0), the endpoint <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>, because only Normal Objects can have Properties.</t>
        </section>
      </section>
      <section anchor="streams">
        <name>Streams</name>
        <t>When Objects are sent on streams, the stream begins with a Subgroup or Fetch
Header and is followed by one or more sets of serialized Object fields.
If a stream ends gracefully (i.e., the stream terminates with a FIN) in the
middle of a serialized Object, the session <bcp14>SHOULD</bcp14> be closed with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>A publisher <bcp14>SHOULD NOT</bcp14> open more than one stream at a time with the same Subgroup
Header field values.</t>
        <section anchor="stream-cancellation">
          <name>Stream Cancellation</name>
          <t>Streams aside from the control streams <bcp14>MAY</bcp14> be canceled due to congestion
or other reasons by either the publisher or subscriber. Early termination of a
unidirectional stream does not affect the MoQ application state, and therefore has
no effect on outstanding subscriptions. Termination of a bidi request stream
terminates the Subscription, Fetch, Track Status, Publish Namespace, or Subscribe Namespace
request. When possible, Publishers <bcp14>SHOULD</bcp14> send a PUBLISH_DONE when terminating a
subscription instead of abruptly terminating the associated control stream.</t>
        </section>
        <section anchor="subgroup-header">
          <name>Subgroup Header</name>
          <t>All Objects on a Subgroup stream belong to the track identified by <tt>Track Alias</tt>
(see <xref target="track-alias"/>) and the Subgroup indicated by 'Group ID' and <tt>Subgroup
ID</tt> indicated by the SUBGROUP_HEADER.</t>
          <t>If an endpoint receives a subgroup with an unknown Track Alias, it <bcp14>MAY</bcp14> abandon
the stream, or choose to buffer it for a brief period to handle reordering with
the control message that establishes the Track Alias.  The endpoint <bcp14>MAY</bcp14> withhold
stream flow control beyond the SUBGROUP_HEADER until the Track Alias has been
established.  To prevent deadlocks, endpoints <bcp14>MUST</bcp14> allocate connection flow
control to the control streams before allocating it to any data streams. Otherwise,
a receiver might wait for a control message containing a Track Alias to release
flow control, while the sender waits for flow control to send the message.</t>
          <figure anchor="object-header-format">
            <name>MOQT SUBGROUP_HEADER</name>
            <artwork><![CDATA[
SUBGROUP_HEADER {
  Type (i) = 0x10..0x15 / 0x18..0x1D / 0x30..0x35 / 0x38..0x3D,
  Track Alias (vi64),
  Group ID (vi64),
  [Subgroup ID (vi64),]
  [Publisher Priority (8),]
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>SUBGROUP_HEADER</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <t>The Type field in the SUBGROUP_HEADER takes the form 0b00X1XXXX (or the set of
values from 0x10 to 0x1F, 0x30 to 0x3F), where bit 4 is always set to
1. However, not all Type values in this range are valid. The four low-order bits
and bit 5 determine which fields are present in the header:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is present
in all Objects in this Subgroup. When set to 1, the Object Properties structure
defined in <xref target="object-properties"/> is present in all Objects. When set to 0, the
field is never present. Objects with no properties set Properties Length to 0.</t>
            </li>
            <li>
              <t>The <strong>SUBGROUP_ID_MODE</strong> field (bits 1-2, mask 0x06) is a two-bit field that
determines the encoding of the Subgroup ID. To extract this value, perform a
bitwise AND with mask 0x06 and right-shift by 1 bit:  </t>
              <ul spacing="normal">
                <li>
                  <t>0b00: The Subgroup ID field is absent and the Subgroup ID is 0.</t>
                </li>
                <li>
                  <t>0b01: The Subgroup ID field is absent and the Subgroup ID is the Object ID
of the first Object transmitted in this Subgroup.</t>
                </li>
                <li>
                  <t>0b10: The Subgroup ID field is present in the header.</t>
                </li>
                <li>
                  <t>0b11: Reserved for future use.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The <strong>END_OF_GROUP</strong> bit (0x08) indicates that this subgroup contains the
largest Object in the Group. When set to 1, the subscriber can infer the final
Object in the Group when the data stream is terminated by a FIN. In this case,
Objects that have the same Group ID and an Object ID larger than the last
Object received on the stream do not exist. This does not apply when the data
stream is terminated with a RESET_STREAM or RESET_STREAM_AT.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x20) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Subgroup
inherits the Publisher Priority specified in the control message that
established the subscription. When set to 0, the Priority field is present in
the Subgroup header.</t>
            </li>
          </ul>
          <t>The following Type values are invalid. If an endpoint receives a stream header
with any of these Type values, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Type values with SUBGROUP_ID_MODE set to 0b11: 0x16, 0x17, 0x1E, 0x1F, 0x36, 0x37,
0x3E, 0x3F. This mode is reserved for future use.</t>
            </li>
            <li>
              <t>Type values that do not match the form 0b00X1XXXX (i.e., Type values outside the
ranges 0x10..0x1F and 0x30..0x3F, or values where bit 4 is not set).</t>
            </li>
          </ul>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Subgroup ID</tt>,
or open a new one and send the <tt>SUBGROUP_HEADER</tt>. Then serialize the
following fields.</t>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <t>The Object ID Delta + 1 is added to the previous Object ID in the Subgroup
stream if there was one.  The Object ID is the Object ID Delta if it's the first
Object in the Subgroup stream. For example, a Subgroup of sequential Object IDs
starting at 0 will have 0 for all Object ID Delta values. A consumer cannot
infer information about the existence of Objects between the current and
previous Object ID in the Subgroup (e.g. when Object ID Delta is non-zero)
unless there is an Prior Object ID Gap extension header (see
<xref target="prior-object-id-gap"/>).</t>
          <figure anchor="object-subgroup-format">
            <name>MOQT Subgroup Object Fields</name>
            <artwork><![CDATA[
{
  Object ID Delta (vi64),
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
        </section>
        <section anchor="closing-subgroup-streams">
          <name>Closing Subgroup Streams</name>
          <t>Subscribers will often need to know if they have received all objects in a
Subgroup, particularly if they serve as a relay or cache. QUIC and Webtransport
streams provide signals that can be used for this purpose. Closing Subgroups
promptly frees system resources and often unlocks flow control credit to open
more streams.</t>
          <t>If a sender has delivered all objects in a Subgroup to the QUIC stream, except
any Objects with Locations smaller than the subscription's Start Location, it
<bcp14>MUST</bcp14> close the stream with a FIN.</t>
          <t>If a sender closes the stream before delivering all such objects to the QUIC
stream, it <bcp14>MUST</bcp14> use a RESET_STREAM or RESET_STREAM_AT
<xref target="I-D.draft-ietf-quic-reliable-stream-reset"/> frame. This includes, but is
not limited to:</t>
          <ul spacing="normal">
            <li>
              <t>An Object in an open Subgroup exceeding its Delivery Timeout</t>
            </li>
            <li>
              <t>Early termination of subscription due to request cancellation</t>
            </li>
            <li>
              <t>A publisher's decision to end the subscription early</t>
            </li>
            <li>
              <t>A REQUEST_UPDATE moving the subscription's End Group to a smaller Group or
the Start Location to a larger Location</t>
            </li>
            <li>
              <t>Omitting a Subgroup Object due to the subscriber's Forward State</t>
            </li>
          </ul>
          <t>When RESET_STREAM_AT is used, the
reliable_size <bcp14>SHOULD</bcp14> include the stream header so the receiver can identify the
corresponding subscription and accurately account for reset data streams when
handling PUBLISH_DONE (see <xref target="message-publish-done"/>).  Publishers that reset
data streams without using RESET_STREAM_AT with an appropriate reliable_size can
cause subscribers to hold on to subscription state until a timeout expires.</t>
          <t>A sender might send all objects in a Subgroup and the FIN on a QUIC stream,
and then reset the stream. In this case, the receiving application would receive
the FIN if and only if all objects were received. If the application receives
all data on the stream and the FIN, it can ignore any RESET_STREAM it receives.</t>
          <t>If a sender will not deliver any objects from a Subgroup, it <bcp14>MAY</bcp14> send
a SUBGROUP_HEADER on a new stream, with no objects, and then send RESET_STREAM_AT
with a reliable_size equal to the length of the stream header. This explicitly
tells the receiver there is an unsent Subgroup.</t>
          <t>A relay <bcp14>MUST NOT</bcp14> forward an Object on an existing Subgroup stream unless it is
the next Object in that Subgroup.  A relay determines that an Object is the next
Object in the Subgroup if at least one of the following is true:</t>
          <ul spacing="normal">
            <li>
              <t>The Object ID is one greater than the previous Object sent on this Subgroup
stream.</t>
            </li>
            <li>
              <t>The Object was received on the same upstream Subgroup stream as the
previously sent Object on the downstream Subgroup stream, with no other
Objects in between.</t>
            </li>
            <li>
              <t>It determined all Object IDs between the current and previous Object IDs
on the Subgroup stream belong to different Subgroups or do not exist.</t>
            </li>
          </ul>
          <t>If the relay does not know if an Object is the next Object, it <bcp14>MUST</bcp14> reset the
Subgroup stream and open a new one to forward it.</t>
          <t>Since SUBSCRIBEs always end on a group boundary, an ending subscription can
always cleanly close all its subgroups. A sender that terminates a stream
early for any other reason (e.g., to handoff to a different sender) <bcp14>MUST</bcp14>
use RESET_STREAM or RESET_STREAM_AT. Senders <bcp14>SHOULD</bcp14> terminate a stream on
Group boundaries to avoid doing so.</t>
          <t>An MOQT implementation that processes a stream FIN is assured it has received
all objects in a subgroup from the start of the subscription. If a relay, it
can forward stream FINs to its own subscribers once those objects have been
sent. A relay <bcp14>MAY</bcp14> treat receipt of EndOfGroup or EndOfTrack objects as a signal
to close corresponding streams even if the FIN has not arrived, as further
objects on the stream would be a protocol violation.</t>
          <t>Similarly, an EndOfGroup message indicates the maximum Object ID in the
Group, so if all Objects in the Group have been received, a FIN can be sent on
any stream where the entire subgroup has been sent. This might be complex to
implement.</t>
          <t>Processing a RESET_STREAM or RESET_STREAM_AT means that there might be other
objects in the Subgroup beyond the last one received. A relay might immediately
reset the corresponding downstream stream, or it might attempt to recover the
missing Objects in an effort to send all the Objects in the subgroups and the FIN.
It also might send RESET_STREAM_AT with reliable_size set to the last Object it
has, so as to reliably deliver the Objects it has while signaling that other
Objects might exist.</t>
          <t>A subscriber <bcp14>MAY</bcp14> send a QUIC STOP_SENDING frame for a subgroup stream if the Group
or Subgroup is no longer of interest to it. The publisher <bcp14>SHOULD</bcp14> respond with
RESET_STREAM or RESET_STREAM_AT. If RESET_STREAM_AT is sent, note that the receiver
has indicated no interest in the objects, so setting a reliable_size beyond the
stream header is of questionable utility.</t>
          <t>RESET_STREAM and STOP_SENDING on SUBSCRIBE data streams have no impact on other
Subgroups in the Group or the subscription, although applications might cancel all
Subgroups in a Group at once.</t>
          <t>A publisher that receives a STOP_SENDING on a Subgroup stream <bcp14>SHOULD NOT</bcp14> attempt
to open a new stream to deliver additional Objects in that Subgroup.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in RESET_STREAM or
RESET_STREAM_AT, as defined below:</t>
          <dl>
            <dt>INTERNAL_ERROR (0x0):</dt>
            <dd>
              <t>An implementation specific error.</t>
            </dd>
            <dt>CANCELLED (0x1):</dt>
            <dd>
              <t>The subscriber or publisher cancelled the Request. For Subscriptions,
PUBLISH_DONE (<xref target="message-publish-done"/>) will have a more detailed status code.</t>
            </dd>
            <dt>DELIVERY_TIMEOUT (0x2):</dt>
            <dd>
              <t>The DELIVERY TIMEOUT <xref target="delivery-timeout"/> was exceeded for this stream.</t>
            </dd>
            <dt>SESSION_CLOSED (0x3):</dt>
            <dd>
              <t>The publisher session is being closed.</t>
            </dd>
            <dt>UNKNOWN_OBJECT_STATUS (0x4):</dt>
            <dd>
              <t>In response to a FETCH, the publisher is unable to determine the Status
of the next Object in the requested range.</t>
            </dd>
            <dt>TOO_FAR_BEHIND (0x5):</dt>
            <dd>
              <t>The corresponding subscription has exceeded the publisher's resource limits and
is being terminated (see <xref target="delivery-timeout"/>).</t>
            </dd>
            <dt>EXCESSIVE_LOAD (0x9):</dt>
            <dd>
              <t>The publisher is overloaded and is resetting this stream.</t>
            </dd>
            <dt>MALFORMED_TRACK (0x12):</dt>
            <dd>
              <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
            </dd>
          </dl>
        </section>
        <section anchor="fetch-header">
          <name>Fetch Header</name>
          <t>When a stream begins with <tt>FETCH_HEADER</tt>, all objects on the stream belong to the
track requested in the Fetch message identified by <tt>Request ID</tt>.</t>
          <figure anchor="fetch-header-format">
            <name>MOQT FETCH_HEADER</name>
            <artwork><![CDATA[
FETCH_HEADER {
  Type (vi64) = 0x5,
  Request ID (vi64),
}
]]></artwork>
          </figure>
          <t>Each Object sent on a FETCH stream after the FETCH_HEADER has the following
format:</t>
          <figure anchor="object-fetch-format">
            <name>MOQT Fetch Object Fields</name>
            <artwork><![CDATA[
{
  Serialization Flags (vi64),
  [Group ID (vi64),]
  [Subgroup ID (vi64),]
  [Object ID (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Serialization Flags field defines the serialization of the Object.  It is
a variable-length integer.  When less than 128, the bits represent flags described
below.  The following additional values are defined:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Meaning</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x8C</td>
                <td align="left">End of Non-Existent Range</td>
              </tr>
              <tr>
                <td align="left">0x10C</td>
                <td align="left">End of Unknown Range</td>
              </tr>
            </tbody>
          </table>
          <t>Any other value is a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <section anchor="flags">
            <name>Flags</name>
            <t>The two least significant bits (LSBs) of the Serialization Flags form a two-bit
field that defines the encoding of the Subgroup.  To extract this value, the
Subscriber performs a bitwise AND operation with the mask 0x03.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Bitmask Result (Serialization Flags &amp; 0x03)</th>
                  <th align="left">Meaning</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x00</td>
                  <td align="left">Subgroup ID is zero</td>
                </tr>
                <tr>
                  <td align="left">0x01</td>
                  <td align="left">Subgroup ID is the prior Object's Subgroup ID</td>
                </tr>
                <tr>
                  <td align="left">0x02</td>
                  <td align="left">Subgroup ID is the prior Object's Subgroup ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x03</td>
                  <td align="left">The Subgroup ID field is present</td>
                </tr>
              </tbody>
            </table>
            <t>The following table defines additional flags within the Serialization Flags
field. Each flag is an independent boolean value, where a set bit (1) indicates
the corresponding condition is true.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Bitmask</th>
                  <th align="left">Condition if set</th>
                  <th align="left">Condition if not set (0)</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x04</td>
                  <td align="left">Object ID field is present</td>
                  <td align="left">Object ID is the prior Object's ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x08</td>
                  <td align="left">Group ID field is present</td>
                  <td align="left">Group ID is the prior Object's Group ID</td>
                </tr>
                <tr>
                  <td align="left">0x10</td>
                  <td align="left">Priority field is present</td>
                  <td align="left">Priority is the prior Object's Priority</td>
                </tr>
                <tr>
                  <td align="left">0x20</td>
                  <td align="left">Properties field is present</td>
                  <td align="left">Properties field is not present</td>
                </tr>
                <tr>
                  <td align="left">0x40</td>
                  <td align="left">Datagram: ignore the two least significant bits</td>
                  <td align="left">Decode the Subgroup ID as indicated by the two least significant bits</td>
                </tr>
              </tbody>
            </table>
            <t>If the first Object in the FETCH response uses a flag that references fields in
the prior Object, the Subscriber <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>The Object Properties structure is defined in <xref target="object-properties"/>.</t>
            <t>When encoding an Object with a Forwarding Preference of "Datagram" (see
<xref target="object-properties"/>), the object has no Subgroup ID. The publisher <bcp14>MUST</bcp14> SET bit 0x40 to '1'.
When 0x40 is set, it <bcp14>SHOULD</bcp14> set the two least significant bits to zero and the subscriber
<bcp14>MUST</bcp14> ignore the bits.</t>
          </section>
          <section anchor="end-of-range">
            <name>End of Range</name>
            <t>When Serialization Flags indicates an End of Range (e.g. values 0x8C or 0x10C),
the Group ID and Object ID fields are present.  Subgroup ID, Priority and
Properties are not present. All Objects with Locations between the last
serialized Object, if any, and this Location, inclusive, either do not exist
(when Serialization Flags is 0x8C) or are unknown (0x10C).  A publisher <bcp14>SHOULD
NOT</bcp14> use <tt>End of Non-Existent Range</tt> in a FETCH response except to split a range
of Objects that will not be serialized into those that are known not to exist
and those with unknown status.</t>
            <t>When an Object follows an End of Range indicator and uses flags that reference
the "prior Object", the prior Object fields are determined as follows:</t>
            <ul spacing="normal">
              <li>
                <t>Prior Group ID and prior Object ID: The values from the End of Range indicator.</t>
              </li>
              <li>
                <t>Prior Subgroup ID: The Subgroup ID from the last actual Object before the
End of Range indicator. If there was no prior Object, using a flag that
references the prior Subgroup ID is a <tt>PROTOCOL_VIOLATION</tt>.</t>
              </li>
              <li>
                <t>Prior Priority: The Priority from the last actual Object before the End of
Range indicator. If there was no prior Object, using a flag that references
the prior Priority is a <tt>PROTOCOL_VIOLATION</tt>.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>Sending a subgroup on one stream:</t>
        <artwork><![CDATA[
Stream = 2

SUBGROUP_HEADER {
  Type = 0x14
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
  Priority = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
        <t>Sending a group on one stream, with the first object containing two
Properties.</t>
        <artwork><![CDATA[
Stream = 2

SUBGROUP_HEADER {
  Type = 0x35
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
}
{
  Object ID Delta = 0 (Object ID is 0)
  Properties Length = 33
    { Type = 4
      Value = 2186796243
    },
    { Type = 77
      Length = 21
      Value = "traceID:123456"
    }
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID Delta = 0 (Object ID is 1)
  Properties Length = 0
  Object Payload Length = 4
  Payload = "efgh"
}

]]></artwork>
      </section>
    </section>
    <section anchor="moqt-properties">
      <name>MOQT Properties</name>
      <t>The following Properties are defined in MOQT. Each Property
specifies whether it can be used with Tracks, Objects, or both.</t>
      <t>Property types in ranges reserved for application-specific use
(0x38-0x3F, 0x3800-0x3FFF) are not defined by MOQT.
See <xref target="properties"/> for usage guidance.</t>
      <section anchor="delivery-timeout-ext">
        <name>DELIVERY TIMEOUT</name>
        <t>DELIVERY TIMEOUT (Property Type 0x02) is a Track Property.
It expresses the publisher's DELIVERY_TIMEOUT for a Track (see
<xref target="delivery-timeout"/>).</t>
        <t>A DELIVERY_TIMEOUT value of 0 indicates no timeout; Objects do not expire
due to delivery timeout.</t>
        <t>If both the subscriber specifies a DELIVERY_TIMEOUT parameter and the Track has
a DELIVERY_TIMEOUT property, the endpoints use the min of the two non-zero
values for the subscription. If either value is 0, the non-zero value is used.
If both are 0, there is no delivery timeout.</t>
        <t>If unspecified, the subscriber's DELIVERY_TIMEOUT is used. If neither endpoint
specified a timeout, Objects do not time out.</t>
      </section>
      <section anchor="max-cache-duration">
        <name>MAX CACHE DURATION</name>
        <t>MAX_CACHE_DURATION (Property Type 0x04) is a Track Property.</t>
        <t>It is an integer expressing
the number of milliseconds an Object can be served from a cache. If present, the
relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received through this
subscription or fetch after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier in a
multi-object stream will expire earlier than Objects later in the stream. Once
Objects have expired from cache, their state becomes unknown, and a relay that
handles a downstream request that includes those Objects re-requests them.</t>
        <t>If MAX_CACHE_DURATION is not sent by the publisher, the Objects
can be cached until implementation constraints cause them to be evicted.</t>
      </section>
      <section anchor="publisher-priority">
        <name>DEFAULT PUBLISHER PRIORITY</name>
        <t>DEFAULT PUBLISHER PRIORITY (Property Type 0x0E) is a Track Property
that specifies the priority of a subscription relative to other subscriptions
in the same session.  The value is from 0 to 255 and lower numbers get higher
priority.  See <xref target="priorities"/>. Priorities above 255 are invalid. Subgroups and
Datagrams for this subscription inherit this priority, unless they specifically
override it.</t>
        <t>If omitted, the Default Publisher Priority is 128.</t>
      </section>
      <section anchor="group-order-pref">
        <name>DEFAULT PUBLISHER GROUP ORDER</name>
        <t>DEFAULT_PUBLISHER_GROUP_ORDER (Property Type 0x22) is a Track Property.</t>
        <t>It is an enum indicating the publisher's preference for prioritizing Objects
from different groups within the
same subscription (see <xref target="priorities"/>). The allowed values are Ascending (0x1) or
Descending (0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>If omitted, the publisher's preference is Ascending (0x1).</t>
      </section>
      <section anchor="dynamic-groups">
        <name>DYNAMIC GROUPS</name>
        <t>DYNAMIC_GROUPS (Property Type 0x30) is a Track Property.
The allowed values are 0 or 1. When the value is 1, it indicates
that the subscriber can request the Original Publisher to start a new Group
by including the NEW_GROUP_REQUEST parameter in PUBLISH_OK or REQUEST_UPDATE
for this Track. If an endpoint receives a value larger than 1, it <bcp14>MUST</bcp14> close
the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>If omitted, the value is 0.</t>
      </section>
      <section anchor="immutable-properties">
        <name>Immutable Properties</name>
        <t>Immutable Properties (Property Type 0xB) contain a sequence of
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>) which are also Track or Object
Properties.</t>
        <artwork><![CDATA[
Immutable Extensions {
  Type (0xB),
  Length (vi64),
  Key-Value-Pair (..) ...
}
]]></artwork>
        <t>This Property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
Relays. This Property <bcp14>MUST NOT</bcp14> be modified or removed and the serialization
(e.g. variable-length integer encodings) of the Key-Value-Pairs <bcp14>MUST NOT</bcp14>
change). Like other Properties, Relays <bcp14>MUST</bcp14> cache Immutable Properties if the
Object or Track are cached and <bcp14>MUST</bcp14> forward it. Relays <bcp14>MAY</bcp14> decode and view
the Properties in the Key-Value-Pairs.</t>
        <t>Unless specified by a particular Property specification, Properties
<bcp14>MAY</bcp14> appear either in the mutable extension list or inside Immutable Properties.
When looking for the value of a property, processors <bcp14>MUST</bcp14> search both the
mutable properties and the contents of Immutable Extensions.</t>
        <t>If a Property allows multiple values, the same Property Type <bcp14>MAY</bcp14> appear in
both the mutable list and inside Immutable Extensions, unless prohibited by
the Property specification.</t>
        <t>A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of the
following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains an Immutable Properties property that contains another
Immutable Properties key.</t>
          </li>
          <li>
            <t>A Key-Value-Pair cannot be parsed.</t>
          </li>
        </ul>
        <t>The following figure shows an example Object structure with a combination of
mutable and immutable properties and end to end encrypted metadata in the Object
payload.</t>
        <artwork><![CDATA[
                   Object Header                      Object Payload
<------------------------------------------------> <------------------->
+--------+-------+------------+-------+-----------+--------------------+
| Object | Ext 1 | Immutable  | Ext N | [Payload] | Private Properties |
| Fields |       | Properties |       | [Length]  | App Payload        |
+--------+-------+------------+-------+-----------+--------------------+
                  xxxxxxxxxxxx                     xxxxxxxxxxxxxxxxxxxx
                                                   yyyyyyyyyyyyyyyyyyyy
x = e2e Authenticated Data
y = e2e Encrypted Data
EXT 1 and EXT N can be modified or removed by Relays
]]></artwork>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-group-id-gap">
        <name>Prior Group ID Gap</name>
        <t>Prior Group ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Group ID Gap (Property Type 0x3C) is a variable length integer
containing the number of Groups prior to the current Group that do not and will
never exist. For example, if the Original Publisher is publishing an Object in
Group 7 and knows it will never publish any Objects in Group 8 or Group 9, it
can include Prior Group ID Gap = 2 in any number of Objects in Group 10, as it
sees fit.  A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of
the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Group ID Gap.</t>
          </li>
          <li>
            <t>A Group contains more than one Object with different values for Prior Group
 ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Group ID Gap larger than the Group ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Group ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Group ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there may not be a gap. If Prior Group ID Gap is not present, the receiver
cannot infer any information about the existence of prior groups (see
<xref target="group-ids"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the extension communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-object-id-gap">
        <name>Prior Object ID Gap</name>
        <t>Prior Object ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Object ID Gap (Property Type 0x3E) is a variable length integer
containing the number of Objects prior to the current Object that do not and
will never exist. For example, if the Original Publisher is publishing Object
10 in Group 3 and knows it will never publish Objects 8 or 9 in this Group, it
can include Prior Object ID Gap = 2.  A Track is considered malformed (see
<xref target="malformed-tracks"/>) if any of the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Object ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Object ID Gap larger than the Object ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Object ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with an Object ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there might not be a gap. If Prior Object ID Gap is not present, the receiver
cannot infer any information about the existence of prior objects (see
<xref target="model-object"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the extension communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO: Expand this section, including subscriptions.</t>
      <t>TODO: Describe Cache Poisoning attacks</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Live content requires significant bandwidth and resources.  Failure to
set limits will quickly cause resource exhaustion.</t>
        <t>MOQT uses stream limits and flow control to impose resource limits at
the network layer.  Endpoints <bcp14>SHOULD</bcp14> set flow control limits based on the
anticipated bitrate.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose a MAX STREAM count limit which would restrict the
number of concurrent streams which an application could have in
flight.</t>
        <t>The publisher prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The publisher and
subscriber <bcp14>MUST</bcp14> cancel a stream, preferably the one with the lowest
priority, after reaching a resource limit.</t>
      </section>
      <section anchor="timeouts">
        <name>Timeouts</name>
        <t>Implementations are advised to use timeouts to prevent resource
exhaustion attacks by a peer that does not send expected data within
an expected time.  Each implementation is expected to set its own timeouts.</t>
        <section anchor="idle-connection-handling">
          <name>Idle Connection Handling</name>
          <t>The transport connection (e.g., QUIC) underlying a MOQT session can close due to
idle timeout if no data is exchanged, either because there are no established
subscriptions or the established subscriptions are not publishing Objects
frequently.  This includes publisher sessions that have issued a
PUBLISH_NAMESPACE and are waiting for subscribers.</t>
          <t>Implementations that want to keep idle sessions open have several options:</t>
          <ul spacing="normal">
            <li>
              <t>Use transport-layer keep-alive mechanisms, such as QUIC PING frames, to
prevent idle timeout closure.</t>
            </li>
            <li>
              <t>Send periodic control messages, for example REQUEST_UPDATE with no
modified Message Parameters.</t>
            </li>
            <li>
              <t>Accept that idle connections can close and implement reconnection logic when
needed.</t>
            </li>
          </ul>
          <t>The choice of mechanism is implementation-specific.</t>
        </section>
      </section>
      <section anchor="relay-security-considerations">
        <name>Relay security considerations</name>
        <section anchor="state-maintenance">
          <name>State maintenance</name>
          <t>A Relay <bcp14>SHOULD</bcp14> have mechanisms to prevent malicious endpoints from flooding it
with PUBLISH_NAMESPACE or SUBSCRIBE_NAMESPACE requests that could bloat data
structures. It could use QUIC stream limits to limit the number of
such requests, or could have application-specific policies that can reject
incoming PUBLISH_NAMESPACE or SUBSCRIBE_NAMESPACE requests that cause the state
maintenance for the session to be excessive.</t>
        </section>
        <section anchor="subscribenamespace-with-short-prefixes">
          <name>SUBSCRIBE_NAMESPACE with short prefixes</name>
          <t>A Relay can use authorization rules in order to prevent subscriptions closer
to the root of a large prefix tree. Otherwise, if an entity sends a relay a
SUBSCRIBE_NAMESPACE message with a short prefix, it can cause the relay to send
a large volume of NAMESPACE messages. As changes occur in the tree of namespaces,
the relay would have to send matching NAMESPACE/NAMESPACE_DONE messages.</t>
        </section>
      </section>
      <section anchor="impl-fingerprinting">
        <name>Implementation Identification Fingerprinting</name>
        <t>The MOQT_IMPLEMENTATION option (<xref target="moqt-implementation"/>) can reveal information
that contributes to fingerprinting, a set of techniques for identifying a
specific endpoint over time through its unique set of characteristics.</t>
        <t>Detailed implementation information, including specific version numbers,
build identifiers, or platform details, can create a unique fingerprint that
enables tracking endpoints across sessions without their awareness. When
combined with other session characteristics, even minimal implementation
identification can contribute to distinguishing one endpoint from another.</t>
        <t>To mitigate fingerprinting risks:</t>
        <ul spacing="normal">
          <li>
            <t>Implementations <bcp14>SHOULD</bcp14> send only the minimum information necessary for
interoperability debugging. A short implementation name and major version
number are typically sufficient.</t>
          </li>
          <li>
            <t>Implementations <bcp14>SHOULD NOT</bcp14> include detailed system information, build
numbers, or other attributes that could uniquely identify a specific
instance or user.</t>
          </li>
          <li>
            <t>Privacy-conscious deployments <bcp14>MAY</bcp14> omit the MOQT_IMPLEMENTATION option
entirely or send a generic value.</t>
          </li>
          <li>
            <t>Implementations <bcp14>MAY</bcp14> provide users with the ability to configure or disable
the MOQT_IMPLEMENTATION option.</t>
          </li>
        </ul>
        <t>Operators should be aware that detailed implementation identification
facilitates the same privacy concerns as persistent identifiers, since it
enables correlation of sessions across time.</t>
      </section>
    </section>
    <section anchor="grease">
      <name>Grease</name>
      <t>To ensure that implementations correctly handle unknown values and do not
fail when encountering protocol extensions they do not understand, this document
reserves a range of values for the purpose of greasing; see <xref section="3.3" sectionFormat="of" target="RFC9170"/>.</t>
      <t>Grease values follow the pattern <tt>0x7f * N + 0x9D</tt> for non-negative
integer values of N (that is, 0x9D, 0xBC, ..., 0x3ffffffffffffffe).</t>
      <t>The following registries include GREASE reservations:</t>
      <ul spacing="normal">
        <li>
          <t>Setup Options (<xref target="setup-options"/>)</t>
        </li>
        <li>
          <t>Properties (<xref target="iana-properties"/>)</t>
        </li>
        <li>
          <t>Session Termination Error Codes (<xref target="iana-session-termination"/>)</t>
        </li>
        <li>
          <t>REQUEST_ERROR Codes (<xref target="iana-request-error"/>)</t>
        </li>
        <li>
          <t>PUBLISH_DONE Codes (<xref target="iana-publish-done"/>)</t>
        </li>
        <li>
          <t>Data Stream Reset Error Codes (<xref target="iana-reset-stream"/>)</t>
        </li>
        <li>
          <t>MOQT Auth Token Type</t>
        </li>
      </ul>
      <t>Implementations <bcp14>MUST</bcp14> handle unknown values from these registries gracefully
according to the rules defined in each section.</t>
      <t>Setup Options with reserved identifiers have no semantics and can carry
arbitrary values. Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified
in <xref target="message-setup"/>.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT ALPN values</t>
        </li>
        <li>
          <t>Setup Options</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN</t>
      <section anchor="authorization-token-alias-type">
        <name>Authorization Token Alias Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">DELETE</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">REGISTER</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">USE_ALIAS</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">USE_VALUE</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-auth-token-type">
        <name>MOQT Auth Token Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Reserved</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="message-parameters">
        <name>Message Parameters</name>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter Type</th>
              <th align="left">Parameter Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x02</td>
              <td align="left">DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">RENDEZVOUS_TIMEOUT</td>
              <td align="left">
                <xref target="rendezvous-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">EXPIRES</td>
              <td align="left">
                <xref target="expires"/></td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">LARGEST_OBJECT</td>
              <td align="left">
                <xref target="largest-param"/></td>
            </tr>
            <tr>
              <td align="left">0x10</td>
              <td align="left">FORWARD</td>
              <td align="left">
                <xref target="forward-parameter"/></td>
            </tr>
            <tr>
              <td align="left">0x20</td>
              <td align="left">SUBSCRIBER_PRIORITY</td>
              <td align="left">
                <xref target="subscriber-priority"/></td>
            </tr>
            <tr>
              <td align="left">0x21</td>
              <td align="left">SUBSCRIPTION_FILTER</td>
              <td align="left">
                <xref target="subscription-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x22</td>
              <td align="left">GROUP_ORDER</td>
              <td align="left">
                <xref target="group-order"/></td>
            </tr>
            <tr>
              <td align="left">0x32</td>
              <td align="left">NEW_GROUP_REQUEST</td>
              <td align="left">
                <xref target="new-group-request"/></td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>Message Parameters - List which params can be repeated in the table.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-properties">
        <name>Properties</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x02</td>
              <td align="left">DELIVERY_TIMEOUT</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_CACHE_DURATION</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="max-cache-duration"/></td>
            </tr>
            <tr>
              <td align="right">0x0B</td>
              <td align="left">IMMUTABLE_PROPERTIES</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="immutable-properties"/></td>
            </tr>
            <tr>
              <td align="right">0x0E</td>
              <td align="left">DEFAULT_PUBLISHER_PRIORITY</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="publisher-priority"/></td>
            </tr>
            <tr>
              <td align="right">0x22</td>
              <td align="left">DEFAULT_PUBLISHER_GROUP_ORDER</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="group-order-pref"/></td>
            </tr>
            <tr>
              <td align="right">0x30</td>
              <td align="left">DYNAMIC_GROUPS</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="dynamic-groups"/></td>
            </tr>
            <tr>
              <td align="right">0x3C</td>
              <td align="left">PRIOR_GROUP_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-group-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x3E</td>
              <td align="left">PRIOR_OBJECT_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-object-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">Any</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Property types, skipping them using
the length field.</t>
        <ul spacing="normal">
          <li>
            <t>MOQ Properties - we wish to define the following registration policies:
            </t>
            <ul spacing="normal">
              <li>
                <t>0x00 to 0x37: Standards Action or IESG Approval (1-byte encoding)</t>
              </li>
              <li>
                <t>0x38 to 0x3F: Reserved for application-specific use (1-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x40 to 0x37FF: Specification Required (2-byte encoding)</t>
              </li>
              <li>
                <t>0x3800 to 0x3FFF: Reserved for application-specific use (2-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x4000 and above: First Come First Served</t>
              </li>
            </ul>
            <t>
Code points reserved for application-specific use will never be allocated
by IANA. Applications using these values do not need to coordinate with
IANA.  Note that applications consuming tracks from uncoordinated sources may
encounter different semantics for the same code points, creating potential
collision risks.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-error-codes">
        <name>Error Codes</name>
        <section anchor="iana-session-termination">
          <name>Session Termination Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">NO_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">PROTOCOL_VIOLATION</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_REQUEST_ID</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_TRACK_ALIAS</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">KEY_VALUE_FORMATTING_ERROR</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_REQUIRED_REQUEST_ID</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_PATH</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_PATH</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">GOAWAY_TIMEOUT</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">CONTROL_MESSAGE_TIMEOUT</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DATA_STREAM_TIMEOUT</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">AUTH_TOKEN_CACHE_OVERFLOW</td>
                <td align="center">0x13</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x14</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">VERSION_NEGOTIATION_FAILED</td>
                <td align="center">0x15</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x16</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x17</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x18</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_AUTHORITY</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTHORITY</td>
                <td align="center">0x1A</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-request-error">
          <name>REQUEST_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">DOES_NOT_EXIST</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_RANGE</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_SUBSCRIPTION</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">UNINTERESTED</td>
                <td align="center">0x20</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">PREFIX_OVERLAP</td>
                <td align="center">0x30</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">NAMESPACE_TOO_LARGE</td>
                <td align="center">0x31</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_JOINING_REQUEST_ID</td>
                <td align="center">0x32</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-publish-done">
          <name>PUBLISH_DONE Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_ENDED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">SUBSCRIPTION_ENDED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">UPDATE_FAILED</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-reset-stream">
          <name>Data Stream Reset Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">CANCELLED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">DELIVERY_TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">SESSION_CLOSED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_OBJECT_STATUS</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The original design behind this protocol was inspired by three independent
proposals: WARP <xref target="I-D.draft-lcurley-warp"/> by Luke Curley, RUSH
<xref target="I-D.draft-kpugin-rush"/> by Kirill Pugin, Nitin Garg, Alan Frindell, Jordi
Cenzano and Jake Weissman, and QUICR <xref target="I-D.draft-jennings-moq-quicr-proto"/> by
Cullen Jennings, Suhas Nandakumar and Christian Huitema.  The authors of those
documents merged their proposals to create the first draft of moq-transport.
The IETF MoQ Working Group received an enormous amount of support from many
people. The following people provided substantive contributions to this
document:</t>
      <ul spacing="normal">
        <li>
          <t>Ali Begen</t>
        </li>
        <li>
          <t>Charles Krasic</t>
        </li>
        <li>
          <t>Christian Huitema</t>
        </li>
        <li>
          <t>Cullen Jennings</t>
        </li>
        <li>
          <t>James Hurley</t>
        </li>
        <li>
          <t>Jordi Cenzano</t>
        </li>
        <li>
          <t>Kirill Pugin</t>
        </li>
        <li>
          <t>Luke Curley</t>
        </li>
        <li>
          <t>Martin Duke</t>
        </li>
        <li>
          <t>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="use-of-generative-ai">
      <name>Use of Generative AI</name>
      <t>Anthropic's Claude was used to assist with drafting and editing text for this
document. All AI-generated content was reviewed and approved by the editors.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <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="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.  This document describes a WebTransport
   protocol that is based on HTTP/3 [HTTP3] and provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-14"/>
        </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="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="I-D.draft-ietf-quic-reliable-stream-reset">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="14" month="June" year="2025"/>
            <abstract>
              <t>   QUIC defines a RESET_STREAM frame to abort sending on a stream.  When
   a sender resets a stream, it also stops retransmitting STREAM frames
   for this stream in the event of packet loss.  On the receiving side,
   there is no guarantee that any data sent on that stream is delivered.

   This document defines a new QUIC frame, the RESET_STREAM_AT frame,
   that allows resetting a stream, while guaranteeing delivery of stream
   data up to a certain byte offset.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-reliable-stream-reset-07"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </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>
      </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.ietf-webtrans-overview">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which may be optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-11"/>
        </reference>
        <reference anchor="RFC9438">
          <front>
            <title>CUBIC for Fast and Long-Distance Networks</title>
            <author fullname="L. Xu" initials="L." surname="Xu"/>
            <author fullname="S. Ha" initials="S." surname="Ha"/>
            <author fullname="I. Rhee" initials="I." surname="Rhee"/>
            <author fullname="V. Goel" initials="V." surname="Goel"/>
            <author fullname="L. Eggert" initials="L." role="editor" surname="Eggert"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.</t>
              <t>This document updates the specification of CUBIC to include algorithmic improvements based on these implementations and recent academic work. Based on the extensive deployment experience with CUBIC, this document also moves the specification to the Standards Track and obsoletes RFC 8312. This document also updates RFC 5681, to allow for CUBIC's occasionally more aggressive sending behavior.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9438"/>
          <seriesInfo name="DOI" value="10.17487/RFC9438"/>
        </reference>
        <reference anchor="RFC6582">
          <front>
            <title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
            <author fullname="T. Henderson" initials="T." surname="Henderson"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="A. Gurtov" initials="A." surname="Gurtov"/>
            <author fullname="Y. Nishida" initials="Y." surname="Nishida"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5681 documents the following four intertwined TCP congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. RFC 5681 explicitly allows certain modifications of these algorithms, including modifications that use the TCP Selective Acknowledgment (SACK) option (RFC 2883), and modifications that respond to "partial acknowledgments" (ACKs that cover new data, but not all the data outstanding when loss was detected) in the absence of SACK. This document describes a specific algorithm for responding to partial acknowledgments, referred to as "NewReno". This response to partial acknowledgments was first proposed by Janey Hoe. This document obsoletes RFC 3782. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6582"/>
          <seriesInfo name="DOI" value="10.17487/RFC6582"/>
        </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="14" month="December" 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-04"/>
        </reference>
        <reference anchor="RFC9170">
          <front>
            <title>Long-Term Viability of Protocol Extension Mechanisms</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The ability to change protocols depends on exercising the extension and version-negotiation mechanisms that support change. This document explores how regular use of new protocol features can ensure that it remains possible to deploy changes to a protocol. Examples are given where lack of use caused changes to be more difficult or costly.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9170"/>
          <seriesInfo name="DOI" value="10.17487/RFC9170"/>
        </reference>
        <reference anchor="I-D.draft-lcurley-warp">
          <front>
            <title>Warp - Live Media Transport over QUIC</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
              <organization>Twitch</organization>
            </author>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document defines the core behavior for Warp, a live media
   transport protocol over QUIC.  Media is split into objects based on
   the underlying media encoding and transmitted independently over QUIC
   streams.  QUIC streams are prioritized based on the delivery order,
   allowing less important objects to be starved or dropped during
   congestion.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-warp-04"/>
        </reference>
        <reference anchor="I-D.draft-kpugin-rush">
          <front>
            <title>RUSH - Reliable (unreliable) streaming protocol</title>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Nitin Garg" initials="N." surname="Garg">
              <organization>Meta</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Jorge Cenzano Ferret" initials="J. C." surname="Ferret">
              <organization>Meta</organization>
            </author>
            <author fullname="Jake Weissman" initials="J." surname="Weissman">
              <organization>Meta</organization>
            </author>
            <date day="21" month="April" year="2025"/>
            <abstract>
              <t>   RUSH is an application-level protocol for ingesting live video.  This
   document describes the protocol and how it maps onto QUIC.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the mailing list (), which
   is archived at .

   Source for this draft and an issue tracker can be found at
   https://github.com/afrind/draft-rush.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kpugin-rush-03"/>
        </reference>
        <reference anchor="I-D.draft-jennings-moq-quicr-proto">
          <front>
            <title>QuicR - Media Delivery Protocol over QUIC</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="11" month="July" year="2022"/>
            <abstract>
              <t>   Recently new use cases have emerged requiring higher scalability of
   media delivery for interactive realtime applications and much lower
   latency for streaming applications and a combination thereof.

   draft-jennings-moq-arch specifies architectural aspects of QuicR, a
   media delivery protocol based on publish/subscribe metaphor and Relay
   based delivery tree, that enables a wide range of realtime
   applications with different resiliency and latency needs.

   This specification defines the protocol aspects of the QuicR media
   delivery architecture.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jennings-moq-quicr-proto-01"/>
        </reference>
      </references>
    </references>
    <?line 4454?>

<section anchor="change-log">
      <name>Change Log</name>
      <t>RFC Editor's Note: Please remove this section prior to publication of a final version of this document.</t>
      <t>Issue and pull request numbers are listed with a leading octothorp.</t>
      <section anchor="since-draft-ietf-moq-transport-16">
        <name>Since draft-ietf-moq-transport-16</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Change control stream from bidi to a pair of uni streams (#1510)</t>
          </li>
          <li>
            <t>Collapse CLIENT_SETUP and SERVER_SETUP into a single SETUP message (#1510)</t>
          </li>
          <li>
            <t>Move requests to bidirectional streams; remove cancel messages (#1389)</t>
          </li>
          <li>
            <t>Remove MAX_REQUEST_ID/REQUESTS_BLOCKED (#1471)</t>
          </li>
          <li>
            <t>New variable-length integer encoding (#1016)</t>
          </li>
          <li>
            <t>Encode Message Parameters as Type-Value pairs (#1462)</t>
          </li>
          <li>
            <t>Add GREASE for Setup Options, Properties, and error code registries (#1460)</t>
          </li>
          <li>
            <t>Add RENDEZVOUS_TIMEOUT parameter for SUBSCRIBE (#1447)</t>
          </li>
          <li>
            <t>Add PUBLISH_BLOCKED message for SUBSCRIBE_NAMESPACE flow control (#1452)</t>
          </li>
          <li>
            <t>Add Timeout field to GOAWAY message (#1497)</t>
          </li>
          <li>
            <t>Add GOING_AWAY to REQUEST_ERROR codes (#1434)</t>
          </li>
          <li>
            <t>Add EXCESSIVE_LOAD error code (#1479)</t>
          </li>
          <li>
            <t>Add NAMESPACE_TOO_LARGE error and stream reset for large namespaces (#1496)</t>
          </li>
          <li>
            <t>Add TOO_FAR_BEHIND stream reset code (#1445)</t>
          </li>
          <li>
            <t>Add REQUEST_UPDATE to list of REQUEST_ERROR causes (#1466)</t>
          </li>
          <li>
            <t>Enforce REQUEST_OK/ERROR as first frame on the response stream (#1499)</t>
          </li>
          <li>
            <t>Allow joining FETCH for PUBLISH and REQUEST_UPDATE with forward=1 (#1335)</t>
          </li>
          <li>
            <t>Allow DELIVERY_TIMEOUT value of 0 to mean no timeout (#1450)</t>
          </li>
          <li>
            <t>Allow zero-element namespaces (#1472)</t>
          </li>
          <li>
            <t>Clarify EXPIRES parameter update mechanism (#1448)</t>
          </li>
          <li>
            <t>Remove TRACK_STATUS from REQUEST_UPDATE (#1436)</t>
          </li>
          <li>
            <t>Define how to use auth token cache safely with multiple streams (#1430)</t>
          </li>
          <li>
            <t>Constrain encoding/parsing of track namespace and names (#1512)</t>
          </li>
          <li>
            <t>Reserve Property type ranges for application-specific use (#1473)</t>
          </li>
          <li>
            <t>Make EndGroup in Subscription Filters a delta (#1470)</t>
          </li>
          <li>
            <t>Copy DELIVERY_TIMEOUT min requirement from parameter to property (#1427)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify prior Object semantics after End of Range indicators in FETCH (#1513)</t>
          </li>
          <li>
            <t>Clarify datagram status and properties cases (#1444)</t>
          </li>
          <li>
            <t>Clarify Stream Count includes empty subgroups (#1449)</t>
          </li>
          <li>
            <t>Clarify language for malformed tracks in a subgroup with END_OF_GROUP (#1464)</t>
          </li>
          <li>
            <t>Properties can appear in mutable list or inside Immutable Properties (#1442)</t>
          </li>
          <li>
            <t>Clarify immutable property preservation requirements (#1441)</t>
          </li>
          <li>
            <t>Clarification for Track Alias uniqueness (#1418)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Setup Parameters to Setup Options (#1461)</t>
          </li>
          <li>
            <t>Rename Extension Headers to Properties (#1504)</t>
          </li>
          <li>
            <t>Add security/privacy considerations for MOQT_IMPLEMENTATION (#1511)</t>
          </li>
          <li>
            <t>Add editorial text on bandwidth probing techniques (#1477)</t>
          </li>
          <li>
            <t>Explain idle connection handling (#1443)</t>
          </li>
          <li>
            <t>Fix "SUBSCRIBE_NAMESPACE with short prefixes" (#1502)</t>
          </li>
          <li>
            <t>Add generative AI disclosure per IRTF guidelines</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-15">
        <name>Since draft-ietf-moq-transport-15</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Key-Value-Pairs for Parameters and Headers (#1315)</t>
          </li>
          <li>
            <t>Use Request ID in PUBLISH_NAMESPACE_{DONE/CANCEL} (#1329)</t>
          </li>
          <li>
            <t>Remove delivery related params from TRACK_STATUS for Subscribers (#1325)</t>
          </li>
          <li>
            <t>PUBLISH does not imply PUBLISH_NAMESPACE (#1364)</t>
          </li>
          <li>
            <t>Allow Start Location to decrease in SUBSCRIBE_UPDATE (#1323)</t>
          </li>
          <li>
            <t>Change SUBSCRIBE_UPDATE to REQUEST_UPDATE and expand ability to update (#1332)</t>
          </li>
          <li>
            <t>Put SUBSCRIBE_NAMESPACE on a stream, make Namespaces and PUBLISH independent
(#1344)</t>
          </li>
          <li>
            <t>Require NAMESPACE before NAMESPACE_DONE (#1392)</t>
          </li>
          <li>
            <t>Allow the '*' or the empty namespace in SUBSCRIBE_NAMESPACE (#1393)</t>
          </li>
          <li>
            <t>Relays match SUBSCRIBE to both Tracks and Namespaces (#1397)</t>
          </li>
          <li>
            <t>Clarify sending requests after sending GOAWAY (#1398)</t>
          </li>
          <li>
            <t>Add Retry Interval to REQUEST_ERROR (#1339)</t>
          </li>
          <li>
            <t>Add Extension Headers to PUBLISH, SUBSCRIBE_OK, and FETCH_OK (#1374)</t>
          </li>
          <li>
            <t>Move track properties to extensions, scope parameters (#1390)</t>
          </li>
          <li>
            <t>Add LARGEST_OBJECT parameter to TRACK_STATUS (#1367)</t>
          </li>
          <li>
            <t>Duplicate subscription processing (#1341)</t>
          </li>
          <li>
            <t>Address Track Name/Namespace edge cases (#1399)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Enable mixing datagrams with streams in one track (#1350)</t>
          </li>
          <li>
            <t>Clarify datagrams and subgroups (#1382)</t>
          </li>
          <li>
            <t>Redo the way we deal with missing Objects and Object Status (#1342)</t>
          </li>
          <li>
            <t>Allow unknown ranges in a FETCH response (#1331)</t>
          </li>
          <li>
            <t>Do not reopen subgroups after delivery timeout or STOP_SENDING (#1396)</t>
          </li>
          <li>
            <t>Clarify handling of unknown extensions (#1395)</t>
          </li>
          <li>
            <t>Clarify Delivery Timeout for datagrams (#1406)</t>
          </li>
          <li>
            <t>Disallow DELIVERY_TIMEOUT=0 (#1330)</t>
          </li>
          <li>
            <t>Malformed track due to multiple priorities for one subgroup (#1317)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Subscribers can migrate networks too (#1410)</t>
          </li>
          <li>
            <t>Rename Version Specific Parameters to Message Parameters (#1411)</t>
          </li>
          <li>
            <t>Clarify valid joining fetch subscription states (#1363)</t>
          </li>
          <li>
            <t>Formatting names for logs (#1355)</t>
          </li>
          <li>
            <t>A Publisher might not use the congestion window (#1408)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-14">
        <name>Since draft-ietf-moq-transport-14</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Always use ALPN for version negotiation (#499)</t>
          </li>
          <li>
            <t>Consolidate all the Error Message types (#1159)</t>
          </li>
          <li>
            <t>Change MOQT IMPLEMENTATION code point to 0x7 (#1191)</t>
          </li>
          <li>
            <t>Add Forward to SUBSCRIBE_NAMESPACE (#1220)</t>
          </li>
          <li>
            <t>Parameters for Group Order, Subscribe Priority and Subscription Filter (redo) (#1273)</t>
          </li>
          <li>
            <t>REQUEST_OK message (#1274)</t>
          </li>
          <li>
            <t>Subscribe Update Acknowledgements (#1275)</t>
          </li>
          <li>
            <t>Disallow DELETE and USE_ALIAS in CLIENT_SETUP (#1277)</t>
          </li>
          <li>
            <t>Remove Expires field from SUBSCRIBE_OK (#1282)</t>
          </li>
          <li>
            <t>Make Forward a Parameter (#1283)</t>
          </li>
          <li>
            <t>Allow SUBSCRIBE_UPDATE to increase the end location (#1288)</t>
          </li>
          <li>
            <t>Add default port for raw QUIC (#1289)</t>
          </li>
          <li>
            <t>Unsubscribe Namespace should be linked to Subscribe Namespace (#1292)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Fetch Object serialization optimization (#949)</t>
          </li>
          <li>
            <t>Make default PUBLISHER PRIORITY a parameter, optional in Subgroup/Datagram (#1056)</t>
          </li>
          <li>
            <t>Allow datagram status with object ID=0 (#1197)</t>
          </li>
          <li>
            <t>Disallow object extension headers in all non-Normal status objects (#1266)</t>
          </li>
          <li>
            <t>Objects for malformed track must not be cached (#1290)</t>
          </li>
          <li>
            <t>Remove NO_OBJECTS fetch error code (#1303)</t>
          </li>
          <li>
            <t>Clarify what happens when max_cache_duration parameter is omitted (#1287)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Request ID field in MAX_REQUEST_ID (#1250)</t>
          </li>
          <li>
            <t>Define and draw subscription state machine (#1296)</t>
          </li>
          <li>
            <t>Omitting a subgroup object necessitates reset (#1295)</t>
          </li>
          <li>
            <t>Define duplication rules for header extensions (#1293)</t>
          </li>
          <li>
            <t>Clarify joining fetch end location (#1286)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-13">
        <name>Since draft-ietf-moq-transport-13</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add an AUTHORITY parameter (#1058)</t>
          </li>
          <li>
            <t>Add a free-form SETUP parameter identifying the implementation (#1114)</t>
          </li>
          <li>
            <t>Add a Request ID to SUBSCRIBE_UDPATE (#1106)</t>
          </li>
          <li>
            <t>Indicate which params can appear PUBLISH* messages (#1071)</t>
          </li>
          <li>
            <t>Add TRACK_STATUS to the list of request types affected by GOAWAY (#1105)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Object IDs within Subgroups (#1042)</t>
          </li>
          <li>
            <t>Use a bit in Datagram Type to convey Object ID = 0 (#1055)</t>
          </li>
          <li>
            <t>Corrected missed code point updates to Object Datagram Status (#1082)</t>
          </li>
          <li>
            <t>Merge OBJECT_DATAGRAM and OBJECT_DATAGRAM_STATUS description (#1179)</t>
          </li>
          <li>
            <t>Objects are not schedulable if flow-control blocked (#1054)</t>
          </li>
          <li>
            <t>Clarify DELIVERY_TIMEOUT reordering computation (#1120)</t>
          </li>
          <li>
            <t>Receiving unrequested Objects (#1112)</t>
          </li>
          <li>
            <t>Clarify End of Track (#1111)</t>
          </li>
          <li>
            <t>Malformed tracks apply to FETCH (#1083)</t>
          </li>
          <li>
            <t>Remove early FIN from the definition of malformed tracks (#1096)</t>
          </li>
          <li>
            <t>Prior Object ID Gap Extension header (#939)</t>
          </li>
          <li>
            <t>Add Extension containing immutable extensions (#1025)</t>
          </li>
        </ul>
        <t><strong>Relay Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain FETCH routing for relays (#1165)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> for multi-publisher relay handling (#1115)</t>
          </li>
          <li>
            <t>Filters don't (usually) determine the end of subscription (#1113)</t>
          </li>
          <li>
            <t>Allow self-subscriptions (#1110)</t>
          </li>
          <li>
            <t>Explain Namespace Prefix Matching in more detail (#1116)</t>
          </li>
        </ul>
        <t><strong>Explanatory</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain Modularity of MOQT (#1107)</t>
          </li>
          <li>
            <t>Explain how to resume publishing after losing state (#1087)</t>
          </li>
        </ul>
        <t><strong>Major Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename ANNOUNCE to PUBLISH_NAMESPACE (#1104)</t>
          </li>
          <li>
            <t>Rename SUBSCRIBE_DONE to PUBLISH_DONE (#1108)</t>
          </li>
          <li>
            <t>Major FETCH Reorganization (#1173)</t>
          </li>
          <li>
            <t>Reformat Error Codes (#1091)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-12">
        <name>Since draft-ietf-moq-transport-12</name>
        <ul spacing="normal">
          <li>
            <t>TRACK_STATUS_REQUEST and TRACK_STATUS have changed to directly mirror
SUBSCRIBE/OK/ERROR (#1015)</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES was renamed back to SUBSCRIBE_NAMESPACE (#1049)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-11">
        <name>Since draft-ietf-moq-transport-11</name>
        <ul spacing="normal">
          <li>
            <t>Move Track Alias from SUBSCRIBE to SUBSCRIBE_OK (#977)</t>
          </li>
          <li>
            <t>Expand cases FETCH_OK returns Invalid Range (#946) and clarify fields (#936)</t>
          </li>
          <li>
            <t>Add an error code to FETCH_ERROR when an Object status is unknown (#825)</t>
          </li>
          <li>
            <t>Rename Latest Object to Largest Object (#1024) and clarify what to
do when it's incomplete (#937)</t>
          </li>
          <li>
            <t>Explain Malformed Tracks and what to do with them (#938)</t>
          </li>
          <li>
            <t>Allow End of Group to be indicated in a normal Object (#1011)</t>
          </li>
          <li>
            <t>Relays <bcp14>MUST</bcp14> have an upstream subscription to send SUBSCRIBE_OK (#1017)</t>
          </li>
          <li>
            <t>Allow AUTHORIZATION TOKEN in CLIENT_SETUP, SERVER_SETUP and
other fixes (#1013)</t>
          </li>
          <li>
            <t>Add PUBLISH for publisher initiated subscriptions (#995) and
fix the PUBLISH codepoints (#1048, #1051)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-10">
        <name>Since draft-ietf-moq-transport-10</name>
        <ul spacing="normal">
          <li>
            <t>Added Common Structure definitions - Location, Key-Value-Pair and Reason
Phrase</t>
          </li>
          <li>
            <t>Limit lengths of all variable length fields, including Track Namespace and Name</t>
          </li>
          <li>
            <t>Control Message length is now 16 bits instead of variable length</t>
          </li>
          <li>
            <t>Subscribe ID became Request ID, and was added to most control messages. Request ID
is used to correlate OK/ERROR responses for ANNOUNCE, SUBSCRIBE_NAMESPACE,
and TRACK_STATUS.  Like Subscribe ID, Request IDs are flow controlled.</t>
          </li>
          <li>
            <t>Explain rules for caching in more detail</t>
          </li>
          <li>
            <t>Changed the SETUP parameter format for even number parameters to match the
Object Header Extension format</t>
          </li>
          <li>
            <t>Rotated SETUP code points</t>
          </li>
          <li>
            <t>Added Parameters to TRACK_STATUS and TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>Clarified how subscribe filters work</t>
          </li>
          <li>
            <t>Added Next Group Filter to SUBSCRIBE</t>
          </li>
          <li>
            <t>Added Forward flag to SUBSCRIBE</t>
          </li>
          <li>
            <t>Renamed FETCH_OK field to End and clarified how to set it</t>
          </li>
          <li>
            <t>Added Absolute Joining Fetch</t>
          </li>
          <li>
            <t>Clarified No Error vs Invalid Range FETCH_ERROR cases</t>
          </li>
          <li>
            <t>Use bits in SUBGROUP_HEADER and DATAGRAM* types to compress subgroup ID and
extensions</t>
          </li>
          <li>
            <t>Coalesced END_OF_GROUP and END_OF_TRACK_AND_GROUP status</t>
          </li>
          <li>
            <t>Objects that Do Not Exist cannot have extensions when sent on the wire</t>
          </li>
          <li>
            <t>Specified error codes for resetting data streams</t>
          </li>
          <li>
            <t>Defined an Object Header Extension for communicating a known Group ID gap</t>
          </li>
          <li>
            <t>Replaced AUTHORIZATION_INFO with AUTHORIZATION_TOKEN, which has more structure,
compression, and additional Auth related error codes (#760)</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAMkhpmkAA8S9+3bbSJI3+H8+BdY+5yu5mmRJ8qVsd9fM0JZcpa9tyS3J
VdvTU2NBJCRhTBJsArTNtj2vsf/us+y+2MY9IwFIdnW7Z+ucmbZAIK+RkXH5
RcRwOAxN2cyKx9mtF8W0zLPqbbHK/vTq4Gl2usoX9bJaNbdCfn6+Kt4+zubV
X4eNPg7TarLI5/DpdJVfNMOyaC6GyRvDne/DNG/gjQ9749P9T2ECf1xWq83j
rG6mIZTL1eOsWa3rZnd7+9H2bshXRf44y279Upxn+WKaHSyaYrUoGj+Wen0+
L+u6rBanmyU0fbB/+iy8q1ZvLlfVemnzONJ53Apvig38Pn0csmE2j5P867qc
hLfFYl3AL9m1X2dZQ/3c+gX6KBeX2Y/4Jj6f5+UMnsOU/w3nPqpWl/g4X02u
4PFV0yzrx999h2/ho/JtMdLXvsMH352vqnd18R18/x1+d1k2V+tzbnD47vK7
ZCnxhRmsXt34punFEX84Kqv0k++u25bRVTOf3QqhbmCNX+ezagHT2xR1qOf5
qnn913UF/TzOFlVYlo+zvzTVZJDV8N2quKjhX5s5/wO2f54vl7Akv4aQr5ur
aoULOYT/y7JyAS2cjLJD6CJ/s4aG6THTy8n6Kq/bP8Gy5Ivyb3kDO/s4e1rW
k4qeF7zM9YJf/7cJ/jKaVPOQdvbzKPs5r8tZWbx1Xf1cTppqlf6S9vRjVV3O
Ct/VW3z57dt/u6Rfero6GGUn74qmcf0c5Av37HM9lLAT+LLvAn9eVXgSgQJh
zK0+x6Ps2apcTIvZzHU7nkG/yfO06xdFk/uO8wt899/m8PiaThfVag4fv6VD
gSfgcXb87Omj7e1t+BvOpZ1EmPNwjyh6+K44J+IaImHehXO9uIithOFwmOXn
NbwxaUI4vSprJJ31vFg02bS4KBdFnTVXRTapVkV2Xlzlb0vYMWghu5Yjha0X
R386vTPIcjnQRtvZclUBwVYzaLouLxfFNGuqrFoWKzg8rikgpuBnM8jeXZWT
qwx6L7K6nOOZzS7WiwmuYz4rm80owz6zfDaDUwsdQ0fT9QTaqy6CDKLKluvz
WVlfZcD1cuJg1F7ZwOQWNUx5mr2FF4GF1ZNVucS2s/NNlof5etaUy1k5gY6g
waxYTJdVuWjqUXbQwPtLHGMNlAD8kDprcL3gL1zDEta2PF9jawGYJfLCmjrH
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
Do4CY+3uMBAHnH/a2lszTdhQqoP7FSbBr3NiQEZWEaoz2IUPJdJVvZg5nfkD
YWiBy4h0G/AdPRHCN0vy7A47arGDDUcNEhG8ICHnm/vFo0dO5ToaHp/uD08e
PcIvUD5d0CSPGYo5TnFaQAomfYJzkzC8K/0xE9qqzzWNqnASfMNkUoSjb/Y4
iMWeE7JjN7IlOZCR5MXl6Mpx3dRyBKRBUsUB8O3VKiygpHZlPdJ+Dw92zw73
zjAIY3Z8y+54aD629hW3vWqZXVZcqqsssCILi91izS32e/o/SuKK7hpaX41Z
x9+Gx4eCYrK/a1byOEk7fugU6SyhHfOGesjaFjEOt5mkksQ48l2/mt3h3uDt
61OtJTbred5xF8RBe7+b0Ho+Wkwl4UH3McdMoRKGziTBX4PwqVHn8g51ToAF
QnTuxFa1J9neKaqL9fuztRntjzoVlXZ8pEPoz3f5csw1ZPvL+Ai/E8/OjcYU
MSu5qcuyMUO6EGmTGq7ru3x0yK31k6qusb5JT1Myd/t737M/FQD8ySEe2pK6
ed4HRocoYRVSY3VrSQMUV8FpEHCxgofsYxY29+SWGfZWvuKomRntd5r0JH3M
pKiqoGa+xZXXhr5QbTV803JNd6gvQeRugY7i/ncbBfFT/Pcz/PcA//0j/nuI
/97bQL8w7SQ7LOTuSB10dQ2QULm4vH1ox07cAkhSLn5Sg6g2yo1e8KLT8ZuK
/ImA0UFZvEazgxWrbre3xuBZk5YCqgBZqd2DQUIhp5XfWUjZnNlp3dU9cfgT
bXw5snxPU8nQWX1gwwqN90AZRA2qvOJkhQyvbCsyWWvTxiBv2yafFD4aUzOu
TPaTt/qqwCsSIIshGjP0S/NeFd4nUqnIJSbfxJwOdwqXkK/qVsjHbGalyJk6
s739gzVJt7qtRmCfU/+M+Iu9YJuNm9N6I7sQ/W0GC78KsQzsT3dLSYkFpZoI
aqj0E420B9lI2T/iaUTD2rmGGqBRbJ6x1zXTBoncwK2TnJIOa+DkQNctvFtq
D9JL6MjV4EjaTY4anEFYXACDwkCEz3fHXOJhMYPUMu+MpRblacReD/Po7N9L
Sk+ECLZtnyYtdUXOYG4n9GYAzk+vwUfctQYEI2yzaFNUnaiI5kLgBpL5w3A9
hmDwLgehTUaAJoPthOE/WT2w/TwA51ELbHzhjhS8kCxk3Kqy5xWMJmgoWoQY
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
j95PsLbEiwmukuBoiReZocWE+2T1GsO+IvLi09W7itl3ovLoi8/vMdUW30vw
u8SLCVaTYDGJF7t8Pfe5EstjdaovmFBdt7pwH01hma5wDzVhqaZgrssldf/2
DdM50VqUe20nFFNU/17vtzyv8eVZ8X7UwMcy0nu9n27gY67SivcTtyK8USve
T8t2Q+Yr3k9LVUPtK97/3RQP8VFKl6lnTfbpJaXTlKMfvrkqxk0pfUlqqblx
l6C6Bv//TSXlHpoX8QEx7xsCoMNiHcjeM60UoOP8tG7cwC/zXwbHR24y/+Y7
nI8vF7Nxebf+oZiBG9cN8Hrxrsx38Le9/PjtyU9Z8MK76cJNan22aG7o+Z+r
GbjXjuDXvfwAkqbzV8XsupcPxsUk35vBXMbjXv5ncHVlO+XkH8WEANr/XLhP
/VJWTXNbMCoepLAeh1P8e4nwf806AAVBsQh4y93q8fPZzmI8Lif5n/mhXn6y
gFK2A/DNvlvcFoSJuXODmWRuPj8tqnl5W3CRAkXGGqrEAQAlSR8BLMHZNbVz
qma57iE6/yhFbq7ovzhPzEp2M9RcbgKt2h+e7uVv6n/Pf6lnmC5HZYkKoYhJ
ofXsFhKdilssD8GW7lNM3Uc3oducu2xa1tNxuRH1gaHfSsoSJc7PwUfIlTpI
ZJQ0UyPh6AIxD2QwrvIfy+ty4v5756aYQRrCzzNHx5f4i2jP4Hfhbrvf/BmS
RN0TQC/wIxxyzofsfrbU4X40xAWpFoDQM8l33S/hJ0AfGk6uQbDAj3X+N8f2
5/DgLzDG6+ID3B0u1XsFuVwE2zfYT9+hwQSyLafV5YMm3xkXkBADt2XBVR9F
02CYDSvj4QSpFnGUlyPK/J9DyzCB59KNI2D9wf76Nc3ADSY1UQRJCdBFDHaE
7dPf+yo6GLnGPHknQvKL4vIdcgNMws1f19dZdry3kw/xKTdpcCa/zI/GmG5E
JWdBsZcvsUV5fKkZXAXkLkJvIM4ElUIzXUOW7UMFBKG+uzNVGDQBLISkNID3
kfTMAhouUI+dy3kNl2ZKXmRqM0w3tSrnV+vBHVjvP82yR4/Ei4xXkcsOjhx3
KB89ghgNb4AUJHAGO9L+ReXICdu/ATAYLGQxqbRg6eG3/Sf9zTUYwl0JQA7N
d17vDw+cMBqevj2i/ozDYyck+RcI6g/daR2ZlTn9ThKt/WBvYKN9lnqNs5jR
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
w2+fQbbW/wv7tPoBKSoDAA==

-->

</rfc>
