<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-quic-proxy-01" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.2 -->
  <front>
    <title abbrev="QUIC Proxy">QUIC-Aware Proxying Using HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-quic-proxy-01"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="E." surname="Rosenberg" fullname="Eric Rosenberg">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>eric_rosenberg@apple.com</email>
      </address>
    </author>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View, California 94043</city>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="February" day="12"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <?line 60?>

<t>This document defines an extension to UDP Proxying over HTTP
that adds specific optimizations for proxied QUIC connections. This extension
allows a proxy to reuse UDP 4-tuples for multiple connections. It also defines a
mode of proxying in which QUIC short header packets can be forwarded using an
HTTP/3 proxy rather than being re-encapsulated and re-encrypted.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-masque.github.io/draft-ietf-masque-quic-proxy/draft-ietf-masque-quic-proxy.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-quic-proxy/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-quic-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>UDP Proxying over HTTP <xref target="CONNECT-UDP"/>
defines a way to send datagrams through an HTTP proxy, where UDP is used to communicate
between the proxy and a target server. This can be used to proxy QUIC
connections <xref target="QUIC"/>, since QUIC runs over UDP datagrams.</t>
      <t>This document uses the term "target" to refer to the server that a client is
accessing via a proxy. This target may be an origin hosting content, or another
proxy.</t>
      <t>This document extends the UDP proxying protocol to add signalling about QUIC
Connection IDs. QUIC Connection IDs are used to identify QUIC connections in
scenarios where there is not a strict bidirectional mapping between one QUIC
connection and one UDP 4-tuple (pairs of IP addresses and ports). A proxy that
is aware of Connection IDs can reuse UDP 4-tuples between itself and a target
for multiple proxied QUIC connections.</t>
      <t>Awareness of Connection IDs also allows a proxy to avoid re-encapsulation and
re-encryption of proxied QUIC packets once a connection has been established.
When this functionality is present, the proxy can support two modes for handling
QUIC packets:</t>
      <ol spacing="normal" type="1"><li>
          <t>Tunnelled, in which client &lt;-&gt; target QUIC packets are encapsulated inside
client &lt;-&gt; proxy QUIC packets. These packets use multiple layers of encryption
and congestion control. QUIC long header packets MUST use this mode. QUIC short
header packets MAY use this mode. This is the default mode for UDP proxying.</t>
        </li>
        <li>
          <t>Forwarded, in which client &lt;-&gt; target QUIC packets are sent directly over the
client &lt;-&gt; proxy UDP socket. These packets are only encrypted using the
client-target keys, and use the client-target congestion control. This mode MUST
only be used for QUIC short header packets.</t>
        </li>
      </ol>
      <t>Forwarded mode is defined as an optimization to reduce CPU processing on clients and
proxies, as well as avoiding MTU overhead for packets on the wire. This makes it
suitable for deployment situations that otherwise relied on cleartext TCP
proxies, which cannot support QUIC and have inferior security and privacy
properties.</t>
      <t>The properties provided by the forwarded mode are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>All packets sent between the client and the target traverse through the proxy
device.</t>
        </li>
        <li>
          <t>The target server cannot know the IP address of the client solely based on the
proxied packets the target receives.</t>
        </li>
        <li>
          <t>Observers of either or both of the client &lt;-&gt; proxy link and the proxy &lt;-&gt;
target are not able to learn more about the client &lt;-&gt; target communication than
if no proxy was used.</t>
        </li>
      </ul>
      <t>It is not a goal of forwarded mode to prevent correlation between client &lt;-&gt;
proxy and the proxy &lt;-&gt; target packets from an entity that can observe both
links. See <xref target="security"/> for further discussion.</t>
      <t>Both clients and proxies can unilaterally choose to disable forwarded mode for
any client &lt;-&gt; target connection.</t>
      <t>The forwarded mode of this extension is only defined for HTTP/3
<xref target="HTTP3"/> and not any earlier versions of HTTP.</t>
      <t>QUIC proxies only need to understand the Header Form bit, and the connection ID
fields from packets in client &lt;-&gt; target QUIC connections. Since these fields
are all in the QUIC invariants header <xref target="INVARIANTS"/>,
QUIC proxies can proxy all versions of QUIC.</t>
      <section anchor="conventions">
        <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>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the following terms:</t>
        <ul spacing="normal">
          <li>
            <t>Client: the client of all QUIC connections discussed in this document.</t>
          </li>
          <li>
            <t>Proxy: the endpoint that responds to the UDP proxying request.</t>
          </li>
          <li>
            <t>Target: the server that a client is accessing via a proxy.</t>
          </li>
          <li>
            <t>Client &lt;-&gt; Proxy HTTP stream: a single HTTP stream established from
the client to the proxy.</t>
          </li>
          <li>
            <t>Socket: a UDP 4-tuple (local IP address, local UDP port, remote IP address,
remote UDP port). In some implementations, this is referred to as a "connected"
socket.</t>
          </li>
          <li>
            <t>Client-facing socket: the socket used to communicate between the client and
the proxy.</t>
          </li>
          <li>
            <t>Target-facing socket: the socket used to communicate between the proxy and
the target.</t>
          </li>
          <li>
            <t>Client Connection ID: a QUIC Connection ID that is chosen by the client, and
is used in the Destination Connection ID field of packets from the target to
the client.</t>
          </li>
          <li>
            <t>Target Connection ID: a QUIC Connection ID that is chosen by the target, and
is used in the Destination Connection ID field of packets from the client to
the target.</t>
          </li>
          <li>
            <t>Virtual Client Connection ID: a fake QUIC Connection ID that is chosen by the
client that the proxy MUST use when sending QUIC packets in forwarded mode.</t>
          </li>
          <li>
            <t>Virtual Target Connection ID: a fake QUIC Connection ID that is chosen by the
proxy that the client MUST use when sending QUIC packets in forwarded mode.</t>
          </li>
        </ul>
      </section>
      <section anchor="virtual-connection-ids">
        <name>Virtual Connection IDs</name>
        <t>QUIC allows each endpoint of a connection to choose the connection IDs it
