<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jholland-quic-multicast-01" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Multicast QUIC">Multicast Extension for QUIC</title>
    <seriesInfo name="Internet-Draft" value="draft-jholland-quic-multicast-01"/>
    <author fullname="Jake Holland">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <email>jakeholland.net@gmail.com</email>
      </address>
    </author>
    <author fullname="Lucas Pardue">
      <organization/>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <author fullname="Max Franke">
      <organization>TU Berlin</organization>
      <address>
        <email>mfranke@inet.tu-berlin.de</email>
      </address>
    </author>
    <date year="2022" month="June" day="24"/>
    <area>TSV</area>
    <workgroup>QUIC Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines a multicast extension to QUIC to enable the efficient use of mullticast-capable networks to send identical data streams to many clients at once, coordinated through individual unicast QUIC connections.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://GrumpyOldTroll.github.io/draft-jholland-quic-multicast/draft-jholland-quic-multicast.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-jholland-quic-multicast/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        QUIC Individual Draft mailing list (<eref target="mailto:quic@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/GrumpyOldTroll/draft-jholland-quic-multicast"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies an extension to QUIC version 1 <xref target="RFC9000"/> to enable the use of multicast IP transport of identical packets for use in many individual QUIC connections.</t>
      <t>The multicast data can only be consumed in conjunction with a unicast QUIC connection.
When the client has support for multicast as described in <xref target="transport-parameter"/>, the server can tell the client about multicast channels and ask the client to join and leave them as described in <xref target="channel-management"/>.</t>
      <t>The client reports its joins and leaves to the server and acknowleges the packets received via multicast after verifying their integrity.</t>
      <t>The purpose of this multicast extension is to realize the large scalability benefits for popular traffic over multicast-capable networks without compromising on security, network safety, or implementation reliabiliity.
Thus, this specification has several design goals:</t>
      <ul spacing="normal">
        <li>Re-use as much as possible the mechanisms and packet formats of QUIC version 1</li>
        <li>Provide flow control and congestion control mechanisms that work with multicast traffic</li>
        <li>Maintain the confidentiality, integrity, and authentication guarantees of QUIC as appropriate for multicast traffic, fully meeting the security goals described in <xref target="I-D.draft-krose-multicast-security"/></li>
        <li>Leverage the scalability of multicast IP for data that is transmitted identically to many clients</li>
      </ul>
      <t>This document does not define any multicast transport except server to client and only includes semantics for source-specific multicast.</t>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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>Commonly used terms in this document are described below.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Term</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">SSM</td>
              <td align="left">Source-specific multicast, as described in <xref target="RFC4607"/></td>
            </tr>
            <tr>
              <td align="left">ASM</td>
              <td align="left">Any-source multicast, as distinguished from SSM in <xref target="RFC4607"/></td>
            </tr>
            <tr>
              <td align="left">(S,G)</td>
              <td align="left">A tuple of IP addresses (Source IP, Group IP) identifying a source-specific multicast channel as described in <xref target="RFC4607"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="multicast-channel">
      <name>Multicast Channel</name>
      <t>A QUIC multicast channel (or just channel) is a one-way network path that a server can use as an alternate path to send QUIC connection data to a client.</t>
      <t>Multicast channels are designed to leverage multicast IP and to be shared by many different connections simultaneously for unidirectional server-initiated data.</t>
      <t>One or more servers can use the same QUIC multicast channel to send the same data to many clients, as a supplement to the individual QUIC connections between those servers and clients.
(Note that QUIC connections are defined in Section 5 of <xref target="RFC9000"/> and are not changed in this document; each connection is a shared state between a client and a server.)</t>
      <t>Each QUIC multicast channel has exactly one associated (S,G) that is used for the delivery of the multicast packets on the IP layer. Channels do not support any-source multicast (ASM) semantics.</t>
      <t>Channels carry only 1-RTT packets.
Packets associated with a channel contain a Channel ID in place of a Destination Connection ID.
(A Channel ID cannot be zero length.)
This adds a layer of indirection to the process described in Section 5.2 of <xref target="RFC9000"/> for matching packets to connections upon receipt.
Incoming packets received on the network path associated with a channel use the Channel ID to associate the packet with a joined channel.</t>
      <t>A client with a matching joined channel always has at least one connection associated with the channel.
If a client has no matching joined channel, the packet is discarded.</t>
      <t>Each channel has an independent packet number space.
Since the network path for a channel is unidirectional and uses a different packet number space than the unicast part of the connection, packets associated with a channel are acknowledged with MC_ACK frames <xref target="channel-ack-frame"/> instead of ACK frames.</t>
      <t>The use of any particular channel is OPTIONAL for both the server and the client.
It is recommended that applications designed to leverage the multicast capabilities of this extension also provide graceful degradation for endpoints that do not or cannot make use of the multicast functionality (see <xref target="graceful-degradation"/>).</t>
      <t>The server has access to all data transmitted on any multicast channel it uses, and could optionally send this data with unicast instead.</t>
      <t>No special handling of the data is required in a client application that has enabled multicast.
A datagram or any particular bytes from a server-initiated unidirectional stream can be delivered over the unicast connection or a multicast channel transparently to a client application consuming the stream or datagram.</t>
      <t>Client applications should have a mechanism that disables the use of multicast on connections with enhanced privacy requirements for the privacy-related reasons covered in <xref target="I-D.draft-krose-multicast-security"/>.</t>
    </section>
    <section anchor="transport-parameter">
      <name>Transport Parameter</name>
      <t>Support for multicast extensions in a client is advertised by means of a QUIC transport parameter:</t>
      <ul spacing="normal">
        <li>name: multicast_client_params (TBD - experiments use 0xff3e800)</li>
      </ul>
      <t>If a multicast_client_params transport parameter is not included, servers MUST NOT send any frames defined in this document.  (Given that a server never sends any MC_JOIN frames, the clients also will never send any frames in this document so only the client-to-server advertisement is necessary.)</t>
      <t>The multicast_client_params parameter has the structure shown below in <xref target="fig-transport-parameter-format"/>.</t>
      <figure anchor="fig-transport-parameter-format">
        <name>multicast_client_params Format</name>
        <artwork><![CDATA[
multicast_client_params {
  Capabilities Field (i),
  Max Aggregate Rate (i),
  Max Channel IDs (i),
  Hash Algorithms Supported (i),
  AEAD Algorithms Supported (i),
  Hash Algorithms List (16 * Hash Algorithms Supported),
  AEAD Algorithms List (16 * AEAD Algorithms Supported)
}
]]></artwork>
      </figure>
      <t>Capabilities Flags is a bit field structured as follows:</t>
      <ul spacing="normal">
        <li>0x1 is set if IPv4 channels are permitted</li>
        <li>0x2 is set if IPv6 channels are permitted</li>
      </ul>
      <t>A server MUST NOT send MC_ANNOUNCE (<xref target="channel-announce-frame"/>) frames with addresses using an IP Family that is not supported according to the Capabilities in the multicast_client_params, unless and until a later MC_LIMITS (<xref target="client-limits-frame"/>) frame adds permission for a different address family.</t>
      <t>The Capabilities Field, Max Aggregate Rate, and Max Channel IDs are the same as in MC_LIMITS frames (<xref target="client-limits-frame"/>) and provide the initial client values.</t>
      <t>The AEAD Algorithms List field is in order of preference (most preferred occuring first) using values from the TLS Cipher Suite registry (<eref target="https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4">https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4</eref>). It lists the algorithms the client is willing to use to decrypt data in multicast channels, and the server MUST NOT send an MC_ANNOUNCE to this client for any channels using unsupported algorithms.
