<?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.6.2 (Ruby 3.0.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pauly-masque-quic-proxy-03" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="QUIC Proxy">QUIC-Aware Proxying Using HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-pauly-masque-quic-proxy-03"/>
    <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="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="2022" month="March" day="05"/>
    <workgroup>MASQUE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/tfpauly/quic-proxy">https://github.com/tfpauly/quic-proxy</eref>.</t>
    </note>
  </front>
  <middle>
    <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>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.</li>
        <li>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.</li>
      </ol>
      <t>Forwarding 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 forwarding mode are as follows:</t>
      <ul spacing="normal">
        <li>All packets sent between the client and the target traverse through the proxy
device.</li>
        <li>The target server cannot know the IP address of the client solely based on the
proxied packets the target receives.</li>
        <li>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.</li>
      </ul>
      <t>It is not a goal of forwarding 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 forwarding mode of this extension is only defined for HTTP/3
<xref target="HTTP3"/> and not any earlier versions of HTTP. The
forwarding mode also requires special handling in order to be compatible
with intermediaries or load balancers (see <xref target="load-balancers"/>).</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>Client: the client of all QUIC connections discussed in this document.</li>
          <li>Proxy: the endpoint that responds to the UDP proxying request.</li>
          <li>Target: the server that a client is accessing via a proxy.</li>
          <li>Client &lt;-&gt; Proxy QUIC connection: a single QUIC connection established from
the client to the proxy.</li>
          <li>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.</li>
          <li>Client-facing socket: the socket used to communicate between the client and
the proxy.</li>
          <li>Target-facing socket: the socket used to communicate between the proxy and
the target.</li>
          <li>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.</li>
          <li>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.</li>
        </ul>
      </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 forwarding 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 pair of client &lt;-&gt; proxy QUIC connection and an HTTP stream
MUST be mapped to a single target-facing socket.</t>
        <artwork><![CDATA[
(Client <-> Proxy QUIC connection + 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="target-connection-id-mapping">
        <name>Target Connection ID Mapping</name>
        <t>Each pair of Target Connection ID and client-facing socket MUST map to a single
target-facing socket.</t>
        <artwork><![CDATA[
(Client-facing socket + Target Connection ID)
    => Target-facing socket
]]></artwork>
        <t>Multiple pairs of Connection IDs and sockets can map to the same target-facing
socket.</t>
        <t>This mapping guarantees that any QUIC packet containing the Target Connection ID
sent from the client to the proxy in forwarded mode can be sent to the correct
target. 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 QUIC connection. Additionally, the
pair of Client Connection ID and target-facing socket MUST map to a single
client-facing socket.</t>
        <artwork><![CDATA[
(Target-facing socket + Client Connection ID)
    => (Client <-> Proxy QUIC connection + Stream)
(Target-facing socket + Client Connection ID)
    => Client-facing socket
]]></artwork>
        <t>Multiple pairs of Connection IDs and sockets can map to the same 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="response"/>.</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. Note that a request that doesn't contain any Connection ID is
equivalent to a request for a zero-length Connection ID, and similarly would
cause conflicts when forwarding.</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.
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>All Connection ID capsule types share the same format:</t>
      <figure anchor="fig-capsule-cid">
        <name>Connection ID Capsule Format</name>
        <artwork><![CDATA[
Connection ID Capsule {
  Type (i) = 0xffe100..0xffe103,
  Length (i),
  Connection ID (0..2040),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID:</dt>
        <dd>
          <t>A connection ID being registered or 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>
    </section>
    <section anchor="request">
      <name>Client Request 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 understand how to parse Connection ID capsules, and MUST NOT send any
Connection ID capsules.</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. Note that the
initial REGISTER_CLIENT_CID capsule 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.</t>
        <t>If the mapping is created successfully, the client will receive a
ACK_CLIENT_CID capsule that contains the same 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.</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 forwarding mode is determined by the "Proxy-QUIC-Forwarding" header,
see <xref target="response"/>.</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 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 target server's
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>
      </section>
      <section anchor="receiving-with-forwarded-mode">
        <name>Receiving With Forwarded Mode</name>
        <t>If the client has indicated support for forwarding 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 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.</t>
      </section>
    </section>
    <section anchor="response">
      <name>Proxy Response 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 back to the client using that 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. 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. If the pair of
this Target Connection ID and the client-facing socket on which the request was
received does not create a conflict, the proxy creates the mapping and responds
with a 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 Target Connection ID using the correct target-facing socket. If the pair is
not unique, the proxy responds with a CLOSE_TARGET_CID capsule. If this occurs,
traffic for that Target Connection ID can only use tunnelled mode, not forwarded.</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 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 connection ID for which the proxy has sent an acknowledgement, any
mappings for the connection ID 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>
      </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

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
]]></artwork>
      <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
]]></artwork>
      <t>Upon receiving an ACK_TARGET_CID capsule, the client starts sending Short Header
packets with a Destination Connection ID of 0x61626364 directly to the proxy
(not tunnelled), and these are forwarded directly to the target by the proxy.
Similarly, Short Header packets from the target with a Destination Connection ID
of 0x31323334 are forwarded directly to the client.</t>
    </section>
    <section anchor="load-balancers">
      <name>Interactions with Load Balancers</name>
      <t>Some QUIC servers are accessed using load balancers, as described in
<xref target="QUIC-LB"/>. These load balancers route packets to
servers based on the server's Connection ID. These Connection IDs are generated
in a way that can be coordinated between servers and their load balancers.</t>
      <t>If a proxy that supports this extension is itself running behind a load
balancer, extra complexity arises once clients start using forwarding mode and
sending packets to the proxy that have Destination Connection IDs that belong to
the target servers, not the proxy. If the load balancer is not aware of these
Connection IDs, or the Connection IDs conflict with other Connection IDs used by
the load balancer, packets can be routed incorrectly.</t>
      <t>QUIC-aware proxies that use forwarding mode generally SHOULD NOT be
run behind load balancers; and if they are, they MUST coordinate between the
proxy and the load balancer to create mappings for proxied Connection IDs prior
to the proxy ACK_CLIENT_CID or ACK_TARGET_CID capsules to clients.</t>
      <t>QUIC-aware proxies that do not allow forwarding mode can function unmodified
behind QUIC load balancers.</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, tunneled 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 "Permanent Message
Header Field Names" &lt;<eref target="https://www.iana.org/assignments/message-headers"/>&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">0xffe100</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">REGISTER_TARGET_CID</td>
              <td align="left">0xffe101</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_CLIENT_CID</td>
              <td align="left">0xffe102</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_TARGET_CID</td>
              <td align="left">0xffe103</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_CLIENT_CID</td>
              <td align="left">0xffe104</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_TARGET_CID</td>
              <td align="left">0xffe105</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>UDP Proxying Support for HTTP</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="4" month="March" year="2022"/>
            <abstract>
              <t>   This document describes how to proxy UDP over HTTP.  Similar to how
   the CONNECT method allows proxying TCP over HTTP, this document
   defines a new mechanism to proxy UDP.  It is built using HTTP
   Extended CONNECT.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-07"/>
        </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">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <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.

DO NOT DEPLOY THIS VERSION OF HTTP

   DO NOT DEPLOY THIS VERSION OF HTTP/3 UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/search/?email_list=quic.

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-http.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </reference>
        <reference anchor="INVARIANTS">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>Using Datagrams with HTTP</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="March" year="2022"/>
            <abstract>
              <t>   The QUIC DATAGRAM extension provides application protocols running
   over QUIC with a mechanism to send unreliable data while leveraging
   the security and congestion-control properties of QUIC.  However,
   QUIC DATAGRAM frames do not provide a means to demultiplex
   application contexts.  This document describes how to use QUIC
   DATAGRAM frames with HTTP/3 by association with HTTP requests.
   Additionally, this document defines the Capsule Protocol that can
   convey datagrams over prior versions of HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-06"/>
        </reference>
        <reference anchor="RFC8941">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="QUIC-LB">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author fullname="Martin Duke">
              <organization>Google</organization>
            </author>
            <author fullname="Nick Banks">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Christian Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="11" month="February" year="2022"/>
            <abstract>
              <t>   The QUIC protocol design is resistant to transparent packet
   inspection, injection, and modification by intermediaries.  However,
   the server can explicitly cooperate with network services by agreeing
   to certain conventions and/or sharing state with those services.
   This specification provides a standardized means of solving three
   problems: (1) maintaining routability to servers via a low-state load
   balancer even when the connection IDs in use change; (2) explicit
   encoding of the connection ID length in all packets to assist
   hardware accelerators; and (3) injection of QUIC Retry packets by an
   anti-Denial-of-Service agent on behalf of the server.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-12"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Lucas Pardue, Ryan Hamilton, and Mirja Kuehlewind for their inputs
on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAEi0ImIAA7VdW3Mbx5V+71/RSz5EigGKlGRvzETO0iRtsyJRDEnFtZVK
uZpAg+xoMIPMDEjBFPPL9m3/2J5b3wYNyt4orq0sBcx0nz59rt853RiPx6p3
fWX39Z/fnRyOD+5Ma/VZ23xYufpav+vwf3+4vDxT5uqqtbf8GD+gps2kNnN4
ddqaWT9emGW1Gs9N94+lHf9j6SbjBT423n2hJqa310272tf2w0LdXe/rNwcX
f353rJRbtPu6b5dd/3x39+vd5+q9Xd017XRfn9S9bWvbj49wdKW63tTTn0zV
1DDjynZq4fb1X/tmMtJd0/atnXXw12qOf/xNKbPsb5p2X+mx0vCfq7t9fbmj
z5BI+oRJv2zm81XyadMCcQeLRWWBgMkOfdbB4Lbf129rK1+dmfa9/tHwKxPX
w8IOlwvb9q5uRvrQVG7WtLUz+usvd/de8lPNsu6RA+9q19upvuiBJ51uZvpg
bls3MfSUnRtXAUOIl/9lcLKdSTNX2TK2jnb0xeTG1eZnt5WsZevI3Lrp4CtY
kKndz6Z3TQ2PfN8017CA168Pt7K1be19tbsLpCxuXH9jTd/yIu/MaitZ5NYb
XIVxtf6Ls3f5Sl/uvnyxlS91a9Nat9LFTjsheMfZfvZf1/gpL3o8HmtzBSSa
CQjA5Y3rNMjccm7rXk/tzNUwqKlBpnpbd7A+3Tf63dFZlN/m1rYsvv2N6bWZ
TjvdLezEzdxEN4vezYUznYZlaJRXB/SSjE+aurYT+nJH09xhHmWqqrmDuemN
FU7b2mVnafKX434J28YjzpdV71BistFOgJSqa+Ia1LyZWuTPwlMOLL67cZMb
pqUDUe417MsU1rMwk/e27/QEln5lcRpQ2imQvSRtNbXCFT97IcS1Bja01cAA
fByfaO3Y1hOz6JaVwe0BvZLP2tUCPthhzs/ddFpZpbZRFdtmuiTy9f22S/75
oFSZ4/r+/j8O356eHh9ejuGJVyfjI9pfbyCEIePldPHwoAInNEgc8rOzQNTU
9Oa6NfMOqG+b5fUN7jYNTksbAYtsy1yH7YENmOKrIDrzZe3Q5qgr299ZC4Jx
Y4UduFije9Ne2x5maYFe2V7hpx+GH0f2q2TzcFn42avz7w6/3t3dfXgAo+Pq
ieWNapfwCPEAiQr07wylFybpiCiwcXO9xeRssSDNcLca+pbp0yy8elI5fNd1
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
ycHAP0XcKQ9EBvEHZxRcZyGyBzTnQw0hLDqeVW/yPi4JJtY9kQVGrOM51Koj
wo+JVTw8pN80UwuSFJOftYYwQf6R9/EcyONB60gx4pXVzN5K63bivvnsg83O
grC+/KYbGg9w2jdosLjPUIUYhnDxVHvEFJDGkVDaT0Vq6hc0XnAk5fF7LHQ6
OgwHHwvD4lmzTBhI4u6ME9B+iNE8ElXwXuZFM692rDqDEnWiLTHoS8J/bkf2
nFtPX4lTab1LhcMxoVzral1q5ONMxA8GYSj5sVhr4QEUNQYXz0FjrUubWU8E
prQnyY+nPHqk4k6loFaEvzBfn0XnkAcF6/tB4hPSj8EWezcXYjshRA1kFpNX
sgLUp5k1XDHDvETN3fWN+P4rGwhWWS9BSKQGSIXvyKGTlh2l1XwChntXG3BZ
K9/JufHgIi4y7a0cHvqjozwM/qq1xs9iZ2cIpSA6bUha8TXcStOm4Iia295g
lyfQ+GNekSpmEyn6ECogA9sxyBLToyGp8I0SD8S9KdyNMTgF5Q8CrkJQHys4
nGEILJea3fUx0iTrPIh40RznOTntagi4urKpDqx4HBRLuyD8GdT1g1JcjCw5
J/ySMFCf2BoMYWGXY8PXWzleHImnfHSTx5AOF0ZVwDciPhSV7wrbZ+3CyHEB
n5tFkovGxLf65tvJ57RVfpTt0dUy5uoz+IAKi+l4JH7IzGE4ufKJ3njV+DBb
3LtIOZ5p8w44tBeJApgutklMszLRCEshc6C3WiXsGpwNIIyXy7rn3qFmGK/4
b6XewR9M2ULCriGgKwD1L8Zns578AF4NiluyAY+haupqJdNybP9pPM2UnQpj
ktlU6zDnRixwb+v38dQuVV7oKddHqLDAxJIMAesfCVbSvm9SPWYbyU30eyPs
R2N2hpNBHLcs8HRviwCOSjtAssNe9/fhiMVD1j5COkl5NY2MjZuPgmyoKFw6
U2u1LlznppR8EHerglrehVgwd/heAzE9kv6HzOg9soIShocrUL76txa8hSUU
Xv0cS4ic79E1BjOQHlcedHbSoSr426UnT9Sww016rygj5Uy0omTltqlurU/R
WJ+OTi8gbmjeLxd0hjZxt3gZCV5a5BcxsAhUzJw5ybmTbLnYAimKzzc+QWS9
kxz4HizRR0staDSVo7G/0sMP1LQG9msZ1uqNHiKA0vIZb00JALiM7REuHlwJ
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
56ayWDj0yQU2rdTgUSDaWPupjv8DsYRk1fR2AAA=

-->

</rfc>