receives with. Servers receiving QUIC packets can employ load balancing
strategies such as those described in <xref target="QUIC-LB"/>
that encode routing information in
the connection ID. When operating in forwarded mode, clients send QUIC packets
destined for the Target directly to the Proxy. Since these packets are generated
using the Target Connection ID, load balancers would not be able to route packets
to the correct Proxy if the packets were sent with the Target Connection ID.
The Virtual Target Connection ID is a connection ID chosen
by the Proxy that the Client uses when sending forwarded mode packets. The Proxy
replaces the Virtual Target Connection ID with the Target Connection ID prior to
forwarding the packet to the Target.</t>
        <t>Similarly, QUIC requires that connection IDs aren't reused over multiple network
paths to avoid linkability. The Virtual Client Connection ID is a connection ID
chosen by the Client that the Proxy uses when sending forwarded mode packets.
The Proxy replaces the Client Connection ID with the Virtual Client Connection
ID prior to forwarding the packet to the Client. Clients take advantage of this
to avoid linkability when migrating a client to proxy network path. The Virtual
Client Connection ID allows the connection ID bytes to change on the wire
without requiring the connection IDs on the client to target connection change.</t>
        <t>Clients and Proxies not implementing forwarded mode do not need to consider
Virtual Connection IDs since all Client&lt;-&gt;Target datagrams will be encapsulated
within the Client&lt;-&gt;Proxy connection.</t>
      </section>
    </section>
    <section anchor="mappings">
      <name>Required Proxy State</name>
      <t>In the methods defined in this document, the proxy is aware of the QUIC
Connection IDs being used by proxied connections, along with the sockets
used to communicate with the client and the target. Tracking Connection IDs in
this way allows the proxy to reuse target-facing sockets for multiple
connections and support the forwarded mode of proxying.</t>
      <t>QUIC packets can be either tunnelled within an HTTP proxy connection using
HTTP Datagram frames <xref target="HTTP-DGRAM"/>, or be forwarded
directly alongside an HTTP/3 proxy connection on the same set of IP addresses and UDP
ports. The use of forwarded mode requires the consent of both the client and the
proxy.</t>
      <t>In order to correctly route QUIC packets in both tunnelled and forwarded modes,
the proxy needs to maintain mappings between several items. There are three
required unidirectional mappings, described below.</t>
      <section anchor="stream-mapping">
        <name>Stream Mapping</name>
        <t>Each client &lt;-&gt; proxy HTTP stream MUST be mapped to a single target-facing socket.</t>
        <artwork><![CDATA[
(Client <-> Proxy HTTP Stream) => Target-facing socket
]]></artwork>
        <t>Multiple streams can map to the same target-facing socket, but a
single stream cannot be mapped to multiple target-facing sockets.</t>
        <t>This mapping guarantees that any HTTP Datagram using a stream sent
from the client to the proxy in tunnelled mode can be sent to the correct
target.</t>
      </section>
      <section anchor="virtual-target-connection-id-mapping">
        <name>Virtual Target Connection ID Mapping</name>
        <t>Each pair of Virtual Target Connection ID and client-facing socket MUST map to a
single target-facing socket and Target Connection ID.</t>
        <artwork><![CDATA[
(Client-facing socket + Virtual Target Connection ID)
    => (Target-facing socket + Target Connection ID)
]]></artwork>
        <t>Multiple pairs of Connection IDs and client-facing sockets can map to the
same target-facing socket.</t>
        <t>This mapping guarantees that any QUIC packet containing the Virtual Target
Connection ID sent from the client to the proxy in forwarded mode can be sent to
the correct target with the correct Target Connection ID. Thus, a proxy that
does not allow forwarded mode does not need to maintain this mapping.</t>
      </section>
      <section anchor="client-connection-id-mappings">
        <name>Client Connection ID Mappings</name>
        <t>Each pair of Client Connection ID and target-facing socket MUST map to a single
stream on a single client &lt;-&gt; proxy HTTP stream. Additionally, when supporting
forwarded mode, the pair of Client Connection ID and target-facing socket MUST
map to a single client-facing socket and Virtual Client Connection ID.</t>
        <artwork><![CDATA[
(Target-facing socket + Client Connection ID) => (Client <-> Proxy HTTP Stream)
(Target-facing socket + Client Connection ID)
    => (Client-facing socket + Virtual Client Connection ID)
]]></artwork>
        <t>Multiple pairs of Connection IDs and target-facing sockets can map to the same
HTTP stream or client-facing socket.</t>
        <t>These mappings guarantee that any QUIC packet sent from a target to the proxy
can be sent to the correct client, in either tunnelled or forwarded mode. Note
that this mapping becomes trivial if the proxy always opens a new target-facing
socket for every client request with a unique stream. The mapping is
critical for any case where target-facing sockets are shared or reused.</t>
      </section>
      <section anchor="conflicts">
        <name>Detecting Connection ID Conflicts</name>
        <t>In order to be able to route packets correctly in both tunnelled and forwarded
mode, proxies check for conflicts before creating a new mapping. If a conflict
is detected, the proxy will reject the client's request, as described in
<xref target="proxy-behavior"/>.</t>
        <t>Two sockets conflict if and only if all members of the 4-tuple (local IP
address, local UDP port, remote IP address, and remote UDP port) are identical.</t>
        <t>Two Connection IDs conflict if and only if one Connection ID is equal to or a
prefix of another. For example, a zero-length Connection ID conflicts with all
connection IDs. This definition of a conflict originates from the fact that
QUIC short headers do not carry the length of the Destination Connection ID
field, and therefore if two short headers with different Destination Connection
IDs are received on a shared socket, one being a prefix of the other prevents
the receiver from identifying which mapping this corresponds to.</t>
        <t>The proxy treats two mappings as being in conflict when a conflict is detected
for all elements on the left side of the mapping diagrams above.</t>
        <t>Since very short Connection IDs are more likely to lead to conflicts,