If the server does send an MC_ANNOUNCE with an unsupported cipher suite, the client SHOULD treat it as a connection error of type PROTOCOL_VIOLATION.</t>
      <t>The Hash Algorithms List field is in order of preference (most preferred occurring first) using values from the registry below. It lists the algorithms the client is willing to use to check integrity of data in multicast channels, and the server MUST NOT send an MC_ANNOUNCE to this client for any channels using unsupported algorithms, or the client SHOULD treat it as a connection error of type PROTOCOL_VIOLATION:</t>
      <ul spacing="normal">
        <li>
          <eref target="https://www.iana.org/assignments/named-information/named-information.xhtml#hash-alg">https://www.iana.org/assignments/named-information/named-information.xhtml#hash-alg</eref></li>
      </ul>
    </section>
    <section anchor="extension-overview">
      <name>Extension Overview</name>
      <t>A client has the option of refusal and the power to impose upper bound maxima on several resources (see <xref target="flow-control"/>), but otherwise its join status for all multicast channels is entirely managed by the server.</t>
      <ul spacing="normal">
        <li>A client MUST NOT join a channel without receiving instructions from a server to do so.</li>
        <li>A client MUST leave joined channels when instructed by the server to do so.</li>
        <li>A client MAY leave channels or refuse to join channels, regardless of instructions from the server.</li>
      </ul>
      <section anchor="channel-management">
        <name>Channel Management</name>
        <t>The client tells its server about some restrictions on resources that it is capable of processing with the initial values in the multicast_client_params transport parameter (<xref target="transport-parameter"/>) and later can update these limits with MC_LIMITS <xref target="client-limits-frame"/> frames. Servers ensure the set of channels the client is currently requested to join remains within these advertised client limits as covered in <xref target="flow-control"/>.</t>
        <t>The server asks the client to join channels with MC_JOIN (<xref target="channel-join-frame"/>) frames and to leave channels with MC_LEAVE (<xref target="channel-leave-frame"/>) frames.</t>
        <t>The server uses the MC_ANNOUNCE (<xref target="channel-announce-frame"/>) frame before any join or leave frames for the channel to describe the channel properties to the client, including values the client can use to ensure the server's requests remain within the limits it has sent to the server, as well as the secrets necessary to decode the headers of packets in the channel.
MC_KEY frames provide the secrets necessary to decode the payload of packets in the channel.
<xref target="fig-client-channel-states"/> shows the states a channel has from the clients point of view.</t>
        <t>Joining a channel after receiving an MC_JOIN frame is OPTIONAL for clients. If a client decides not to join after being asked to do so, it can indicate this decision by sending an MC_STATE (<xref target="client-channel-state-frame"/>) frame with state Declined Join and an appropriate reason.</t>
        <t>The server ensures that in aggregate, all channels that the client has currently been asked to join and that the client has not left or declined to join fit within the limits indicated by the initial values in the transport parameter or last MC_LIMITS (<xref target="client-limits-frame"/>) frame the server received.</t>
        <figure anchor="fig-client-channel-states">
          <name>States a channel from the clients point of view.</name>
          <artwork><![CDATA[
                            o
                            |
----------------------->|   | Receive MC_ANNOUNCE and/or MC_KEY
^                       |   |
|                       |   |
|  Receive MC_JOIN (and v   v
|     unable to join) +----------+
|<--------------------*          |
                      | unjoined | Receive MC_RETIRE
--------------------->|          *------------------------>|
^                     +----*-----+                         |
|                          | Receive MC_JOIN               |
|                          |   (and able to join)          |
|                          |                               |
|                          v                               v
|                     +----------+                    +---------+
|    Receive MC_LEAVE |          |                    |         |
|     (or error case) |  joined  | Receive MC_RETIRE  | retired |
|<--------------------*          *------------------->|         |
                      +----------+                    +---------+

*: Each transition except the initial receiving of MC_ANNOUNCE
   and MC_KEY frames causes the client to send an MC_STATE frame
   describing the state transition (for Left or Declined Join, this
   includes a reason for the transition).

"able to join" means:
- Both MC_KEY and MC_ANNOUNCE have been received
- Result will be within latest advertised client limits
- Nothing preventing a join is active (e.g. a hold-down timer,
  administrative blocking, etc.)
]]></artwork>
        </figure>
        <t>When the server has asked the client to join a channel and has not received any MC_STATE frames <xref target="client-channel-state-frame"/> with state Declined Join or Left, it also sends MC_INTEGRITY frames (<xref target="channel-integrity-frame"/>) to enable the client to verify packet integrity before processing the packet.
A client MUST NOT decode packets for a channel for which it has not received an applicable MC_ANNOUNCE (<xref target="channel-announce-frame"/>), or for which it has not received a matching packet hash in an MC_INTEGRITY (<xref target="channel-integrity-frame"/>) frame, or for which it has not received an applicable MC_KEY frame <xref target="channel-key-frame"/>.</t>
        <t><xref target="fig-frame-exchange"/> shows the frames that are being exchanged about and over a channel during the lifetime of an example channel.</t>
        <figure anchor="fig-frame-exchange">
          <name>Example flow of frames for a channel. Frames in square brackets are sent over multicast.</name>
          <artwork><![CDATA[
Client                                        Server

MC_LIMITS/initial_limits  --->

                                              MC_ANNOUNCE
                                              MC_KEY
                                       <----  MC_JOIN

MC_STATE(Joined)  --->

                                              MC_INTEGRITY
                                       <----  [STREAM(...)]
MC_ACK  --->                                  ...
...                                    <----  MC_KEY
...
MC_LIMITS  --->

                                       <----  MC_LEAVE

MC_STATE(Left)  --->

                                       <----  MC_JOIN

MC_STATE(Joined)  --->

                                              MC_INTEGRITY
                                       <----  [STREAM(...)]
MC_ACK  --->                                  ...
...

                                       <----  MC_LEAVE

MC_STATE(Left)  --->

                                       <----  MC_RETIRE

MC_STATE(Retired)  --->
]]></artwork>
        </figure>
        <t>TODO: incorporate server-side state diagram and explanation, latest proposed sketch at <eref target="https://github.com/GrumpyOldTroll/draft-jholland-quic-multicast/issues/62">https://github.com/GrumpyOldTroll/draft-jholland-quic-multicast/issues/62</eref></t>
      </section>
      <section anchor="client-response">
        <name>Client Response</name>
        <t>The client sends back information about how it has responded to the server's requests to join and leave channels in MC_STATE (<xref target="client-channel-state-frame"/>) frames.
MC_STATE frames are only sent for channels after the server has requested the client to join the channel, and are thereafter sent any time the state changes.</t>
        <t>Clients that receive and decode data on a multicast channel send acknowledgements for the data on the unicast connection using MC_ACK (<xref target="channel-ack-frame"/>) frames.</t>
        <t>A server can determine if a client receives packets for a multicast channel if it receives MC_ACK frames associated with that channel.
As such, it is in general up to the server to decide on the time after which it deems a client to be unable to receive packets on a given channel and take appropriate steps, e.g. sending an MC_LEAVE frame to the client.
Note that clients willing to join a channel SHOULD remain joined to the channel even if they receive no channel data for an extended period, to enable multicast-capable networks to perform popularity-based admission control for multicast channels.</t>
      </section>
      <section anchor="data-carried-in-channels">
        <name>Data Carried in Channels</name>
        <t>Data transmitted in a multicast channel is encrypted with symmetric keys so that on-path observers without access to these keys cannot decode the data.
However, since potentially many receivers receive identical packets and identical keys for the multicast channel and some receivers might be malicious, the packets are also protected by MC_INTEGRITY (<xref target="channel-integrity-frame"/>) frames transmitted over a separate integrity-protected path.</t>
        <t>A client MUST NOT decode packets on a multicast channel for which it has not received a matching hash in an MC_INTEGRITY frame over a different integrity-protected communication path.
The different path can be either the unicast connection or another multicast channel with packets that were verified with an earlier MC_INTEGRITY frame.</t>
        <t>See <xref target="data-integrity"/> for a more complete overview of the security issues involved here.</t>
      </section>
      <section anchor="stream-processing">
        <name>Stream Processing</name>
        <t>Stream IDs in channels are restricted to unidirectional server initiated streams, or those with the least significant 2 bits of the stream ID equal to 3 (see <xref target="RFC9000"/> Section 2.1).</t>
        <t>When a channel contains streams with ids above the client's unidirectional MAX_STREAMS, the server MUST NOT instruct the client to join that channel and SHOULD send a STREAMS_BLOCKED frame, as described in Sections 4.6 and 19.14 of <xref target="RFC9000"/>.</t>
        <t>If the client is already joined to a channel that carries streams that exceed or will soon exceed the client's unidirectional MAX_STREAMS, the server SHOULD send an MC_LEAVE frame.</t>
        <t>If a client receives a STREAM frame with an ID above its MAX_STREAMS on a channel, the client MAY increase its unidirectional MAX_STREAMS to a value greater than the new ID and send an update to the server, otherwise it MUST drop the packet and leave the channel with reason Max Streams Exceeded.</t>
        <t>Since clients can join later than a channel began, it is RECOMMENDED that clients supporting the multicast extensions to QUIC be prepared to handle stream IDs that do not begin at early values, since by the time a client joins a channel in progress the stream id count might have been increasing for a long time.
