<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-moq-transport-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>

    <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>General</area>
    <workgroup>MOQ</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document defines the core behavior for Media over QUIC Transport
(MOQT), a media transport protocol over QUIC. MOQT allows a producer of
media to publish data and have it consumed via subscription by a
multiplicity of endpoints. It supports intermediate content distribution
networks and is designed for high scale and low latency distribution.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>Media Over QUIC Transport (MOQT) is a transport protocol that utilizes
the QUIC network 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>

<t><list style="symbols">
  <t><xref target="model"/> describes the object model employed by MOQT.</t>
  <t><xref target="session"/> covers aspects of setting up a MOQT session.</t>
  <t><xref target="priority-congestion"/> covers protocol considerations on
prioritization schemes and congestion response overall.</t>
  <t><xref target="relays-moq"/> covers behavior at the relay entities.</t>
  <t><xref target="message"/> covers how messages are encoded on the wire.</t>
</list></t>

<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. UDP-based protocols
can avoid queuing, but the application is now 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>

<t>TODO: The terms defined here doesn't capture the ongoing discussions
within the Working Group (either as part of requirements or architecture
documents). This section will be updated to reflect the discussions.</t>

<t>Commonly used terms in this document are described below.</t>

<dl>
  <dt>Client:</dt>
  <dd>
    <t>The party initiating a transport session.</t>
  </dd>
  <dt>Congestion:</dt>
  <dd>
    <t>Packet loss and queuing caused by degraded or overloaded networks.</t>
  </dd>
  <dt>Consumer:</dt>
  <dd>
    <t>A QUIC endpoint receiving media over the network.</t>
  </dd>
  <dt>Endpoint:</dt>
  <dd>
    <t>A QUIC Client or a QUIC Server.</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>Producer:</dt>
  <dd>
    <t>A QUIC endpoint sending media over the network.</t>
  </dd>
  <dt>Server:</dt>
  <dd>
    <t>The party accepting an incoming transport session.</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>
  <dt>Transport session:</dt>
  <dd>
    <t>A raw QUIC connection or a WebTransport session.</t>
  </dd>
</dl>

</section>
<section anchor="notational-conventions"><name>Notational Conventions</name>

<t>This document uses the conventions detailed in Section 1.3 of <xref target="QUIC"/>
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>

<figure><artwork><![CDATA[
Full Track Name = Track Namespace Track Name
]]></artwork></figure>

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

<figure><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></figure>

</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"></xref>, and over WebTransport
<xref target="WebTransport"></xref>.  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.</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>

<figure><artwork><![CDATA[
moq-URI = "moq" "://" authority path-abempty [ "?" query ]
]]></artwork></figure>

<t>The <spanx style="verb">authority</spanx> portion <bcp14>MUST NOT</bcp14> contain a non-empty <spanx style="verb">host</spanx> portion.
The <spanx style="verb">moq</spanx> URI scheme supports the <spanx style="verb">/.well-known/</spanx> path prefix defined in
<xref target="RFC8615"/>.</t>

<t>This protocol does not specify any semantics on the <spanx style="verb">path-abempty</spanx> and
<spanx style="verb">query</spanx> 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 <spanx style="verb">authority</spanx> section of the URI.  The <spanx style="verb">path-abempty</spanx>
and <spanx style="verb">query</spanx> portions of the URI are communicated to the server using the
PATH parameter (<xref target="path"/>) which is sent in the SETUP message at the
start of the session.  The ALPN value <xref target="RFC7301"/> used by the protocol
is <spanx style="verb">moq-00</spanx>.</t>

</section>
</section>
<section anchor="session-init"><name>Session initialization</name>