particularly zero-length Connection IDs, a proxy MAY choose to reject all
requests for very short Connection IDs as conflicts, in anticipation of future
conflicts.</t>
      </section>
      <section anchor="stateless-resets-for-forwarded-mode-quic-packets">
        <name>Stateless Resets for Forwarded Mode QUIC Packets</name>
        <t>While the lifecycle of forwarding rules are bound to the lifecycle of the
client&lt;-&gt;proxy HTTP stream, a peer may not be aware that the stream has
terminated. If the above mappings are lost or removed without the peer's
knowledge, they may send forwarded mode packets even though the Client
or Proxy no longer has state for that connection. To allow the Client or
Proxy to reset the client&lt;-&gt;target connection in the absence the mappings
above, a stateless reset token corresponding to the Virtual Connection ID
can be provided.</t>
        <t>Consider a proxy that initiates closure of a client&lt;-&gt;proxy QUIC connection.
If the client is temporarily unresponsive or unreachable, the proxy might have
considered the connection closed and removed all connection state (including
the stream mappings used for forwarding). If the client never learned about the closure, it
might send forwarded mode packets to the proxy, assuming the stream mappings
and client&lt;-&gt;proxy connection are still intact. The proxy will receive these
forwarded mode packets, but won't have any state corresponding to the
destination connection ID in the packet. If the proxy has provided a stateless
reset token for the Virtual Target Connection ID, it can send a stateless reset
packet to quickly notify the client that the client&lt;-&gt;target connection is
broken.</t>
      </section>
      <section anchor="stateless-resets-from-the-target">
        <name>Stateless Resets from the Target</name>
        <t>Reuse of target-facing sockets is only possible because QUIC connection IDs
allow distinguishing packets for multiple QUIC connections received with the
same 5-tuple. One exception to this is Stateless Reset packets, in which the
connection ID is not used, but rather populated with unpredictable bits followed
by a Stateless Reset token, to make it indistinguishable from a regular packet
with a short header. In order for the proxy to correctly recognize Stateless
Reset packets, the client SHOULD share the Stateless Reset token for each
registered Target Connection ID. When the proxy receives a Stateless Reset packet,
it can send the packet to the client as a tunnelled datagram. Although Stateless Reset packets
look like short header packets, they are not technically short header packets and do not contain
negotiated connection IDs, and thus are not eligible for forwarded mode.</t>
      </section>
    </section>
    <section anchor="connection-id-capsule-types">
      <name>Connection ID Capsule Types</name>
      <t>Proxy awareness of QUIC Connection IDs relies on using capsules (<xref target="HTTP-DGRAM"/>)
to signal the addition and removal of Client and Target Connection IDs.</t>
      <t>Note that these capsules do not register contexts. QUIC packets are encoded
using HTTP Datagrams with the context ID set to zero as defined in
<xref target="CONNECT-UDP"/>.</t>
      <t>The capsules used for QUIC-aware proxying allow a client to register connection
IDs with the proxy, and for the proxy to acknowledge or reject the connection
ID mappings.</t>
      <t>The REGISTER_CLIENT_CID and REGISTER_TARGET_CID capsule types (see
<xref target="iana-capsule-types"/> for the capsule type values) allow a client to inform
the proxy about a new Client Connection ID or a new Target Connection ID,
respectively. These capsule types MUST only be sent by a client.</t>
      <t>The ACK_CLIENT_CID and ACK_TARGET_CID capsule types (see <xref target="iana-capsule-types"/>
for the capsule type values) are sent by the proxy to the client to indicate
that a mapping was successfully created for a registered connection ID as well
as provide the Virtual Target Connection ID that may be used in forwarded mode.
These capsule types MUST only be sent by a proxy.</t>
      <t>The CLOSE_CLIENT_CID and CLOSE_TARGET_CID capsule types (see
<xref target="iana-capsule-types"/> for the capsule type values) allow either a client
or a proxy to remove a mapping for a connection ID. These capsule types
MAY be sent by either a client or the proxy. If a proxy sends a
CLOSE_CLIENT_CID without having sent an ACK_CLIENT_CID, or if a proxy
sends a CLOSE_TARGET_CID without having sent an ACK_TARGET_CID,
it is rejecting a Connection ID registration.</t>
      <t>ACK_CLIENT_CID, CLOSE_CLIENT_CID, and CLOSE_TARGET_CID capsule types are
