<?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.19 (Ruby 3.3.3) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.1 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-06"/>
    <author initials="L." surname="Curley" fullname="Luke Curley">
      <organization>Discord</organization>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Pugin" fullname="Kirill Pugin">
      <organization>Meta</organization>
      <address>
        <email>ikir@meta.com</email>
      </address>
    </author>
    <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>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 64?>

<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 73?>

<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 is 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 object model employed by MOQT.</t>
        </li>
        <li>
          <t><xref target="session"/> covers aspects of setting up a 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 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 robustness of QUIC, workflow efficiency and
relay support.</t>
        <section anchor="latency">
          <name>Latency</name>
          <t>HTTP Adaptive Streaming (HAS) has been successful at achieving scale
although often at the cost of latency. 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 support
causes queuing along the path from producer to consumer. The speed at
which a protocol can detect and respond to queuing 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
exercising options for flexible loss recovery. Applying <xref target="QUIC"/> to HAS
via HTTP/3 has not yet yielded generalized improvements in
throughput. One reason for this is that sending segments down a single
QUIC stream still allows head-of-line blocking to occur.</t>
        </section>
        <section anchor="universal">
          <name>Universal</name>
          <t>Internet delivered media today has protocols optimized for ingest and
separate protocols optimized for distribution. This protocol switch in
the distribution chain necessitates intermediary origins which
re-package the media content. While specialization can have its
benefits, there are gains in efficiency 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?>

<dl>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a MoQ 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>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, but not the Original
Publisher or End Subscriber.</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>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 model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>An encoded bitstream. Tracks contain a sequential series of one or
more groups and are the subscribable entity with MOQT.
See (<xref target="model-track"/>).</t>
          </dd>
        </dl>
      </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>
        <t>As a quick reference, the following list provides a non normative summary
of the parts of RFC9000 field syntax that are used in this specification.</t>
        <dl>
          <dt>x (L):</dt>
          <dd>
            <t>Indicates that x is L bits long</t>
          </dd>
          <dt>x (i):</dt>
          <dd>
            <t>Indicates that x holds an integer value using the variable-length
encoding as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>)</t>
          </dd>
          <dt>x (..):</dt>
          <dd>
            <t>Indicates that x can be any length including zero bits long.  Values
 in this format always end on a byte boundary.</t>
          </dd>
          <dt>[x (L)]:</dt>
          <dd>
            <t>Indicates that x is optional and has a length of L</t>
          </dd>
          <dt>x (L) ...:</dt>
          <dd>
            <t>Indicates that x is repeated zero or more times and that each instance
has a length of L</t>
          </dd>
        </dl>
        <t>This document extends the RFC9000 syntax and with the additional field types:</t>
        <dl>
          <dt>x (b):</dt>
          <dd>
            <t>Indicates that x consists of a variable length integer encoding as
described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>), followed by that many bytes
of binary data</t>
          </dd>
          <dt>x (f):</dt>
          <dd>
            <t>Indicates that x is a flag and is encoded as a single byte with the
value 0 or 1. A value of 0 indicates the flag is false or off, while a
value of 1 indicates the flag is true or on. Any other value is a
protocol error and <bcp14>SHOULD</bcp14> terminate the session with a Protocol
Violation (<xref target="session-termination"/>).</t>
          </dd>
          <dt>x (tuple):</dt>
          <dd>
            <t>Indicates that x is a tuple, consisting of a variable length integer encoded
as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>), followed by that many variable
length tuple fields, each of which are encoded as (b) above.</t>
          </dd>
        </dl>
        <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>
      </section>
    </section>
    <section anchor="model">
      <name>Object Model</name>
      <t>MOQT has a hierarchical object model for data, comprised of objects,
groups and tracks.</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. <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. The payload portion may be
encrypted, in which case it is only visible to the Original Publisher and End
Subscribers. The application 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>
      </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 QUIC
stream. In some cases, a Group will be most effectively delivered using more
than one QUIC stream.</t>
        <t>When a Track's forwarding preference (see <xref target="object-fields"/>) is "Track" or
"Datagram", Objects are not sent in Subgroups, no Subgroup IDs are assigned, and the
description in the remainder of this section does not apply.</t>
        <t>QUIC streams offer in-order reliable delivery and the ability to cancel sending
and retransmission of data. Furthermore, many implementations offer the ability
to control the relative priority of streams, which allows control over the
scheduling of sending data on active streams.</t>
        <t>Every object within a Group belongs to exactly one Subgroup.</t>
        <t>Objects from two subgroups cannot be sent on the same QUIC stream. Objects from the
same Subgroup <bcp14>MUST NOT</bcp14> be sent on different QUIC 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 QUIC streams as described
above.</t>
        <t>An example strategy for using QUIC stream properties follows. 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 QUIC stream. Furthermore, in this example:</t>
        <ul spacing="normal">
          <li>
            <t>If an object is dependent on all previous objects in a Subgroup, it is added to
that Subgroup.</t>
          </li>
          <li>
            <t>If an object is not dependent on all of the objects in a Subgroup, it goes in
a different Subgroup.</t>
          </li>
          <li>
            <t>There are often many ways to compose Subgroups that meet these criteria. Where
possible, choose the composition that results in the fewest Subgroups in a group
to minimize the number of QUIC streams used.</t>
          </li>
        </ul>
      </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"/>).  Objects within a group <bcp14>SHOULD NOT</bcp14> depend on objects
in other groups.  A group behaves as a join point for subscriptions.
A new subscriber might not want to receive the entire track, and may
instead opt to receive only the latest group(s).  The publisher then
selectively transmits objects based on their group membership.</t>
      </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 and Scopes</name>
          <t>In MOQT, every track has a track name and a track namespace associated
with it.  A track name identifies an individual track within the
namespace.</t>
          <t>Track namespace is an ordered N-tuple of bytes where N can be between 1 and 32.
The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace. Track name is a sequence of bytes.</t>
          <t>In this specification, both the Track Namespace tuple fields and the Track Name
are not constrained to a specific encoding. They carry a sequence of bytes and
comparison between two Track Namespace tuple fields or Track Names is done by
exact comparison of the bytes. Specifications that use MoQ Transport may
constrain the information in these fields, for example by restricting them to
UTF-8. Any specification that does needs to specify the canonicalization into
the bytes in the Track Namespace or Track Name such that exact comparison works.</t>
        </section>
        <section anchor="track-scope">
          <name>Scope</name>
          <t>A MOQT scope is a set of servers (as identified by their connection
URIs) for which the tuple of Track Name and Track Namespace are
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 the tuple of Track Namespace and Track Name are unique within an
MOQT scope, they can be used as a cache key.
MOQT does not provide any in-band content negotiation methods similar to
the ones defined by HTTP (<xref section="10" sectionFormat="comma" target="RFC9110"/>); if, at a given
moment in time, two tracks within the same scope contain different data,
they have to have different names and/or namespaces.</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 <xref target="session"/>.</t>
        </section>
      </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.  When using QUIC, datagrams <bcp14>MUST</bcp14> be
