<?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.29 (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-lcurley-moq-transport-00" category="info" 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>Independent Submission</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'>
<front>
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
<author fullname='J. Iyengar' initials='J.' role='editor' surname='Iyengar'><organization/></author>
<author fullname='M. Thomson' initials='M.' role='editor' surname='Thomson'><organization/></author>
<date month='May' year='2021'/>
<abstract><t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t></abstract>
</front>
<seriesInfo name='RFC' value='9000'/>
<seriesInfo name='DOI' value='10.17487/RFC9000'/>
</reference>


<reference anchor='WebTransport'>
   <front>
      <title>WebTransport over HTTP/3</title>
      <author fullname='Alan Frindell' initials='A.' surname='Frindell'>
         <organization>Facebook</organization>
      </author>
      <author fullname='Eric Kinnear' initials='E.' surname='Kinnear'>
         <organization>Apple Inc.</organization>
      </author>
      <author fullname='Victor Vasiliev' initials='V.' surname='Vasiliev'>
         <organization>Google</organization>
      </author>
      <date day='25' month='May' 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-06'/>
   
</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'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<author fullname='M. Nottingham' initials='M.' role='editor' surname='Nottingham'><organization/></author>
<author fullname='J. Reschke' initials='J.' role='editor' surname='Reschke'><organization/></author>
<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 &quot;http&quot; and &quot;https&quot; 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'><organization/></author>
<author fullname='R. Fielding' initials='R.' surname='Fielding'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<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'><organization/></author>
<date month='May' year='2019'/>
<abstract><t>This memo defines a path prefix for &quot;well-known locations&quot;, &quot;/.well-known/&quot;, 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'><organization/></author>
<author fullname='A. Popov' initials='A.' surname='Popov'><organization/></author>
<author fullname='A. Langley' initials='A.' surname='Langley'><organization/></author>
<author fullname='E. Stephan' initials='E.' surname='Stephan'><organization/></author>
<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'>
   <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:
H4sIAD9IcWQAA7196XYb15Xu//MU1dSPlrwAaLAz0Tc3oSnaViyRjEjFN53O
MgtAgahWoQqpKpBCZPWz3Ge5T3b3t4czFABZibNaayUmajjDPnueajweu77s
q+I4O3pVzMs8a+6KNvvjmxen2XWb1926afsjl0+nbXF3nK2av417u+zmzazO
V/TqvM0X/biabdqq2I6Th8ZPnrh53tND75+fXJ99cDP6cdu02+OsrBeNc+W6
Pc76dtP1z548+c2TZy5vi/w4+6aoizavXLeZrsquK5v6erumUV6cXX/t7pv2
7W3bbNb0u54X64L+r+6zK/+se1ts6aE57vdFWxf9+DnW6FzX5/X8h7xqahps
W3SuW+Vt/8PfNk1fdMdZ3bh1eZz9pW9mo6yj9bfFoqO/tiv5g7a8ytfrsr79
q3P5pl827bHLsjH9L6MN0QgvJ9kpw4EvCXxebt4W8dWmvc3r8u95T0s9zq7v
y3625BvFKi+r4+xt+a6oCE7z39/iwmTWrFw6y3eT7HJzW9bRJN+VbVlV0eV0
lldFn8dzlG/L9vcrurhn9KtJdk5gyt9uCDjRFFebZd4Nb6XTnJbdrInn6Wp5
/Pcz3Nkz2Z8m2Z/yrqzK4i6a6k/lrG/a9E460zdNc1sV8VR3ePju7ve3fEem
cnXTruiNuwLnBLw+zl5/ffqbJ4SXWfZ9MfVYTrgyfj4pi34xvi+mjMDjZd+v
PyccJUz1o7jxeJzl046emBFCXS/LDmixWQEF58WirIsu65dFNmvaIpsWy/yu
pJ3QCNlBCnMPX1388frRKMuzFT/j6Sdbtw0hY1OF1yYZHs7yqmruO3qDnphv
ZnSzWTh9u8nWm2lVdsuMaC/P6AQyWkaRlT2tqu5orfPsjh4k6upmbbkGRLPp
NsvdalP15boqZ2W/pQEzIq11U9Z9N8le9PT8Govq6OSIrHiyHhulX9h8SUAp
pxuM5ojmQKYdTw4QFV15W9O8AMSyvF1m3SyvCr5NG8mA7/VsmwwyEWCvyvmc
Ttq5ByBn3i1P4QSeF7vwzASemHcvLPtl3mc0RVX+nVgADovf1zWH596/x/UP
H0ZZUdJTLa2uLWZ9RaBpGYAxArn37+OfeAt7xei0qa5YlTWjLsDKoNODtHUQ
9PXUHuu5TIsM61kAPmWd3S/L2dIfd+fHSQ+bqL8taAV1VwARkiNui79tio7O
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

-->

</rfc>