formatted as follows:</t>
      <figure anchor="fig-capsule-cid">
        <name>Connection ID Capsule Format</name>
        <artwork><![CDATA[
Connection ID Capsule {
  Type (i) = 0xffe402, 0xffe404, 0xffe405
  Length (i),
  Connection ID (0..2040),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID:</dt>
        <dd>
          <t>A connection ID being acknowledged, which is between 0 and 255 bytes in
length. The length of the connection ID is implied by the length of the
capsule. Note that in QUICv1, the length of the Connection ID is limited
to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
        </dd>
      </dl>
      <t>The REGISTER_TARGET_CID capsule includes the target-provided connection ID
and Stateless Reset Token.</t>
      <figure anchor="fig-capsule-register-target-cid">
        <name>Register Target Connection ID Capsule Format</name>
        <artwork><![CDATA[
Register Target Connection ID Capsule {
  Type (i) = 0xffe401
  Length (i),
  Connection ID Length (i)
  Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID Length</dt>
        <dd>
          <t>The length of the connection ID being registered, which is between 0 and
255. Note that in QUICv1, the length of the Connection ID is limited to 20
bytes, but QUIC invariants allow up to 255 bytes.</t>
        </dd>
        <dt>Connection ID</dt>
        <dd>
          <t>A connection ID being registered whose length is equal to Connection ID
Length. This is the real Target or Client Connection ID.</t>
        </dd>
        <dt>Stateless Reset Token Length</dt>
        <dd>
          <t>The length of the target-provided Stateless Reset Token.</t>
        </dd>
        <dt>Stateless Reset Token</dt>
        <dd>
          <t>The target-provided Stateless Reset token allowing the proxy to correctly
recognize Stateless Reset packets to be tunneled to the client.</t>
        </dd>
      </dl>
      <t>The REGISTER_CLIENT_CID and ACK_TARGET_CID capsule types include a Virtual
Connection ID and Stateless Reset Token.</t>
      <figure anchor="fig-capsule-virtual-cid">
        <name>Virtual Connection ID Capsule Format</name>
        <artwork><![CDATA[
Virtual Connection ID Capsule {
  Type (i) = 0xffe400, 0xffe403
  Length (i)
  Connection ID Length (i)
  Connection ID (0..2040),
  Virtual Connection ID Length (i)
  Virtual Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID Length</dt>
        <dd>
          <t>The length of the connection ID being registered or acknowledged, which
is between 0 and 255. Note that in QUICv1, the length of the Connection ID
is limited to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
        </dd>
        <dt>Connection ID</dt>
        <dd>
          <t>A connection ID being registered or acknowledged whose length is equal to
Connection ID Length. This is the real Target or Client Connection ID.</t>
        </dd>
        <dt>Virtual Connection ID Length</dt>
        <dd>
          <t>The length of the virtual connection ID being provided. This MUST be a valid
connection ID length for the QUIC version used in the client&lt;-&gt;proxy QUIC
connection. When forwarded mode is not negotiated, the length MUST be zero.
The Virtual Connection ID Length and Connection ID Length SHOULD be equal
when possible to avoid the need to resize packets during replacement.</t>
        </dd>
        <dt>Virtual Connection ID</dt>
        <dd>
          <t>The peer-chosen connection ID that the sender of forwarded mode packets MUST
use when sending. The endpoint rewrites forwarded mode packets to contain the
correct Connection ID prior to sending them.</t>
        </dd>
        <dt>Stateless Reset Token Length</dt>
        <dd>
          <t>The length of the stateless reset token that may be sent by the client or
proxy in response to forwarded mode packets in order to reset the
Client&lt;-&gt;Target QUIC connection. When forwarded mode is not negotiated, the
length MUST be zero. Proxies or Clients choosing not to support stateless
resets MAY set the length to zero. Clients or Proxies receiving a zero-length
stateless reset token MUST ignore it.</t>
        </dd>
        <dt>Stateless Reset Token</dt>
        <dd>
          <t>A Stateless Reset Token allowing reset of the Client&lt;-&gt;Target connection in
response to Client&lt;-&gt;Target forwarded mode packets.</t>
        </dd>
      </dl>
    </section>
    <section anchor="client-behavior">
      <name>Client Behavior</name>
      <t>A client initiates UDP proxying via a CONNECT request as defined
in <xref target="CONNECT-UDP"/>. Within its request, it includes the "Proxy-QUIC-Forwarding"
header to indicate whether or not the request should support forwarding.
If this header is not included, the client MUST NOT send any connection ID
capsules.</t>
      <t>The "Proxy-QUIC-Forwarding" is an Item Structured Header <xref target="RFC8941"/>. Its
value MUST be a Boolean. Its ABNF is:</t>
      <artwork><![CDATA[
    Proxy-QUIC-Forwarding = sf-boolean
]]></artwork>
      <t>If the client wants to enable QUIC packet forwarding for this request, it sets
the value to "?1". If it doesn't want to enable forwarding, but instead only
provide information about QUIC Connection IDs for the purpose of allowing
the proxy to share a target-facing socket, it sets the value to "?0".</t>
      <t>If the proxy supports QUIC-aware proxying, it will include the
"Proxy-QUIC-Forwarding" header in successful HTTP responses. The value
indicates whether or not the proxy supports forwarding. If the client does
not receive this header in responses, the client SHALL assume that the proxy
does not support this extension.</t>
      <t>The client sends a REGISTER_CLIENT_CID capsule whenever it advertises a new
Client Connection ID to the target, and a REGISTER_TARGET_CID capsule when
it has received a new Target Connection ID for the target. In order to change
the connection ID bytes on the wire, a client can update a previously advertised Virtual Client
Connection ID by sending a new REGISTER_CLIENT_CID with the same Connection ID,
but a different Virtual Connection ID. Similarly, the client may solicit a new
Virtual Target Connection ID by sending a REGISTER_TARGET_CID capsule with
a previously registered Target Connection ID. Clients are responsible for
changing Virtual Connection IDs when the HTTP stream's network path changes to
avoid linkability across network paths. Note that initial
REGISTER_CLIENT_CID capsules MAY be sent prior to receiving an HTTP response
from the proxy.</t>
      <section anchor="new-proxied-connection-setup">
        <name>New Proxied Connection Setup</name>
        <t>To initiate QUIC-aware proxying, the client sends a REGISTER_CLIENT_CID
capsule containing the initial Client Connection ID that the client has
advertised to the target as well as a Virtual Connection ID that the proxy MUST
use when sending forwarded mode packets. If forwarded mode is not supported,
the Virtual Connection ID Length MUST be zero.</t>
        <t>If the mapping is created successfully, the client will receive a
ACK_CLIENT_CID capsule that contains the same Client Connection ID that was
requested.</t>
        <t>Since clients are always aware whether or not they are using a QUIC proxy,
clients are expected to cooperate with proxies in selecting Client Connection
IDs. A proxy detects a conflict when it is not able to create a unique mapping
using the Client Connection ID (<xref target="conflicts"/>). It can reject requests that
would cause a conflict and indicate this to the client by replying with a
CLOSE_CLIENT_CID capsule. In order to avoid conflicts, clients SHOULD select
Client Connection IDs of at least 8 bytes in length with unpredictable values.
A client also SHOULD NOT select a Client Connection ID that matches the ID used
for the QUIC connection to the proxy, as this inherently creates a conflict.</t>
        <t>If the rejection indicated a conflict due to the Client Connection ID, the
client MUST select a new Connection ID before sending a new request, and
generate a new packet. For example, if a client is sending a QUIC Initial
packet and chooses a Connection ID that conflicts with an existing mapping
to the same target server, it will need to generate a new QUIC Initial.</t>
      </section>
      <section anchor="adding-new-client-connection-ids">
        <name>Adding New Client Connection IDs</name>
        <t>Since QUIC connection IDs are chosen by the receiver, an endpoint needs to
communicate its chosen connection IDs to its peer before the peer can start
using them. In QUICv1, this is performed using the NEW_CONNECTION_ID frame.</t>
        <t>Prior to informing the target of a new chosen client connection ID, the client
MUST send a REGISTER_CLIENT_CID capsule request containing the new Client
Connection ID and Virtual Client Connection ID.</t>
        <t>The client should only inform the target of the new Client Connection ID once an
ACK_CLIENT_CID capsule is received that contains the echoed connection ID.</t>
      </section>
      <section anchor="sending-with-forwarded-mode">
        <name>Sending With Forwarded Mode</name>
        <t>Support for forwarded mode is determined by the "Proxy-QUIC-Forwarding" header,
see <xref target="proxy-behavior"/>.</t>
        <t>Once the client has learned the target server's Connection ID, such as in the
response to a QUIC Initial packet, it can send a REGISTER_TARGET_CID capsule
containing the Target Connection ID to request the ability to forward packets.</t>
        <t>The client MUST wait for an ACK_TARGET_CID capsule that contains the echoed
connection ID and Virtual Target Connection ID before using forwarded mode.</t>
        <t>Prior to receiving the proxy server response, the client MUST send short header
packets tunnelled in HTTP Datagram frames. The client MAY also choose to tunnel
some short header packets even after receiving the successful response.</t>
        <t>If the Target Connection ID registration is rejected, for example with a
CLOSE_TARGET_CID capsule, it MUST NOT forward packets to the requested Target
Connection ID, but only use tunnelled mode. The request might also be rejected
if the proxy does not support forwarded mode or has it disabled by policy.</t>
        <t>QUIC long header packets MUST NOT be forwarded. These packets can only be
tunnelled within HTTP Datagram frames to avoid exposing unnecessary connection
metadata.</t>
        <t>When forwarding, the client sends a QUIC packet with the Virtual Target
Connection ID in the QUIC short header, using the same socket between client and
proxy that was used for the main QUIC connection between client and proxy.</t>
        <t>When forwarding, the proxy sends a QUIC packet with the Virtual Client Target
Connection ID in the QUIC short header, using the same socket between client
and proxy that was used for the main QUIC connection between client and proxy.</t>
        <t>Prior to sending a forwarded mode packet, the sender MUST replace the Connection
ID with the Virtual Connection ID. If the Virtual Connection ID is larger than
the Connection ID, the sender MUST extend the length of the packet by the
difference between the two lengths, to include the entire Virtual Connection ID.
If the Virtual Connection ID is smaller than the Connection ID, the sender MUST
shrink the length of the packet by the difference between the two lengths.</t>
        <t>Clients and proxies supporting forwarded mode MUST be able to handle Virtual
Connection IDs of different lengths than the corresponding Connection IDs.</t>
      </section>
      <section anchor="receiving-with-forwarded-mode">
        <name>Receiving With Forwarded Mode</name>
        <t>If the client has indicated support for forwarded mode with the "Proxy-QUIC-Forwarding"
header, the proxy MAY use forwarded mode for any Client Connection ID for which
it has a valid mapping.</t>
        <t>Once a client has sent "Proxy-QUIC-Forwarding" with a value of "?1", it MUST be
prepared to receive forwarded short header packets on the socket between itself
and the proxy for any Virtual Client Connection ID that it has registered with a
REGISTER_CLIENT_CID capsule. The client uses the Destination Connection ID field
of the received packet to determine if the packet was originated by the proxy,
or merely forwarded from the target. The client replaces the Virtual Client
Connection ID with the real Client Connection ID before processing the packet further.</t>
      </section>
      <section anchor="connection-maintenance-in-forwarded-mode">
        <name>Connection Maintenance in Forwarded Mode</name>
        <t>When a client and proxy are using forwarded mode, it is possible that there can be
long periods of time in which no ack-eliciting packets (see <xref section="2" sectionFormat="of" target="QUIC-RETRANSMISSION"/>) are exchanged
between the client and proxy. If these periods extend beyond the effective idle
timeout for the client-to-proxy QUIC connection (see <xref section="10.1" sectionFormat="of" target="QUIC"/>),
the QUIC connection might be closed by the proxy if the proxy does not use
forwarded packets as an explicit liveness signal. To avoid this, clients SHOULD
send keepalive packets to the proxy before the idle timeouts would be reached,
which can be done using a PING frame or another ack-eliciting frame as described
in <xref section="10.1.1" sectionFormat="of" target="QUIC"/>.</t>
      </section>
    </section>
    <section anchor="proxy-behavior">
      <name>Proxy Behavior</name>
      <t>Upon receipt of a CONNECT request that includes the "Proxy-QUIC-Forwarding"
header, the proxy indicates to the client that it supports QUIC-aware proxying
by including a "Proxy-QUIC-Forwarding" header in a successful response.
If it supports QUIC packet forwarding, it sets the value to "?1"; otherwise,
it sets it to "?0".</t>
      <t>Upon receipt of a REGISTER_CLIENT_CID or REGISTER_TARGET_CID capsule,
the proxy validates the registration, tries to establish the appropriate
mappings as described in <xref target="mappings"/>.</t>
      <t>The proxy MUST reply to each REGISTER_CLIENT_CID capsule with either
an ACK_CLIENT_CID or CLOSE_CLIENT_CID capsule containing the
Connection ID that was in the registration capsule.</t>
      <t>Similarly, the proxy MUST reply to each REGISTER_TARGET_CID capsule with
either an ACK_TARGET_CID or CLOSE_TARGET_CID capsule containing the
Connection ID that was in the registration capsule.</t>
      <t>The proxy then determines the target-facing socket to associate with the
client's request. This will generally involve performing a DNS lookup for
the target hostname in the CONNECT request, or finding an existing target-facing
socket to the authority. The target-facing socket might already be open due to a
previous request from this client, or another. If the socket is not already
created, the proxy creates a new one. Proxies can choose to reuse target-facing
sockets across multiple UDP proxying requests, or have a unique target-facing socket
for every UDP proxying request.</t>
      <t>If a proxy reuses target-facing sockets, it SHOULD store which authorities
(which could be a domain name or IP address literal) are being accessed over a
particular target-facing socket so it can avoid performing a new DNS query and
potentially choosing a different target server IP address which could map to a
different target server.</t>
      <t>Target-facing sockets MUST NOT be reused across QUIC and non-QUIC UDP proxy
requests, since it might not be possible to correctly demultiplex or direct
the traffic. Any packets received on a target-facing socket used for proxying
QUIC that does not correspond to a known Connection ID MUST be dropped.</t>
      <t>When the proxy recieves a REGISTER_CLIENT_CID capsule, it is receiving a
request to be able to route traffic matching the Client Connection ID back to
the client using the Virtual Client Connection ID. If the pair of this Client
Connection ID and the selected target-facing socket does not create a conflict,
the proxy creates the mapping and responds with a ACK_CLIENT_CID capsule. After
this point, any packets received by the proxy from the target-facing socket that
match the Client Connection ID can to be sent to the client after the proxy has
replaced the Connection ID with the Virtual Client Connection ID. The proxy MUST
use tunnelled mode (HTTP Datagram frames) for any long header packets. The proxy
SHOULD forward directly to the client for any matching short header packets if
forwarding is supported by the client, but the proxy MAY tunnel these packets in
HTTP Datagram frames instead. If the mapping would create a conflict, the proxy
responds with a CLOSE_CLIENT_CID capsule.</t>
      <t>When the proxy recieves a REGISTER_TARGET_CID capsule, it is receiving a
request to allow the client to forward packets to the target. The proxy
generates a Virtual Target Connection ID for the client to use when sending
packets in forwarded mode. If forwarded mode is not supported, the proxy MUST
NOT send a Virtual Target Connection ID by setting the length to zero. If
forwarded mode is supported, the proxy MUST use a Virtual Target Connection ID
that does not introduce a conflict with any other Connection ID on the
client-facing socket. The proxy creates the mapping and responds with an
ACK_TARGET_CID capsule. Once the successful response is sent, the proxy will
forward any short header packets received on the client-facing socket that use
the Virtual Target Connection ID using the correct target-facing socket after
first rewriting the Virtual Target Connection ID to be the correct Target
Connection ID.</t>
      <t>A proxy that supports forwarded mode but chooses not to support rewriting the
Virtual Target Connection ID to the Target Connection ID may opt to simply let
them be equal. If the proxy does wish to choose a Virtual Target Connection ID,
it MUST be able to replace the Virtual Target Connection ID with the Target
Connection ID and correctly handle length differences between the two.
Regardless of whether or not the proxy chooses to support rewriting of the
Virtual Target Connection ID, it MUST be able to support rewriting the Client
Connection ID to the Virtual Client Connection ID.</t>
      <t>If the proxy does not support forwarded mode, or does not allow forwarded mode
for a particular client or authority by policy, it can reject all REGISTER_TARGET_CID
requests with CLOSE_TARGET_CID capsule.</t>
      <t>The proxy MUST only forward non-tunnelled packets from the client that are QUIC
short header packets (based on the Header Form bit) and have mapped Virtual Target
Connection IDs. Packets sent by the client that are forwarded SHOULD be
considered as activity for restarting QUIC's Idle Timeout <xref target="QUIC"/>.</t>
      <section anchor="removing-mapping-state">
        <name>Removing Mapping State</name>
        <t>For any registration capsule for which the proxy has sent an acknowledgement, any
mappings last until either endpoint sends a close capsule or the either side of the
HTTP stream closes.</t>
        <t>A client that no longer wants a given Connection ID to be forwarded by the
proxy sends a CLOSE_CLIENT_CID or CLOSE_TARGET_CID capsule.</t>
        <t>If a client's connection to the proxy is terminated for any reason, all
mappings associated with all requests are removed.</t>
        <t>A proxy can close its target-facing socket once all UDP proxying requests mapped to
that socket have been removed.</t>
      </section>
      <section anchor="handling-connection-migration">
        <name>Handling Connection Migration</name>
        <t>If a proxy supports QUIC connection migration, it needs to ensure that a migration
event does not end up sending too many tunnelled or proxied packets on a new
path prior to path validation.</t>
        <t>Specifically, the proxy MUST limit the number of packets that it will proxy
to an unvalidated client address to the size of an initial congestion window.
Proxies additionally SHOULD pace the rate at which packets are sent over a new
path to avoid creating unintentional congestion on the new path.</t>
        <t>When operating in forwarded mode, the proxy reconfigures or removes forwarding
rules as the network path between the client and proxy changes. In the event of
passive migration, the proxy automatically reconfigures forwarding rules to use
the latest active and validated network path for the HTTP stream. In the event of
active migration, the proxy removes forwarding rules in order to not send
packets with the same connection ID bytes over multiple network paths. After
initiating active migration, clients are no longer able to send forwarded mode
packets since the proxy will have removed forwarding rules. Clients can proceed with
tunnelled mode or can request new forwarding rules via REGISTER_CLIENT_CID and
REGISTER_TARGET_CID capsules. Each of these capsules will contain new virtual
connection IDs to prevent packets with the same connection ID bytes being used
over multiple network paths. Note that the Client Connection ID and Target
Connection ID can stay the same while the Virtual Target Connection ID and
Virtual Client Connection ID change.</t>
      </section>
      <section anchor="handling-ecn-marking">
        <name>Handling ECN Marking</name>
        <t>Explicit Congestion Notification marking <xref target="ECN"/> uses two bits in the IP
header to signal congestion from a network to endpoints. When using forwarded mode,
the proxy replaces IP headers for packets exchanged between the client and target;
these headers can include ECN markings. Proxies SHOULD preserve ECN markings on
forwarded packets in both directions, to allow ECN to function end-to-end. If the proxy does not
preserve ECN markings, it MUST set ECN marks to zero on the IP headers it genrates.</t>
        <t>Forwarded mode does not create an IP-in-IP tunnel, so the guidance in
<xref target="ECN-TUNNEL"/> about transferring ECN markings between inner and outer IP
headers does not apply.</t>
        <t>A proxy MAY additionally add ECN markings to signal congestion being experienced
on the proxy itself.</t>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>Consider a client that is establishing a new QUIC connection through the proxy.
It has selected a Client Connection ID of 0x31323334. In order to inform a proxy
of the new QUIC Client Connection ID, the client also sends a
REGISTER_CLIENT_CID capsule.</t>
      <t>The client will also send the initial QUIC packet with the Long Header form in
an HTTP datagram.</t>
      <artwork><![CDATA[
Client                                             Server

STREAM(44): HEADERS             -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.com/443/
  :authority = proxy.example.org
  proxy-quic-forwarding = ?1
  capsule-protocol = ?1

STREAM(44): DATA                -------->
  Capsule Type = REGISTER_CLIENT_CID
  Connection ID = 0x31323334
  Virtual CID = 0x62646668
  Stateless Reset Token = Token

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated QUIC initial

           <--------  STREAM(44): HEADERS
                        :status = 200
                        proxy-quic-forwarding = ?1
                        capsule-protocol = ?1

           <--------  STREAM(44): DATA
                        Capsule Type = ACK_CLIENT_CID
                        Connection ID = 0x31323334

/* Wait for target server to respond to UDP packet. */

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Context ID = 0
                        Payload = Encapsulated QUIC initial

/* All Client -> Target QUIC packets must still be encapsulated  */

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated QUIC packet

/* Forwarded mode packets possible in Target -> Client direction  */

           <--------  UDP Datagram
                        Payload = Forwarded QUIC SH packet

]]></artwork>
      <t>Immediately after sending the REGISTER_CLIENT_CID capsule, the client may
receive forwarded mode packets from the proxy with a Virtual Client
Connection ID of 0x62646668 which it will replace with the real Client
Connection ID of 0x31323334. All forwarded mode packets sent by the proxy
will have been modified to contain the Virtual Client Connection ID instead
of the Client Connection ID.</t>
      <t>Once the client learns which Connection ID has been selected by the target
server, it can send a new request to the proxy to establish a mapping for
forwarding. In this case, that ID is 0x61626364. The client sends the
following capsule:</t>
      <artwork><![CDATA[
STREAM(44): DATA                -------->
  Capsule Type = REGISTER_TARGET_CID
  Connection ID = 0x61626364

           <--------  STREAM(44): DATA
                        Capsule Type = ACK_TARGET_CID
                        Connection ID = 0x61626364
                        Virtual Target Connection ID = 0x123412341234
                        Stateless Reset Token = Token

/* Client -> Target QUIC short header packets may use forwarding mode */

UDP Datagram                     -------->
  Payload = Forwarded QUIC SH packet

]]></artwork>
      <t>Upon receiving an ACK_TARGET_CID capsule, the client starts sending Short Header
packets with a Destination Connection ID of 0x123412341234 directly to the proxy
(not tunnelled), and these are rewritten by the proxy to have the Destination
Connection ID 0x61626364 prior to being forwarded directly to the target. In the
reverse direction, Short Header packets from the target with a Destination
Connection ID of 0x31323334 are modified to replace the Destination Connection
ID with the Virtual Client Connection ID of 0x62646668 and forwarded directly to
the client.</t>
    </section>
    <section anchor="packet-size-considerations">
      <name>Packet Size Considerations</name>
      <t>Since Initial QUIC packets must be at least 1200 bytes in length, the HTTP
Datagram frames that are used for a QUIC-aware proxy MUST be able to carry at least
1200 bytes.</t>
      <t>Additionally, clients that connect to a proxy for purpose of proxying QUIC
SHOULD start their connection with a larger packet size than 1200 bytes, to
account for the overhead of tunnelling an Initial QUIC packet within an
HTTP Datagram frame. If the client does not begin with a larger packet size than
1200 bytes, it will need to perform Path MTU (Maximum Transmission Unit)
discovery to discover a larger path size prior to sending any tunnelled Initial
QUIC packets.</t>
      <t>Once a proxied QUIC connections moves into forwarded mode, the client SHOULD
initiate Path MTU discovery to increase its end-to-end MTU.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Proxies that support this extension SHOULD provide protections to rate-limit
or restrict clients from opening an excessive number of proxied connections, so
as to limit abuse or use of proxies to launch Denial-of-Service attacks.</t>
      <t>Sending QUIC packets by forwarding through a proxy without tunnelling exposes
some QUIC header metadata to onlookers, and can be used to correlate packet
flows if an attacker is able to see traffic on both sides of the proxy.
Tunnelled packets have similar inference problems. An attacker on both sides
of the proxy can use the size of ingress and egress packets to correlate packets
belonging to the same connection. (Absent client-side padding, tunnelled packets
will typically have a fixed amount of overhead that is removed before their
HTTP Datagram contents are written to the target.)</t>
      <t>Since proxies that forward QUIC packets do not perform any cryptographic
integrity check, it is possible that these packets are either malformed,
replays, or otherwise malicious. This may result in proxy targets rate limiting
or decreasing the reputation of a given proxy.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-header">
        <name>HTTP Header</name>
        <t>This document registers the "Proxy-QUIC-Forwarding" header in the "Hypertext Transfer
Protocol (HTTP) Field Name Registry" &lt;<eref target="https://www.iana.org/assignments/http-fields"/>&gt;.</t>
        <figure anchor="iana-header-type-table">
          <name>Registered HTTP Header</name>
          <artwork><![CDATA[
    +-----------------------+----------+--------+---------------+
    | Header Field Name     | Protocol | Status |   Reference   |
    +-----------------------+----------+--------+---------------+
    | Proxy-QUIC-Forwarding |   http   |  exp   | This document |
    +-----------------------+----------+--------+---------------+
]]></artwork>
        </figure>
      </section>
      <section anchor="iana-capsule-types">
        <name>Capsule Types</name>
        <t>This document registers six new values in the "HTTP Capsule Types"
registry established by <xref target="HTTP-DGRAM"/>.</t>
        <table anchor="iana-capsule-type-table">
          <name>Registered Capsule Types</name>
          <thead>
            <tr>
              <th align="left">Capule Type</th>
              <th align="left">Value</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">REGISTER_CLIENT_CID</td>
              <td align="left">0xffe400</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">REGISTER_TARGET_CID</td>
              <td align="left">0xffe401</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_CLIENT_CID</td>
              <td align="left">0xffe402</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_TARGET_CID</td>
              <td align="left">0xffe403</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_CLIENT_CID</td>
              <td align="left">0xffe404</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_TARGET_CID</td>
              <td align="left">0xffe405</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <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>
        <reference anchor="INVARIANTS">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="RFC8941">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="QUIC-RETRANSMISSION">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <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="ECN">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="QUIC-LB">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author fullname="Martin Duke" initials="M." surname="Duke">
              <organization>Google</organization>
            </author>
            <author fullname="Nick Banks" initials="N." surname="Banks">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="5" month="February" year="2024"/>
            <abstract>
              <t>   QUIC address migration allows clients to change their IP address
   while maintaining connection state.  To reduce the ability of an
   observer to link two IP addresses, clients and servers use new
   connection IDs when they communicate via different client addresses.
   This poses a problem for traditional "layer-4" load balancers that
   route packets via the IP address and port 4-tuple.  This
   specification provides a standardized means of securely encoding
   routing information in the server's connection IDs so that a properly
   configured load balancer can route packets with migrated addresses
   correctly.  As it proposes a structured connection ID format, it also
   provides a means of connection IDs self-encoding their length to aid
   some hardware offloads.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-19"/>
        </reference>
        <reference anchor="ECN-TUNNEL">
          <front>
            <title>Tunnelling of Explicit Congestion Notification</title>
            <author fullname="B. Briscoe" initials="B." surname="Briscoe"/>
            <date month="November" year="2010"/>
            <abstract>
              <t>This document redefines how the explicit congestion notification (ECN) field of the IP header should be constructed on entry to and exit from any IP-in-IP tunnel. On encapsulation, it updates RFC 3168 to bring all IP-in-IP tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing. On decapsulation, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unused combinations of inner and outer headers. The new rules ensure the ECN field is correctly propagated across a tunnel whether it is used to signal one or two severity levels of congestion; whereas before, only one severity level was supported. Tunnel endpoints can be updated in any order without affecting pre-existing uses of the ECN field, thus ensuring backward compatibility. Nonetheless, operators wanting to support two severity levels (e.g., for pre-congestion notification -- PCN) can require compliance with this new specification. A thorough analysis of the reasoning for these changes and the implications is included. In the unlikely event that the new rules do not meet a specific need, RFC 4774 gives guidance on designing alternate ECN semantics, and this document extends that to include tunnelling issues. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6040"/>
          <seriesInfo name="DOI" value="10.17487/RFC6040"/>
        </reference>
      </references>
    </references>
    <?line 929?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Lucas Pardue, Ryan Hamilton, and Mirja Kühlewind for their inputs
on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81923Icx5Hoe31FH/BB5HpmCJCUVsKatiEQkhBLgjABWrGx
seHoma6ZaXOme9wXgDAFf9m+7Y9t3ura1QNKljeO4pw12NNdlZWVlffMmk6n
qiu7jT7O/vj+/HR6cps3Orts6o93ZbXK3rf4f3+4vr5U+Xze6Bt+jV9Qi7zT
q7q5O870x50q6kWVb2GgosmX3bTU3XK6zdu/9nr6175cTHf4zfTwSLX9fFu2
bVlX3d0O3j8/u/5OVf12rptjVcCYx2pRV62u2r49zrqm1wrmfa4Asvw4u27y
qt3VTaduV8fZm5OrP74/Uze66uGzLFs1db87zg74+QE84TkOfqybD7iW7/EF
fL7Nyw08Zwj/gNDO6maFv+TNYg2/rLtu1x4/fYov4qPyRs/Ma0/xwdN5U9+2
+ikP8RQ/XZXdup/Dx7T625Ug4Ok+lOB3G1h123mTht/PeNxZWe8dae+Ps3W3
3RyoD/rutm4KxNU0w1/pD5yW/gD056sm39I/+oIf0vf0V9dXld609uOsrNwg
Xd8AIbVZvtlk3Vpnt/ldVtS3Ff3I8NjJptVKqbzv1jXseTaF5xmMBdt9Pcsu
835zR0+Ynq7r7fbOewr4P85OdruNzs6rxYyetV2jNSDwbaXlp8u8+ZD9mPMn
i7IDKj3td7rpyqqeZKf5plzWTVXm2TdfHh694LfqvuqQnN9XZaeL7KrDbcnq
ZXay1U25yOktzZTT7RCgP+Q42WxRb1WwjLNZ9q4GEgaaXnlLOYNRoh/+/1gN
PvhzYwAbW9XBq1l2BSehyv9WHnjLOniV35RF9BMsLK/Kv+UdHHR45fu6XsFC
Xr8+PQjWeHD01eEhgLRbA43rvGt4sUA8B95iD97ganIgtz+V+jZc8YvDF88P
wiUfjK35wF900QrAdK7/sMKnvOjpdJrlcwAxX3RKXa/LFih50W911WWFXpYV
knkFbK8DLgXry7o6e//q0jHO+kY3zDe7dd5leVG0WbvTi3IJBFDvunIrmGkz
WAadsBLgJeYKzK/SC/pxltHcdh4FZwt4TpbzmcRpG923miZ/Me36HR5AHHHb
b7oSKScY7RxA2bS1W4Pa1oVG/OwM5IDi23W5WDMsLRzQLoN9KWA9u3zxQXdt
toClzzVOA9KiALB7EhN5pXDFT58LcE0OG9oAK6DX8Y1GT3W1yHdtjwyvgC8K
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
AAA=

-->

</rfc>