Clients should therefore begin with a high initial_max_streams_uni or send an early MAX_STREAMS type 0x13 value (see Section 19.11 of <xref target="RFC9000"/>) with a high limit.
Clients MAY use the maximum 2^60 for this high initial limit, but the specific choice is implementation-dependent.</t>
        <t>The same stream ID may be used in both one or more multicast channels and the unicast connection.  As described in Section 2.2 of <xref target="RFC9000"/>, stream data received multiple times for the same offset MUST be identical, even across different network paths; if it's not identical it MAY be treated as a connection error of type PROTOCOL_VIOLATION.</t>
      </section>
    </section>
    <section anchor="flow-control">
      <name>Flow Control</name>
      <t>The values used for unicast flow control cannot be used to limit the transmission rate of a multicast channel because a single client with a low MAX_STREAM_DATA or MAX_DATA value that did not acknowledge receipt could block many other receivers if the servers had to ensure that channels responded to each client's limits.</t>
      <t>Instead, clients advertise resource limits via MC_LIMITS (<xref target="client-limits-frame"/>) frames and their initial values from the transport parameter (<xref target="transport-parameter"/>).
The server is responsible for keeping the client within its advertised limits, by ensuring via MC_JOIN and MC_LEAVE frames that the set of channels the client is asked to be joined to will not, in aggregate, exceed the client's advertised limits.
The server also advertises the expected maxima of the values that can contribute toward client resource limits within a channel in an MC_ANNOUNCE (<xref target="channel-announce-frame"/>) frame, and the client also ensures that the set of channels it's joined to does not exceed its limits, according to the advertised values.
The client also monitors the packets received to ensure that channels don't exceed their advertised values, and leaves channels that do.</t>
      <t>If the server asks the client to join a channel that would exceed the client's limits with an up-to-date Client Limit Sequence Number, the client should send back an MC_STATE frame (<xref target="client-channel-state-frame"/>) with "Declined Join" and reason "Property Violation".
If the server asks the client to join a channel that would exceed the client's limits with an out-of-date Client Limit Sequence Number or a Channel Key Sequence Number that the client has not yet seen, the client should instead send back a "Declined Join" with "Desynchronized Limit Violation".
If the actual contents sent in the channel exceed the advertised limits from the MC_ANNOUNCE, clients SHOULD leave the stream and send an MC_STATE(Left) frame, using the Limit Violated reason.</t>
    </section>
    <section anchor="congestion-control">
      <name>Congestion Control</name>
      <t>Both the server and the client perform congestion control operations, so that according to the guidelines in Section 4.1 of <xref target="RFC8085"/>, mechanisms for both feedback-based and receiver-driven styles of congestion control are present and operational.</t>
      <t>The server maintains a full view of the traffic received by the client via the MC_ACK (<xref target="channel-ack-frame"/>) frames and ACK frames it receives, and can detect loss experienced by the client.
Under sustained persistent loss that exceeds server-configured thresholds, the server SHOULD instruct the client to leave channels as appropriate to avoid having the client continue to see sustained persistent loss.</t>
      <t>Under sustained persistent loss that exceeds client-configured thresholds, the client SHOULD reduce its Max Rate and tell the server via MC_LIMITS frames, which also will result in the server instructing the client to leave channels until the clients aggregate rate is below its advertised Max Rate.
Under a higher threshold of sustained persistent loss, the client also SHOULD leave channels, using an MC_STATE(Left) frame with the High Loss reason, as well as reducing the Max Rate in MC_LIMITS.</t>
      <t>The unicast connection's congestion control is unaffected.
However a few potential interactions with the unicast connection are worth highlighting:</t>
      <ul spacing="normal">
        <li>if the client notices high loss on the unicast connection while multicast channel packets are arriving, the client MAY leave channels with reason High Loss.</li>
        <li>if the client notices congestion from unicast this MAY also drive reductions in the client's Max Rate, and a lack of unicast congestion under unicast load MAY also drive increases to the client's Max Rate (along with an updated MC_LIMITS frame).</li>
      </ul>
      <t>Hybrid multicast-unicast congestion control is still an experimental research topic.
