<?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-rfc2629 version 1.2.13 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jholland-quic-multicast-00" category="exp" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="Multicast QUIC">Multicast Extension for QUIC</title>
    <seriesInfo name="Internet-Draft" value="draft-jholland-quic-multicast-00"/>
    <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="May" day="13"/>
    <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>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document specifies an extension to QUIC version 1 <xref target="RFC9000" format="default"/> to enable the use of multicast IP transport of identical data 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 support for multicast is negotiated, the server can optionally advertise existence of one or more multicast channels that contain unidirectional data streams from server to client, and the client can optionally join the multicast channel and verify from integrity data the server provides that correct data is being received, then acknowledge the data from the multicast channel(s) over the unicast connection.</t>
      <t>Enabling this can provide large scalability benefits for popular traffic over multicast-capable networks.</t>
      <t>This document does not define any multicast transport except server to client and only includes semantics for source-specific multicast.
## Conventions and Definitions</t>
      <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" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>Commonly used terms in this document are described below.</t>
      <t>(S,G): A tuple of IP addresses identifying a source-specific multicast channel, as described in <xref target="RFC4607" format="default"/>.</t>
    </section>
    <section anchor="multicast-channel" numbered="true" toc="default">
      <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.
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.</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 semantics.
This however does not impose a requirement on how the underlying network stack has to handle the forwarding and delivery of multicast packets.</t>
      <t>QUIC connections are defined in Section 5 of <xref target="RFC9000" format="default"/> and are not changed in this document; each connection is a shared state between a client and a server.</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" format="default"/>} 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>Since the network path for a channel is unidirectional, packets associated with a channel are acknowledged with MP_CHANNEL_ACK frames <xref target="channel-ack-frame" format="default"/> instead of with ACK frames.
