<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.13 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pauly-masque-quic-proxy-00" category="exp" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.2.1 -->
  <front>
    <title abbrev="QUIC Proxy">QUIC-Aware Proxying Using CONNECT-UDP</title>
    <seriesInfo name="Internet-Draft" value="draft-pauly-masque-quic-proxy-00"/>
    <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="2020" month="October" day="18"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines an extension to the CONNECT-UDP HTTP method that adds
specific optimizations for QUIC connections that are proxied. 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 through the
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" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The CONNECT-UDP HTTP method <xref target="CONNECT-UDP" format="default"/> 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" format="default"/>, 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 CONNECT-UDP HTTP method 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>This extension is only defined for HTTP/3 <xref target="HTTP3" format="default"/> and not
any earlier versions.</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 CONNECT-UDP.</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" format="default"/> 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>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" format="default"/>,
QUIC proxies can proxy all versions of QUIC.</t>
      <section anchor="conventions" numbered="true" toc="default">
        <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" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
      </section>
      <section anchor="terminology" numbered="true" toc="default">
        <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 CONNECT-UDP 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>Datagram flow ID: represents a flow of HTTP/3 DATAGRAMs
<xref target="H3DGRAM" format="default"/> specific to a single client &lt;-&gt; proxy
QUIC connection.</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>Server-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>Server 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" numbered="true" toc="default">
      <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 server-facing sockets for multiple
connections and support the forwarding mode of proxying.</t>
      <t>QUIC packets can be either tunnelled within an HTTP/3 proxy connection using
QUIC DATAGRAM frames <xref target="DGRAM" format="default"/>, 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="datagram-flow-id-mapping" numbered="true" toc="default">
        <name>Datagram Flow ID Mapping</name>
        <t>Each pair of client &lt;-&gt; proxy QUIC connection and datagram flow ID MUST be
mapped to a single server-facing socket.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
(Client <-> Proxy QUIC connection + Datagram flow ID)
    => Server-facing socket
]]></artwork>
        <t>Multiple datagram flow IDs can map to the same server-facing socket, but a
single datagram flow ID cannot be mapped to multiple server-facing sockets.</t>
        <t>This mapping guarantees that any QUIC packet using the datagram flow ID sent
from the client to the proxy in tunnelled mode can be sent to the correct
target.</t>
      </section>
      <section anchor="server-connection-id-mapping" numbered="true" toc="default">
        <name>Server Connection ID Mapping</name>
        <t>Each pair of Server Connection ID and client-facing socket MUST map to a single
server-facing socket.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
(Client-facing socket + Server Connection ID)
    => Server-facing socket
]]></artwork>
        <t>Multiple pairs of Connection IDs and sockets can map to the same server-facing
socket.</t>
        <t>This mapping guarantees that any QUIC packet containing the Server 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" numbered="true" toc="default">
        <name>Client Connection ID Mappings</name>
        <t>Each pair of Client Connection ID and server-facing socket MUST map to a single
datagram flow ID on a single client &lt;-&gt; proxy QUIC connection. Additionally, the
pair of Client Connection ID and server-facing socket MUST map to a single
client-facing socket.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
(Server-facing socket + Client Connection ID)
    => (Client <-> Proxy QUIC connection + Datagram flow ID)
(Server-facing socket + Client Connection ID)
    => Client-facing socket
]]></artwork>
        <t>Multiple pairs of Connection IDs and sockets can map to the same datagram flow
ID 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 server-facing
socket for every client request with a unique datagram flow ID. The mapping is
critical for any case where server-facing sockets are shared or reused.</t>
      </section>
      <section anchor="conflicts" numbered="true" toc="default">
        <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" format="default"/>.</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>
    <section anchor="connection-id-headers-for-connect-udp" numbered="true" toc="default">
      <name>Connection ID Headers for CONNECT-UDP</name>
      <t>This document defines two headers that can be used in CONNECT-UDP requests
and responses. All other requirements defined for CONNECT-UDP <xref target="CONNECT-UDP" format="default"/>
still apply.</t>
      <t>Both "Client-Connection-Id" and "Server-Connection-Id" are Item Structured
