<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-01"/>
    <author initials="L." surname="Curley" fullname="Luke Curley">
      <organization>Twitch</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>
    <date/>
    <area>Applications and Real-Time</area>
    <workgroup>MOQ</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 50?>

<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>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Media Over QUIC Working Group mailing list (moq@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/moq-wg/moq-transport"/>.</t>
    </note>
  </front>
  <middle>
    <?line 59?>

<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="priority-congestion"/> covers protocol considerations on
prioritization schemes and congestion response overall.</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>Producer:</dt>
          <dd>
            <t>An endpoint sending media over the network.</t>
          </dd>
          <dt>Consumer:</dt>
          <dd>
            <t>An endpoint receiving media over the network.</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.</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>This document also defines an additional field type for binary data:</t>
        <dl>
          <dt>x (b):</dt>
          <dd>
            <t>Indicates that x consists of a variable length integer, followed by
that many bytes of binary data.</t>
          </dd>
        </dl>
      </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"/> 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 producer and consumer. 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-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 sender 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 consumer issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the producer 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>A tuple of a track name and a track namespace together is known as a
full track name:</t>
          <artwork><![CDATA[
Full Track Name = Track Namespace Track Name
]]></artwork>
          <t>A MOQT scope is a set of servers (as identified by their connection
URIs) for which full track names are guaranteed to be unique.  This
implies that within a single MOQT scope, subscribing to the same full
track name would result in the subscriber receiving the data for the
same track.  It is up to the application using MOQT to define how broad
or narrow the scope has to be.  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>The full track name is the only piece of information that is used to
identify the track within a given MOQT scope and is used as 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 full track names.</t>
          <artwork><![CDATA[
Example: 1
Track Namespace = live.example.com/meeting/123/member/alice/
Track Name = audio
Full Track Name = live.example.com/meeting/123/member/alice/audio

Example: 2
Track Namespace = live.example.com/
Track Name = uaCafDkl123/audio
Full Track Name = live.example.com/uaCafDkl123/audio

Example: 3
Track Namespace = security-camera.example.com/camera1/
Track Name = hd-video
Full Track Name = security-camera.example.com/camera1/hd-video

]]></artwork>
        </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.  There is no definition of the protocol
over other transports, such as TCP, and applicaitons 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 = "moq" "://" 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 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 connection 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 sender or receiver. 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">Generic 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">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>Generic Error: An unclassified 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>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="priority-congestion">
      <name>Prioritization and Congestion Response</name>
      <t>TODO: This is a placeholder section to capture details on how the MOQT
protocol deals with prioritization and congestion overall.</t>
      <t>This section is expected to cover details on:</t>
      <ul spacing="normal">
        <li>
          <t>Prioritization Schemes.</t>
        </li>
        <li>
          <t>Congestion Algorithms and impacts.</t>
        </li>
        <li>
          <t>Mapping considerations for one object per stream vs multiple objects
per stream.</t>
        </li>
        <li>
          <t>Considerations for merging multiple streams across domains onto single
connection and interactions with specific prioritization schemes.</t>
        </li>
      </ul>
      <section anchor="order-priorities-and-options">
        <name>Order Priorities and Options</name>
        <t>At the point of this writing, the working group has not reached
consensus on several important goals, such as:</t>
        <ul spacing="normal">
          <li>
            <t>Ensuring that objects are delivered in the order intended by the
emitter</t>
          </li>
          <li>
            <t>Allowing nodes and relays to skip or delay some objects to deal with
congestion</t>
          </li>
          <li>
            <t>Ensuring that emitters can accurately predict the behavior of relays</t>
          </li>
          <li>
            <t>Ensuring that when relays have to skip and delay objects belonging to
different tracks that they do it in a predictable way if tracks are
explicitly coordinated and in a fair way if they are not.</t>
          </li>
        </ul>
        <t>The working group has been considering two alternatives: marking objects
belonging to a track with an explicit "send order"; and, defining
algorithms combining tracks, priorities and object order within a
group. The two proposals are listed in <xref target="send-order"/> and
<xref target="ordering-by-priorities"/>.  We expect further work before a consensus
is reached.</t>
        <section anchor="send-order">
          <name>Proposal - Send Order</name>
          <t>Media is produced with an intended order, both in terms of when media
should be presented (PTS) and when media should be decoded (DTS).  As
stated in the introduction, the network is unable to maintain this
ordering during congestion without increasing latency.</t>
          <t>The encoder determines how to behave during congestion by assigning each
object a numeric send order.  The send order <bcp14>SHOULD</bcp14> be followed when
possible, to ensure that the most important media is delivered when
throughput is limited.  Note that the contents within each object are
still delivered in order; this send order only applies to the ordering
between objects.</t>
          <t>A sender <bcp14>MUST</bcp14> send each object over a dedicated stream.  The library
should support prioritization (<xref target="priority-congestion"/>) such that
streams are transmitted in send order.</t>
          <t>A receiver <bcp14>MUST NOT</bcp14> assume that objects will be received in send order,
for the following reasons:</t>
          <ul spacing="normal">
            <li>
              <t>Newly encoded objects can have a smaller send order than outstanding
objects.</t>
            </li>
            <li>
              <t>Packet loss or flow control can delay the send of individual streams.</t>
            </li>
            <li>
              <t>The sender might not support stream prioritization.</t>
            </li>
          </ul>
          <t>TODO: Refer to Congestion Response and Prioritization Section for
further details on various proposals.</t>
        </section>
        <section anchor="ordering-by-priorities">
          <name>Proposal - Ordering by Priorities</name>
          <t>Media is produced as a set of layers, such as for example low definition
and high definition, or low frame rate and high frame rate. Each object
belonging to a track and a group has two attributes: the object-id, and
the priority (or layer).</t>
          <t>When nodes or relays have to choose which object to send next, they
apply the following rules:</t>
          <ul spacing="normal">
            <li>
              <t>within the same group, objects with a lower priority number (e.g. P1)
are always sent before objects with a numerically greater priority
number (e.g., P2)</t>
            </li>
            <li>
              <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.</t>
            </li>
            <li>
              <t>objects from later groups are normally always sent before objects of
previous groups.</t>
            </li>
          </ul>
          <t>The latter rule is generally agreed as a way to ensure freshness, and to
recover quickly if queues and delays accumulate during a congestion
period. However, there may be cases when finishing the transmission of
an ongoing group results in better user experience than strict adherence
to the freshness rule. We expect that that the working group will
eventually reach consensus and define meta data that controls this
behavior.</t>
          <t>There have been proposals to allow emitters to coordinate the allocation
of layer priorities across multiple coordinated tracks. At this point,
these proposals have not reached consensus.</t>
        </section>
      </section>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MoQ
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <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 Full Track Name. 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.</t>
        <t>The subscriber making the subscribe request is notified of the result of
the subscription, via SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or the
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>For successful subscriptions, the publisher maintains a list of
subscribers for each full track name. Each new OBJECT belonging to the
track is forwarded to each active subscriber, dependent on the
congestion response. A subscription remains active until it expires,
until the publisher of the track terminates the track with a SUBSCRIBE_FIN
(see <xref target="message-subscribe-fin"/>) or a SUBSCRIBE_RST
(see <xref target="message-subscribe-rst"/>).</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 forward subscription for the
track. The published content received from the forward subscription
request is cached and shared among the pending subscribers.</t>
      </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"/>).</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. Specifics of where the authorization happens,
either at the relays or forwarded for further processing, depends on
the way the relay is managed and is application specific (typically
based on prior business agreement).</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>OBJECT message header carry short hop-by-hop Track Id that maps to the
Full Track Name (see <xref target="message-subscribe-ok"/>). Relays use the Track ID
of an incoming OBJECT message to identify its track and find the active
subscribers for that track. Relays <bcp14>MUST NOT</bcp14> depend on OBJECT payload
content for making forwarding decisions and <bcp14>MUST</bcp14> only depend on the
fields, such as priority order and other metadata properties in the
OBJECT message header. Unless determined by congestion response, Relays
<bcp14>MUST</bcp14> forward the OBJECT message to the matching subscribers.</t>
      </section>
      <section anchor="relay-discovery-and-failover">
        <name>Relay Discovery and Failover</name>
        <t>TODO: This section shall cover aspects of relay failover and protocol
interactions.</t>
      </section>
      <section anchor="restoring-connections-through-relays">
        <name>Restoring connections through relays</name>
        <t>TODO: This section shall cover reconnect considerations for clients when
moving between the Relays.</t>
      </section>
      <section anchor="congestion-response-at-relays">
        <name>Congestion Response at Relays</name>
        <t>TODO: Refer to <xref target="priority-congestion"/>. Add details to describe relay
behavior when merging or splitting streams and interactions with
congestion response.</t>
      </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"/>).</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 streams (<xref target="priority-congestion"/>) based on the send
order/priority.</t>
        <t>A sender <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>Messages</name>
      <t>Both unidirectional and bidirectional streams contain sequences of
length-delimited messages.</t>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the connection.</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Message</name>
        <artwork><![CDATA[
MOQT Message {
  Message Type (i),
  Message Payload (..),
}
]]></artwork>
      </figure>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x0</td>
            <td align="left">OBJECT with payload length (<xref target="message-object"/>)</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">OBJECT without payload length (<xref target="message-object"/>)</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_FIN (<xref target="message-subscribe-fin"/>)</td>
          </tr>
          <tr>
            <td align="right">0xC</td>
            <td align="left">SUBSCRIBE_RST (<xref target="message-subscribe-rst"/>)</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</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>
      <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 connection
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 the parameter value is a varint, but the self-encoded length of that
varint does not match the Parameter Length field, the receiver <bcp14>MUST</bcp14> ignore the
parameter using the value in the Parameter Length field.</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="group-sequence">
            <name>GROUP SEQUENCE Parameter</name>
            <t>The GROUP SEQUENCE parameter (key 0x00) identifies the group within the
track to start delivering objects in a SUBSCRIBE message. The publisher <bcp14>MUST</bcp14>
start delivering the objects from the most recent group, when this parameter is
omitted. The value is of type varint.</t>
          </section>
          <section anchor="object-sequence">
            <name>OBJECT SEQUENCE Parameter</name>
            <t>The OBJECT SEQUENCE parameter (key 0x01) identifies the object with the
track to start delivering objects in a SUBSCRIBE message. The <tt>GROUP SEQUENCE</tt>
parameter <bcp14>MUST</bcp14> be set to identify the group under which to start delivery. The
publisher <bcp14>MUST</bcp14> start delivering from the beginning of the selected group
when this parameter is omitted. The value is of type varint.</t>
          </section>
          <section anchor="authorization-info">
            <name>AUTHORIZATION INFO Parameter</name>
            <t>AUTHORIZATION INFO parameter (key 0x02) identifies a track's authorization
information in a SUBSCRIBE 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>
      </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 is 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 connection.</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 parameter</name>
            <t>The ROLE parameter (key 0x00) allows the client to specify what roles it
expects the parties to have in the MOQT connection. It has three
possible values, which are of type varint:</t>
            <dl>
              <dt>0x01:</dt>
              <dd>
                <t>Only the client is expected to send objects on the connection. This is
commonly referred to as the ingestion case.</t>
              </dd>
              <dt>0x02:</dt>
              <dd>
                <t>Only the server is expected to send objects on the connection. This is
commonly referred to as the delivery case.</t>
              </dd>
              <dt>0x03:</dt>
              <dd>
                <t>Both the client and the server are expected to send objects.</t>
              </dd>
            </dl>
            <t>The client <bcp14>MUST</bcp14> send a ROLE parameter with one of the three values
specified above. The server <bcp14>MUST</bcp14> close the connection if the ROLE
parameter is missing, is not one of the three above-specified values, or
it is different from what the server expects based on the application.</t>
          </section>
          <section anchor="path">
            <name>PATH parameter</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>
      </section>
      <section anchor="message-object">
        <name>OBJECT</name>
        <t>A 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. There are two subtypes of this message. When the
message type is 0x00, the optional Object Payload Length field is
present. When the message type ix 0x02, the field is not present.</t>
        <t>The format of the OBJECT message is as follows:</t>
        <figure anchor="moq-transport-object-format">
          <name>MOQT OBJECT Message</name>
          <artwork><![CDATA[
OBJECT Message {
  Track ID (i),
  Group Sequence (i),
  Object Sequence (i),
  Object Send Order (i),
  [Object Payload Length (i),]
  Object Payload (b),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track ID: The track identifier obtained as part of subscription and/or
publish control message exchanges.</t>
          </li>
          <li>
            <t>Group Sequence : The object is a member of the indicated group
<xref target="model-group"/> within the track.</t>
          </li>
          <li>
            <t>Object Sequence: The order of the object within the group.  The
sequence starts at 0, increasing sequentially for each object within the
group.</t>
          </li>
          <li>
            <t>Object Send Order: An integer indicating the object send order
<xref target="send-order"/> or priority <xref target="ordering-by-priorities"/> value.</t>
          </li>
          <li>
            <t>Object Payload Length: The length of the following Object Payload. If this
field is absent, the object payload continues to the end of the stream.</t>
          </li>
          <li>
            <t>Object Payload: An opaque payload intended for the consumer and <bcp14>SHOULD
NOT</bcp14> be processed by a relay.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>A receiver issues a SUBSCRIBE to a publisher to request a track.</t>
        <section anchor="susbscribe-locations">
          <name>Susbscribe Locations</name>
          <t>The receiver specifies a start and optional end <tt>Location</tt> for the subscription.
A location value may be an absolute group or object sequence, or it may be a
delta relative to the largest group or the largest object in a group.</t>
          <artwork><![CDATA[
Location {
  Mode (i),
  [Value (i)]
}
]]></artwork>
          <t>There are 4 modes:</t>
          <t>None (0x0): The Location is unspecified, Value is not present</t>
          <t>Absolute (0x1): Value is an absolute sequence</t>
          <t>RelativePrevious (0x2): Value is a delta from the largest sequence.  0 is the
largest sequence, 1 is the largest sequence - 1, and so on.</t>
          <t>RelativeNext (0x3): Value is a delta from the largest sequence.  0 is the largest
sequence + 1, 1 is the largest sequence + 2, and so on.</t>
          <t>The following table shows an example of how the RelativePrevious and RelativeNext
values are used to determine the absolute sequence.</t>
          <figure>
            <name>Relative Indexing</name>
            <artwork><![CDATA[
Sequence:                0    1    2    3    4   [5]  [6] ...
                                             ^
                                      Largest Sequence
RelativePrevious Value:  4    3    2    1    0
RelativeNext Value:                               0    1  ...
]]></artwork>
          </figure>
        </section>
        <section anchor="subscribe-request-format">
          <name>SUBSCRIBE REQUEST Format</name>
          <t>The format of SUBSCRIBE REQUEST is as follows:</t>
          <figure anchor="moq-transport-subscribe-format">
            <name>MOQT SUBSCRIBE Message</name>
            <artwork><![CDATA[
SUBSCRIBE REQUEST Message {
  Full Track Name Length (i),
  Full Track Name (...),
  StartGroup (Location),
  StartObject (Location),
  EndGroup (Location),
  EndObject (Location),
  Track Request Parameters (..) ...
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>StartGroup: The Location of the requested group.  StartGroup's Mode <bcp14>MUST NOT</bcp14> be
None.</t>
            </li>
            <li>
              <t>StartObject: The Location of the requested object.  StartObject's Mode <bcp14>MUST NOT</bcp14>
be None.</t>
            </li>
            <li>
              <t>EndGroup: The last Group requested in the subscription, inclusive.  EndGroup's
Mode is None for an open-ended subscription.</t>
            </li>
            <li>
              <t>EndObject: The last Object requested in the subscription, exclusive.
EndObject's Mode <bcp14>MUST</bcp14> be None if EndGroup's Mode is None.  EndObject's Mode <bcp14>MUST
NOT</bcp14> be None if EndGroup's Mode is not None.</t>
            </li>
            <li>
              <t>Track Request Parameters: The parameters are defined in
<xref target="version-specific-params"/></t>
            </li>
          </ul>
          <t>On successful subscription, the publisher <bcp14>SHOULD</bcp14> start delivering
objects from the group sequence and object sequence described above.</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 TBD. A publisher <bcp14>MUST NOT</bcp14> send objects
from outside the requested start and end.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <artwork><![CDATA[
1. Now

Start Group: Mode=RelativePrevious, Value=0
Start Object: Mode=RelateiveNext, Value=0
End Group: Mode=None
End Object: Mode=None

StartGroup=Largest Group
StartObject=Largest Object + 1

2. Current

Start Group: Mode=RelativePrevious, Value=0
Start Object: Mode=Absolute, Value=0
End Group: Mode=None
End Object: Mode=None

StartGroup=Largest Group
StartObject=0

3. Previous

Start Group: Mode=RelativePrevious, Value=1
Start Object: Mode=Absolute, Value=0
End Group: Mode=None
End Object: Mode=None

StartGroup=Largest Group - 1
StartObject=0

4. Next

Start Group: Mode=RelativeNext, Value=0
Start Object: Mode=Absolute, Value=0
End Group: Mode=None
End Object: Mode=None

StartGroup=Largest Group + 1
StartObject=0

5. Range, All of group 3

Start Group: Mode=Absolute, Value=3
Start Object: Mode=Absolute, Value=0
End Group: Mode=Absolute, Value=4
End Object: Mode=Absolute, Value=0

Start = Group 3, Object 0
End = Group 3, Object <last>
]]></artwork>
        </section>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A SUBSCRIBE_OK control message is sent for successful subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK
{
  Track Namespace (b),
  Track Name (b),
  Track ID (i),
  Expires (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track ID: Session specific identifier that is used as an alias for the
Full Track Name in the Track ID field of the OBJECT (<xref target="message-object"/>)
message headers of the requested track. Track IDs are generally shorter
than Full Track Names and thus reduce the overhead in OBJECT messages.</t>
          </li>
          <li>
            <t>Expires: Time in milliseconds after which the subscription is no
longer valid. A value of 0 indicates that the subscription stays active
until it is explicitly unsubscribed.</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
{
  Track Namespace (b),
  Track Name (b),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (...),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for subscription failure.</t>
          </li>
          <li>
            <t>Reason Phrase Length: The length in bytes of the reason phrase.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for subscription error and <tt>Reason
Phrase Length</tt> field carries its length.</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.</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 {
  Track Namespace (b),
  Track Name (b),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-fin">
        <name>SUBSCRIBE_FIN</name>
        <t>A publisher issues a <tt>SUBSCRIBE_FIN</tt> message to all subscribers indicating it
is done publishing objects on the subscribed track.</t>
        <t>The format of <tt>SUBSCRIBE_FIN</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT SUBSCRIBE_FIN Message</name>
          <artwork><![CDATA[
SUBSCRIBE_FIN Message {
  Track Namespace (b),
  Track Name (b),
  Final Group (i),
  Final Object (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Final Group: The largest Group Sequence sent by the publisher in an OBJECT
message in this track.</t>
          </li>
          <li>
            <t>Final Object: The largest Object Sequence sent by the publisher in an OBJECT
message in the <tt>Final Group</tt> for this track.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-rst">
        <name>SUBSCRIBE_RST</name>
        <t>A publisher issues a <tt>SUBSCRIBE_RST</tt> message to all subscribers indicating there
wan an error publishing to the given track and subscription is terminated.</t>
        <t>The format of <tt>SUBSCRIBE_RST</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-rst">
          <name>MOQT SUBSCRIBE RST Message</name>
          <artwork><![CDATA[
SUBSCRIBE_RST Message {
  Track Namespace (b),
  Track Name (b),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (...),
  Final Group (i),
  Final Object (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for subscription failure.</t>
          </li>
          <li>
            <t>Reason Phrase Length: The length in bytes of the reason phrase.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for subscription error and <tt>Reason
Phrase Length</tt> field carries its length.</t>
          </li>
          <li>
            <t>Final Group: The largest Group Sequence sent by the publisher in an OBJECT
message in this track.</t>
          </li>
          <li>
            <t>Final Object: The largest Object Sequence sent by the publisher in an OBJECT
message in the <tt>Final Group</tt> for this track.</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 (b),
  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-announce-ok">
        <name>ANNOUNCE_OK</name>
        <t>The receiver 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 (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>
        </ul>
      </section>
      <section anchor="message-announce-error">
        <name>ANNOUNCE_ERROR</name>
        <t>The receiver 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(b),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (...),
}
]]></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 and <tt>Reason
Phrase Length</tt> field carries its length.</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(b),
}
]]></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-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 provded.
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>
    <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 producer prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The producer and
consumer <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>Track Request parameters</t>
        </li>
        <li>
          <t>Subscribe Error codes</t>
        </li>
        <li>
          <t>Announce Error codes</t>
        </li>
        <li>
          <t>Track format numbers</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
        <li>
          <t>Object headers</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN</t>
      <t>TODO: the MOQT spec should establish the IANA registration table for MoQ
Streaming Formats. Each MoQ streaming format can then register its type
in that table. The MoQ Streaming Format type <bcp14>MUST</bcp14> be carried as the
leading varint in catalog track objects.</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>
      <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="23" month="October" year="2023"/>
            <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-08"/>
        </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="6" month="September" year="2023"/>
            <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-06"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+V9e3fb1pXv/+dTYJw/YmdI2rLTl9pMq8hy4qktuZKc3E6a
G4EkKGEMAiwASmZd389yP8v9ZHf/9uM8QEp22rRrdY3XmmkEAuexz36/zng8
dn3ZV8V+du9lMS/zrLku2uwPr58fZudtXnerpu3vuXw6bYvr/WzZ/Hnc22M3
b2Z1vqRP522+6Mdl0S/GyRvjR3tunvf0xrunB+dH792M/rhs2s1+1vVz58pV
u5/17brrHz969KtHj13eFvl+drBaVSW9WjZ1l+X1PDst8mp8Xi4L162ny7Lr
6JfzzYrGfX50/szdNO2by7ZZr/azlyd/cG+KDT2Z0491X7R10Y+fYn3OdT0N
9kNeNTV9uSk61y3ztv/hz+umL7r9rG7cqtzPvuub2SjraPltsejovzZL+Q/a
7jJfrcr68nvn8nV/1bT7LsvG9H9ZVtY0wotJdrhuq2LDjwQ2L9Zvivhp017m
dfkX3t1+dn5T9rMr/qFY5mW1n70p3xYVgWn+u0s8mMyapUtn+f0ke7W+LOto
kt+XbVlV0eN0lpdFn8dzlG/K9ndLerhj9LNJdkxgyt+sCTjRFGfrq7wb/pRO
c1h2syaep6vl9d/N8MuOyb6ZZN/kXVmVxXU01TflrG/a9Jd0pq+a5rIq4qmu
8fL19e8u+ReZytVNu6QvrgucE3B6Pzt9dvirR48e0d/fFlOP4YQr46cTRuCb
Ysr4O77q+9UTwtF6EUZx4/E4y6cdvTEjhDq/KjugxXpZ1H02LxZlXXRZf1Vk
s6YtsmlxlV+XtBMaIbuVutx9QtrzB6Msz5b8jiefbNU2hIxNRUN35WVdzLO+
yZpV0RJ+REMRkF28m1F2c1XOrjKavci6cllWOa1hXc8AvLwq+80EhHKe5VXV
3BCJYaL5ekbjNQuni2iy1Xpald1VRhScMxnyeGVPm6s72vI8u6YXiSK7WVuu
MHY23WS5W66rvgQF00Q0YFbU81VT1n03yZ739P4Ka+wIAYg6ebIe8KK/AMOS
YFtO1xjNEemCtIUHANIGBcDzqry8yrpZXhX8M20kA9nUs00yyETObFnO54Qw
zn0CrsC75SmcHMvJ9rFkciyYNw8H0V/lPR41tN9l+Zdi7rAWnDh/7d979w5/
v38/yoqSfm1pTW0x6ysCSMtgi8/LvXsX/4mvbFTaSlcsy5rxHsBkgOnx0QYr
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
Ir9x/x919/eOJcEAAA==

-->

</rfc>