Each channel has an independent packet number space.</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 graceeful degradation for endpoints that do not or cannot make use of the multicast functionality.</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 the client.</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" format="default"/>.</t>
    </section>
    <section anchor="transport-parameter" numbered="true" toc="default">
      <name>Transport Parameter</name>
      <t>Support for multicast extesnsions 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_CHANNEL_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" format="default"/>.</t>
      <figure anchor="fig-transport-parameter-format">
        <name>multicast_client_params Format</name>
        <artwork name="" type="" align="left" alt=""><![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_CHANNEL_PROPERTIES 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_CLIENT_LIMITS 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_CLIENT_LIMITS frames (<xref target="client-limits-frame" format="default"/>) 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 registry below. It lists the algorithms the client is willing to use to decrypt data in multicast channels, and the server MUST NOT send a MC_CHANNEL_JOIN to this client for any channels using unsupported algorithms:</t>
      <ul spacing="normal">
        <li>
          <eref target="https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml">https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml</eref></li>
      </ul>
      <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 a MC_CHANNEL_JOIN to this client for any channels using unsupported algorithms:</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" numbered="true" toc="default">
      <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" format="default"/>), 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" numbered="true" toc="default">
        <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" format="default"/>) and later can update these limits with MC_CLIENT_LIMITS <xref target="client-limits-frame" format="default"/> 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" format="default"/>.</t>
        <t>The server asks the client to join channels with MC_CHANNEL_JOIN (<xref target="channel-join-frame" format="default"/>) frames and to leave channels with MC_CHANNEL_LEAVE (<xref target="channel-leave-frame" format="default"/>) frames.</t>
        <t>The server uses MC_CHANNEL_PROPERTIES (<xref target="channel-properties-frame" format="default"/>) frames 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 keys necessary to decode packets in the channel.</t>
        <t>When the server has asked the client to join a channel, it also sends MC_CHANNEL_INTEGRITY frames (<xref target="channel-integrity-frame" format="default"/>) 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 set of MC_CHANNEL_PROPERTIES (<xref target="channel-properties-frame" format="default"/>) frames containing the full set of data required, or for which it has not received a matching packet hash in an MC_CHANNEL_INTEGRITY (<xref target="channel-integrity-frame" format="default"/>) frame.</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_CLIENT_LIMITS (<xref target="client-limits-frame" format="default"/>) frame the server received.</t>
      </section>
      <section anchor="client-response" numbered="true" toc="default">
        <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_CLIENT_CHANNEL_STATE (<xref target="client-channel-state-frame" format="default"/>) frames.
MC_CLIENT_CHANNEL_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 a unicast connection using MC_CHANNEL_ACK (<xref target="channel-ack-frame" format="default"/>) frames.
Channels also will periodically contain PATH_CHALLENGE (<xref target="RFC9000" format="default"/> Section 19.17) frames, which cause clients to send MC_PATH_RESPONSE (<xref target="path-response-frame" format="default"/>) frames on the unicast connection in addition to their MC_CHANNEL_ACK frames.</t>
      </section>
      <section anchor="data-carried-in-channels" numbered="true" toc="default">
        <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_CHANNEL_INTEGRITY (<xref target="channel-integrity-frame" format="default"/>) 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_CHANNEL_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_CHANNEL_INTEGRITY frame.</t>
      </section>
      <section anchor="stream-processing" numbered="true" toc="default">
        <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" format="default"/> Section 2.1).</t>
        <t>Since a server has access to all data in channels it uses, a server can always avoid stream ID collisions with the stream IDs carried in channels, and can usually (depending on the timing) avoid allowing channels to exceed the client's max_streams_uni by requesting that clients leave channels before their limits would be exceeded.</t>
        <t>However, since clients can join later than a channel began, clients supporting the multicast extensions to QUIC should 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" format="default"/>) with a high limit.</t>
        <t>MC_CHANNEL_PROPERTIES can provide a recommended value for max_streams_uni to allow for uninterrupted transport using the multicast channel.</t>
        <t>Servers also can send MC_CHANNEL_STREAM_BOUNDARY_OFFSET (<xref target="channel-stream-boundary-offset-frame" format="default"/>) frames to indicate an application-layer boundary in a stream carried inside a channel.
These frames enable new clients joining a channel to start receiving application data from the indicated stream as though the stream data at that offset had an offset of 0.</t>
      </section>
    </section>
    <section anchor="flow-control" numbered="true" toc="default">
      <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 that the server is responsible for staying within via MC_CLIENT_LIMITS (<xref target="client-limits-frame" format="default"/>) frames and their initial values from the transport parameter (<xref target="transport-parameter" format="default"/>).
The server advertises the expected maxima of the values that can contribute toward client resource limits within a channel in MC_CHANNEL_PROPERTIES (<xref target="channel-properties-frame" format="default"/>) frames.</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 a MC_CHANNEL_STATE_CHANGE 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 Property 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_CHANNEL_PROPERTY, clients SHOULD leave the stream with a PROTOCOL_ERROR/Limit Violated state change.</t>
    </section>
    <section anchor="congestion-control" numbered="true" toc="default">
      <name>Congestion Control</name>
      <t>The server maintains a full view of the traffic received by the client via the ACK frames coupled with the MC_CHANNEL_ACK (<xref target="channel-ack-frame" format="default"/>) frames.</t>
      <t>Under sustained persistent loss, the server SHOULD instruct the client such that the aggregate rate of joined channels remains under the data rate successfully received by the client in the recent past.</t>
    </section>
    <section anchor="data-integrity" numbered="true" toc="default">
      <name>Data Integrity</name>
      <t>TODO: import the <xref target="I-D.draft-krose-multicast-security" format="default"/> 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).</t>
      <section anchor="packet-hashes" numbered="true" toc="default">
        <name>Packet Hashes</name>
        <t>TODO: explanation and example for how to calculate the packet hash.
Note that the hash is on the unencrypted packet because it checks against a specific packet number, which is protected by AEAD.
(This approach also may help make better use of crypto hardware offload.)</t>
      </section>
    </section>
    <section anchor="packet-scheduling" numbered="true" toc="default">
      <name>Packet Scheduling</name>
    </section>
    <section anchor="stateless-reset" numbered="true" toc="default">
      <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 somehow still detect a stateless reset for a channel, they MUST ignore it.</t>
    </section>
    <section anchor="implementation-and-operational-considerations" numbered="true" toc="default">
      <name>Implementation and Operational Considerations</name>
    </section>
    <section anchor="new-frames" numbered="true" toc="default">
      <name>New Frames</name>
      <section anchor="channel-announce-frame" numbered="true" toc="default">
        <name>MC_CHANNEL_ANNOUNCE</name>
        <t>Once a server learns that a client supports multicast through its transport parameters, it can send one or multiple MC_CHANNEL_ANNOUNCE frames (type=TBD-11..TBD-22) to share information about available channels with the client.