Headers <xref target="STRUCT" format="default"/>.  Their value MUST be a
Byte Sequence. The byte sequence MAY be zero-length. The byte sequence length
MUST NOT exceed 255 bytes. The ABNF is:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
   Client-Connection-Id = sf-binary
   Server-Connection-Id = sf-binary
]]></artwork>
      <t>"Client-Connection-Id" contains the client connection ID, whereas
"Server-Connection-Id" contains the server connection ID.</t>
      <t>Like the Datagram-Flow-Id header <xref target="CONNECT-UDP" format="default"/>, the Client-Connection-Id and
Server-Connection-Id headers can only be supported by an HTTP/3 proxy. If a
proxy does not support HTTP/3 datagrams <xref target="H3DGRAM" format="default"/>, or it does not support the
extension defined in this document, it MUST NOT send the Client-Connection-Id
and Server-Connection-Id headers on any responses. If a proxy does support this
extension, it MUST echo the Client-Connection-Id and Server-Connection-Id
headers on any 2xx (Successful) responses. Clients that do not receive an echoed
Client-Connection-Id or Server-Connection-Id header MUST fall back to using
CONNECT-UDP without the extended behavior defined in this document.</t>
    </section>
    <section anchor="request" numbered="true" toc="default">
      <name>Client Request Behavior</name>
      <t>A client sends new CONNECT-UDP requests when it wants to start
a new QUIC connection to a target, when it has received a new
Server Connection ID for the target, and before it advertises a new Client
Connection ID to the target.</t>
      <t>Each request MUST contain a Datagram-Flow-Id header and an authority
pseudo-header identifying the target. All requests for the same QUIC
Connection between a client and a target MUST contain the same authority,
and SHOULD contain the same Datagram-Flow-Id. If there is Datagram-Flow-Id
mismatch, the proxy will treat the requests as different proxied connections,
which could appear as a migration or NAT rebinding event to the target.</t>
      <t>Each request MUST also contain exactly one connection ID header, either
Client-Connection-Id or Server-Connection-Id. Client-Connection-Id requests
define paths for receiving packets from the target server to the client, and
Server-Connection-Id requests define paths for sending packets from the client
to target server.</t>
      <section anchor="new-proxied-connection-setup" numbered="true" toc="default">
        <name>New Proxied Connection Setup</name>
        <t>The first time that a client uses a proxy for a given QUIC connection, it
selects a new datagram flow ID with an even-numbered value <xref target="H3DGRAM" format="default"/>.</t>
        <t>The first request the clients makes MUST contain the authority pseudo-header,
the Datagram-Flow-Id header, and the Client-Connection-Id header. These
respectively contain the authority of the target, the selected datagram
flow ID and the Client Connection ID that will be used in the initial QUIC
packets sent through the proxy.</t>
        <t>The client can start sending packets tunnelled within DATAGRAM frames as soon as
this first CONNECT-UDP request for the datagram flow ID has been sent, even in
the same QUIC packet to the proxy. That is, the QUIC packet sent from the client
to the proxy MAY contain a STREAM frame containing the CONNECT-UDP request, as
well as a DATAGRAM frame that contains a tunnelled QUIC packet to send to the
target. This is particularly useful for reducing round trips on connection
setup.</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" format="default"/>). It can reject requests that
would cause a conflict and indicate this to the client by replying with a 409
(Conflict) status. 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>Note that packets sent in DATAGRAM frames before the proxy has sent its
CONNECT-UDP response might be dropped if the proxy rejects the request.
Specifically, this can occur if the Client Connection ID causes a conflict and
the proxy returns a 409 (Conflict) error. Any DATAGRAM frames that are sent in a
separate QUIC packet from the STREAM frame that contains the CONNECT-UDP request
might also be dropped in the case that the packet arrives at the proxy before
the packet containing the STREAM frame.</t>
        <t>If the server rejects the first request that uses a specific datagram flow ID,
the client MUST retire that datagram flow ID. 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" numbered="true" toc="default">
        <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 CONNECT-UDP request with the Client-Connection-Id header to the
