<?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.5 (Ruby 3.2.2) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.1 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-02"/>
    <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>Applications and Real-Time</area>
    <workgroup>MOQ</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 56?>

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

<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 (i), 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 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>
          <t>In this specification, both the Track Namespace and the Track Name are
not constrained to a specific encoding. They carry a sequence of
bytes and comparison between two Track Namespaces 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="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 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 = "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 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 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">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">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>Duplicate Track Alias: The endpoint attempted to use a Track Alias
that was already in use.</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 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.</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 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 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>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 forward subscription for the
track. The published content received from the forward 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">Generic 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>
          </tbody>
        </table>
      </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 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 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="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"/>).  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 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 session.</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_STREAM (<xref target="object-message-formats"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1</td>
            <td align="left">OBJECT_PREFER_DATAGRAM (<xref target="object-message-formats"/>)</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>
          <tr>
            <td align="right">0x50</td>
            <td align="left">STREAM_HEADER_TRACK (<xref target="multi-object-streams"/>)</td>
          </tr>
          <tr>
            <td align="right">0x51</td>
            <td align="left">STREAM_HEADER_GROUP (<xref target="multi-object-streams"/>)</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 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 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 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 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 session 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>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.</t>
        <section anchor="canonical-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>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 Forwarding Preference: An enumeration indicating how a sender sends an
object. The preferences are Track, Group, Object and Datagram.  An Object <bcp14>MUST</bcp14>
be sent according to its <tt>Object Forwarding Preference</tt>, described below.</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="object-message-formats">
          <name>Object Message Formats</name>
          <t><strong>Object Stream Message</strong></t>
          <t>An <tt>OBJECT_STREAM</tt> message carries a single object on a stream.  There is no
explicit length of the payload; it is determined by the end of the stream.  An
<tt>OBJECT_STREAM</tt> message <bcp14>MUST</bcp14> be the first and only message on a unidirectional
stream.</t>
          <t>An Object received in an <tt>OBJECT_STREAM</tt> message has an <tt>Object Forwarding
Preference</tt> = <tt>Object</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Object</tt>, open a stream,
serialize object fields below, and terminate the stream.</t>
          <figure anchor="moq-transport-object-stream-format">
            <name>MOQT OBJECT_STREAM Message</name>
            <artwork><![CDATA[
OBJECT_STREAM Message {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Object Send Order (i),
  Object Payload (...),
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Subscribe ID: Subscription Identifer as defined in <xref target="message-subscribe-req"/>.</t>
            </li>
            <li>
              <t>Track Alias: Identifies the Track Namespace and Track Name as defined in
<xref target="message-subscribe-req"/>.</t>
            </li>
          </ul>
          <t>If the Track Namespace and Track Name identified by the Track Alias are
different from those specified in the subscription identified by Subscribe ID,
the receiver <bcp14>MUST</bcp14> close the session with a Protocol Violation.</t>
          <ul spacing="normal">
            <li>
              <t>Other fields: As described in <xref target="canonical-object-fields"/>.</t>
            </li>
          </ul>
          <t><strong>Object Prefer Datagram Message</strong></t>
          <t>An <tt>OBJECT_PREFER_DATAGRAM</tt> message carries a single object in a datagram or
a stream. There is no explicit length of the payload; it is determined by the
length of the datagram or stream.  If this message appears on a stream, it <bcp14>MUST</bcp14>
be the only message on a unidirectional stream.</t>
          <t>An Object received in an <tt>OBJECT_PREFER_DATAGRAM</tt> message has an <tt>Object
Forwarding Preference</tt> = <tt>Datagram</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Datagram</tt>, determine
the length of the fields and payload, and compare the length with the maximum
datagram size of the session.  If the object size is less than or equal maximum
datagram size, send the serialized data as a datagram.  Otherwise, open a
stream, send the serialized data and terminate the stream.  An implementation
<bcp14>SHOULD NOT</bcp14> send an Object with <tt>Object Forwarding Preference</tt> = <tt>Datagram</tt> on a
stream if it is possible to send it as a datagram.</t>
          <figure anchor="object-datagram-format">
            <name>MOQT OBJECT_PREFER_DATAGRAM Message</name>
            <artwork><![CDATA[
OBJECT_PREFER_DATAGRAM Message {
  Subscription ID (i),
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Object Send Order (i),
  Object Payload (...),
}
]]></artwork>
          </figure>
        </section>
        <section anchor="multi-object-streams">
          <name>Multi-Object Streams</name>
          <t>When multiple objects are sent on a stream, 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 sender <bcp14>SHOULD NOT</bcp14> open more than one multi-object 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>
          <t><strong>Stream Header Track</strong></t>
          <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>Object Send Order</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),
  Object Send Order (i),
}
]]></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 the following object fields.</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 Payload (...),
}
]]></artwork>
          </figure>
          <t><strong>Stream Header Group</strong></t>
          <t>A sender <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 within a given group on that stream.</t>
          <t>When a stream begins with <tt>STREAM_HEADER_GROUP</tt>, all objects on the stream