The MC_CHANNEL_ANNOUNCE frame contains the static properties of a channel that do not change during its lifetime.</t>
        <t>MC_CHANNEL_ANNOUNCE frames are formatted as shown in <xref target="fig-mc-channel-announce" format="default"/>.</t>
        <figure anchor="fig-mc-channel-announce">
          <name>MC_CHANNEL_ANNOUNCE Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_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 Key Length (i),
  Header Key (..),
}
]]></artwork>
        </figure>
        <t>Frames of type TBD-10 are used for IPv4 and both Source and Group address are 32 bits long. Frames of type TBD-11 are used for IPv6 and both Source and Group address are 128 bits long.</t>
        <t>MC_CHANNEL_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>IP Family: Unset indicates IPv4, Set indicates IPv6 for both Source IP and Group IP.</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 IP Family.</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 IP Family.</li>
          <li>UDP Port: The 16-bit UDP Port of traffic for the channel.</li>
          <li>Header AEAD Algorithm: A value from <eref target="https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml">https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml</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" format="default"/>).</li>
          <li>Header Key Length: Provides the length of the Key field.  It MUST match a valid key length for the Header AEAD Algorithm.</li>
          <li>
            <t>Header Key: A key 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" format="default"/>.
            </t>
            <ul spacing="normal">
              <li>
                <strong>Author's Note:</strong> I assume it's not better to use a TLS CipherSuite because there is no KDF stage for deriving these keys (they are a strict server-to-client advertisement), so the Hash part would be unused? (<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>)</li>
            </ul>
          </li>
        </ul>
        <t>A client MUST NOT use the channel ID included in the MC_CHANNEL_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 a MC_CHANNEL_JOIN frame until the channel ID associated with it has been retired by the client.</t>
        <t>As the properties in MC_CHANNEL_ANNOUNCE frames are immutable during the lifetime of a channel, a server SHOULD NOT send a MC_CHANNEL_ANNOUNCE frame for the same channel more than once to each client.</t>
        <t>A server SHOULD send an MC_CHANNEL_ANNOUNCE frame for a channel before sending a MC_CHANNEL_PROPERTIES or MC_CHANNEL_JOIN frame for it.</t>
      </section>
      <section anchor="channel-properties-frame" numbered="true" toc="default">
        <name>MC_CHANNEL_PROPERTIES</name>
        <t>An MC_CHANNEL_PROPERTIES frame (type=TBD-01) is sent from server to client, either with the unicast connection or in an existing joined multicast channel.