proxy, and only inform the target of the new client connection ID once a 2xx
(Successful) response is received.</t>
      </section>
      <section anchor="sending-with-forwarded-mode" numbered="true" toc="default">
        <name>Sending With Forwarded Mode</name>
        <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 request containing the
Server-Connection-Id header to request the ability to forward packets. The
client MUST wait for a successful (2xx) response before using forwarded mode.
Prior to receiving the server response, the client MUST send short header
packets tunnelled in DATAGRAM frames. The client MAY also choose to tunnel some
short header packets even after receiving the successful response.</t>
        <t>If the client's request that included the Server-Connection-Id is rejected, for
example with a 409 (Conflict) response, it MUST NOT forward packets to the
requested Server 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. For any response code other than a 2xx success, the client MUST NOT
retry a request for the same Server Connection ID. For errors other than 409
(Conflict), clients SHOULD stop sending requests for other Server Connection IDs
in the future.</t>
        <t>QUIC long header packets MUST NOT be forwarded. These packets can only be
tunnelled within 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" numbered="true" toc="default">
        <name>Receiving With Forwarded Mode</name>
        <t>A proxy MUST NOT forward packets from the target to the client until after the
client has sent at least one packet in forwarded mode. Once this occurs, the
proxy MAY use forwarded mode for any Client Connection ID for which it has a
valid mapping.</t>
        <t>If a client has started using forwarding mode, it MUST be prepared to receive
forwarded short header packets on the socket between itself and the proxy for
any Client Connection ID that has been accepted by the proxy. The client uses
the received Connection ID to determine if a packet was originated by the
proxy, or merely forwarded from the target.</t>
      </section>
      <section anchor="opting-out-of-forwarded-mode" numbered="true" toc="default">
        <name>Opting Out of Forwarded Mode</name>
        <t>The use of forwarded mode is initiated by the client sending a request with the
Server-Connection-Id header and sending at least one forwarded packet to the
proxy. A client that does not wish to accept forwarded packets from the proxy
when communicating with a specific target can simply not start forwarding
packets to the proxy.</t>
      </section>
    </section>
    <section anchor="response" numbered="true" toc="default">
      <name>Proxy Response Behavior</name>
      <t>Upon receipt of a CONNECT-UDP request that contains a Client-Connection-Id or
Server-Connection-Id header, the proxy validates the request, tries to
establish the appropriate mappings as described in <xref target="mappings" format="default"/>, and
establishes a new server-facing socket if necessary.</t>
      <t>The proxy MUST validate that the request only contains one of either the
Client-Connection-Id or the Server-Connection-Id header, along with a
Datagram-Flow-Id header and an authority pseudo-header. If any of these
conditions is not met, the proxy MUST reject the request with a 400 (Bad
Request) response. The proxy also MUST reject the request if the requested
datagram flow ID has already been used on that client &lt;-&gt; proxy QUIC connection
with a different requested authority.</t>
      <t>The proxy then determines the server-facing socket to associate with the
client's datagram flow. This will generally involve performing a DNS lookup for
the hostname in the request authority, or finding an existing server-facing
socket to the authority. The server-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 server-facing
sockets across multiple datagram flows, or have a unique server-facing socket
for every datagram flow.</t>
      <t>If a proxy reuses server-facing sockets, it SHOULD store which authorities
(which could be a domain name or IP address literal) are being accessed over a
particular server-facing socket so it can avoid performing a new DNS query and
potentially choosing a different server IP address which could map to a
different server.</t>
      <t>If the request includes a Client-Connection-Id header, the proxy 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 server-facing socket
does not create a conflict, the proxy creates the mapping and responds with a
200 (OK) response. After this point, any packets received by the proxy from the
server-facing socket that match the Client Connection ID can to be sent to the
client. The proxy MUST use tunnelled mode (DATAGRAM frames) on the correct
datagram flow for any long header packets. The proxy SHOULD forward directly to
the client for any matching short header packets, but MAY tunnel them in
DATAGRAM frames. If the pair is not unique, or the proxy chooses not to support
zero-length Client Connection IDs, the proxy responds with a 409 (Conflict)
response. If this occurs on the first request for a given datagram flow, the
proxy removes any mapping for that datagram flow.</t>
      <t>If the request includes a Server-Connection-Id header, the proxy is receiving a