belong to the track requested in the Subscribe message identified by <tt>Subscribe
ID</tt> and the group indicated by <tt>Group ID</tt>.  All objects on the stream
have the <tt>Object Send Order</tt> specified in the stream header.</t>
          <figure anchor="stream-header-group-format">
            <name>MOQT STREAM_HEADER_GROUP Message</name>
            <artwork><![CDATA[
STREAM_HEADER_GROUP Message {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i)
  Object Send Order (i)
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>STREAM_HEADER_GROUP</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Group</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Group</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Object
Send Order</tt>, or open a new one and send the <tt>STREAM_HEADER_GROUP</tt> if needed,
then serialize the following fields.</t>
          <figure anchor="object-group-format">
            <name>MOQT Group Stream Object Fields</name>
            <artwork><![CDATA[
{
  Object ID (i),
  Object Payload Length (i),
  Object Payload (...),
}
]]></artwork>
          </figure>
          <t>A sender <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 anchor="examples">
          <name>Examples:</name>
          <t>Sending a track on one stream:</t>
          <artwork><![CDATA[
STREAM_HEADER_TRACK {
  Subscribe ID = 1
  Track Alias = 1
  Object Send Order = 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 group on one stream, with a unordered object in the group appearing
on its own stream.</t>
          <artwork><![CDATA[
Stream = 2

STREAM_HEADER_GROUP {
  Subscribe ID = 2
  Track Alias = 2
  Group ID = 0
  Object Send Order = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}

Stream = 6

OBJECT_STREAM {
  Subscribe ID = 2
  Track Alias = 2
  Group ID = 0
  Object ID = 1
  Payload = "moqrocks"
}
]]></artwork>
        </section>
      </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="subscribe-locations">
          <name>Subscribe 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-format">
          <name>SUBSCRIBE Format</name>
          <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 (b),
  Track Name (b),
  StartGroup (Location),
  StartObject (Location),
  EndGroup (Location),
  EndObject (Location),
  Track Request Parameters (..) ...
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Subscribe ID: The subscription identifier that is unique within the session.
<tt>Subscribe ID</tt> is a monotonically increasing variable length integer which
<bcp14>MUST</bcp14> not be reused within a session. <tt>Subscribe ID</tt> is used by subscribers and
the publishers to identify a given subscription. Subscribers specify the
<tt>Subscribe ID</tt> and it is included in the corresponding SUBSCRIBE_OK or
SUBSCRIBE_ERROR messages.</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 in use, 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>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 ID and object ID 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 'Invalid Range'. A publisher <bcp14>MUST NOT</bcp14> send
objects from outside the requested start and end.</t>
          <t>TODO: Define the flow where subscribe request matches an existing subscribe id
(subscription updates.)</t>
        </section>
        <section anchor="examples-1">
          <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
{
  Subscribe ID (i),
  Expires (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifer as defined in <xref target="message-subscribe-req"/>.</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>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
{
  Subscribe ID (i),
  Error Code (i),
  Reason Phrase (b),
  Track Alias (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifer 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 receiver <bcp14>MUST</bcp14> close the connection with a Duplicate Track Alias error
(<xref target="session-termination"/>).</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 {
  Subscribe ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifer as defined in <xref target="message-subscribe-req"/>.</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 {
  Subscribe ID (i),
  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>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-subscribe-rst">
        <name>SUBSCRIBE_RST</name>
        <t>A publisher issues a <tt>SUBSCRIBE_RST</tt> message to all subscribers indicating there
was 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 {
  Subscribe ID (i),
  Error Code (i),
  Reason Phrase (b),
  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>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>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-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 (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-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:
H4sIAAAAAAAAA919+3rc1nXv//spUOkPSe7MWJTsNGHqJjRF2WwkSiUp+7SO
j4mZAUlUM8AEwJBiFPVZzrOcJzvrty77gsFQki2n/Y6/r42IAfZl7XW/7fF4
7LqyWxS72Z3nxbzMs/qqaLJ/e3W4n502edWu6qa74/LptCmudrNl/ZdxZ4/d
vJ5V+ZI+nTf5eTcui+58nLwxfvjIzfOO3nj7ZO/04J2b0R8XdXOzm7Xd3Lly
1exmXbNuu0cPH/6OXs6bIt/N9larRUmvlnXVZnk1z46LfDE+LZeFa9fTZdm2
9MvpzYrGPTw4fequ6+b1RVOvV7vZ8xf/5l4XN/RkTj9WXdFURTd+gvU513Y0
2E/5oq7oy5uide0yb7qf/rKuu6Ldzararcrd7Ieuno2ylpbfFOct/etmKf+g
7S7z1aqsLn50Ll93l3Wz67JsTP+XZWVFIzybZPvrZlHc8COBzbP16yJ+WjcX
eVX+lXe3mz0p2xmtlX8plnm52M1el2+KBcFp/scLPJjM6qVLp/nTJHu5viir
aJY/lU25WESP02meF10ez1G+Lps/LunhwOgnk+yI4JS/XhN0oilO1pd52/8p
nWYfu4nnaSt5/Y8z/DIw2XeT7Lu8LRdlcRVN9V056+om/SWd6Zu6vlgU8VRX
ePnq6o8X/MvAVIeT7OS66LponsO8ip69b4aSsBovx1Pg56YG+RDx0Jqdq+pm
SUNcFcAN0NFudvx0/3cPHz6kv78vpp6qaPrxkwkTzXUxZZoZX3bd6jHRRXUe
RnHj8TjLpy29MSMkPr0sW6DiellUXTYvzsuqaLPussgIkYpsWlzmVyUBj0bI
tlK0u0+EcvpglOXZkt/xJJutmpoIoF7Q0G15URXzrKuzelU0hJLRUHSuLt7N
KLu+LGeXGc1eZG25LBc5rWFdzQDNfFF2NxMQ52mWLxb1NZE1JpqvZzRefe50
EXW2Wk8XZXuZEdfImfR5vLKjzVUtbXmeXdGLxAXaWVOuMHY2vclyt1wvuhJc
gyaiAbOimq/qsuraSXbY0fsrrLElRCCOwJN1gBf9BRiWBNtyusZojtgF2Inw
HUDaoAB4XpYXl1k7yxcF/0wbyUCp1ewmGWQiZ7Ys53PCIOfughPxbnkKJ8fy
YvNYMjkWzJuHg+gu8w6PatrvsvxrMXdYC06cv/bvvX2Lv9+9G2VFSb82tKam
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
gbPP8mv3/wCPEn9C/NgAAA==

-->

</rfc>