Implementations SHOULD follow the guidelines given in Section 4.1.1 of <xref target="RFC8085"/> under the assumption that applications using QUIC multicast will operate as Bulk-Transfer applications.</t>
    </section>
    <section anchor="data-integrity">
      <name>Data Integrity</name>
      <t>TODO: import the <xref target="I-D.draft-krose-multicast-security"/> explanation for why extra integrity protection is necessary (many client have the shared key, so AEAD doesn't provide authentication against other valid clients on its own, since the same key is given to multiple clients and as the client count grows so does the chance that at least one client is controlled by an attacker.)</t>
      <section anchor="packet-hashes">
        <name>Packet Hashes</name>
        <t>TODO: explanation and example for how to calculate the packet hash.
Note that the hash is on the encrypted packet to avoid leaking data about the encrypted contents to those who can see a hash but not the key.
(This approach also may help make better use of <xref target="I-D.draft-ietf-mboned-ambi"/> by making it possible to generate the same hashes for use in both AMBI and QUIC MC_INTEGRITY frames.)</t>
      </section>
    </section>
    <section anchor="recovery">
      <name>Recovery</name>
      <t>TODO: Articulate key differences with <xref target="RFC9002"/>.
The main known difference is that servers might not be running on the same devices that are sending the channel packets, therefore the RTT for channel packets might use an estimated send time that can vary according to the clock synchronization among servers and the deployment and implementation details of how the servers find out the sending timestamps of channel packets.
Experience-based guidance on the recovery timing estimates is one anticipated outcome of experimenting with deployments of this experimental extension.</t>
      <t>All the new frames defined in this document except MC_ACK are ack-eliciting and are retransmitted until acknowledged to provide reliable, though possibly out of order, delivery.</t>
      <t>Note that recovery MAY be achieved either by retransmitting frame data that was lost and needs reliable transport either by sending the frame data on the unicast connection or by coordinating to cause an aggregated retransmission of widely dropped data on a multicast channel, at the server's discretion.
However, the server in each connection is responsible for ensuring that any necessary server-to-client frame data lost by a multicast channel packet loss ultimately arrives at the client.</t>
    </section>
    <section anchor="connection-termination">
      <name>Connection Termination</name>
      <t>Termination of the unicast connection behaves as described in Section 10 of <xref target="RFC9000"/>, with the following notable differences:</t>
      <ul spacing="normal">
        <li>On the client side, termination of the unicast connection means that it MUST leave all multicast channels and discard any state associated with them. Servers MAY stop sending to multicast channels if there are no unicast connections left that are associated with them.</li>
        <li>For determining the liveness of a connection, the client MUST only consider packets received on the unicast connection. Any packets received on a multicast channel MUST NOT be used to reset a timer checking if a potentially specified max_idle_timeout has been reached. If the unicast connection becomes idle and the server does not respond to a liveness test, the client MUST terminate the connection as described above.</li>
      </ul>
      <section anchor="stateless-reset">
        <name>Stateless Reset</name>
        <t>As clients can unilaterally stop the delivery of multicast packets by leaving the relevant (S,G), channels do not need stateless reset tokens.
Clients therefore do not share the stateless reset tokens of channels with the server. Instead, if an endpoint receives packets addressed to an (S,G) that it can not associate with any existing channel,
it MAY take the necessary steps to prevent the reception of further such packets, without the need to signal to the server that it should stop sending.</t>
        <t>If a server or client detect a stateless reset for a channel, they MUST ignore it.</t>
      </section>
    </section>
    <section anchor="new-frames">
      <name>New Frames</name>
      <section anchor="channel-announce-frame">
        <name>MC_ANNOUNCE</name>
        <t>Once a server learns that a client supports multicast through its transport parameters, it can send one or multiple MC_ANNOUNCE frames (type=TBD-11..TBD-12) to share information about available channels with the client.
The MC_ANNOUNCE frame contains the properties of a channel that do not change during its lifetime.</t>
        <t>MC_ANNOUNCE frames are formatted as shown in <xref target="fig-mc-channel-announce"/>.</t>
        <figure anchor="fig-mc-channel-announce">
          <name>MC_ANNOUNCE Frame Format</name>
          <artwork><![CDATA[
MC_ANNOUNCE Frame {
  Type (i) = TBD-11..TBD-12 (experiments use 0xff3e811/0xff3e812),
  ID Length (8),
  Channel ID (8..160),
  Source IP (32..128),
  Group IP (32..128),
  UDP Port (16),
  Header AEAD Algorithm (16),
  Header Secret Length (i),
  Header Secret (..),
  AEAD Algorithm (16),
  Integrity Hash Algorithm (16),
  Max Rate (i),
  Max ACK Delay (i)
}
]]></artwork>
        </figure>
        <t>Frames of type TBD-11 are used for IPv4 and both Source and Group address are 32 bits long. Frames of type TBD-12 are used for IPv6 and both Source and Group address are 128 bits long.</t>
        <t>MC_ANNOUNCE frames contain the following fields:</t>
        <ul spacing="normal">
          <li>ID Length: The length in bytes of the Channel ID field.</li>
          <li>Channel ID: The channel ID of the channel that is getting announced.</li>
          <li>Source IP: The IP Address of the source of the (S,G) for the channel.  Either a 32-bit IPv4 address or a 128-bit IPv6 address, as indicated by the frame type (TBD-11 indicates IPv4, TBD-12 indicates IPv6).</li>
          <li>Group IP: The IP Address of the group of the (S,G) for the channel.  Either a 32-bit IPv4 address or a 128-bit IPv6 address, as indicated by the frame type (TBD-11 indicates IPv4, TBD-12 indicates IPv6).</li>
          <li>UDP Port: The 16-bit UDP Port of traffic for the channel.</li>
          <li>Header AEAD Algorithm: A value from the TLS Cipher Suite registry (<eref target="https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4">https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4</eref>), used to protect the header fields in the channel packets.  The value MUST match a value provided in the "AEAD Algorithms List" of the transport parameter (see <xref target="transport-parameter"/>).</li>
          <li>Header Secret Length: Provides the length of the Secret field.</li>
          <li>Header Secret: A secret for use with the Header AEAD Algorithm for protecting the header fields of 1-RTT packets in the channel as described in <xref target="RFC9001"/>.  The Key and Initial Vector for the application data carried in the 1-RTT packet header fields are derived from this secret as described in Section 7.3 of <xref target="RFC8446"/>.</li>
          <li>AEAD Algorithm: A value from the TLS Cipher Suite registry (<eref target="https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4">https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4</eref>), used to protect the payloads in the channel packets.  The value MUST match a value provided in the "AEAD Algorithms List" of the transport parameter (see <xref target="transport-parameter"/>).</li>
          <li>
            <t>Integrity Hash Algorithm: The hash algorithm used in integrity frames.
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Author's Note:</strong> Several candidate IANA registries, not sure which one to use?  Some have only text for some possibly useful values.  For now we use the first of these:
                </t>
                <ul spacing="normal">
                  <li>
                    <eref target="https://www.iana.org/assignments/named-information/named-information.xhtml#hash-alg">https://www.iana.org/assignments/named-information/named-information.xhtml#hash-alg</eref></li>
                  <li>
                    <eref target="https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18">https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18</eref></li>
                  <li>(text-only): <eref target="https://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xhtml">https://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xhtml</eref></li>
                </ul>
              </li>
            </ul>
          </li>
          <li>Max Rate: The maximum rate in Kibps of the payload data for this channel. Channel data MUST NOT exceed this rate over any 5s window, if it does clients SHOULD leave the channel with reason Max Rate Exceeded.</li>
          <li>Max ACK Delay: A value used similarly to max_ack_delay (Section 18.2 of <xref target="RFC9000"/>}) that applies to traffic in this channel.  Clients SHOULD NOT intentionally add delay to MC_ACK frames for traffic in this channel beyond this value, in milliseconds, and SHOULD NOT add any delay to the first MC_ACK of data packets for a channel.  As long as they stay inside these limits, clients can improve efficiency and network load for the uplink by aggregating MC_ACK frames whenever possible.</li>
        </ul>
        <t>A client MUST NOT use the channel ID included in an MC_ANNOUNCE frame as a connection ID for the unicast connection. If it is already in use, the client should retire it as soon as possible.
As the server knows which connection IDs are in use by the client, it MUST wait with the sending of an MC_JOIN frame until the channel ID associated with it has been retired by the client.</t>
        <t>As all the properties in MC_ANNOUNCE frames are immutable during the lifetime of a channel, a server SHOULD NOT send an MC_ANNOUNCE frame for the same channel more than once to each client except as needed for recovery.</t>
        <t>A server SHOULD send an MC_ANNOUNCE frame for a channel before sending an MC_KEY and SHOULD send an MC_KEY frame for a channel before sending an MC_JOIN frame for it.
Each of these recommended orderings MAY occur within the same packet.</t>
      </section>
      <section anchor="channel-key-frame">
        <name>MC_KEY</name>
        <t>An MC_KEY frame (type=TBD-01) is sent from server to client, either with the unicast connection or in an existing joined multicast channel.
The MC_KEY frame contains an updated secret that is used to generate the keying material for the payload of 1-RTT packets received on the multicast channel.</t>
        <t>A server can send a new MC_KEY frame with a sequence number increased by one.
A server MUST generate continuous sequence numbers, and MAY start at a value higher than 0.
Note that while not joined, a client will not receive updates to channel secrets, and thus may see jumps in the Key Sequence Number values between MC_KEY frames.
However, while joined the Key Sequence Numbers in the MC_KEY frames MUST increment by 1 for each new secret.</t>
        <t>Secrets with even-valued Key Sequence Numbers have a Key Phase of 0 in the 1-RTT packet, and secrets with odd-valued Key Seqence Numbers have a Key Phase of 1 in the 1-RTT packet.
Secrets with a Key Phase indicating an unknown key SHOULD be discarded without attempting to decrypt them.
(An unknown key might happen after loss of the latest MC_KEY frame, so that packets on a channel have an updated Key Phase starting at a particular packet number, but the client does not yet know about the key change.)</t>
        <t>It is RECOMMENDED that servers send regular secret updates.</t>
        <t>MC_KEY frames are formatted as shown in <xref target="fig-mc-channel-key-format"/>.</t>
        <figure anchor="fig-mc-channel-key-format">
          <name>MC_KEY Frame Format</name>
          <artwork><![CDATA[
MC_KEY Frame {
  Type (i) = TBD-01 (experiments use 0xff3e801),
  ID Length (8),
  Channel ID (8..160),
  Key Sequence Number (i),
  From Packet Number (i),
  Secret Length (i),
  Secret (..)
}
]]></artwork>
        </figure>
        <t>MC_KEY frames contain the following fields:</t>
        <ul spacing="normal">
          <li>ID Length: The length in bytes of the Channel ID field.</li>
          <li>Channel ID: The channel ID for the channel associated with this frame.</li>
          <li>Key Sequence Number: Increases by 1 each time the secret for the channel is changed by the server.  If there is a gap in sequence numbers due to reordering or retransmission of packets, on receipt of the older MC_KEY frame, the client MUST apply the secret contained and the packet numbers on which it applies as if they arrived in order.</li>
          <li>From Packet Number: The values in this MC_KEY frame apply only to packets starting at From Packet Number and continuing until they are overwritten by a new MC_KEY frame with a higher From Packet Number.  The Packet Number MUST never decrease with an increased Key Sequence Number.</li>
          <li>Secret Length: Provides the length of the secret field.</li>
          <li>Secret: Used to protect the packet contents of 1-RTT packets for the channel as described in <xref target="RFC9001"/>.  The Key and Initial Vector for the application data carried in the 1-RTT packet payloads are derived from the secret as described in Section 7.3 of <xref target="RFC8446"/>.
To maintain forward secrecy and prevent malicious clients from decrypting packets long after they have left or were removed from the unicast connection, servers SHOULD periodically send key updates using only unicast.</li>
        </ul>
        <t>Clients MUST delete old secrets within 10 seconds after receiving a new key, and within 3 seconds after receiving a new key and not receiving any data traffic decrypted with the old key.</t>
        <t>The From Packet Number is used to indicate the starting packet number (Section 17.1 of <xref target="RFC9000"/>) of the 1-RTT packets for which the secret contained in an MC_KEY frame is applicable.