supported via the [QUIC-DATAGRAM] extension, which is already a
requirement for WebTransport over HTTP/3.</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>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>A MOQT server that is accessible via WebTransport can be identified
using an HTTPS URI (<xref section="4.2.2" sectionFormat="comma" target="RFC9110"/>).  A 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>A MOQT server that is accessible via native QUIC can be identified by a
URI with a "moq" scheme.  The "moq" URI scheme is defined as follows,
using definitions from <xref target="RFC3986"/>:</t>
          <artwork><![CDATA[
moq-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
          <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain a non-empty <tt>host</tt> portion.
The <tt>moq</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 a MoQ 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>path-abempty</tt>
and <tt>query</tt> portions of the URI are communicated to the server using the
PATH parameter (<xref target="path"/>) which is sent in the CLIENT_SETUP message at the
start of the session.  The ALPN value <xref target="RFC7301"/> used by the protocol
is <tt>moq-00</tt>.</t>
        </section>
      </section>
      <section anchor="version-negotiation">
        <name>Version and Extension Negotiation</name>
        <t>Endpoints use the exchange of Setup messages to negotiate the MOQT version and
any extensions to use.</t>
        <t>The client indicates the MOQT versions it supports in the CLIENT_SETUP message
(see <xref target="message-setup"/>). It also includes the union of all Setup Parameters
<xref target="setup-params"/> required for a handshake by any of those versions.</t>
        <t>Within any MOQT version, clients request the use of extensions by adding Setup
parameters corresponding to that extension. No extensions are defined in this
document.</t>
        <t>The server replies with a SERVER_SETUP message that indicates the chosen
version, includes all parameters required for a handshake in that version, and
parameters for every extension requested by the client that it supports.</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>
        <t>If a given parameter carries the same information in multiple versions,
but might have different optimal values in those versions, there <bcp14>SHOULD</bcp14> be
separate Setup parameters for that information in each version.</t>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>The first stream opened is a client-initiated bidirectional control stream where
the peers exchange Setup messages (<xref target="message-setup"/>).  All messages defined in
this draft except OBJECT and OBJECT_WITH_LENGTH are sent on the control stream
after the Setup message. Control messages <bcp14>MUST NOT</bcp14> be sent on any other stream,
and a peer receiving a control message on a different stream closes the session
as a 'Protocol Violation'. Objects <bcp14>MUST NOT</bcp14> be sent on the control stream, and a
peer receiving an Object on the control stream closes the session as a 'Protocol
Violation'.</t>
        <t>This draft only specifies a single use of bidirectional streams. Objects are
sent on unidirectional streams.  Because there are no other uses of
bidirectional streams, a peer <bcp14>MAY</bcp14> currently close the session as a
'Protocol Violation' if it receives a second bidirectional stream.</t>
        <t>The control stream <bcp14>MUST NOT</bcp14> be abruptly closed at the underlying transport
layer.  Doing so results in the session being closed as a 'Protocol Violation'.</t>
      </section>
      <section anchor="stream-cancellation">
        <name>Stream Cancellation</name>
        <t>Streams aside from the control stream <bcp14>MAY</bcp14> be canceled due to congestion
or other reasons by either the publisher or subscriber. Early termination of a
stream does not affect the MoQ application state, and therefore has no
effect on outstanding subscriptions.</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="5" sectionFormat="comma" target="WebTransport"/>).</t>
        <t>The application <bcp14>MAY</bcp14> use any error message and <bcp14>SHOULD</bcp14> use a relevant
code, as defined below:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">No Error</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Internal Error</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Unauthorized</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Protocol Violation</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Duplicate Track Alias</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Parameter Length Mismatch</td>
            </tr>
            <tr>
              <td align="right">0x6</td>
              <td align="left">Too Many Subscribes</td>
            </tr>
            <tr>
              <td align="right">0x10</td>
              <td align="left">GOAWAY Timeout</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>No Error: The session is being terminated without an error.</t>
          </li>
          <li>
            <t>Internal Error: An implementation specific error occurred.</t>
          </li>
          <li>
            <t>Unauthorized: The endpoint breached an agreement, which <bcp14>MAY</bcp14> have been
 pre-negotiated by the application.</t>
          </li>
          <li>
            <t>Protocol Violation: The remote endpoint performed an action that was
disallowed by the specification.</t>
          </li>
          <li>
            <t>Duplicate Track Alias: The endpoint attempted to use a Track Alias
that was already in use.</t>
          </li>
          <li>
            <t>Too Many Subscribes: The session was closed because the subscriber used
a Subscribe ID equal or larger than the current Maximum Subscribe ID.</t>
          </li>
          <li>
            <t>GOAWAY Timeout: The session was closed because the client 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>
          </li>
        </ul>
      </section>
      <section anchor="session-migration">
        <name>Migration</name>
        <t>MoqTransport 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.
MoqTransport avoids this via the GOAWAY message (<xref target="message-goaway"/>).</t>
        <t>The server sends a GOAWAY message, signaling that the client should establish a
new session and migrate any active subscriptions. The GOAWAY message may contain
a new URI for the new session, otherwise the current URI is reused. The server
<bcp14>SHOULD</bcp14> terminate the session with 'GOAWAY Timeout' after a sufficient timeout if
there are still open subscriptions on a connection.</t>
        <t>The GOAWAY message does not immediately impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually UNSUBSCRIBE for each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new SUBSCRIBEs while in the draining state. When the server
is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message prior to any UNSUBSCRIBE
messages.</t>
        <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more active 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 active subscriptions
and announcements. The client can choose to delay closing the session if it
expects more OBJECTs to be delivered. The server closes the session with a
'GOAWAY Timeout' if the client doesn't close the session quickly enough.</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>
      <t>Given the critical nature of control messages and their relatively
small size, the control stream <bcp14>SHOULD</bcp14> be prioritized higher than all
subscribed Objects.</t>
      <t>The subscriber indicates the priority of a subscription via the
Subscriber Priority field and the original publisher indicates priority
in every stream or datagram header.  As such, the subscriber's priority is a
property of the subscription and the original publisher's priority is a
property of the Track and the Objects it contains. In both cases, a lower
value indicates a higher priority, with 0 being the highest priority.</t>
      <t>When Objects are contained in Subgroups, all Objects in the Subgroup have the same
priority.</t>
      <t>The Subscriber Priority is considered first when selecting a subscription
to send data on within a given session. When two or more subscriptions
have equal subscriber priority, the original publisher priority is considered
next and can change within the track, so subscriptions are prioritized based
on the highest priority data available to send. For example, if the subscription
had data at priority 6 and priority 10 to send, the subscription priority would
be 6. When both the subscriber and original publisher priorities for a
subscription are equal, how much data to send from each subscription is
implementation-dependent, but the expectation is that all subscriptions will
be able to send some data.</t>
      <t>The subscriber's priority can be changed via a SUBSCRIBE_UPDATE message.
This updates the priority of all unsent data within the subscription,
though the details of the reprioitization are implementation-specific.</t>
      <t>Subscriptions have a Group Order of either 'Ascending' or 'Descending',
which indicates whether the lowest or highest Group Id <bcp14>SHOULD</bcp14> be sent first
when multiple Groups are available to send.  A subscriber can specify either
'Ascending' or 'Descending' in the SUBSCRIBE message or they can specify they
want to use the Original Publisher's Group Order, which is indicated in
the corresponding SUBSCRIBE_OK.</t>
      <t>Within the same Group, and the same priority level,
Objects with a lower Object Id are always sent before objects with a
higher Object Id, regardless of the specified Group Order. If the group
contains more than one Subgroup and the priority varies between these Subgroups,
higher priority Subgroups are sent before lower priority Subgroups. If the specified
priority of two Subgroups in a Group are equal, the lower Subgroup ID has priority.
Within a Subgroup, Objects <bcp14>MUST</bcp14> be sent in increasing Object ID order.</t>
      <t>The Group Order cannot be changed via a SUBSCRIBE_UPDATE message, and
instead an UNSUBSCRIBE and SUBSCRIBE can be used.</t>
      <t>Relays <bcp14>SHOULD</bcp14> respect the subscriber and original publisher's priorities.
Relays <bcp14>SHOULD NOT</bcp14> directly use Subscriber Priority or Group Order
from incoming subscriptions for upstream subscriptions. Relays use of
Subscriber Priority 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>
    </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 can cache Objects, but are not required to.</t>
      <section anchor="subscriber-interactions">
        <name>Subscriber Interactions</name>
        <t>Subscribers interact with the Relays by sending a SUBSCRIBE
(<xref target="message-subscribe-req"/>) control message for the tracks 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 subscription request itself or part of the
encompassing session. The specifics of how a relay authorizes a user are
outside the scope of this specification. The subscriber is notified
of the result of the subscription via a
SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or SUBSCRIBE_ERROR
<xref target="message-subscribe-error"/> control message. The entity receiving the
SUBSCRIBE <bcp14>MUST</bcp14> send only a single response to a given SUBSCRIBE of
either SUBSCRIBE_OK or SUBSCRIBE_ERROR.</t>
        <t>If a relay does not already have a subscription for the track,
or if the subscription does not cover all the requested Objects, it
will need to make an upstream subscription.  The relay <bcp14>SHOULD NOT</bcp14>
return a SUBCRIBE_OK until at least one SUBSCRIBE_OK has been
received for the track, to ensure the Group Order is correct.</t>
        <t>For successful subscriptions, the publisher maintains a list of
subscribers for each track. Each new OBJECT belonging to the
track within the subscription range is forwarded to each active
subscriber, dependent on the congestion response. A subscription
remains active until the publisher of the track terminates the
subscription with a SUBSCRIBE_DONE (see <xref target="message-subscribe-done"/>).</t>
        <t>A caching relay saves Objects to its cache identified by the Object's
Full Track Name, Group ID and Object ID. Relays <bcp14>MUST</bcp14> be able to
process objects for the same Full Track Name from multiple
publishers and forward objects to active matching subscriptions.
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 the cache. Implementations that update the
cache need to be protect against cache poisoning.</t>
        <t>Objects <bcp14>MUST NOT</bcp14> be sent for unsuccessful subscriptions, and if a subscriber
receives a SUBSCRIBE_ERROR after receiving objects, it <bcp14>MUST</bcp14> close the session
with a 'Protocol Violation'.</t>
        <t>A relay <bcp14>MUST</bcp14> not 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.</t>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in SUBSCRIBE_ERROR,
as defined below:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Internal Error</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Invalid Range</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Retry Track Alias</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Track Does Not Exist</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Unauthorized</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Timeout</td>
            </tr>
          </tbody>
        </table>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant status code in
SUBSCRIBE_DONE, as defined below:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Unsubscribed</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Internal Error</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Unauthorized</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Track Ended</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Subscription Ended</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Going Away</td>
            </tr>
            <tr>
              <td align="right">0x6</td>
              <td align="left">Expired</td>
            </tr>
          </tbody>
        </table>
        <section anchor="graceful-publisher-relay-switchover">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes behavior a subscriber <bcp14>MAY</bcp14> implement
to allow for a better user experience when a relay sends a GOAWAY.</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 active 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 stopped with an UNSUBSCRIBE.</t>
        </section>
      </section>
      <section anchor="publisher-interactions">
        <name>Publisher Interactions</name>
        <t>Publishing through the relay starts with publisher sending ANNOUNCE
control message with a <tt>Track Namespace</tt> (<xref target="model-track"/>).
The announce enables the relay to know which publisher to forward a
SUBSCRIBE to.</t>
        <t>Relays <bcp14>MUST</bcp14> ensure that publishers are authorized by:</t>
        <ul spacing="normal">
          <li>
            <t>Verifying that the publisher is authorized to publish the content
associated with the set of tracks whose Track Namespace matches the
announced namespace. Where the authorization and identification of
the publisher occurs depends on the way the relay is managed and
is application specific.</t>
          </li>
        </ul>
        <t>Relays respond with an ANNOUNCE_OK or ANNOUNCE_ERROR control message
providing the result of announcement. The entity receiving the
ANNOUNCE <bcp14>MUST</bcp14> send only a single response to a given ANNOUNCE of
either ANNOUNCE_OK or ANNOUNCE_ERROR.</t>
        <t>A Relay can receive announcements from multiple publishers for the same
Track Namespace and it <bcp14>SHOULD</bcp14> respond with the same response to each of the
publishers, as though it was responding to an ANNOUNCE
from a single publisher for a given tracknamespace.</t>
        <t>When a publisher wants to stop
new subscriptions for an announced namespace it sends an UNANNOUNCE.
A subscriber indicates it will no longer route subscriptions for a
namespace it previously responded ANNOUNCE_OK to by sending an
ANNOUNCE_CANCEL.</t>
        <t>A relay manages sessions from multiple publishers and subscribers,
connecting them based on the track namespace. This <bcp14>MUST</bcp14> use an exact
match on track namespace unless otherwise negotiated by the application.
For example, a SUBSCRIBE namespace=foobar message will be forwarded to
the session that sent ANNOUNCE namespace=foobar.</t>
        <t>When a relay receives an incoming SUBSCRIBE request that triggers an
upstream subscription, it <bcp14>SHOULD</bcp14> send a SUBSCRIBE request to each
publisher that has announced the subscription's namespace, unless it
already has an active subscription for the Objects requested by the
incoming SUBSCRIBE request from all available publishers.</t>
        <t>When a relay receives an incoming ANNOUCE for a given namespace, for
each active upstream subscription that matches that namespace, it <bcp14>SHOULD</bcp14> send a
SUBSCRIBE to that publisher that send the ANNOUNCE.</t>
        <t>OBJECT message headers carry a short hop-by-hop <tt>Track Alias</tt> that maps to
the Full Track Name (see <xref target="message-subscribe-ok"/>). Relays use the
<tt>Track Alias</tt> of an incoming OBJECT message to identify its track and find
the active subscribers for that track. Relays <bcp14>MUST</bcp14> forward OBJECT messages to
matching subscribers in accordance to each subscription's priority, group order,
and delivery timeout.</t>
        <section anchor="graceful-publisher-network-switchover">
          <name>Graceful Publisher Network Switchover</name>
          <t>This section describes behavior that a publisher <bcp14>MAY</bcp14>
choose to implement to allow for a better users experience when
switching between networks, such as WiFi to Cellular or vice versa.</t>
          <t>If the original publisher detects it is likely to need to switch networks,
for example because the WiFi signal is getting weaker, and it does not
have QUIC connection migration available, it establishes a new session
over the new interface and sends an ANNOUCE. The relay will forward
matching subscribes and the publisher publishes objects on both sessions.
Once the subscriptions have migrated over to session on the new network,
the publisher can stop publishing objects on the old network. The relay
will drop duplicate objects received on both subscriptions.
Ideally, the subscriptions downstream from the relay do no observe this
change, and keep receiving the objects on the same subscription.</t>
        </section>
        <section anchor="graceful-publisher-relay-switchover-1">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes behavior that a publisher <bcp14>MAY</bcp14> choose to implement
to allow for a better user experience when a relay sends them a GOAWAY.</t>
          <t>When a publisher receives a GOAWAY, it starts the process of
connecting to a new relay and sends announces, but it does not immediately
stop publishing objects to the old relay. The new relay will send
subscribes and the publisher can start sending new objects to the new relay
instead of the old relay. Once objects are going to the new relay,
the announcement and subscription to the old relay can be stopped.</t>
        </section>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information for a stream via OBJECT headers
(<xref target="message-object"/>).  A relay <bcp14>MUST NOT</bcp14> modify Object properties when
forwarding.</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>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to
avoid incurring additional latency.</t>
        <t>A relay that reads from a stream and writes to stream in order will
introduce head-of-line blocking.  Packet loss will cause stream data to
be buffered in the library, awaiting in order delivery, which will
increase latency over additional hops.  To mitigate this, a relay <bcp14>SHOULD</bcp14>
read and write stream data out of order subject to flow control
limits.  See section 2.2 in <xref target="QUIC"/>.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a single bidirectional stream to exchange control messages, as
defined in <xref target="session-init"/>.  Every single message on the control stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (i),
  Message Payload (b),
}
]]></artwork>
      </figure>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x2</td>
            <td align="left">SUBSCRIBE_UPDATE (<xref target="message-subscribe-update-req"/>)</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">0x5</td>
            <td align="left">SUBSCRIBE_ERROR (<xref target="message-subscribe-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">ANNOUNCE  (<xref target="message-announce"/>)</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">ANNOUNCE_OK (<xref target="message-announce-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">ANNOUNCE_ERROR (<xref target="message-announce-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x9</td>
            <td align="left">UNANNOUNCE  (<xref target="message-unannounce"/>)</td>
          </tr>
          <tr>
            <td align="right">0xA</td>
            <td align="left">UNSUBSCRIBE (<xref target="message-unsubscribe"/>)</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">SUBSCRIBE_DONE (<xref target="message-subscribe-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0xC</td>
            <td align="left">ANNOUNCE_CANCEL (<xref target="message-announce-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS_REQUEST (<xref target="message-track-status-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
          </tr>
          <tr>
            <td align="right">0x11</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x12</td>
            <td align="left">SUBSCRIBE_NAMESPACE_OK (<xref target="message-sub-ns-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x13</td>
            <td align="left">SUBSCRIBE_NAMESPACE_ERROR (<xref target="message-sub-ns-error"/></td>
          </tr>
          <tr>
            <td align="right">0x14</td>
            <td align="left">UNSUBSCRIBE_NAMESPACE (<xref target="message-unsub-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x15</td>
            <td align="left">MAX_SUBSCRIBE_ID (<xref target="message-max-subscribe-id"/>)</td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">CLIENT_SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">SERVER_SETUP (<xref target="message-setup"/>)</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. If the length does not match the
length of the message content, the receiver <bcp14>MUST</bcp14> close the session.</t>
      <section anchor="params">
        <name>Parameters</name>
        <t>Some messages include a Parameters field that encode optional message
elements. They contain a type, length, and value.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same parameter type in a message. Receivers
<bcp14>SHOULD</bcp14> check that there are no duplicate parameters and close the session
as a 'Protocol Violation' if found.</t>
        <t>Receivers ignore unrecognized parameters.</t>
        <t>The format of Parameters is as follows:</t>
        <figure anchor="moq-param">
          <name>MOQT Parameter</name>
          <artwork><![CDATA[
Parameter {
  Parameter Type (i),
  Parameter Length (i),
  Parameter Value (..),
}
]]></artwork>
        </figure>
        <t>Parameter Type is an integer that indicates the semantic meaning of the
parameter. Setup message parameters use a namespace that is constant across all
MoQ Transport versions. All other messages use a version-specific namespace. For
example, the integer '1' can refer to different parameters for Setup messages
and for all other message types.</t>
        <t>SETUP message parameter types are defined in <xref target="setup-params"/>. Version-
specific parameter types are defined in <xref target="version-specific-params"/>.</t>
        <t>The Parameter Length field of the String Parameter encodes the length
of the Parameter Value field in bytes.</t>
        <t>Each parameter description will indicate the data type in the Parameter Value
field. If a receiver understands a parameter type, and the parameter length
implied by that type does not match the Parameter Length field, the receiver
<bcp14>MUST</bcp14> terminate the session with error code 'Parameter Length Mismatch'.</t>
        <section anchor="version-specific-params">
          <name>Version Specific Parameters</name>
          <t>Each version-specific parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, it <bcp14>MUST</bcp14> be ignored.
Note that since Setup parameters use a separate namespace, it is impossible for
these parameters to appear in Setup messages.</t>
          <section anchor="authorization-info">
            <name>AUTHORIZATION INFO</name>
            <t>AUTHORIZATION INFO parameter (key 0x02) identifies a track's authorization
information in a SUBSCRIBE, SUBSCRIBE_NAMESPACE or ANNOUNCE message. This
parameter is populated for cases where the authorization is required at the
track level. The value is an ASCII string.</t>
          </section>
          <section anchor="delivery-timeout">
            <name>DELIVERY TIMEOUT Parameter</name>
            <t>The DELIVERY TIMEOUT parameter (key 0x03) <bcp14>MAY</bcp14> appear in a SUBSCRIBE,
SUBSCRIBE_OK, or a SUBSCRIBE_UDPATE message.  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 beginning of the
Object is received, and does not depend upon the forwarding preference. There is
no explicit signal that an Object was not sent because the delivery timeout
was exceeded.</t>
            <t>If both the subscriber and publisher specify the parameter, they use the min of the
two values for the subscription.  The publisher <bcp14>SHOULD</bcp14> always specify the value
received from an upstream subscription when there is one, and nothing otherwise.
If an earlier Object arrives later than subsequent Objects, relays can consider
the receipt time as that of the next later Object, with the assumption that the
Object's data was reordered.</t>
            <t>If neither the subscriber or publisher specify DELIVERY TIMEOUT, Objects are
delivered as indicated by their Group Order and Priority.</t>
            <t>When sent by a subscriber, 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 is likely to be delivered
before sending any data for that Object, taking into account priorities,
congestion control, and any other relevant information.</t>
          </section>
          <section anchor="max-cache-duration">
            <name>MAX CACHE DURATION Parameter</name>
            <t>MAX_CACHE_DURATION (key 0x04): An integer expressing a number of milliseconds. If
present, the relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received
through this subscription 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, their state becomes unknown, and a relay that
handles a subscription that includes those Objects re-requests them.</t>
          </section>
        </section>
      </section>
      <section anchor="message-setup">
        <name>CLIENT_SETUP and SERVER_SETUP</name>
        <t>The <tt>CLIENT_SETUP</tt> and <tt>SERVER_SETUP</tt> messages are the first messages exchanged
by the client and the server; they allows the peers to establish the mutually
supported version and agree on the initial configuration before any objects are
exchanged. It is a sequence of key-value pairs called Setup parameters; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, the peers <bcp14>MUST</bcp14> ignore unknown
setup parameters. TODO: describe GREASE for those.</t>
        <t>The wire format of the Setup messages are as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT Setup Messages</name>
          <artwork><![CDATA[
CLIENT_SETUP Message Payload {
  Number of Supported Versions (i),
  Supported Version (i) ...,
  Number of Parameters (i) ...,
  Setup Parameters (..) ...,
}

SERVER_SETUP Message Payload {
  Selected Version (i),
  Number of Parameters (i) ...,
  Setup Parameters (..) ...,
}
]]></artwork>
        </figure>
        <t>The available versions and Setup parameters are detailed in the next sections.</t>
        <section anchor="setup-versions">
          <name>Versions</name>
          <t>MoQ Transport versions are a 32-bit unsigned integer, encoded as a varint.
This version of the specification is identified by the number 0x00000001.
Versions with the most significant 16 bits of the version number cleared are
reserved for use in future IETF consensus documents.</t>
          <t>The client offers the list of the protocol versions it supports; the
server <bcp14>MUST</bcp14> reply with one of the versions offered by the client. If the
server does not support any of the versions offered by the client, or
the client receives a server version that it did not offer, the
corresponding peer <bcp14>MUST</bcp14> close the session.</t>
          <t>[[RFC editor: please remove the remainder of this section before
publication.]]</t>
          <t>The version number for the final version of this specification (0x00000001), is
reserved for the version of the protocol that is published as an RFC.
Version numbers used to identify IETF drafts are created by adding the draft
number to 0xff000000. For example, draft-ietf-moq-transport-13 would be
identified as 0xff00000D.</t>
        </section>
        <section anchor="setup-params">
          <name>Setup Parameters</name>
          <section anchor="role">
            <name>ROLE</name>
            <t>The ROLE parameter (key 0x00) allows each endpoint to independently specify what
functionality they support for the session. It has three possible values,
which are of type varint:</t>
            <dl>
              <dt>0x01: Publisher</dt>
              <dd>
                <t>The endpoint can process subscriptions and send objects, but not subscribe.
The endpoint <bcp14>MUST NOT</bcp14> send a SUBSCRIBE message and an ANNOUNCE <bcp14>MUST NOT</bcp14> be
sent to it.</t>
              </dd>
              <dt>0x02: Subscriber</dt>
              <dd>
                <t>The endpoint can send subscriptions and receive objects, but not publish.
The endpoint <bcp14>MUST NOT</bcp14> send an ANNOUNCE message and a SUBSCRIBE <bcp14>MUST NOT</bcp14> be
sent to it.</t>
              </dd>
              <dt>0x03: PubSub</dt>
              <dd>
                <t>The endpoint can act as a publisher or subscriber, and can send or process
any message type.</t>
              </dd>
            </dl>
            <t>Both endpoints <bcp14>MUST</bcp14> send a ROLE parameter with one of the three values
specified above. Both endpoints <bcp14>MUST</bcp14> close the session if the ROLE
parameter is missing or is not one of the three above-specified values.</t>
          </section>
          <section anchor="path">
            <name>PATH</name>
            <t>The PATH parameter (key 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.  If the peer receives a PATH
parameter from the server, or when WebTransport is used, it <bcp14>MUST</bcp14> close
the connection. It follows the URI formatting rules <xref target="RFC3986"/>.</t>
            <t>When connecting to a server using a URI with the "moq" scheme, the
client <bcp14>MUST</bcp14> set the PATH parameter 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 parameter.</t>
          </section>
          <section anchor="max-subscribe-id">
            <name>MAX_SUBSCRIBE_ID</name>
            <t>The MAX_SUBSCRIBE_ID parameter (key 0x02) communicates an initial value for
the Maximum Subscribe ID to the receiving subscriber. The default value is 0,
so if not specified, the peer <bcp14>MUST NOT</bcp14> create subscriptions.</t>
          </section>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>The server sends a <tt>GOAWAY</tt> message to initiate session migration
(<xref target="session-migration"/>) with an optional URI.</t>
        <t>The server <bcp14>MUST</bcp14> terminate the session with a Protocol Violation
(<xref target="session-termination"/>) if it receives a GOAWAY message. The client <bcp14>MUST</bcp14>
terminate the session with a Protocol Violation (<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 {
  New Session URI (b)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: 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 URL to ensure
compatibility.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <section anchor="sub-filter">
          <name>Filter Types</name>
          <t>The subscriber specifies a filter on the subscription to allow
the publisher to identify which objects need to be delivered.</t>
          <t>There are 4 types of filters:</t>
          <t>Latest Group (0x1) : Specifies an open-ended subscription with objects
from the beginning of the current group.  If no content has been delivered yet,
the subscription starts with the first published or received group.</t>
          <t>Latest Object (0x2): Specifies an open-ended subscription beginning from
the current object of the current group.  If no content has been delivered yet,
the subscription starts with the first published or received group.</t>
          <t>AbsoluteStart (0x3):  Specifies an open-ended subscription beginning
from the object identified in the StartGroup and StartObject fields.</t>
          <t>AbsoluteRange (0x4):  Specifies a closed subscription starting at StartObject
in StartGroup and ending at EndObject in EndGroup.  The start and end of the
range are inclusive.  EndGroup and EndObject <bcp14>MUST</bcp14> specify the same or a later
object than StartGroup and StartObject.</t>
          <t>A filter type other than the above <bcp14>MUST</bcp14> be treated as error.</t>
        </section>
        <section anchor="subscribe-format">
          <name>SUBSCRIBE Format</name>
          <t>A subscriber issues a SUBSCRIBE to a publisher to request a track.</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 {
  Subscribe ID (i),
  Track Alias (i),
  Track Namespace (tuple),
  Track Name (b),
  Subscriber Priority (8),
  Group Order (8),
  Filter Type (i),
  [StartGroup (i),
   StartObject (i)],
  [EndGroup (i),
   EndObject (i)],
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Subscribe ID: The subscriber specified identifier used to manage a
subscription. <tt>Subscribe ID</tt> is a variable length integer that <bcp14>MUST</bcp14> be
unique and monotonically increasing within a session and <bcp14>MUST</bcp14> be less
than the session's Maximum Subscribe ID.</t>
            </li>
            <li>
              <t>Track Alias: A session specific identifier for the track.
Messages that reference a track, such as OBJECT (<xref target="message-object"/>),
reference this Track Alias instead of the Track Name and Track Namespace to
reduce overhead. If the Track Alias is already being used for a different
track, the publisher <bcp14>MUST</bcp14> close the session with a Duplicate Track Alias
error (<xref target="session-termination"/>).</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>Subscriber Priority: Specifies the priority of a subscription relative to
other subscriptions in the same session. Lower numbers get higher priority.
See <xref target="priorities"/>.</t>
            </li>
            <li>
              <t>Group Order: Allows the subscriber to request Objects be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
A value of 0x0 indicates the original publisher's Group Order <bcp14>SHOULD</bcp14> be
used. Values larger than 0x2 are a protocol error.</t>
            </li>
            <li>
              <t>Filter Type: Identifies the type of filter, which also indicates whether
the StartGroup/StartObject and EndGroup/EndObject fields will be present.
See (<xref target="sub-filter"/>).</t>
            </li>
            <li>
              <t>StartGroup: The start Group ID. Only present for "AbsoluteStart" and
"AbsoluteRange" filter types.</t>
            </li>
            <li>
              <t>StartObject: The start Object ID. Only present for "AbsoluteStart" and
"AbsoluteRange" filter types.</t>
            </li>
            <li>
              <t>EndGroup: The end Group ID. Only present for the "AbsoluteRange" filter type.</t>
            </li>
            <li>
              <t>EndObject: The end Object ID, plus 1. A value of 0 means the entire group is
requested. Only present for the "AbsoluteRange" filter type.</t>
            </li>
            <li>
              <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-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 the publisher <bcp14>SHOULD</bcp14> start delivering objects.</t>
          <t>If a publisher cannot satisfy the requested start or end for the subscription it
<bcp14>MAY</bcp14> send a SUBSCRIBE_ERROR with code 'Invalid Range'. A publisher <bcp14>MUST NOT</bcp14> send
objects from outside the requested start and end.</t>
        </section>
      </section>
      <section anchor="message-subscribe-update-req">
        <name>SUBSCRIBE_UPDATE</name>
        <t>A subscriber issues a SUBSCRIBE_UPDATE to a publisher to request a change to
a prior subscription.  Subscriptions can only become more narrower, not wider,
because an attempt to widen a subscription could fail.  If Objects before the
start or after the end of the current subscription are needed, a separate
subscription can be made. The start Object <bcp14>MUST NOT</bcp14> decrease and when it increases,
there is no guarantee that a publisher will not have already sent Objects before
the new start Object.  The end Object <bcp14>MUST NOT</bcp14> increase and when it decreases,
there is no guarantee that a publisher will not have already sent Objects after
the new end Object. A publisher <bcp14>SHOULD</bcp14> close the Session as a 'Protocol Violation'
if the SUBSCRIBE_UPDATE violates either rule or if the subscriber specifies a
Subscribe ID that does not exist within the Session.</t>
        <t>Unlike a new subscription, SUBSCRIBE_UPDATE can not cause an Object to be
delivered multiple times.  Like SUBSCRIBE, EndGroup and EndObject <bcp14>MUST</bcp14> specify the
same or a later object than StartGroup and StartObject.</t>
        <t>The format of SUBSCRIBE_UPDATE is as follows:</t>
        <figure anchor="moq-transport-subscribe-update-format">
          <name>MOQT SUBSCRIBE_UPDATE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_UPDATE Message {
  Subscribe ID (i),
  StartGroup (i),
  StartObject (i),
  EndGroup (i),
  EndObject (i),
  Subscriber Priority (8),
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: The subscription identifier that is unique within the session.
This <bcp14>MUST</bcp14> match an existing Subscribe ID.</t>
          </li>
          <li>
            <t>StartGroup: The start Group ID.</t>
          </li>
          <li>
            <t>StartObject: The start Object ID.</t>
          </li>
          <li>
            <t>EndGroup: The end Group ID, plus 1. A value of 0 means the subscription is
open-ended.</t>
          </li>
          <li>
            <t>EndObject: The end Object ID, plus 1. A value of 0 means the entire group is
requested.</t>
          </li>
          <li>
            <t>Subscriber Priority: Specifies the priority of a subscription relative to
other subscriptions in the same session. Lower numbers get higher priority.
See <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-unsubscribe">
        <name>UNSUBSCRIBE</name>
        <t>A subscriber issues a <tt>UNSUBSCRIBE</tt> message to a publisher indicating it is no
longer interested in receiving media for the specified track and Objects
should stop being sent as soon as possible.  The publisher sends a
SUBSCRIBE_DONE to acknowledge the unsubscribe was successful and indicate
the final Object.</t>
        <t>The format of <tt>UNSUBSCRIBE</tt> is as follows:</t>
        <figure anchor="moq-transport-unsubscribe-format">
          <name>MOQT UNSUBSCRIBE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE Message {
  Subscribe ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce-ok">
        <name>ANNOUNCE_OK</name>
        <t>The subscriber sends an ANNOUNCE_OK control message to acknowledge the
successful authorization and acceptance of an ANNOUNCE message.</t>
        <figure anchor="moq-transport-announce-ok">
          <name>MOQT ANNOUNCE_OK Message</name>
          <artwork><![CDATA[
ANNOUNCE_OK
{
  Track Namespace (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the track namespace in the ANNOUNCE
message for which this response is provided.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce-error">
        <name>ANNOUNCE_ERROR</name>
        <t>The subscriber sends an ANNOUNCE_ERROR control message for tracks that
failed authorization.</t>
        <figure anchor="moq-transport-announce-error">
          <name>MOQT ANNOUNCE_ERROR Message</name>
          <artwork><![CDATA[
ANNOUNCE_ERROR
{
  Track Namespace (tuple),
  Error Code (i),
  Reason Phrase (b),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the track namespace in the ANNOUNCE
message for which this response is provided.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for announcement failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for announcement error.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce-cancel">
        <name>ANNOUNCE_CANCEL</name>
        <t>The subscriber sends an <tt>ANNOUNCE_CANCEL</tt> control message to
indicate it will stop sending new subscriptions for tracks
within the provided Track Namespace.</t>
        <t>If a publisher receives new subscriptions for that namespace after
receiving an ANNOUNCE_CANCEL, it <bcp14>SHOULD</bcp14> close the session as a
'Protocol Violation'.</t>
        <figure anchor="moq-transport-announce-cancel-format">
          <name>MOQT ANNOUNCE_CANCEL Message</name>
          <artwork><![CDATA[
ANNOUNCE_CANCEL Message {
  Track Namespace (tuple),
  Error Code (i),
  Reason Phrase (b),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for canceling the announcement.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for announcement cancelation.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status-req">
        <name>TRACK_STATUS_REQUEST</name>
        <t>A potential subscriber sends a 'TRACK_STATUS_REQUEST' message on the control
stream to obtain information about the current status of a given track.</t>
        <t>A TRACK_STATUS message <bcp14>MUST</bcp14> be sent in response to each TRACK_STATUS_REQUEST.</t>
        <figure anchor="moq-track-status-request-format">
          <name>MOQT TRACK_STATUS_REQUEST Message</name>
          <artwork><![CDATA[
TRACK_STATUS_REQUEST Message {
  Track Namespace (tuple),
  Track Name (b),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_NAMESPACE</name>
        <t>The subscriber sends the SUBSCRIBE_NAMESPACE control message to a publisher to
request the current set of matching announcements, 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 {
  Track Namespace Prefix (tuple),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: An ordered N-Tuple of byte fields which are matched
against track namespaces known to the publisher.  For example, if the publisher
is a relay that has received ANNOUNCE 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.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>The publisher will respond with SUBSCRIBE_NAMESPACE_OK or
SUBSCRIBE_NAMESPACE_ERROR.  If the SUBSCRIBE_NAMESPACE is successful,
the publisher will forward any matching ANNOUNCE messages to the subscriber
that it has not yet sent.  If the set of matching ANNOUNCE messages changes, the
publisher sends the corresponding ANNOUNCE or UNANNOUNCE message.</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 is a prefix of an earlier SUBSCRIBE_NAMESPACE or
vice versa, it <bcp14>MUST</bcp14> respond with SUBSCRIBE_NAMESPACE_ERROR, with error code
SUBSCRIBE_NAMESPACE_OVERLAP.</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 ANNOUNCE and
UNANNOUNCE 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 announcements.</t>
      </section>
      <section anchor="message-unsub-ns">
        <name>UNSUBSCRIBE_NAMESPACE</name>
        <t>A subscriber issues a <tt>UNSUBSCRIBE_NAMESPACE</tt> message to a publisher indicating
it is no longer interested in ANNOUNCE and UNANNOUNCE messages for the specified
track namespace prefix.</t>
        <t>The format of <tt>UNSUBSCRIBE_NAMESPACE</tt> is as follows:</t>
        <figure anchor="moq-transport-unsub-ns-format">
          <name>MOQT UNSUBSCRIBE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE_NAMESPACE Message {
  Track Namespace Prefix (tuple)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK control message for successful
subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK
{
  Subscribe ID (i),
  Expires (i),
  Group Order (8),
  ContentExists (f),
  [Largest Group ID (i)],
  [Largest Object ID (i)],
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Expires: Time in milliseconds after which the subscription is no
longer valid. A value of 0 indicates that the subscription does not expire
or expires at an unknown time.  Expires is advisory and a subscription can
end prior to the expiry time or last longer.</t>
          </li>
          <li>
            <t>Group Order: Indicates the subscription will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>ContentExists: 1 if an object has been published on this track, 0 if not.
If 0, then the Largest Group ID and Largest Object ID fields will not be
present.</t>
          </li>
          <li>
            <t>Largest Group ID: The largest Group ID available for this track. This field
is only present if ContentExists has a value of 1.</t>
          </li>
          <li>
            <t>Largest Object ID: The largest Object ID available within the largest Group ID
for this track. This field is only present if ContentExists has a value of 1.</t>
          </li>
          <li>
            <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-error">
        <name>SUBSCRIBE_ERROR</name>
        <t>A publisher sends a SUBSCRIBE_ERROR control message in response to a
failed SUBSCRIBE.</t>
        <figure anchor="moq-transport-subscribe-error">
          <name>MOQT SUBSCRIBE_ERROR Message</name>
          <artwork><![CDATA[
SUBSCRIBE_ERROR
{
  Subscribe ID (i),
  Error Code (i),
  Reason Phrase (b),
  Track Alias (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for subscription failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for subscription error.</t>
          </li>
          <li>
            <t>Track Alias: When Error Code is 'Retry Track Alias', the subscriber <bcp14>SHOULD</bcp14> re-issue the
SUBSCRIBE with this Track Alias instead. If this Track Alias is already in use,
the subscriber <bcp14>MUST</bcp14> close the connection with a Duplicate Track Alias error
(<xref target="session-termination"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-done">
        <name>SUBSCRIBE_DONE</name>
        <t>A publisher sends a <tt>SUBSCRIBE_DONE</tt> message to indicate it is done publishing
Objects for that subscription.  The Status Code indicates why the subscription ended,
and whether it was an error.</t>
        <t>The format of <tt>SUBSCRIBE_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT SUBSCRIBE_DONE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_DONE Message {
  Subscribe ID (i),
  Status Code (i),
  Reason Phrase (b),
  ContentExists (f),
  [Final Group (i)],
  [Final Object (i)],
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for subscription error.</t>
          </li>
          <li>
            <t>ContentExists: 1 if an object has been published for this subscription, 0 if
not. If 0, then the Final Group and Final Object fields will not be present.</t>
          </li>
          <li>
            <t>Final Group: The largest Group ID sent by the publisher in an OBJECT
message in this track.</t>
          </li>
          <li>
            <t>Final Object: The largest Object ID sent by the publisher in an OBJECT
message in the <tt>Final Group</tt> for this track.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-max-subscribe-id">
        <name>MAX_SUBSCRIBE_ID</name>
        <t>A publisher sends a MAX_SUBSCRIBE_ID message to increase the number of
subscriptions a subscriber can create within a session.</t>
        <t>The Maximum Subscribe Id <bcp14>MUST</bcp14> only increase within a session, and
receipt of a MAX_SUBSCRIBE_ID message with an equal or smaller Subscribe ID
value is a 'Protocol Violation'.</t>
        <figure anchor="moq-transport-max-subscribe-id">
          <name>MOQT MAX_SUBSCRIBE_ID Message</name>
          <artwork><![CDATA[
MAX_SUBSCRIBE_ID
{
  Subscribe ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: The new Maximum Subscribe ID for the session. If a Subscribe ID
equal or larger than this is received in any message, including SUBSCRIBE,
the publisher <bcp14>MUST</bcp14> close the session with an error of 'Too Many Subscribes'.
More on Subscribe ID in <xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce">
        <name>ANNOUNCE</name>
        <t>The publisher sends the ANNOUNCE control message to advertise where the
receiver can route SUBSCRIBEs for tracks within the announced
Track Namespace. The receiver verifies the publisher is authorized to
publish tracks under this namespace.</t>
        <figure anchor="moq-transport-announce-format">
          <name>MOQT ANNOUNCE Message</name>
          <artwork><![CDATA[
ANNOUNCE Message {
  Track Namespace (tuple),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <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="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-unannounce">
        <name>UNANNOUNCE</name>
        <t>The publisher sends the <tt>UNANNOUNCE</tt> control message to indicate
its intent to stop serving new subscriptions for tracks
within the provided Track Namespace.</t>
        <figure anchor="moq-transport-unannounce-format">
          <name>MOQT UNANNOUNCE Message</name>
          <artwork><![CDATA[
UNANNOUNCE Message {
  Track Namespace (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A publisher sends a 'TRACK_STATUS' message on the control stream in response
to a TRACK_STATUS_REQUEST message.</t>
        <figure anchor="moq-track-status-format">
          <name>MOQT TRACK_STATUS Message</name>
          <artwork><![CDATA[
TRACK_STATUS Message {
  Track Namespace (tuple),
  Track Name (b),
  Status Code (i),
  Last Group ID (i),
  Last Object ID (i),
}
]]></artwork>
        </figure>
        <t>The 'Status Code' field provides additional information about the status of the
track. It <bcp14>MUST</bcp14> hold one of the following values. Any other value is a malformed
message.</t>
        <t>0x00: The track is in progress, and subsequent fields contain the highest group
and object ID for that track.</t>
        <t>0x01: The track does not exist. Subsequent fields <bcp14>MUST</bcp14> be zero, and any other
value is a malformed message.</t>
        <t>0x02: The track has not yet begun. Subsequent fields <bcp14>MUST</bcp14> be zero. Any other
value is a malformed message.</t>
        <t>0x03: The track has finished, so there is no "live edge." Subsequent fields
contain the highest Group and object ID known.</t>
        <t>0x04: The publisher is a relay that cannot obtain the current track status from
upstream. Subsequent fields contain the largest group and object ID known.</t>
        <t>Any other value in the Status Code field is a malformed message.</t>
        <t>When a relay is subscribed to a track, it can simply return the highest group
and object ID it has observed, whether or not that object was cached or
completely delivered. If not subscribed, a relay <bcp14>SHOULD</bcp14> send a
TRACK_STATUS_REQUEST upstream to obtain updated information.</t>
        <t>Alternatively, the relay <bcp14>MAY</bcp14> subscribe to the track to obtain the same
information.</t>
        <t>If a relay cannot or will not do either, it should return its best available
information with status code 0x04.</t>
        <t>The receiver of multiple TRACK_STATUS messages for a track uses the information
from the latest arriving message, as they are delivered in order on a single
stream.</t>
      </section>
      <section anchor="message-sub-ns-ok">
        <name>SUBSCRIBE_NAMESPACE_OK</name>
        <t>A publisher sends a SUBSCRIBE_NAMESPACE_OK control message for successful
namespace subscriptions.</t>
        <figure anchor="moq-transport-sub-ns-ok">
          <name>MOQT SUBSCRIBE_NAMESPACE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE_OK
{
  Track Namespace Prefix (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-sub-ns-error">
        <name>SUBSCRIBE_NAMESPACE_ERROR</name>
        <t>A publisher sends a SUBSCRIBE_NAMESPACE_ERROR control message in response to a
failed SUBSCRIBE_NAMESPACE.</t>
        <figure anchor="moq-transport-sub-ns-error">
          <name>MOQT SUBSCRIBE_NAMESPACE_ERROR Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE_ERROR
{
  Track Namespace Prefix (tuple),
  Error Code (i),
  Reason Phrase (b),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for the namespace subscription
failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for the namespace subscription error.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams.</t>
      <t>All unidirectional MOQT streams, as well as all datagrams, start with a
variable-length integer indicating the type of the stream in question.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Stream Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x1</td>
            <td align="left">OBJECT_DATAGRAM (<xref target="object-datagram"/>)</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">STREAM_HEADER_TRACK (<xref target="stream-header-track"/>)</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">STREAM_HEADER_SUBGROUP  (<xref target="stream-header-subgroup"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown stream type <bcp14>MUST</bcp14> close the session.</t>
      <t>Every Track has a single 'Object Forwarding Preference' and the Original
Publisher <bcp14>MUST NOT</bcp14> mix different forwarding preferences within a single track.
If a subscriber receives different forwarding preferences for a track, it
<bcp14>SHOULD</bcp14> close the session with an error of 'Protocol Violation'.</t>
      <section anchor="message-object">
        <name>Object Headers</name>
        <t>An OBJECT message contains a range of contiguous bytes from 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-fields">
          <name>Canonical Object Fields</name>
          <t>A canonical MoQ Object has the following information:</t>
          <ul spacing="normal">
            <li>
              <t>Track Namespace and Track Name: The track this object belongs to.</t>
            </li>
            <li>
              <t>Group ID: The object is a member of the indicated group ID
<xref target="model-group"/> within the track.</t>
            </li>
            <li>
              <t>Object ID: The order of the object within the group.  The
IDs starts at 0, increasing sequentially for each 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 Track, Subgroup, and Datagram.  An Object
<bcp14>MUST</bcp14> be sent according to its <tt>Object Forwarding Preference</tt>, described below.</t>
            </li>
            <li>
              <t>Subgroup ID: The object is a member of the indicated subgroup ID (<xref target="model-subgroup"/>)
within the group. This field is omitted if the Object Forwarding Preference is
Track or Datagram.</t>
            </li>
            <li>
              <t>Object Status: As enumeration used to indicate missing
objects or mark the end of a group or track. See <xref target="object-status"/> below.</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 informs subscribers what objects will not be received
because they were never produced, are no longer available, or because they
are beyond the end of a group or track.</t>
            <t><tt>Status</tt> can have following values:</t>
            <ul spacing="normal">
              <li>
                <t>0x0 := Normal object. The payload is array of bytes and can be empty.</t>
              </li>
              <li>
                <t>0x1 := Indicates Object does not exist. Indicates that this object
       does not exist at any publisher and it will not be published in
       the future. This <bcp14>SHOULD</bcp14> be cached.</t>
              </li>
              <li>
                <t>0x3 := Indicates end of Group. ObjectId is one greater that the
       largest object produced in the group identified by the
       GroupID. This is sent right after the last object in the
       group. If the ObjectID is 0, it indicates there are no Objects
       in this Group. This <bcp14>SHOULD</bcp14> be cached. A publisher <bcp14>MAY</bcp14> use an end of
       Group object to signal the end of all open Subgroups in a Group.</t>
              </li>
              <li>
                <t>0x4 := Indicates end of Track and Group. GroupID is one greater than
       the largest group produced in this track and the ObjectId is
       one greater than the largest object produced in that
       group. This is sent right after the last object in the
       track. This <bcp14>SHOULD</bcp14> be cached.</t>
              </li>
              <li>
                <t>0x5 := Indicates end of Subgroup. Object ID is one greater than the largest
       normal object ID in the Subgroup.</t>
              </li>
            </ul>
            <t>Any other value <bcp14>SHOULD</bcp14> be treated as a protocol error and terminate the
session with a Protocol Violation (<xref target="session-termination"/>).
Any object with a status code other than zero <bcp14>MUST</bcp14> have an empty payload.</t>
            <t>Though some status information could be inferred from QUIC stream state,
that information is not reliable and cacheable.</t>
          </section>
        </section>
      </section>
      <section anchor="object-datagram">
        <name>Object Datagram Message</name>
        <t>An <tt>OBJECT_DATAGRAM</tt> message carries a single object in a datagram.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> message has an <tt>Object
Forwarding Preference</tt> = <tt>Datagram</tt>. 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. In certain scenarios where the object
size can be larger than maximum datagram size for the session, the Object
will be dropped.</t>
        <figure anchor="object-datagram-format">
          <name>MOQT OBJECT_DATAGRAM Message</name>
          <artwork><![CDATA[
OBJECT_DATAGRAM Message {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Publisher Priority (8),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="streams">
        <name>Streams</name>
        <t>When objects are sent on streams, the stream begins with a stream
header message and is followed by one or more sets of serialized object fields.
If a stream ends gracefully in the middle of a serialized Object, terminate the
session with a Protocol Violation.</t>
        <t>A publisher <bcp14>SHOULD NOT</bcp14> open more than one stream at a time with the same stream
header message type and fields.</t>
        <t>TODO: figure out how a relay closes these streams</t>
        <section anchor="stream-header-track">
          <name>Stream Header Track</name>
          <t>When a stream begins with <tt>STREAM_HEADER_TRACK</tt>, all objects on the stream
belong to the track requested in the Subscribe message identified by <tt>Subscribe
ID</tt>.  All objects on the stream have the <tt>Publisher Priority</tt> specified in the
stream header.</t>
          <figure anchor="stream-header-track-format">
            <name>MOQT STREAM_HEADER_TRACK Message</name>
            <artwork><![CDATA[
STREAM_HEADER_TRACK Message {
  Subscribe ID (i)
  Track Alias (i),
  Publisher Priority (8),
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with STREAM_HEADER_TRACK have an <tt>Object
Forwarding Preference</tt> = <tt>Track</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Track</tt>, find the open
stream that is associated with the subscription, or open a new one and send the
<tt>STREAM_HEADER_TRACK</tt> if needed, then serialize the following object fields.
The Object Status field is only sent if the Object Payload Length is zero.</t>
          <figure anchor="object-track-format">
            <name>MOQT Track Stream Object Fields</name>
            <artwork><![CDATA[
{
  Group ID (i),
  Object ID (i),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
          <t>A publisher <bcp14>MUST NOT</bcp14> send an Object on a stream if its Group ID is less than a
previously sent Group ID on that stream, or if its Object ID is less than or
equal to a previously sent Object ID with the same Group ID.</t>
        </section>
        <section anchor="stream-header-subgroup">
          <name>Stream Header Subgroup</name>
          <t>When a stream begins with <tt>STREAM_HEADER_SUBGROUP</tt>, all objects on the stream
belong to the track requested in the Subscribe message identified by <tt>Subscribe
ID</tt> and the subgroup indicated by 'Group ID' and <tt>Subgroup ID</tt>.</t>
          <figure anchor="stream-header-subgroup-format">
            <name>MOQT STREAM_HEADER_SUBGROUP Message</name>
            <artwork><![CDATA[
STREAM_HEADER_SUBGROUP Message {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i),
  Subgroup ID (i),
  Publisher Priority (8),
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>STREAM_HEADER_SUBGROUP</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <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>STREAM_HEADER_SUBGROUP</tt>. Then serialize the
following fields.</t>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <figure anchor="object-group-format">
            <name>MOQT Group Stream Object Fields</name>
            <artwork><![CDATA[
{
  Object ID (i),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
          <t>A publisher <bcp14>MUST NOT</bcp14> send an Object on a stream if its Object ID is less than a
previously sent Object ID within a given group in that stream.</t>
        </section>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>Sending a track on one stream:</t>
        <artwork><![CDATA[
STREAM_HEADER_TRACK {
  Subscribe ID = 1
  Track Alias = 1
  Publisher Priority = 0
}
{
  Group ID = 0
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Group ID = 1
  Object ID = 0
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
        <t>Sending a subgroup on one stream:</t>
        <artwork><![CDATA[
Stream = 2

STREAM_HEADER_SUBGROUP {
  Subscribe ID = 2
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
  Publisher Priority = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO: Expand this section, including subscriptions.</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 a MOQT Streaming Format 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 lowest priority, after
reaching a resource limit.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT version numbers</t>
        </li>
        <li>
          <t>Setup parameters</t>
        </li>
        <li>
          <t>Subscribe parameters</t>
        </li>
        <li>
          <t>Subscribe Error codes</t>
        </li>
        <li>
          <t>Subscribe Namespace Error codes</t>
        </li>
        <li>
          <t>Announce Error codes</t>
        </li>
        <li>
          <t>Announce Cancel Reason codes</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN</t>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <ul spacing="normal">
        <li>
          <t>Alan Frindell</t>
        </li>
        <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>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-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="25" month="August" year="2024"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables clients
   constrained by the Web security model to communicate with a remote
   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-10"/>
        </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="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="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>
      </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="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="August" year="2024"/>
            <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-08"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