request to allow the client to forward packets to the target. If the pair of
this Server 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 200 (OK) response. Once the successful response is sent, the proxy will
forward any short header packets received on the client-facing socket that use
the Server Connection ID using the correct server-facing socket. If the pair is
not unique, the server responds with a 409 (Conflict) response. If this occurs,
traffic for that Server 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 requests that
include the Server-Connection-Id header with a response to indicate the error,
such as 403 (Forbidden).</t>
      <t>Any successful (2xx) response MUST also echo any Client-Connection-Id,
Server-Connection-Id, and Datagram-Flow-Id headers included in the request.</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 Server
Connection IDs. Packets sent by the client that are forwarded SHOULD be
considered as activity for restarting QUIC's Idle Timeout <xref target="QUIC" format="default"/>.</t>
      <section anchor="removing-mapping-state" numbered="true" toc="default">
        <name>Removing Mapping State</name>
        <t>Each CONNECT-UDP request consumes one bidirectional HTTP/3 stream <xref target="HTTP3" format="default"/>.
For any stream on which the proxy has sent a response indicating success, any
mappings for the request last as long as the stream is open.</t>
        <t>A client that no longer wants a given Connection ID to be forwarded by the
proxy, for either direction, MUST cancel its CONNECT-UDP HTTP/3 request by
closing the corresponding stream.</t>
        <t>If the proxy rejects a CONNECT-UDP request by sending a status code of 300 or
higher, it MUST close the corresponding stream and remove any associated
mappings.</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 server-facing socket once all datagram flows mapped to
that socket have been removed.</t>
      </section>
    </section>
    <section anchor="example" numbered="true" toc="default">
      <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. It selects the next open
datagram flow ID (2). In order to inform a proxy of the new QUIC Client
Connection ID, and binds that connection ID to datagram flow ID 2, the client
sends the following CONNECT-UDP request:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
HEADERS
:method = CONNECT-UDP
:authority = target.example.com:443
client-connection-id = :MTIzNA==:
datagram-flow-id = 2
]]></artwork>
      <t>The client will also send the initial QUIC packet with the Long Header form in
a DATAGRAM frame with flow ID 2.</t>
      <t>Once the proxy sends a 200 response indicating success, packets received by the
proxy that match the Connection ID 0x31323334 will be directly forwarded to the
client. The proxy will also forward the initial QUIC packet received on DATAGRAM
flow ID 2 to target.example.com:443.</t>
      <t>When the proxy receives a response from target.example.com:443 that has
0x31323334 as the Destination Connection ID, the proxy will forward that packet
to the client on DATAGRAM flow ID 2.</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. In this
case, that ID is 0x61626364. The client sends the following request:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
HEADERS
:method = CONNECT-UDP
:authority = target.example.com:443
server-connection-id = :YWJjZA==:
datagram-flow-id = 2
]]></artwork>
      <t>The client also sends its reply to the target server in a DATAGRAM frame on flow
ID 2 after sending the new request.</t>
      <t>Once the proxy sends a 200 response indicating success, packets sent by the
client that match the Connection ID 0x61626364 will be forwarded to the target
server, i.e., without proxy decryption.</t>
      <t>Upon receiving the response, 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="interactions-with-load-balancers" numbered="true" toc="default">
      <name>Interactions with Load Balancers</name>
      <t>Some QUIC servers are accessed using load balancers, as described in
<xref target="QUIC-LB" format="default"/>. 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 end 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 CONNECT-UDP 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 sending 2xx (Successful) responses to clients.</t>
      <t>QUIC-aware CONNECT-UDP proxies that do not allow forwarding mode can function
unmodified behind QUIC load balancers.</t>
    </section>
    <section anchor="security" numbered="true" toc="default">
      <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 packets
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
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" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="iana-header" numbered="true" toc="default">
        <name>HTTP Headers</name>
        <t>This document registers the "Client-Connection-Id" and "Server-Connection-Id"