The MC_CHANNEL_PROPERTIES frame consists of the properties of a channel that are mutable and might change during the course of its lifetime.</t>
        <t>A server can send an update to a prior MC_CHANNEL_PROPERTIES frame with a new sequence number increased by one.</t>
        <t>It is RECOMMENDED that servers set an Until Packet Number and send regular updates to the MC_CHANNEL_PROPERTIES before the packet numbers in the channel exceed that value.</t>
        <t>MC_CHANNEL_PROPERTIES frames are formatted as shown in <xref target="fig-mc-channel-properties-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-properties-format">
          <name>MC_CHANNEL_PROPERTIES Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_PROPERTIES Frame {
  Type (i) = TBD-01 (experiments use 0xff3e801),
  ID Length (8),
  Channel ID (8..160),
  Properties Sequence Number (i),
  From Packet Number (i),
  Until Packet Number (i),
  AEAD Algorithm (16),
  Key Length (i),
  Key (..),
  Integrity Hash Algorithm (16),
  Max Rate (i),
  Max Idle Time (i),
  Max Streams (i),
  ACK Bundle Size (i),
}
]]></artwork>
        </figure>
        <t>MC_CHANNEL_PROPERTIES 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>Properties Sequence Number: Increases by 1 each time the properties for the channel are changed by the server.  The client tracks the sequence number of the MC_CHANNEL_PROPERTIES frame that set its current value, and only updates the value and the packet number range on which it's applicable if the Properties Sequence Number is higher.</li>
          <li>From Packet Number, Until Packet Number: The values in this MC_CHANNEL_PROPERTIES frame apply only to packets starting at From Packet Number and continuing for all packets up to and including Until Packet Number.  If Until Packet Number is omitted it indicates the current property values for this channel have no expiration at (equivalent to the maximum value for packet numbers, or 2^62-1).  If a packet number is received outside of any prior (From,Until) range, it has no applicable channel properties and MUST be dropped.</li>
          <li>AEAD Algorithm: A value from <eref target="https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml">https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml</eref>.  The value MUST match a value provided in the "AEAD Algorithms List" of the transport parameter (see <xref target="transport-parameter" format="default"/>).</li>
          <li>Key Length: Provides the length of the Key field.  It MUST match a valid key length for the AEAD Algorithm.</li>
          <li>Key: Used to protect the packet contents of 1-RTT packets for the channel as described in <xref target="RFC9001" format="default"/>, with length given by Key Length.
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>
          <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 Idle Time: The maximum expected idle time of the channel.  If this amount of time passes in a joined channel without data received, clients SHOULD leave the channel with reason Max Idle Time Exceeded.</li>
          <li>Max Streams: The maximum stream ID that might appear in the channel.  If a client joined to this channel can raise its Max Streams limit up to or above this value it SHOULD do so, otherwise it SHOULD leave or decline join for the channel with Max Streams Exceeded.</li>
          <li>ACK Bundle Size:nThe minimum number of ACKs a client should send in a single QUIC packet. If the max_ack_delay would force a client to send a packet that only consists of MC_CHANNEL_ACK frames, it SHOULD instead wait with sending until at least the specified number of acknowledgements have been collected. However, the Client MUST send any pending acknowledgements at least once per Max Idle Time to prevent the Server from perceiving the channel as interrupted.</li>
        </ul>
        <t>From Packet Number and Until Packet Number are used to indicate the packet number (Section 17.1 of <xref target="RFC9000" format="default"/>) the 1-RTT packets received) over which these values are applicable.</t>
        <t>A From Packet Number without an Until Packet Number has an unspecified termination.</t>
        <t>If new property values appear and are different from prior values, the From Packet Number implicitly sets the Until Packet Number of the prior property value equal to one below the new From Packet Number for all the changed properties.</t>
        <t>The properties of a channel MAY change during its lifetime. As such, a server SHOULD NOT send properties for channels except those the client has joined or will be imminently asked to join.</t>
      </section>
      <section anchor="channel-join-frame" numbered="true" toc="default">
        <name>MC_CHANNEL_JOIN</name>
        <t>An MC_CHANNEL_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_CHANNEL_PROPERTIES.</t>
        <t>A client cannot join a multicast channel without first receiving a MC_CHANNEL_ANNOUNCE and MC_CHANNEL_PROPERTIES frame which together set all the values for a channel.</t>
        <t>If a client receives a MC_CHANNEL_JOIN for a channel for which it has not received both, it MUST respond with a MC_CLIENT_CHANNEL_STATE with State "Declined Join" and reason "Missing Properties". The server MAY send another MC_CHANNEL_JOIN after retransmitting the MC_CHANNEL_PROPERTIES and receiving an acknowledgement indicating receipt of the MC_CHANNEL_ANNOUNCE.</t>
        <t>MC_CHANNEL_JOIN frames are formatted as shown in <xref target="fig-mc-channel-join-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-join-format">
          <name>MC_CHANNEL_JOIN Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_JOIN Frame {
  Type (i) = TBD-02 (experiments use 0xff3e802),
  MC_CLIENT_LIMIT Sequence Number (i),
  MC_CLIENT_CHANNEL_STATE Sequence Number (i),
  MC_CHANNEL_PROPERTIES 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_CHANNEL_PROPERTIES not yet received by the client or one or more missing updates to MC_CLIENT_LIMITS or MC_CLIENT_CHANNEL_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.
If the client does not join, it MUST send a MC_CLIENT_CHANNEL_STATE with "Declined Join" and a reason.</t>
      </section>
      <section anchor="channel-leave-frame" numbered="true" toc="default">
        <name>MC_CHANNEL_LEAVE</name>
        <t>An MC_CHANNEL_LEAVE frame (type=TBD-03) is sent from server to client
in either the unicast connection or a channel.</t>
        <t>MC_CHANNEL_LEAVE frames are formatted as shown in <xref target="fig-mc-channel-leave-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-leave-format">
          <name>MC_CHANNEL_LEAVE Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_LEAVE Frame {
  Type (i) = TBD-03 (experiments use 0xff3e803),
  MC_CLIENT_CHANNEL_STATE Sequence Number (i),
  ID Length (8),
  Channel ID (8..160),
  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" numbered="true" toc="default">
        <name>MC_CHANNEL_INTEGRITY</name>
        <t>MC_CHANNEL_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" format="default"/>.</t>
        <t>MC_CHANNEL_INTEGRITY frames are formatted as shown in <xref target="fig-mc-channel-integrity-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-integrity-format">
          <name>MC_CHANNEL_INTEGRITY Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_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_CHANNEL_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 Channel Properties.</t>
        <t>See <xref target="packet-hashes" format="default"/> for a description of the packet hash calculation.</t>
      </section>
      <section anchor="channel-stream-boundary-offset-frame" numbered="true" toc="default">
        <name>MC_CHANNEL_STREAM_BOUNDARY_OFFSET</name>
        <t>MC_CHANNEL_STREAM_BOUNDARY_OFFSET frames are formatted as shown in <xref target="fig-mc-channel-stream-boundary-offset-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-stream-boundary-offset-format">
          <name>MC_CHANNEL_STREAM_BOUNDARY_OFFSET Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_STREAM_BOUNDARY_OFFSET Frame {
  Type (i) = TBD-06 (experiments use 0xff3e806),
  ID Length (8),
  Channel ID (8..160),
  Stream ID (i),
  Stream Offset (i)
}
]]></artwork>
        </figure>
        <t>Clients must discard data before Stream Offset, and should start accepting stream data at Stream Offset as though it's a new stream with offset 0.</t>
        <t>A server must ensure that data beginning at the given stream offsets could equivalently begin a new stream, and are safe for clients to start processing in order to use this.  (Well-suited for boundaries of http server push objects, for example, which otherwise would need to start a new stream per object in order to be usable by late joiners.)</t>
      </section>
      <section anchor="channel-ack-frame" numbered="true" toc="default">
        <name>MC_CHANNEL_ACK</name>
        <t>Client-&gt;Server on unicast connection.</t>
        <t>(TODO: Is it possible to reuse the multiple packet number space version of ACK_MP from Section 12.2 of <xref target="I-D.draft-ietf-quic-multipath" format="default"/>, defining channel id as the packet number space?  at 2022-04-12 they're identical.)</t>
        <t>MC_CHANNEL_ACK frames are formatted as shown in <xref target="fig-mc-channel-ack-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-ack-format">
          <name>MC_CHANNEL_ACK Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_ACK Frame {
  Type (i) = TBD-07 (experiments use 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="path-response-frame" numbered="true" toc="default">
        <name>MC_PATH_RESPONSE</name>
        <t>MC_PATH_RESPONSE frames are sent from client to server in a unicast connection in response to an PATH_CHALLENGE received in a channel.  Like PATH_RESPONSE but includes a channel id.</t>
        <t>MC_PATH_RESPONSE frames are formatted as shown in <xref target="fig-mc-path-response-format" format="default"/>.</t>
        <figure anchor="fig-mc-path-response-format">
          <name>MC_PATH_RESPONSE Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_PATH_RESPONSE Frame {
  Type (i) = TBD-08 (experiments use 0xffe38008),
  ID Length (8),
  Channel ID (8..160),
  Data (64)
}
]]></artwork>
        </figure>
      </section>
      <section anchor="client-limits-frame" numbered="true" toc="default">
        <name>MC_CLIENT_LIMITS</name>
        <t>MC_CLIENT_LIMITS frames are formatted as shown in <xref target="fig-mc-client-limits-format" format="default"/>.</t>
        <figure anchor="fig-mc-client-limits-format">
          <name>MC_CLIENT_LIMITS Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CLIENT_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_CLIENT_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 reserved and have properties.  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" numbered="true" toc="default">
        <name>MC_CHANNEL_RETIRE</name>
        <t>MC_CHANNEL_RETIRE frames are formatted as shown in <xref target="fig-mc-channel-retire-format" format="default"/>.</t>
        <figure anchor="fig-mc-channel-retire-format">
          <name>MC_CHANNEL_RETIRE Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CHANNEL_RETIRE Frame {
  Type (i) = TBD-0a (experiments use 0xff3e80a),
  ID Length (8),
  Channel ID (8..160)
}
]]></artwork>
        </figure>
        <t>Retires a channel by id.  (We can't use RETIRE_CONNECTION_ID because we don't have a coherent sequence number.)</t>
      </section>
      <section anchor="client-channel-state-frame" numbered="true" toc="default">
        <name>MC_CLIENT_CHANNEL_STATE</name>
        <t>MC_CLIENT_CHANNEL_STATE frames are formatted as shown in <xref target="fig-mc-client-channel-state-format" format="default"/>.</t>
        <figure anchor="fig-mc-client-channel-state-format">
          <name>MC_CLIENT_CHANNEL_STATE Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MC_CLIENT_CHANNEL_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>
        </ul>
        <t>If State is Joined, 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>0x11: Max Idle Time Exceeded</li>
          <li>0x12: Max Rate Exceeded</li>
          <li>0x13: High Loss</li>
          <li>0x14: Spurious Traffic</li>
          <li>0x1000000-0x3fffffff: Application-specific Reason</li>
        </ul>
        <t>A client might receive multicast packets that it can not associate with any channel ID. If these are addressed to an (S,G) that is used for reception in one or more known channels, it MAY leave these channels with reason "Spurious traffic".</t>
        <t>(TODO: Or should we try to reuse PATH_ABANDON and/or PATH_STATUS?  I don't think they're sufficient, but maybe?):
  - <xref target="I-D.draft-ietf-quic-multipath" format="default"/>
  - <eref target="https://datatracker.ietf.org/doc/html/draft-liu-multipath-quic-04#section-9.1">https://datatracker.ietf.org/doc/html/draft-liu-multipath-quic-04#section-9.1</eref></t>
        <t>The things server needs to know for state changes <em>could</em> maybe be inferred from ack responses but explicit seems better, allowing for a more proactive response under strain?</t>
      </section>
    </section>
    <section anchor="frames-carried-in-channel-packets" numbered="true" toc="default">
      <name>Frames Carried in Channel Packets</name>
      <t>MC Channels will contain normal QUIC 1-rtt data packets (see Section 17.3.1 of <xref target="RFC9000" format="default"/>) except using the Channel ID instead of a Connection ID.  The packets are protected with the keys from MC_CHANNEL_PROPERTIES for the corresponding channel.</t>
      <t>Data packet hashes will also be sent in MC_CHANNEL_INTEGRITY frames, as keys cannot be trusted for integrity due to giving them to too many receivers, as in <xref target="I-D.draft-krose-multicast-security" format="default"/>.</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 cannot.</t>
      <t>Permitted:</t>
      <ul spacing="normal">
        <li>PADDING Frames (<xref target="RFC9000" format="default"/> Section 19.1)</li>
        <li>PING Frames (<xref target="RFC9000" format="default"/> Section 19.2)</li>
        <li>RESET_STREAM Frames (<xref target="RFC9000" format="default"/> Section 19.4)</li>
        <li>STREAM Frames (<xref target="RFC9000" format="default"/> Section 19.8)</li>
        <li>DATAGRAM Frames (both types) (<xref target="RFC9221" format="default"/> Section 4)</li>
        <li>PATH_CHALLENGE Frames (<xref target="RFC9000" format="default"/> Section 19.17)</li>
        <li>MC_CHANNEL_PROPERTIES</li>
        <li>MC_CHANNEL_LEAVE (however, join must come over unicast?)</li>
        <li>MC_CHANNEL_INTEGRITY (not for this channel, only for another)</li>
        <li>MC_STREAM_BOUNDARY_OFFSET</li>
        <li>MC_CHANNEL_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, 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>19.18. PATH_RESPONSE Frames</li>
        <li>19.19. CONNECTION_CLOSE Frames</li>
        <li>19.20. HANDSHAKE_DONE Frames</li>
        <li>MC_PATH_RESPONSE</li>
        <li>MC_CLIENT_LIMITS</li>
        <li>MC_CLIENT_CHANNEL_STATE</li>
        <li>MC_CHANNEL_ACK</li>
      </ul>
    </section>
    <section anchor="error-codes" numbered="true" toc="default">
      <name>Error Codes</name>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Mostly incorporate <xref target="I-D.draft-krose-multicast-security" format="default"/>.  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" numbered="true" toc="default">
      <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" target="https://www.ietf.org/archive/id/draft-krose-multicast-security-02.txt">
          <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 month="January" day="31" 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-quic-multipath" target="https://www.ietf.org/archive/id/draft-ietf-quic-multipath-00.txt">
          <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 month="February" day="2" 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-00"/>
        </reference>
        <reference anchor="RFC9000" target="https://www.rfc-editor.org/info/rfc9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author initials="J." surname="Iyengar" fullname="J. Iyengar" role="editor">
              <organization/>
            </author>
            <author initials="M." surname="Thomson" fullname="M. Thomson" role="editor">
              <organization/>
            </author>
            <date year="2021" month="May"/>
            <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" target="https://www.rfc-editor.org/info/rfc9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author initials="M." surname="Thomson" fullname="M. Thomson" role="editor">
              <organization/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner" role="editor">
              <organization/>
            </author>
            <date year="2021" month="May"/>
            <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="RFC9221" target="https://www.rfc-editor.org/info/rfc9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author initials="T." surname="Pauly" fullname="T. Pauly">
              <organization/>
            </author>
            <author initials="E." surname="Kinnear" fullname="E. Kinnear">
              <organization/>
            </author>
            <author initials="D." surname="Schinazi" fullname="D. Schinazi">
              <organization/>
            </author>
            <date year="2022" month="March"/>
            <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" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <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="RFC4607" target="https://www.rfc-editor.org/info/rfc4607">
          <front>
            <title>Source-Specific Multicast for IP</title>
            <author initials="H." surname="Holbrook" fullname="H. Holbrook">
              <organization/>
            </author>
            <author initials="B." surname="Cain" fullname="B. Cain">
              <organization/>
            </author>
            <date year="2006" month="August"/>
            <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>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