This secret is applicable to all future packets until it is updated by a new MC_KEY frame.</t>
        <t>A server SHOULD NOT send MC_KEY frames for channels except those the client has joined or will be imminently asked to join.</t>
      </section>
      <section anchor="channel-join-frame">
        <name>MC_JOIN</name>
        <t>An MC_JOIN frame (type TBD-02) is sent from server to client and requests that a client join the given transport addresses and ports and process packets with the given Channel ID according to the corresponding MC_ANNOUNCE frame and the latest MC_KEY frame for the channel.</t>
        <t>A client cannot join a multicast channel without first receiving an MC_ANNOUNCE frame and an MC_KEY frame, which together set all the values necessary to process the channel.</t>
        <t>If a client receives an MC_JOIN for a channel for which it has not received both an MC_ANNOUNCE frame and an MC_KEY frame, it MUST respond with an MC_STATE with State "Declined Join" and reason "Missing Properties". The server MAY send another MC_JOIN after receiving an acknowledgement indicating receipt of the MC_ANNOUNCE frame and the MC_KEY frame.</t>
        <t>MC_JOIN frames are formatted as shown in <xref target="fig-mc-channel-join-format"/>.</t>
        <figure anchor="fig-mc-channel-join-format">
          <name>MC_JOIN Frame Format</name>
          <artwork><![CDATA[
MC_JOIN Frame {
  Type (i) = TBD-02 (experiments use 0xff3e802),
  MC_LIMITS Sequence Number (i),
  MC_STATE Sequence Number (i),
  MC_KEY Sequence Number (i),
  ID Length (8),
  Channel ID (8..160)
}
]]></artwork>
        </figure>
        <t>The sequence numbers are the most recently processed sequence number by the server from the respective frame type. They are present to allow the client to distinguish between a broken server that has performed an illegal action and an instruction that's based on updates that are out of sync (either one or more missing updates to MC_KEY not yet received by the client or one or more missing updates to MC_LIMITS or MC_STATE not yet received by the server).</t>
        <t>A client MAY perform the join if it has the sequence number of the corresponding channel properties and the client's limits will not be exceeded, even if the client sequence numbers are not up-to-date.</t>
        <t>If the client does not join, it MUST send an MC_STATE frame with "Declined Join" and a reason.</t>
        <t>If the client does join, it MUST send an MC_STATE frame with "Joined".</t>
      </section>
      <section anchor="channel-leave-frame">
        <name>MC_LEAVE</name>
        <t>An MC_LEAVE frame (type=TBD-03) is sent from server to client, and requests that a client leave the given channel.</t>
        <t>If the client has already left or declined to join the channel, the MC_LEAVE is ignored.</t>
        <t>If an MC_JOIN or an MC_LEAVE with the same Channel ID and a higher MC_STATE Sequence number has previously been received, the MC_LEAVE is ignored.</t>
        <t>Otherwise, the client MUST leave the channel and send a new MC_STATE frame with reason Left as requested by server.</t>
        <t>MC_LEAVE frames are formatted as shown in <xref target="fig-mc-channel-leave-format"/>.</t>
        <figure anchor="fig-mc-channel-leave-format">
          <name>MC_LEAVE Frame Format</name>
          <artwork><![CDATA[
MC_LEAVE Frame {
  Type (i) = TBD-03 (experiments use 0xff3e803),
  ID Length (8),
  Channel ID (8..160),
  MC_STATE Sequence Number (i),
  After Packet Number (i)
}
]]></artwork>
        </figure>
        <t>If After Packet Number is nonzero, wait until receiving that packet or a higher valued number before leaving.</t>
      </section>
      <section anchor="channel-integrity-frame">
        <name>MC_INTEGRITY</name>
        <t>MC_INTEGRITY frames are sent from server to client and are used to convey packet hashes for validating the integrity of packets received over the multicast channel as described in <xref target="packet-hashes"/>.</t>
        <t>MC_INTEGRITY frames are formatted as shown in <xref target="fig-mc-channel-integrity-format"/>.</t>
        <figure anchor="fig-mc-channel-integrity-format">
          <name>MC_INTEGRITY Frame Format</name>
          <artwork><![CDATA[
MC_INTEGRITY Frame {
  Type (i) = TBD-04..TBD-05 (experiments use 0xff3e804/0xff3e805),
  ID Length (8),
  Channel ID (8..160),
  Packet Number Start (i),
  [Length (i)],
  Packet Hashes (..)
}
]]></artwork>
        </figure>
        <t>For type TBD-05, Length is present and is a count of packet hashes.  For TBD-04, Length is not present and the packet hashes extend to the end of the packet.</t>
        <t>The first hash in the Packet Hashes list is a hash of a 1-RTT packet with the Channel ID equal to the Channel ID in the MC_INTEGRITY frame and packet number equal to the Packet Number Start field.