<t>The first stream opened is a client-initiated bidirectional stream where
the peers exchange SETUP messages (<xref target="message-setup"/>). The subsequent
streams <bcp14>MAY</bcp14> be either unidirectional or bidirectional. For exchanging
content, an application would typically send a unidirectional stream
containing a single OBJECT message (<xref target="message-object"/>), as putting more
than one object into one stream may create head-of-line blocking delays.
However, if one object has a hard dependency on another object, putting
them on the same stream could be a valid choice.</t>

</section>
<section anchor="session-cancellation"><name>Cancellation</name>

<t>A QUIC stream <bcp14>MAY</bcp14> be canceled at any point with an error code.  The
producer does this via a <spanx style="verb">RESET_STREAM</spanx> frame while the consumer
requests cancellation with a <spanx style="verb">STOP_SENDING</spanx> frame.</t>

<t>When using <spanx style="verb">order</spanx>, lower priority streams will be starved during
congestion, perhaps indefinitely.  These streams will consume resources
and flow control until they are canceled.  When nearing resource limits,
an endpoint <bcp14>SHOULD</bcp14> cancel the lowest priority stream with error code 0.</t>

<t>The sender <bcp14>MAY</bcp14> cancel streams in response to congestion.  This can be
useful when the sender does not support stream prioritization.</t>

<t>TODO: this section actually describes stream cancellation, not session
cancellation. Is this section required, or can it be deleted, or added
to a new "workflow" section.</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>

<texttable>
      <ttcol align='right'>Code</ttcol>
      <ttcol align='left'>Reason</ttcol>
      <c>0x0</c>
      <c>Session Terminated</c>
      <c>0x1</c>
      <c>Generic Error</c>
      <c>0x2</c>
      <c>Unauthorized</c>
      <c>0x10</c>
      <c>GOAWAY</c>
</texttable>

<t><list style="symbols">
  <t>Session Terminated: No error occurred; however the endpoint wishes to
terminate the session.</t>
  <t>Generic Error: An unclassified error occurred.</t>
  <t>Unauthorized: The endpoint breached an agreement, which <bcp14>MAY</bcp14> have been
pre-negotiated by the application.</t>
  <t>GOAWAY: The endpoint successfully drained the session after a GOAWAY
was initiated (<xref target="message-goaway"/>).</t>
</list></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>

<t><list style="symbols">
  <t>Prioritization Schemes.</t>
  <t>Congestion Algorithms and impacts.</t>
  <t>Mapping considerations for one object per stream vs multiple objects
per stream.</t>
  <t>Considerations for merging multiple streams across domains onto single
connection and interactions with specific prioritization schemes.</t>
</list></t>

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

<t><list style="symbols">
  <t>Ensuring that objects are delivered in the order intended by the
emitter</t>
  <t>Allowing nodes and relays to skip or delay some objects to deal with
congestion</t>
  <t>Ensuring that emitters can accurately predict the behavior of relays</t>
  <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>
</list></t>

<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 QUIC stream.  The QUIC
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>

<t><list style="symbols">
  <t>Newly encoded objects can have a smaller send order than outstanding
objects.</t>
  <t>Packet loss or flow control can delay the send of individual streams.</t>
  <t>The sender might not support QUIC stream prioritization.</t>
</list></t>

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

<t><list style="symbols">
  <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>
  <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>
  <t>objects from later groups are normally always sent before objects of
previous groups.</t>
</list></t>