orFezNXPqTuZUb+luLXPi4ZpJ1vC+vFxRYklW1yvDavX5iRIz2cusPHc4Xg3
whRRXcMMkjF5geERlc4GVbMtDyj5SJ3v0yvJb3o9PW/qro1B7x9+xt8puaum
6DRIC7HFm6zsOmPANT4ijZZSR6RrD9X5GPS3PlSewHNltPogUSdxyu1ulFw6
C9ivRZP0d0mb7a7PQoJhPc5L9O/0aKvePk/i8mS6LeaaU4/QaSkY6FmzXlFC
0JXTZlJ1xCO+ok4dA+Eu6CHAMt7YvnJe+pkS27YmLb9Pucje+Td2EtIHTHcb
IBth6ZyQ2DwImyeltjWGhjl3g5XXtpeSN8WD4cG2m/yq7vAImfsLPbde77qv
8dkyZfV6a2nWfj9tfwLOPqfdNGoG+pywffe4ZXgbuj2Dv8RV3O8t9eDT4Sf1
wOM8pKO2X8+1CKNmT5zCm20M58D0x4YjMGyQ43V9QlmHn/Uw3kC4EcJZDueu
MCePFSqujfJYMvbL4LjNOgWD1TViHpeYMBmkCiIZwr3iwblXBDBwPcf2RxOb
vadcRx/TZfQpdgGouCeqc0FKBAcZE2Az5sED2nC4KfgyhFCjF/DovmiTld+T
J1180bRBJUtR9qJg32IMrb2gUhjYhQCNhhCbZlvMtmvs9veGYqDHu+aO6NdC
YE9Krogy1ZODGPVH47u1LRo6EBJfdIUjtgZBXrHdyvEcjgV7kdhe1tvFdJWw
3Zas56Y5Ttj7PXOa0p7HtsKbzz8j7iO4iM+XPXuCrHvJr+Kscoxe1srz9vPW
5/289flvYZpfGjI7JpnWCnv1s0j/oB080j+nY5KAal0LUQJLjo3WB2zEsd3m
hCZxE7FO6M44+sAKibXkJBwqSegtjHO16A7rmg0EAhxotf1RHPXfpl36ttUE
v2Gy8SsLRHkif6+yakPQhq/dzN10Uu7os9By4IbFEJ+Sz5/nC/HaA1Qvbrv5
+/H7BSfx7n/bj+cvTBLv/rdfF/UNcOqWql6FCv7FxWf/7A2VGhIM1fYjevPk
HcjePLiXhYteGWuffDswJ6GyD10ZrEk5M0kcZQHCiMuWgee/jzzan8Mz4AXV
qODddt2h1PWZN0ysR7YaTF8KCvwF0MH+krxBGkMWpm/4O8PHuxdr5Taet3O0
mq0vyLQK/BDBXF2XLKHi2/WY5Z0FAHXXtF9k6ImCeN0tvPQJW3GPsWCA1HUA
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
jiPulAAA

-->

</rfc>