headers in the "Permanent Message Header Field Names"
&lt;<eref target="https://www.iana.org/assignments/message-headers"/>&gt;.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  +----------------------+----------+--------+---------------+
  | Header Field Name    | Protocol | Status |   Reference   |
  +----------------------+----------+--------+---------------+
  | Client-Connection-Id |   http   |  exp   | This document |
  +----------------------+----------+--------+---------------+
  | Server-Connection-Id |   http   |  exp   | This document |
  +----------------------+----------+--------+---------------+
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CONNECT-UDP" target="http://www.ietf.org/internet-drafts/draft-ietf-masque-connect-udp-00.txt">
          <front>
            <title>The CONNECT-UDP HTTP Method</title>
            <author initials="D" surname="Schinazi" fullname="David Schinazi">
              <organization/>
            </author>
            <date month="August" day="28" year="2020"/>
            <abstract>
              <t>This document describes the CONNECT-UDP HTTP method.  CONNECT-UDP is similar to the HTTP CONNECT method, but it uses UDP instead of TCP.  Discussion of this work is encouraged to happen on the MASQUE IETF mailing list masque@ietf.org or on the GitHub repository which contains the draft: https://github.com/DavidSchinazi/masque-drafts.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-00"/>
        </reference>
        <reference anchor="QUIC" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-transport-31.txt">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author initials="J" surname="Iyengar" fullname="Jana Iyengar">
              <organization/>
            </author>
            <author initials="M" surname="Thomson" fullname="Martin Thomson">
              <organization/>
            </author>
            <date month="September" day="24" year="2020"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. Accompanying documents describe QUIC's loss detection and congestion control and the use of TLS for key negotiation.  Note to Readers  Discussion of this draft takes place on the QUIC working group mailing list (quic@ietf.org (mailto: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/-transport.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-transport-31"/>
        </reference>
        <reference anchor="HTTP3" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-http-31.txt">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author initials="M" surname="Bishop" fullname="Mike Bishop">
              <organization/>
            </author>
            <date month="September" day="24" year="2020"/>
            <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="Internet-Draft" value="draft-ietf-quic-http-31"/>
        </reference>
        <reference anchor="INVARIANTS" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-invariants-11.txt">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author initials="M" surname="Thomson" fullname="Martin Thomson">
              <organization/>
            </author>
            <date month="September" day="24" year="2020"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are expected to remain unchanged over time as new versions of the protocol are developed.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-invariants-11"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="H3DGRAM" target="http://www.ietf.org/internet-drafts/draft-schinazi-quic-h3-datagram-05.txt">
          <front>
            <title>Using QUIC Datagrams with HTTP/3</title>
            <author initials="D" surname="Schinazi" fullname="David Schinazi">
              <organization/>
            </author>
            <date month="October" day="12" year="2020"/>
            <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 defines how to use QUIC DATAGRAM frames when the application protocol running over QUIC is HTTP/3 by adding an identifier at the start of the frame payload.  Discussion of this work is encouraged to happen on the QUIC IETF mailing list (quic@ietf.org (mailto:quic@ietf.org)) or on the GitHub repository which contains the draft: https://github.com/DavidSchinazi/draft-h3-datagram.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schinazi-quic-h3-datagram-05"/>
        </reference>
        <reference anchor="DGRAM" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-datagram-01.txt">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author initials="T" surname="Pauly" fullname="Tommy Pauly">
              <organization/>
            </author>
            <author initials="E" surname="Kinnear" fullname="Eric Kinnear">
              <organization/>
            </author>
            <author initials="D" surname="Schinazi" fullname="David Schinazi">
              <organization/>
            </author>
            <date month="August" day="24" year="2020"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.  Discussion of this work is encouraged to happen on the QUIC IETF mailing list quic@ietf.org (mailto:quic@ietf.org) or on the GitHub repository which contains the draft: https://github.com/quicwg/ datagram (https://github.com/quicwg/datagram).</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-datagram-01"/>
        </reference>
        <reference anchor="STRUCT" target="http://www.ietf.org/internet-drafts/draft-ietf-httpbis-header-structure-19.txt">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author initials="M" surname="Nottingham" fullname="Mark Nottingham">
              <organization/>
            </author>
            <author initials="P" surname="Kamp" fullname="Poul-Henning Kamp">
              <organization/>
            </author>
            <date month="June" day="3" year="2020"/>
            <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="Internet-Draft" value="draft-ietf-httpbis-header-structure-19"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="QUIC-LB" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-load-balancers-04.txt">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author initials="M" surname="Duke" fullname="Martin Duke">
              <organization/>
            </author>
            <author initials="N" surname="Banks" fullname="Nick Banks">
              <organization/>
            </author>
            <date month="August" day="14" year="2020"/>
            <abstract>
              <t>QUIC connection IDs allow continuation of connections across address/ port 4-tuple changes, and can store routing information for stateless or low-state load balancers.  They also can prevent linkability of connections across deliberate address migration through the use of protected communications between client and server.  This creates issues for load-balancing intermediaries.  This specification standardizes methods for encoding routing information given a small set of configuration parameters.  This framework also enables offload of other QUIC functions to trusted intermediaries, given the explicit cooperation of the QUIC server.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-04"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>Thanks to Lucas Pardue, Ryan Hamilton, and Mirja Kuehlewind for their inputs