Subsequent hashes refer to the packets for the channel with packet numbers increasing by 1.</t>
        <t>Packet hashes MUST have length with an integer multiple of the length indicated by the Hash Algorithm from the MC_ANNOUNCE frame.</t>
        <t>See <xref target="packet-hashes"/> for a description of the packet hash calculation.</t>
      </section>
      <section anchor="channel-ack-frame">
        <name>MC_ACK</name>
        <t>The MC_ACK frame (types TBD-06 and TBD-07; experiments use 0xff3e806..0xff3e807) is an extension of the ACK frame defined by <xref target="RFC9000"/>. It is used to acknowledge packets that were sent on multicast channels. If the frame type is TBD-07, MC_ACK frames also contain the sum of QUIC packets with associated ECN marks received on the connection up to this point.</t>
        <t>(TODO: Would there be value in reusing the multiple packet number space version of ACK_MP from Section 12.2 of <xref target="I-D.draft-ietf-quic-multipath"/>, defining channel id as the packet number space?  at 2022-05 they're identical except the Channel ID and types.)</t>
        <t>MC_ACK frames are formatted as shown in <xref target="fig-mc-channel-ack-format"/>.</t>
        <figure anchor="fig-mc-channel-ack-format">
          <name>MC_ACK Frame Format</name>
          <artwork><![CDATA[
MC_ACK Frame {
  Type (i) = TBD-06..TBD-07 (experiments use 0xff3e806, 0xff3e807),
  ID Length (8),
  Channel ID (8..160),
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  [ECN Counts (..)],
}
]]></artwork>
        </figure>
      </section>
      <section anchor="client-limits-frame">
        <name>MC_LIMITS</name>
        <t>MC_LIMITS frames are formatted as shown in <xref target="fig-mc-client-limits-format"/>.</t>
        <figure anchor="fig-mc-client-limits-format">
          <name>MC_LIMITS Frame Format</name>
          <artwork><![CDATA[
MC_LIMITS Frame {
  Type (i) = TBD-09 (experiments use 0xff3e809),
  Client Limits Sequence Number (i),
  Capabilities Flags(i),
  Max Aggregate Rate (i),
  Max Channel IDs (i),
  Max Joined Count (i),
}
]]></artwork>
        </figure>
        <t>The sequence number is implicitly 0 before the first MC_LIMITS frame from the client, and increases by 1 each new frame that's sent.
Newer frames override older ones.</t>
        <t>Capabilities Flags is a bit field structured as follows:</t>
        <ul spacing="normal">
          <li>0x1 is set if IPv4 channels are permitted</li>
          <li>0x2 is set if IPv6 channels are permitted</li>
        </ul>
        <t>For example, a Capabilities Flags value of 3 (0x11) indicates that both IPv4 and IPv6 channels are permitted.</t>
        <t>Max Aggregate Rate allowed across all joined channels is in Kibps.</t>
        <t>Max Channel IDs is the count of channel IDs that can be announced to this client and have keys.  Retired Channel IDs don't count against this value.</t>
        <t>Max Joined Count is the count of channels that are allowed to be joined concurrently.</t>
      </section>
      <section anchor="channel-retire-frame">
        <name>MC_RETIRE</name>
        <t>MC_RETIRE frames are formatted as shown in <xref target="fig-mc-channel-retire-format"/>.</t>
        <figure anchor="fig-mc-channel-retire-format">
          <name>MC_RETIRE Frame Format</name>
          <artwork><![CDATA[
MC_RETIRE Frame {
  Type (i) = TBD-0a (experiments use 0xff3e80a),
  ID Length (8),
  Channel ID (8..160),
  After Packet Number (i)
}
]]></artwork>
        </figure>
        <t>Retires a channel by id, discarding any state associated with it.   (Author comment: We can't use RETIRE_CONNECTION_ID because we don't have a coherent sequence number.)
If After Packet Number is nonzero and the channel is joined and has received any data, the channel will be retired after receiving that packet or a higher valued number, otherwise it will be retired immediately.</t>
        <t>After retiring a channel, the client MUST send a new MC_STATE frame with reason Retired to the server.</t>
        <t>If the client is still joined in the channel that is being retired, it MUST also leave it. If a channel is left this way, it does not need to send an additional MC_STATE frame with reason Left, as reason Retired also implies the channel was left.</t>
      </section>
      <section anchor="client-channel-state-frame">
        <name>MC_STATE</name>
        <t>MC_STATE frames are sent from client to server to report changes in the client's channel state.
Each time the channel state changes, the Client Channel State Sequence number is increased by one.
It is a state change to the channel if the server requests that a client join a channel and the client declines the join, even though no join occurs on the network.</t>
        <t>MC_STATE frames are formatted as shown in <xref target="fig-mc-client-channel-state-format"/>.</t>
        <figure anchor="fig-mc-client-channel-state-format">
          <name>MC_STATE Frame Format</name>
          <artwork><![CDATA[
MC_STATE Frame {
  Type (i) = TBD-0b (experiments use 0xff3e80b),
  Client Channel State Sequence Number (i),
  ID Length (8),
  Channel ID (8..160),
  State (i),
  Reason (0..i)
}
]]></artwork>
        </figure>
        <t>State has these defined values:</t>
        <ul spacing="normal">
          <li>0x1: Left</li>
          <li>0x2: Declined Join</li>
          <li>0x3: Joined</li>
          <li>0x4: Retired</li>
        </ul>
        <t>If State is Joined or Retired, the Reason field is absent.</t>
        <t>If State is Left or Declined Join, the Reason field is set to one of:</t>
        <ul spacing="normal">
          <li>0x0: Unspecified Other</li>
          <li>0x1: Left as requested by server</li>
          <li>0x2: Administrative Block</li>
          <li>0x3: Protocol Error</li>
          <li>0x4: Property Violation</li>
          <li>0x5: Unsynchronized Properties</li>
          <li>0x6: ID Collision</li>
          <li>0x10: Held Down</li>
          <li>0x12: Max Rate Exceeded</li>
          <li>0x13: High Loss</li>
          <li>0x14: Excessive Spurious Traffic</li>
          <li>0x15: Max Streams Exceeded</li>
          <li>0x1000000-0x3fffffff: Application-defined Reason</li>
        </ul>
        <t>A client might receive multicast packets that it can not associate with any channel ID, or that cannot be verified as matching hashes from MC_INTEGRITY frames, or cannot be decrypted.
This traffic is presumed either to have been corrupted in transit or to have been sent by someone other than the legitimate sender of traffic for the channel, possibly by an attacker or a misconfigured sender.
If these packets are addressed to an (S,G) that is used for reception in one or more known channels, the client MAY leave these channels with reason "Excessive Spurious traffic".</t>
      </section>
    </section>
    <section anchor="frames-carried-in-channel-packets">
      <name>Frames Carried in Channel Packets</name>
      <t>Multicast channels will contain normal QUIC 1-RTT data packets (see Section 17.3.1 of <xref target="RFC9000"/>) except using the Channel ID instead of a Connection ID.  The packets are protected with the keys derived from the secrets in MC_KEY frames for the corresponding channel.</t>
      <t>Data packet hashes will also be sent in MC_INTEGRITY frames, as keys cannot be trusted for integrity due to giving them to too many receivers, as described in <xref target="I-D.draft-krose-multicast-security"/>.</t>
      <t>The 1-RTT packets in multicast channels will have a restricted set of frames.
Since the channel is strictly 1-way server to client, the general principle is that broadcastable shared server-&gt;client data frames can be sent, but frames that make sense only for individualized connections or that are sent client-to-server cannot.</t>
      <t>Permitted:</t>
      <ul spacing="normal">
        <li>PADDING Frames (<xref target="RFC9000"/> Section 19.1)</li>
        <li>PING Frames (<xref target="RFC9000"/> Section 19.2)</li>
        <li>RESET_STREAM Frames (<xref target="RFC9000"/> Section 19.4)</li>
        <li>STREAM Frames (<xref target="RFC9000"/> Section 19.8)</li>
        <li>DATAGRAM Frames (both types) (<xref target="RFC9221"/> Section 4)</li>
        <li>MC_KEY</li>
        <li>MC_LEAVE (however, join must come over unicast?)</li>
        <li>MC_INTEGRITY (not for this channel, only for another)</li>
        <li>MC_RETIRE</li>
      </ul>
      <t>Not permitted:</t>
      <ul spacing="normal">
        <li>19.3.  ACK Frames</li>
        <li>19.6.  CRYPTO Frames (crypto handshake does not happen on mc channels)</li>
        <li>19.7.  NEW_TOKEN Frames</li>
        <li>
          <t>Flow control is different:
          </t>
          <ul spacing="normal">
            <li>19.5.  STOP_SENDING Frames</li>
            <li>19.9.  MAX_DATA Frames  (flow control for mc channels is by rate)</li>
            <li>19.10. MAX_STREAM_DATA Frames</li>
            <li>19.11. MAX_STREAMS Frames</li>
            <li>19.12. DATA_BLOCKED Frames</li>
            <li>19.13. STREAM_DATA_BLOCKED Frames</li>
            <li>19.14. STREAMS_BLOCKED Frames</li>
          </ul>
        </li>
        <li>
          <t>Channel ID Migration can't use the "prior to" concept within a channel, not 0-starting
          </t>
          <ul spacing="normal">
            <li>19.15. NEW_CONNECTION_ID Frames</li>
            <li>19.16. RETIRE_CONNECTION_ID Frames</li>
          </ul>
        </li>
        <li>
          <t>Channels don't have the same kind of path validation, as there's a unicast anchor with acks for the multicast packets:
          </t>
          <ul spacing="normal">
            <li>19.17. PATH_CHALLENGE Frames</li>
            <li>19.18. PATH_RESPONSE Frames</li>
          </ul>
        </li>
        <li>19.19. CONNECTION_CLOSE Frames</li>
        <li>19.20. HANDSHAKE_DONE Frames</li>
        <li>MC_ANNOUNCE</li>
        <li>MC_LIMITS</li>
        <li>MC_STATE</li>
        <li>MC_ACK</li>
      </ul>
    </section>
    <section anchor="implementation-and-operational-considerations">
      <name>Implementation and Operational Considerations</name>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>This section outlines considerations for some known transport mechanisms that are worth highlighting as potentially useful with multicast QUIC.</t>
        <section anchor="server-push">
          <name>HTTP/3 Server Push</name>
          <t>HTTP/3 Server Push is defined in Section 4.6 of <xref target="RFC9114"/>.</t>
          <t>Server push is a good use case for multicast transport because the same data can be pushed to many different receivers on a multicast channel.
Applications designed to work well with server push can leverage multicast QUIC very effectively with only a few extra considerations.</t>
          <t>A QUIC connection using HTTP/3 can use multicast channels to deliver server-initiated streams that implement HTTP/3 Server Push.</t>
          <t>Applications expecting to use server push with multicast SHOULD use a high MAX_PUSH_ID in order to work with channels that have been active for a long time already when the connection is first established.
Servers SHOULD NOT allow clients to remain joined to channels if their MAX_PUSH_ID will be exceeded by push streams that are to be sent imminently.</t>
          <t>If a client receives data from a push ID that exceeds its MAX_PUSH_ID causing an H3_ID_ERROR on a multicast channel, it SHOULD leave the channel with reason 0x1000108 (computed by adding the H3_ID_ERROR value 0x0108 to the Application-defined Reason start value 0x1000000).
This SHOULD NOT cause a close of the whole connection but MAY cause a stream error and reset of the stream.</t>
          <t>TODO: flesh out this principle for application-level error code assignment in general for known error code values, and specifically all HTTP/3 ones? (And is it useful?)</t>
        </section>
        <section anchor="webtransport">
          <name>HTTP/3 WebTransport</name>
          <t>WebTransport over HTTP/3 is defined in <xref target="I-D.draft-ietf-webtrans-http3"/>.</t>
          <t>Popular data that can be sent with server-initiated streams or server-sent datagrams and carried over WebTransport are good use cases for multicast transport because the same server-to-client data can be pushed to many different receivers on a multicast channel.</t>
          <t>A QUIC connection using HTTP/3 and WebTransport can use multicast channels to deliver WebTransport server-initiated streams.
At the time of this writing (version -02 of <xref target="I-D.draft-ietf-webtrans-http3"/>) this comes with the significant penalty that in order to do so, servers would have to run up to 4 multicast channels per shared set of data to send, one for each possible size of the client-chosen Session ID.</t>
          <t>Servers can achieve this by sending the initial few bytes of the server-initiated stream containing the Session ID (currently defined as the Stream ID of the QUIC stream containing the original HTTP/3 request for the WebTransport extended CONNECT request), then sending the rest of the stream data over a multicast channel.</t>
          <t>However, since the client-initiated Stream ID used for the Session ID is a variable-length integer with 4 possible sizes (1, 2, 4, or 8 octets), clients will need the shared data in the stream to be at one of 4 different possible stream offsets in order to process it.
Hence, for WebTransport as currently specified servers would need to run up to 4 separate channels instead of a single channel in order to send the same WebTransport data to many different clients.</t>
          <t>WebTransport Datagrams are delivered over HTTP/3 Datagrams as defined in <xref target="I-D.draft-ietf-masque-h3-datagram"/> and in version -04 have the same characteristic of relying on the client-chosen Quarter Stream ID value.</t>
          <t>While using 4 multicast channels instead of 1 still represents a potentially vast scalability improvement over unicast delivery for popular content, it causes other scalability problems, especially in networks that have small limits on the number of multicast channels that are allowed to be provisioned at the same time.
The total channel count limits have a surprisingly low bound in many multicast-capable networking devices designed for TV services that were expected to support only up to a few tens of very popular channels at the same time.</t>
          <t>It is therefore hoped that an extension or revision to WebTransport and HTTP/3 Datagrams can be adopted in a future version of their specifications that make it possible to use a single channel for all the shared data.</t>
          <t>For example, an extension that permits a server-chosen value to be used as a Session ID.
Such a value could for instance be sent in an HTTP/3 response header, and as long as it is unique within the connection and avoided collision with any client-initiated stream ID values, could still be used to multiplex data associated with different HTTP/3 traffic and different WebTransport sessions carried on the same connection.
Then by choosing the same server-chosen session ID for all the connections, it would allow the server to use the same channel to carry the identical data, including the Session ID, to be received by multiple receivers.
Such a change could either replace the current client-chosen definition for Session ID, or could add new frame types that allow a server-chosen Session ID when the client has advertised support for this extended functionality.</t>
          <t>As an alternate example of an extension, a mechanism that allows padding at the beginning of the WebTransport stream before the Session ID, for example with 0 bytes, would at least allow the server to align the client-chosen ID value to end at the same QUIC stream offset, which would allow the shared portion of the stream data (all or most of the data following the Session ID) to be transmitted via the same multicast channel, since it would then be the same at the same stream offset.</t>
        </section>
        <section anchor="non-web-applications">
          <name>Non-web Applications</name>
          <t>There are also several non-web application protocols that could benefit from using multicast QUIC.  A few examples include:</t>
          <ul spacing="normal">
            <li>
              <t>Existing multicast-capable applications that are modified to use QUIC datagrams instead of UDP payloads can potentially get improved encryption and congestion feedback, while keeping its existing FEC/error recovery techniques.
              </t>
              <ul spacing="normal">
                <li>An external tunnel could supply this kind of encapsulation without modification to the sender or receiver for some applications, while retaining the benefits of multicast scalability</li>
                <li>This could usefully support existing implementations of file-transfer protocols like FLUTE <xref target="RFC6726"/> or FCAST <xref target="RFC6968"/> to enable file downloads such as operating system updates or popular game downloads with encryption and packet-level authentication.</li>
              </ul>
            </li>
            <li>Conferencing systems, especially within an enterprise that can deploy multicast network support, often can save significantly on server costs by using multicast</li>
            <li>The traditional multicast use case of broadcasting of live sports with a set-top box would benefit from a system that uses the same QUIC receiver code even for customers who installed a non-multicast-capable home router.</li>
            <li>Smart TVs or other video playing in-home devices could interoperate with a standard sender using multicast QUIC, rather than requiring proprietary integrations with TV operators.</li>
          </ul>
        </section>
      </section>
      <section anchor="graceful-degradation">
        <name>Graceful Degradation</name>
        <t>Clients with multicast QUIC support can stop accepting multicast for a variety of reasons.</t>
        <t>Applications like live broadcast-scale video that rely on multicast QUIC may benefit from anticipating that clients might stop using multicast and providing data feeds with similar content that can scale even if many clients stop using multicast, for example by ensuring that a lower-bitrate rendition can still be delivered over unicast to all or most of the clients simultaneously, and ensuring that the server has a way to make the client start using the low-bitrate version when it switches to unicast.</t>
        <t>While some existing Adaptive Bitrate video players might have an easy way to provide this, other video players might need specialized logic to provide the server a way to control what bitrate individual clients consume.
Although under ideal conditions it may often be possible using features like server push (<xref target="server-push"/>) to use unmodified existing HTTP-based video players with multicast QUIC, in practice it may require extra devlopment at the application level to make a player that robustly delivers a good user experience under variable network conditions, depending on the scalability gains that multicast transport is providing and the Adaptive Bitrate algorithms the player is using.</t>
        <section anchor="circuit-breakers">
          <name>Circuit Breakers</name>
          <t>Operators of multicast QUIC services should consider that some networks may implement circuit breakers such as the one described in <xref target="I-D.draft-ietf-mboned-cbacc"/>, or similar network-level safety features that might cut off previously operational multicast transport under certain conditions.</t>
          <t>The servers will notice the transport loss from the lack of MC_ACK frames from receivers in a network that cut off multicast transport, but it may be beneficial when possible in a transport cutoff event correlated across many clients to pace the recovery response according to aggregations of the affected clients so that a sudden unicast storm doesn't overload the network further.</t>
        </section>
      </section>
      <section anchor="server-scalability">
        <name>Server Scalability</name>
        <t>Use of QUIC multicast channels can provide large scalability gains, but there still will be significant scaling requiremnts on server operators to support a large client footprint.</t>
        <t>Servers, possibly many of them, still will be required to maintain unicast connections with all the clients and provide for handling MC_ACK frames from the clients, delivering MC_INTEGRITY frames, managing the clients' channel join states, and providing recovery for lost packets.</t>
        <t>Further, the use of multicast channels likely requires increased coordination between the different servers, relative to services that operate completely independently.</t>
        <t>For large deployments, server implementations will often need to operate on separate devices from the ones generating the multicast channel packets, and will need to be designed accordingly.</t>
      </section>
      <section anchor="address-collisions">
        <name>Address Collisions</name>
        <t>Multicast channels at the network layer are addressed with a source IP, a destination group IP address, and a destination UDP port.</t>
        <t>These offers a number of potential address collision considerations that are worth mentioning:</t>
        <ol spacing="normal" type="1"><li>If properties change for the data being used in a channel (for example, new video encoding settings might result in a change to the expected max rate for a video feed), a server might reuse the same network addresses in a new QUIC multicast channel, and might send a join for the new channel and a leave for the old channel to clients that can support the new max rate.  If they arrive together, this could be handled by the client without making a change to the IGMP or MLD membership state, as an optimization that can prevent the need for some recovery, or even by reusing the same UDP socket.  Doing so does not change any requirements for the channel state management at the QUIC layer, and as long as the situation is transient, should not result in leaving due to Excessive Spurious Traffic even if some packets were reordered or may still be in flight.</li>
          <li>As described in Section 6 of <xref target="RFC4607"/>, link-layer addresses can be linked to the low-order bits of multicast addresses, and may be the same for different group destinations.  Collisions in the link-layer addressing, even with traffic that comes from other sources, can cause congestion or receiver CPU load for colliding channels that might be different from that seen with other channels that were delivered with apparently the same network paths.</li>
          <li>Even though multicast QUIC uses only source-specific multicast, older networks with devices that don't have IGMPv3 or MLDv2 support can propagate the joins as any-source multicast. If there are active senders sending to that destination, this can cause network congestion and CPU load due to discarding packets from the wrong source, even though at the application layer the UDP socket won't receive those packets from the wrong source.</li>
          <li>If different channels use the same (S,G) but different UDP ports, they will share the same multicast forwarding tree in an IP network. This is often useful when the data in the channels are linked, for example if MC_INTEGRITY frames are carried on one channel for packets carried on another channel, because it provides some fate-sharing for the linked data.  However, for data that is not so linked, it would generally be a disadvantage to share the (S,G) because the network link of any receiver joined to one of those channels but not the other would receive both packets and throw away the data for the un-joined port, causing extra congestion and CPU load for the receiving device.</li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>(Authors comment: Mostly incorporate <xref target="I-D.draft-krose-multicast-security"/>.  Anything else?</t>
      <t>e.g. if a different legitimate quic connection says someone
else's quic multicast stream is theirs, that's maybe a problem
worth protecting against.  Maybe we need a periodic asymmetric
challenge?  I'm thinking send a public key on the multicast
channel and in the unicast channels send an individualized MAC
signed with the private key and verify it with the public key,
so that in addition to validating that the unicast server knows
the contents of the multicast packets via the hashes it supplies,
the multicast stream provides a way for the client to validate
that the unicast stream is authorized to use it for data transport
via proof they know the private key corresponding to the public
key that arrived on the multicast channel.
Note this doesn't prevent unauthorized receipt of multicast
data packts, but does prevent a quic server from lying when
claiming a multicast data channel belongs to it, preventing
legit receivers from consuming it.</t>
      <t>alternatively, can the multicast channel just periodically say
what domain name is expected for the quic connection and get the
same crypto guarantee of a proper sender via the domain's cert,
which was already checked on the unicast channel?)</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: lots</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.draft-krose-multicast-security">
          <front>
            <title>Security and Privacy Considerations for Multicast Transports</title>
            <author fullname="Kyle Rose">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <author fullname="Jake Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <date day="31" month="January" year="2022"/>
            <abstract>
              <t>   Interdomain multicast has unique potential to solve delivery
   scalability for popular content, but it carries a set of security and
   privacy issues that differ from those in unicast delivery.  This
   document analyzes the security threats unique to multicast-based
   delivery for Internet and Web traffic under the Internet and Web
   threat models.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-krose-multicast-security-02"/>
        </reference>
        <reference anchor="I-D.draft-ietf-mboned-ambi">
          <front>
            <title>Asymmetric Manifest Based Integrity</title>
            <author fullname="Jake Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <author fullname="Kyle Rose">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document defines Asymmetric Manifest-Based Integrity (AMBI).
   AMBI allows each receiver or forwarder of a stream of multicast
   packets to check the integrity of the contents of each packet in the
   data stream.  AMBI operates by passing cryptographically verifiable
   hashes of the data packets inside manifest messages, and sending the
   manifests over authenticated out-of-band communication channels.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-ambi-03"/>
        </reference>
        <reference anchor="I-D.draft-ietf-mboned-cbacc">
          <front>
            <title>Circuit Breaker Assisted Congestion Control</title>
            <author fullname="Jake Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document specifies Circuit Breaker Assisted Congestion Control
   (CBACC).  CBACC enables fast-trip Circuit Breakers by publishing rate
   metadata about multicast channels from senders to intermediate
   network nodes or receivers.  The circuit breaker behavior is defined
   as a supplement to receiver driven congestion control systems, to
   preserve network health if misbehaving or malicious receiver
   applications subscribe to a volume of traffic that exceeds capacity
   policies or capability for a network or receiving device.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-cbacc-04"/>
        </reference>
        <reference anchor="I-D.draft-ietf-quic-multipath">
          <front>
            <title>Multipath Extension for QUIC</title>
            <author fullname="Yanmei Liu">
              <organization>Alibaba Inc.</organization>
            </author>
            <author fullname="Yunfei Ma">
              <organization>Alibaba Inc.</organization>
            </author>
            <author fullname="Quentin De Coninck">
              <organization>UCLouvain</organization>
            </author>
            <author fullname="Olivier Bonaventure">
              <organization>UCLouvain</organization>
            </author>
            <author fullname="Christian Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Mirja Kuehlewind">
              <organization>Ericsson</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document specifies a multipath extension for the QUIC protocol
   to enable the simultaneous usage of multiple paths for a single
   connection.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the QUIC Working Group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/mirjak/draft-lmbdhk-quic-multipath.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath-01"/>
        </reference>
        <reference anchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert">
              <organization/>
            </author>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst">
              <organization/>
            </author>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd">
              <organization/>
            </author>
            <date month="March" year="2017"/>
            <abstract>
              <t>The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms.  This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP.  Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t>Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic.  They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t>Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t>This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9000">
          <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="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.draft-ietf-webtrans-http3">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <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-02"/>
        </reference>
        <reference anchor="I-D.draft-ietf-masque-h3-datagram">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="17" month="June" year="2022"/>
            <abstract>
              <t>   This document describes HTTP Datagrams, a convention for conveying
   multiplexed, potentially unreliable datagrams inside an HTTP
   connection.

   In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC
   DATAGRAM extension.  When the QUIC DATAGRAM frame is unavailable or
   undesirable, they can be sent using the Capsule Protocol, a more
   general convention for conveying data in HTTP connections.

   HTTP Datagrams and the Capsule Protocol are intended for use by HTTP
   extensions, not applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-11"/>
        </reference>
        <reference anchor="RFC4607">
          <front>
            <title>Source-Specific Multicast for IP</title>
            <author fullname="H. Holbrook" initials="H." surname="Holbrook">
              <organization/>
            </author>
            <author fullname="B. Cain" initials="B." surname="Cain">
              <organization/>
            </author>
            <date month="August" year="2006"/>
            <abstract>
              <t>IP version 4 (IPv4) addresses in the 232/8 (232.0.0.0 to 232.255.255.255) range are designated as source-specific multicast (SSM) destination addresses and are reserved for use by source-specific applications and protocols.  For IP version 6 (IPv6), the address prefix FF3x::/32 is reserved for source-specific multicast use.  This document defines an extension to the Internet network service that applies to datagrams sent to SSM addresses and defines the host and router requirements to support this extension.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4607"/>
          <seriesInfo name="DOI" value="10.17487/RFC4607"/>
        </reference>
        <reference anchor="RFC6726">
          <front>
            <title>FLUTE - File Delivery over Unidirectional Transport</title>
            <author fullname="T. Paila" initials="T." surname="Paila">
              <organization/>
            </author>
            <author fullname="R. Walsh" initials="R." surname="Walsh">
              <organization/>
            </author>
            <author fullname="M. Luby" initials="M." surname="Luby">
              <organization/>
            </author>
            <author fullname="V. Roca" initials="V." surname="Roca">
              <organization/>
            </author>
            <author fullname="R. Lehtonen" initials="R." surname="Lehtonen">
              <organization/>
            </author>
            <date month="November" year="2012"/>
            <abstract>
              <t>This document defines File Delivery over Unidirectional Transport (FLUTE), a protocol for the unidirectional delivery of files over the Internet, which is particularly suited to multicast networks.  The specification builds on Asynchronous Layered Coding, the base protocol designed for massively scalable multicast distribution. This document obsoletes RFC 3926.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6726"/>
          <seriesInfo name="DOI" value="10.17487/RFC6726"/>
        </reference>
        <reference anchor="RFC6968">
          <front>
            <title>FCAST: Object Delivery for the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols</title>
            <author fullname="V. Roca" initials="V." surname="Roca">
              <organization/>
            </author>
            <author fullname="B. Adamson" initials="B." surname="Adamson">
              <organization/>
            </author>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces the FCAST reliable object (e.g., file) delivery application.  It is designed to operate either on top of the underlying Asynchronous Layered Coding (ALC) / Layered Coding Transport (LCT) reliable multicast transport protocol or the NACK-Oriented Reliable Multicast (NORM) transport protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6968"/>
          <seriesInfo name="DOI" value="10.17487/RFC6968"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
YyBfVJ0NPrbVKMeD/w1zZH5fHe0AAA==

-->

</rfc>