<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 REQUEST"
(<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.</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 stops producing objects or there is a
subscription error (see <xref target="message-subscribe-error"/>).</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 <spanx style="verb">Track Namespace</spanx> (<xref target="model-track"/>).</t>

<t>Relays <bcp14>MUST</bcp14> ensure that publishers are authorized by:</t>

<t><list style="symbols">
  <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>
</list></t>

<t>Relays respond with "ANNOUNCE OK" and/or "ANNOUNCE ERROR" control
messages providing the results of announcement.</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 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 QUIC library, awaiting in order delivery, which will
increase latency over additional hops.  To mitigate this, a relay <bcp14>SHOULD</bcp14>
read and write QUIC 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 QUIC streams contain sequences of
length-delimited messages.</t>

<figure title="MOQT Message" anchor="moq-transport-message-format"><artwork><![CDATA[
MOQT Message {
  Message Type (i),
  Message Length (i),
  Message Payload (..),
}
]]></artwork></figure>

<t>The Message Length field contains the length of the Message Payload
field in bytes.  A length of 0 indicates the message is unbounded and
continues until the end of the stream.</t>

<texttable>
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Messages</ttcol>
      <c>0x0</c>
      <c>OBJECT (<xref target="message-object"/>)</c>
      <c>0x1</c>
      <c>SETUP (<xref target="message-setup"/>)</c>
      <c>0x3</c>
      <c>SUBSCRIBE REQUEST (<xref target="message-subscribe-req"/>)</c>
      <c>0x4</c>
      <c>SUBSCRIBE OK (<xref target="message-subscribe-ok"/>)</c>
      <c>0x5</c>
      <c>SUBSCRIBE ERROR (<xref target="message-subscribe-error"/>)</c>
      <c>0x6</c>
      <c>ANNOUNCE  (<xref target="message-announce"/>)</c>
      <c>0x7</c>
      <c>ANNOUNCE OK (<xref target="message-announce-ok"/>)</c>
      <c>0x8</c>
      <c>ANNOUNCE ERROR (<xref target="message-announce-error"/>)</c>
      <c>0x10</c>
      <c>GOAWAY (<xref target="message-goaway"/>)</c>
</texttable>

<section anchor="message-setup"><name>SETUP</name>

<t>The <spanx style="verb">SETUP</spanx> message is the first message that is exchanged by the client
and the server; it 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 message is as follows:</t>

<figure title="MOQT SETUP Message" anchor="moq-transport-setup-format"><artwork><![CDATA[
SETUP Parameter {
  Parameter Key (i),
  Parameter Value Length (i),
  Parameter Value (..),
}

Client SETUP Message Payload {
  Number of Supported Versions (i),
  Supported Version (i) ...,
  SETUP Parameters (..) ...,
}

Server SETUP Message Payload {
  Selected Version (i),
  SETUP Parameters (..) ...,
}
]]></artwork></figure>

<t>The Parameter Value Length field indicates the length of the Parameter
Value.</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>The SETUP parameters are described in the <xref target="setup-parameters"/> section.</t>

<section anchor="setup-parameters"><name>SETUP Parameters</name>

<t>Every parameter <bcp14>MUST</bcp14> appear at most once within the SETUP message. The
peers <bcp14>SHOULD</bcp14> verify that and close the connection if a parameter appears
more than once.</t>

<t>The ROLE parameter is mandatory for the client. All of the other
parameters are optional.</t>

<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:</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.</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 <spanx style="verb">path-abempty</spanx> portion of the
URI; if <spanx style="verb">query</spanx> is present, the client <bcp14>MUST</bcp14> concatenate <spanx style="verb">?</spanx>, followed by
the <spanx style="verb">query</spanx> 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.</t>

<t>The format of the OBJECT message is as follows:</t>

<figure title="MOQT OBJECT Message" anchor="moq-transport-object-format"><artwork><![CDATA[
OBJECT Message {
  Track ID (i),
  Group Sequence (i),
  Object Sequence (i),
  Object Send Order (i),
  Object Payload (b),
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Track ID: The track identifier obtained as part of subscription and/or
publish control message exchanges.</t>
  <t>Group Sequence : The object is a member of the indicated group
<xref target="model-group"/> within the track.</t>
  <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>
  <t>Object Send Order: An integer indicating the object send order
<xref target="send-order"/> or priority <xref target="ordering-by-priorities"/> value.</t>
  <t>Object Payload: An opaque payload intended for the consumer and <bcp14>SHOULD
NOT</bcp14> be processed by a relay.</t>
</list></t>

</section>
<section anchor="message-subscribe-req"><name>SUBSCRIBE REQUEST</name>

<t>A receiver issues a SUBSCRIBE REQUEST to a publisher to request a track.</t>

<t>The format of SUBSCRIBE REQUEST is as follows:</t>

<figure title="MOQT SUBSCRIBE REQUEST Message" anchor="moq-transport-subscribe-format"><artwork><![CDATA[
Track Request Parameter {
  Track Request Parameter Key (i),
  Track Request Parameter Length (i),
  Track Request Parameter Value (..),
}

SUBSCRIBE REQUEST Message {
  Full Track Name Length (i),
  Full Track Name (...),
  Track Request Parameters (..) ...
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Full Track Name: Identifies the track as defined in (<xref target="track-name"/>).</t>
  <t>Track Request Parameters: As defined in <xref target="track-req-params"/>.</t>
</list></t>

<t>On successful subscription, the publisher <bcp14>SHOULD</bcp14> start delivering
objects from the group sequence and object sequence as defined in the
<spanx style="verb">Track Request Parameters</spanx>.</t>

</section>
<section anchor="message-subscribe-ok"><name>SUBSCRIBE OK</name>

<t>A <spanx style="verb">SUBSCRIBE OK</spanx> control message is sent for successful subscriptions.</t>

<figure title="MOQT SUBSCRIBE OK Message" anchor="moq-transport-subscribe-ok"><artwork><![CDATA[
SUBSCRIBE OK
{
  Full Track Name Length(i),
  Full Track Name(...),
  Track ID(i),
  Expires (i)
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Full Track Name: Identifies the track for which this response is
provided.</t>
  <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>
  <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>
</list></t>

</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 REQUEST.</t>

<figure title="MOQT SUBSCRIBE ERROR Message" anchor="moq-transport-subscribe-error"><artwork><![CDATA[
SUBSCRIBE ERROR
{
  Full Track Name Length(i),
  Full Track Name(...),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (...),
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Full Track Name: Identifies the track in the request message for which
this response is provided.</t>
  <t>Error Code: Identifies an integer error code for subscription failure.</t>
  <t>Reason Phrase Length: The length in bytes of the reason phrase.</t>
  <t>Reason Phrase: Provides the reason for subscription error and <spanx style="verb">Reason
Phrase Length</spanx> field carries its length.</t>
</list></t>

</section>
<section anchor="message-announce"><name>ANNOUNCE</name>

<t>The publisher sends the ANNOUNCE control message to advertise where the
receiver can route SUBSCRIBE REQUESTs for tracks within the announced
Track Namespace. The receiver verifies the publisher is authorized to
publish tracks under this namespace.</t>

<figure title="MOQT ANNOUNCE Message" anchor="moq-transport-announce-format"><artwork><![CDATA[
ANNOUNCE Message {
  Track Namespace Length(i),
  Track Namespace,
  Track Request Parameters (..) ...,
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>)</t>
  <t>Track Request Parameters: The parameters are defined in
<xref target="track-req-params"/>.</t>
</list></t>

<section anchor="track-req-params"><name>Track Request Parameters</name>

<t>The Track Request Parameters identify properties of the track requested
in either the ANNOUNCE or SUSBCRIBE REQUEST control messages. The peers
<bcp14>MUST</bcp14> close the connection if there are duplicates. The Parameter Value
Length field indicates the length of the Parameter Value.</t>

<section anchor="group-sequence-parameter"><name>GROUP SEQUENCE Parameter</name>

<t>The GROUP SEQUENCE parameter (key 0x00) identifies the group within the
track to start delivering objects. The publisher <bcp14>MUST</bcp14> start delivering
the objects from the most recent group, when this parameter is
omitted. This parameter is applicable in SUBSCRIBE REQUEST message.</t>

</section>
<section anchor="object-sequence-parameter"><name>OBJECT SEQUENCE Parameter</name>

<t>The OBJECT SEQUENCE parameter (key 0x01) identifies the object with the
track to start delivering objects. The <spanx style="verb">GROUP SEQUENCE</spanx> 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. This parameter is applicable in
SUBSCRIBE REQUEST message.</t>

</section>
<section anchor="authorization-info-parameter"><name>AUTHORIZATION INFO Parameter</name>

<t>AUTHORIZATION INFO parameter (key 0x02) identifies track's authorization
information. This parameter is populated for cases where the
authorization is required at the track level. This parameter is
applicable in SUBSCRIBE REQUEST and ANNOUNCE messages.</t>

</section>
</section>
</section>
<section anchor="message-announce-ok"><name>ANNOUNCE OK</name>

<t>The receiver sends an <spanx style="verb">ANNOUNCE OK</spanx> control message to acknowledge the
successful authorization and acceptance of an ANNOUNCE message.</t>

<figure title="MOQT ANNOUNCE OK Message" anchor="moq-transport-announce-ok"><artwork><![CDATA[
ANNOUNCE OK
{
  Track Namespace
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Track Namespace: Identifies the track namespace in the ANNOUNCE
message for which this response is provided.</t>
</list></t>

</section>
<section anchor="message-announce-error"><name>ANNOUNCE ERROR</name>

<t>The receiver sends an <spanx style="verb">ANNOUNCE ERROR</spanx> control message for tracks that
failed authorization.</t>

<figure title="MOQT ANNOUNCE ERROR Message" anchor="moq-transport-announce-error"><artwork><![CDATA[
ANNOUNCE ERROR
{
  Track Namespace Length(i),
  Track Namespace(...),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (...),
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Track Namespace: Identifies the track namespace in the ANNOUNCE
message for which this response is provided.</t>
  <t>Error Code: Identifies an integer error code for announcement failure.</t>
  <t>Reason Phrase: Provides the reason for announcement error and <spanx style="verb">Reason
Phrase Length</spanx> field carries its length.</t>
</list></t>

</section>
<section anchor="message-goaway"><name>GOAWAY</name>

<t>The server sends a <spanx style="verb">GOAWAY</spanx> message to force the client to reconnect.
This is useful for server maintenance or reassignments without severing
the QUIC connection.  The server can be a producer or a consumer.</t>

<t>The server:</t>

<t><list style="symbols">
  <t><bcp14>MAY</bcp14> initiate a graceful shutdown by sending a GOAWAY message.</t>
  <t><bcp14>MUST</bcp14> close the QUIC connection after a timeout with the GOAWAY error
code (<xref target="session-termination"/>).</t>
  <t><bcp14>MAY</bcp14> close the QUIC connection with a different error code if there is
a fatal error before shutdown.</t>
  <t><bcp14>SHOULD</bcp14> wait until the <spanx style="verb">GOAWAY</spanx> message and any pending streams have
been fully acknowledged, plus an extra delay to ensure they have been
processed.</t>
</list></t>

<t>The client:</t>

<t><list style="symbols">
  <t><bcp14>MUST</bcp14> establish a new transport session upon receipt of a <spanx style="verb">GOAWAY</spanx>
message, assuming it wants to continue operation.</t>
  <t><bcp14>SHOULD</bcp14> establish the new transport session using a different QUIC
connection to that on which it received the GOAWAY message.</t>
  <t><bcp14>SHOULD</bcp14> remain connected on both connections for a short period,
processing objects from both in parallel.</t>
</list></t>

</section>
</section>
<section anchor="security"><name>Security Considerations</name>

<t>TODO: Expand this section.</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 QUIC 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:
* MOQT version numbers
* SETUP parameters
* Track Request parameters
* Subscribe Error codes
* Announce Error codes
* Track format numbers
* Message types
* Object headers</t>

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

<t><list style="symbols">
  <t>Alan Frindell</t>
  <t>Ali Begen</t>
  <t>Charles Krasic</t>
  <t>Christian Huitema</t>
  <t>Cullen Jennings</t>
  <t>James Hurley</t>
  <t>Jordi Cenzano</t>
  <t>Mike English</t>
  <t>Mo Zanaty</t>
  <t>Will Law</t>
</list></t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='QUIC' target='https://www.rfc-editor.org/info/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='WebTransport' target='https://datatracker.ietf.org/doc/html/draft-ietf-webtrans-http3-07'>
   <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='13' month='June' 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-07'/>
   
</reference>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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 title='Informative References'>




<reference anchor='I-D.ietf-webtrans-overview' target='https://datatracker.ietf.org/doc/html/draft-ietf-webtrans-overview-05'>
   <front>
      <title>The WebTransport Protocol Framework</title>
      <author fullname='Victor Vasiliev' initials='V.' surname='Vasiliev'>
         <organization>Google</organization>
      </author>
      <date day='24' month='January' 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 a 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-05'/>
   
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAA5boGQAA7196XYb15Xu//MU1dSPlrwAaLAz0Tc3oSnaViyRjEjFN53O
MgtAgahWoQqpKpBCZPWz3Ge5T3b3t4czFABZibPaa2VFLNSZ9tnzVOPx2PVl
XxXH2dGrYl7mWXNXtNkf37w4za7bvO7WTdsfuXw6bYu742zV/G3c22M3b2Z1
vqKh8zZf9OOy6Bfj5I3xkydunvf0xvvnJ9dnH9yM/rht2u1x1vXzzLly3R5n
fbvp+mdPnvzmyTOXt0V+nH1T1EWbV67bTFdl15VNfb1d0ywvzq6/dvdN+/a2
bTbr4+zVxR8z97bY0qM5/Vr3RVsX/fg5tuNc1+f1/Ie8amoaui06163ytv/h
b5umL7rjrG7cujzO/tI3s1HW0W7bYtHRv7Yr+QedbpWv12V9+1fn8k2/bNpj
l2Vj+l+WlTXN8HKSnW7aqtjyIwHFy83bIn7atLd5Xf497+kQx9n1fdnPlvxD
scrL6jh7W74rKoLK/Pe3eDCZNSuXrvLdJLvc3JZ1tMh3ZVtWVfQ4XeVV0efx
GuXbsv39ih7umf1qkp0TmPK3GwJOtMTVZpl3w5/SZU7LbtbE63S1vP77GX7Z
s9ifJtmf8q6syuIuWupP5axv2vSXdKVvmua2KuKl7vDy3d3vb/kXWcrVTbui
EXcF7gkofJy9/vr0N08IC7Ps+2LqEZpwZfx8wvh6X0wZXcfLvl9/ThhZL8Is
bjweZ/m0ozdmhFDXy7IDWmxWRd1n82JR1kWX9csimzVtkU2LZX5X0klohuwg
MbmHhLXXj0ZZnq34HU8t2bptCBmbKgybAMWvs7yqmvuORtAb882MfmwWTkc3
2XozrcpumRGl5RndQEbbKLKyp13VHe11nt3Ri0RL3awt14BoNt1muVttqr5c
V+Ws7Lc0YVbU83VT1n03yV709P4am+ro5oiseLEeB6W/cPiSgFJON5jNEc2B
KDteHCAquvK2pnUBiGV5u8y6WV4V/DMdJAO+17NtMslEgL0q53O6aecegJz5
tLyEE3he7MIzE3hi3b2w7Jd5n9ESVfl3YgG4LB6vew7vvX+P5x8+jLKipLda
2l1bzPqKQNMyAGMEcu/fx39iFM6K2elQXbEqa0ZdgJVBpxdp+yDo66091nuZ
Fhn2swB8yjq7X5azpb/uzs+TXjZRf1vQDuquACIkV9wWf9sUHd3fom1WQLbD
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

-->

</rfc>