on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAEX+jF8AA71dW3Mbx5V+718xoR4ilQFYohRvzI2yoS6OuZEorkjFlU2l
Ug1Mg2wLmEFmBqRghvll+7Z/bM+1LzMDyk5cm0olEDDTffr0uX7ndHM6nZrO
dyt3VPzXh5OX0+Mb27jirKk/7Xx1WXxo8X9fvjs9ff3yYvrh1Zmx83njrvlp
fs6U9aKyaxihbOyym27sdrWbrm37t62b/m3rF9MNPjZ9/NgsbOcu62Z3VLhP
G2P8pjkqumbbdoePH3/9+NB8dLubuimPipOqc03luukrHNKYtrNV+Ve7qiuY
Zudas/FHxZ+7ejEp2rrpGrds4dNujR/+Yozddld1c2SKqSngP75qj4qLWXGG
lNE3TO9FvV7vkm/r5vKoON5sVg4IWMzouxYGd91R8a5y8tOZbT4W31l+ZeE7
WM3L7cY1na/qSfHSrvyybipvi69/9fjJM36q3lYdLvtD5TtXFucdMKIt6mVx
vHaNX1h6yq2tXwFDiIG/szjZbFGvTbaMg1ez4nxx5Sv7gz9I1nLwyl77svcT
LMhW/gfb+bqCR35f15ewgDdvXh5kazt48tXjx0DK5sp3V852DS/yxu4OkkUe
vMVVWF8Vf/TuJl/ps8fPnh7kSz3Yt9aDdLFlKwTPvOuWv7vEb3nR0+m0sHMg
0S5AAC6ufFuAoG3XruqK0i19BYPaCgSpc1UL6yu6ugDqU2Etvr24OCvWDoSh
hN9sV9iybE27cQu/9Iui3nR+LexpC1gLS/Wiriq34C/5LWAIyrB35awgSsKs
xq5W9Q1QQg/skIjGbVtX4PTPpt0WNpGHXm9XnUf5SYafFScw+qqt44rMui4d
cmujOggMv7nyiysmrgXB7grYpdI1xcYuPrquLRbAiLnDaUB9S4eLbert5RUy
xDBhjYXPDa4HH8VxGzd11cJu2u3K4kaBhsl3zW4DX8x4D9a+LFfOmAeolE1d
bon04vaBT/55hzu0n/e3t79Ifnp+Mn1F261GQjgy3ZabuztlhbEFCCAytHVA
WWk7e9nYdRvWBguhOWh9E+CRa5jtsD+wAyW+CpK03lYe7Y6Zu+7GuYqEhHmC
K7ZFZ5tL18EszbVrZH+FoToMP478N6lwwLLwu7gesnYgsVW7gV26uwOb5KuF
451rtvBKDXMgkSasZ9YXbpi0JSLBBK6LAybvgCVriVvIcs70ioAWi5XHdz2w
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
8CKDyzH+D6Xz3bWMcAAA

-->

</rfc>
