<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.27 (Ruby 3.1.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-ip-09" category="std" consensus="true" submissionType="IETF" updates="9298" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.0 -->
  <front>
    <title>Proxying IP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-09"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly" role="editor">
      <organization>Apple Inc.</organization>
      <address>
        <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</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Chernyakhovsky" fullname="Alex Chernyakhovsky">
      <organization>Google LLC</organization>
      <address>
        <email>achernya@google.com</email>
      </address>
    </author>
    <author initials="M." surname="Kuehlewind" fullname="Mirja Kuehlewind">
      <organization>Ericsson</organization>
      <address>
        <email>mirja.kuehlewind@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Westerlund" fullname="Magnus Westerlund">
      <organization>Ericsson</organization>
      <address>
        <email>magnus.westerlund@ericsson.com</email>
      </address>
    </author>
    <date year="2023" month="April" day="06"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>VPN</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in udp in IP in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <t>This document describes how to proxy IP packets in HTTP. This protocol is
similar to UDP proxying in HTTP, but allows transmitting arbitrary IP packets.
More specifically, this document defines a protocol that allows an HTTP client
to create an IP tunnel through an HTTP server that acts as an IP proxy. This
document updates RFC 9298.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-masque.github.io/draft-ietf-masque-connect-ip/draft-ietf-masque-connect-ip.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-connect-ip/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-connect-ip"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP provides the CONNECT method (see <xref section="9.3.6" sectionFormat="of" target="HTTP"/>) for
creating a TCP <xref target="TCP"/> tunnel to a destination and a similar mechanism
for UDP <xref target="CONNECT-UDP"/>. However, these mechanisms cannot tunnel other
IP protocols <xref target="IANA-PN"/> nor convey fields of the IP header.</t>
      <t>This document describes a protocol for tunnelling IP through an HTTP server
acting as an IP-specific proxy over HTTP. This can be used for various use
cases such as remote access VPN, site-to-site VPN, secure point-to-point
communication, or general-purpose packet tunnelling.</t>
      <t>IP proxying operates similarly to UDP proxying <xref target="CONNECT-UDP"/>,
whereby the proxy itself is identified with an absolute URL, optionally
containing the traffic's destination. Clients generate these URLs using a URI
Template <xref target="TEMPLATE"/>, as described in <xref target="client-config"/>.</t>
      <t>This protocol supports all existing versions of HTTP by using HTTP Datagrams
<xref target="HTTP-DGRAM"/>. When using HTTP/2 <xref target="H2"/> or HTTP/3 <xref target="H3"/>, it uses
HTTP Extended CONNECT as described in <xref target="EXT-CONNECT2"/> and
<xref target="EXT-CONNECT3"/>. When using HTTP/1.x <xref target="H1"/>, it uses HTTP Upgrade as
defined in <xref section="7.8" sectionFormat="of" target="HTTP"/>.</t>
      <t>This document updates <xref target="CONNECT-UDP"/> to change the "masque" well-known URI,
see <xref target="iana-uri"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>In this document, we use the term "IP proxy" to refer to the HTTP server that
responds to the IP proxying request. If there are HTTP intermediaries (as
defined in <xref section="3.7" sectionFormat="of" target="HTTP"/>) between the client and the proxy, those are
referred to as "intermediaries" in this document.</t>
      <t>This document uses terminology from <xref target="QUIC"/>. Where this document
defines protocol types, the definition format uses the notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>. This specification uses the variable-length integer encoding
from <xref section="16" sectionFormat="of" target="QUIC"/>. Variable-length integer values do not
need to be encoded in the minimum number of bytes necessary.</t>
      <t>Note that, when the HTTP version in use does not support multiplexing streams
(such as HTTP/1.1), any reference to "stream" in this document represents the
entire connection.</t>
    </section>
    <section anchor="client-config">
      <name>Configuration of Clients</name>
      <t>Clients are configured to use IP proxying over HTTP via a URI Template
<xref target="TEMPLATE"/>. The URI Template <bcp14>MAY</bcp14> contain two variables: "target" and
"ipproto"; see <xref target="scope"/>. The optionality of the variables needs to be
considered when defining the template so that either the variable is
self-identifying or it is possible to exclude it in the syntax.</t>
      <t>Examples are shown below:</t>
      <figure anchor="fig-template-examples">
        <name>URI Template Examples</name>
        <artwork><![CDATA[
https://example.org/.well-known/masque/ip/{target}/{ipproto}/
https://proxy.example.org:4443/masque/ip?t={target}&i={ipproto}
https://proxy.example.org:4443/masque/ip{?target,ipproto}
https://masque.example.org/?user=bob
]]></artwork>
      </figure>
      <t>The following requirements apply to the URI Template:</t>
      <ul spacing="normal">
        <li>The URI Template <bcp14>MUST</bcp14> be a level 3 template or lower.</li>
        <li>The URI Template <bcp14>MUST</bcp14> be in absolute form, and <bcp14>MUST</bcp14> include non-empty scheme,
authority and path components.</li>
        <li>The path component of the URI Template <bcp14>MUST</bcp14> start with a slash "/".</li>
        <li>All template variables <bcp14>MUST</bcp14> be within the path or query components of the URI.</li>
        <li>The URI Template <bcp14>MAY</bcp14> contain the two variables "target" and "ipproto" and <bcp14>MAY</bcp14>
contain other variables. If the "target" or "ipproto" variables are included,
their values <bcp14>MUST NOT</bcp14> be empty. Clients can instead use "*" to indicate
wildcard or no-preference values; see <xref target="scope"/>.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> contain any non-ASCII unicode characters and <bcp14>MUST</bcp14>
only contain ASCII characters in the range 0x21-0x7E inclusive (note that
percent-encoding is allowed; see Section 2.1 of <xref target="URI"/>.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> use Reserved Expansion ("+" operator), Fragment
Expansion ("#" operator), Label Expansion with Dot- Prefix, Path Segment
Expansion with Slash-Prefix, nor Path-Style Parameter Expansion with
Semicolon-Prefix.</li>
      </ul>
      <t>Clients <bcp14>SHOULD</bcp14> validate the requirements above; however, clients <bcp14>MAY</bcp14> use a
general-purpose URI Template implementation that lacks this specific
validation. If a client detects that any of the requirements above are not met
by a URI Template, the client <bcp14>MUST</bcp14> reject its configuration and abort the
request without sending it to the IP proxy.</t>
      <t>As with UDP proxying, some client configurations for IP proxies will only allow
the user to configure the proxy host and proxy port. Clients with such
limitations <bcp14>MAY</bcp14> attempt to access IP proxying capabilities using the default
template, which is defined as:
"https://$PROXY_HOST:$PROXY_PORT/.well-known/masque/ip/{target}/{ipproto}/",
where $PROXY_HOST and $PROXY_PORT are the configured host and port of the IP
proxy, respectively. IP proxy deployments <bcp14>SHOULD</bcp14> offer service at this location
if they need to interoperate with such clients.</t>
    </section>
    <section anchor="tunnelling-ip-over-http">
      <name>Tunnelling IP over HTTP</name>
      <t>To allow negotiation of a tunnel for IP over HTTP, this document defines the
"connect-ip" HTTP upgrade token. The resulting IP tunnels use the Capsule
Protocol (see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>) with HTTP Datagrams in the format
defined in <xref target="payload-format"/>.</t>
      <t>To initiate an IP tunnel associated with a single HTTP stream, a client issues
a request containing the "connect-ip" upgrade token.</t>
      <t>When sending its IP proxying request, the client <bcp14>SHALL</bcp14> perform URI Template
expansion to determine the path and query of its request, see <xref target="client-config"/>.</t>
      <t>By virtue of the definition of the Capsule Protocol (see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>), IP proxying requests do not carry any message content.
Similarly, successful IP proxying responses also do not carry any message
content.</t>
      <section anchor="ip-proxy-handling">
        <name>IP Proxy Handling</name>
        <t>Upon receiving an IP proxying request:</t>
        <ul spacing="normal">
          <li>if the recipient is configured to use another HTTP proxy, it will act as an
intermediary by forwarding the request to another HTTP server. Note that
such intermediaries may need to re-encode the request if they forward it
using a version of HTTP that is different from the one used to receive it,
as the request encoding differs by version (see below).</li>
          <li>otherwise, the recipient will act as an IP proxy. The IP proxy can choose to
reject the IP proxying request. Otherwise, it extracts the optional "target"
and "ipproto" variables from the URI it has reconstructed from the request
headers, decodes their percent-encoding, and establishes an IP tunnel.</li>
        </ul>
        <t>IP proxies <bcp14>MUST</bcp14> validate whether the decoded "target" and "ipproto" variables
meet the requirements in <xref target="scope"/>. If they do not, the IP proxy <bcp14>MUST</bcp14> treat the
request as malformed; see <xref section="8.1.1" sectionFormat="of" target="H2"/> and <xref section="4.1.2" sectionFormat="of" target="H3"/>.
If the "target" variable is a DNS name, the IP proxy <bcp14>MUST</bcp14> perform DNS
resolution (to query the corresponding IPv4 and/or IPv6 addresses via A and/or
AAAA records) before replying to the HTTP request. If errors occur during this
process, the IP proxy <bcp14>MUST</bcp14> reject the request and <bcp14>SHOULD</bcp14> send details using an
appropriate Proxy-Status header field <xref target="PROXY-STATUS"/>. For example,
if DNS resolution returns an error, the proxy can use the <tt>dns_error</tt> Proxy
Error Type from <xref section="2.3.2" sectionFormat="of" target="PROXY-STATUS"/>.</t>
        <t>The lifetime of the IP forwarding tunnel is tied to the IP proxying request
stream. The IP proxy <bcp14>MUST</bcp14> maintain all IP address and route assignments
associated with the IP forwarding tunnel while the request stream is open. IP
proxies <bcp14>MAY</bcp14> choose to tear down the tunnel due to a period of inactivity, but
they <bcp14>MUST</bcp14> close the request stream when doing so.</t>
        <t>A successful response (as defined in Sections <xref format="counter" target="resp1"/> and <xref format="counter" target="resp23"/>)
indicates that the IP proxy has established an IP tunnel and is willing to
proxy IP payloads. Any response other than a successful response indicates that
the request has failed; thus, the client <bcp14>MUST</bcp14> abort the request.</t>
        <t>Along with a successful response, the IP proxy can send capsules to assign
addresses and advertise routes to the client (<xref target="capsules"/>). The client can
also assign addresses and advertise routes to the IP proxy for
network-to-network routing.</t>
      </section>
      <section anchor="req1">
        <name>HTTP/1.1 Request</name>
        <t>When using HTTP/1.1 <xref target="H1"/>, an IP proxying request will meet the following
requirements:</t>
        <ul spacing="normal">
          <li>the method <bcp14>SHALL</bcp14> be "GET".</li>
          <li>the request <bcp14>SHALL</bcp14> include a single Host header field containing the host
and optional port of the IP proxy.</li>
          <li>the request <bcp14>SHALL</bcp14> include a Connection header field with value "Upgrade"
(note that this requirement is case-insensitive as per <xref section="7.6.1" sectionFormat="of" target="HTTP"/>).</li>
          <li>the request <bcp14>SHALL</bcp14> include an Upgrade header field with value "connect-ip".</li>
        </ul>
        <t>An IP proxying request that does not conform to these restrictions is
malformed. The recipient of such a malformed request <bcp14>MUST</bcp14> respond with an error
and <bcp14>SHOULD</bcp14> use the 400 (Bad Request) status code.</t>
        <t>For example, if the client is configured with URI Template
"https://example.org/.well-known/masque/ip/{target}/{ipproto}/" and wishes to
open an IP forwarding tunnel with no target or protocol limitations, it could
send the following request:</t>
        <figure anchor="fig-req-h1">
          <name>Example HTTP/1.1 Request</name>
          <sourcecode type="http-message"><![CDATA[
GET https://example.org/.well-known/masque/ip/*/*/ HTTP/1.1
Host: example.org
Connection: Upgrade
Upgrade: connect-ip
Capsule-Protocol: ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="resp1">
        <name>HTTP/1.1 Response</name>
        <t>The server indicates a successful response by replying with the following
requirements:</t>
        <ul spacing="normal">
          <li>the HTTP status code on the response <bcp14>SHALL</bcp14> be 101 (Switching Protocols).</li>
          <li>the response <bcp14>SHALL</bcp14> include a Connection header field with value "Upgrade"
(note that this requirement is case-insensitive as per <xref section="7.6.1" sectionFormat="of" target="HTTP"/>).</li>
          <li>the response <bcp14>SHALL</bcp14> include a single Upgrade header field with value
"connect-ip".</li>
          <li>the response <bcp14>SHALL</bcp14> meet the requirements of HTTP responses that start the
Capsule Protocol; see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>.</li>
        </ul>
        <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying
attempt as failed and close the connection.</t>
        <t>For example, the server could respond with:</t>
        <figure anchor="fig-resp-h1">
          <name>Example HTTP/1.1 Response</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: connect-ip
Capsule-Protocol: ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="req23">
        <name>HTTP/2 and HTTP/3 Requests</name>
        <t>When using HTTP/2 <xref target="H2"/> or HTTP/3 <xref target="H3"/>, IP proxying requests use HTTP
Extended CONNECT. This requires that servers send an HTTP Setting as specified
in <xref target="EXT-CONNECT2"/> and <xref target="EXT-CONNECT3"/> and that requests use HTTP
pseudo-header fields with the following requirements:</t>
        <ul spacing="normal">
          <li>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</li>
          <li>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-ip".</li>
          <li>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the IP
proxy.</li>
          <li>The :path and :scheme pseudo-header fields <bcp14>SHALL NOT</bcp14> be empty. Their values
<bcp14>SHALL</bcp14> contain the scheme and path from the URI Template after the URI
Template expansion process has been completed; see <xref target="client-config"/>.
Variables in the URI Template can determine the scope of the request, such as
requesting full-tunnel IP packet forwarding, or a specific proxied flow; see
<xref target="scope"/>.</li>
        </ul>
        <t>An IP proxying request that does not conform to these restrictions is
malformed; see <xref section="8.1.1" sectionFormat="of" target="H2"/> and <xref section="4.1.2" sectionFormat="of" target="H3"/>.</t>
        <t>For example, if the client is configured with URI Template
"https://example.org/.well-known/masque/ip/{target}/{ipproto}/" and wishes to
open an IP forwarding tunnel with no target or protocol limitations, it could
send the following request:</t>
        <figure anchor="fig-req-h2">
          <name>Example HTTP/2 or HTTP/3 Request</name>
          <sourcecode type="http-message"><![CDATA[
HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /.well-known/masque/ip/*/*/
:authority = example.org
capsule-protocol = ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="resp23">
        <name>HTTP/2 and HTTP/3 Responses</name>
        <t>The server indicates a successful response by replying with the following
requirements:</t>
        <ul spacing="normal">
          <li>the HTTP status code on the response <bcp14>SHALL</bcp14> be in the 2xx (Successful) range.</li>
          <li>the response <bcp14>SHALL</bcp14> meet the requirements of HTTP responses that start the
Capsule Protocol; see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>.</li>
        </ul>
        <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying
attempt as failed and abort the request.</t>
        <t>For example, the server could respond with:</t>
        <figure anchor="fig-resp-h2">
          <name>Example HTTP/2 or HTTP/3 Response</name>
          <sourcecode type="http-message"><![CDATA[
HEADERS
:status = 200
capsule-protocol = ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="scope">
        <name>Limiting Request Scope</name>
        <t>Unlike UDP proxying requests, which require specifying a target host, IP
proxying requests can allow endpoints to send arbitrary IP packets to any host.
The client can choose to restrict a given request to a specific IP prefix or IP
protocol by adding parameters to its request. When the IP proxy knows that a
request is scoped to a target prefix or protocol, it can leverage this
information to optimize its resource allocation; for example, the IP proxy can
assign the same public IP address to two IP proxying requests that are scoped
to different prefixes and/or different protocols.</t>
        <t>The scope of the request is indicated by the client to the IP proxy via the
"target" and "ipproto" variables of the URI Template; see <xref target="client-config"/>.
Both the "target" and "ipproto" variables are optional; if they are not
included, they are considered to carry the wildcard value "*".</t>
        <dl spacing="compact">
          <dt>target:</dt>
          <dd>
            <t>The variable "target" contains a hostname or IP prefix of a specific host to
which the client wants to proxy packets. If the "target" variable is not
specified or its value is "*", the client is requesting to communicate with
any allowable host. "target" supports using DNS names, IPv6 prefixes and IPv4
prefixes. Note that IPv6 scoped addressing zone identifiers (<xref target="RFC6874"/>) are
not supported. If the target is an IP prefix (IP address optionally followed by
a percent-encoded slash followed by the prefix length in bits), the request
will only support a single IP version. If the target is a hostname, the IP
proxy is expected to perform DNS resolution to determine which route(s) to
advertise to the client. The IP proxy <bcp14>SHOULD</bcp14> send a ROUTE_ADVERTISEMENT capsule
that includes routes for all addresses that were resolved for the requested
hostname, that are accessible to the IP proxy, and belong to an address family
for which the IP proxy also sends an Assigned Address.</t>
          </dd>
          <dt>ipproto:</dt>
          <dd>
            <t>The variable "ipproto" contains an IP protocol number, as defined in the
"Assigned Internet Protocol Numbers" IANA registry <xref target="IANA-PN"/>. If present, it
specifies that a client only wants to proxy a specific IP protocol for this
request. If the value is "*", or the variable is not included, the client is
requesting to use any IP protocol.</t>
          </dd>
        </dl>
        <t>Using the terms IPv6address, IPv4address, and reg-name from <xref target="URI"/>, the
"target" and "ipproto" variables <bcp14>MUST</bcp14> adhere to the format in
<xref target="target-format"/>, using notation from <xref target="ABNF"/>. Additionally:</t>
        <ul spacing="normal">
          <li>if "target" contains an IPv6 literal or prefix, the colons (":") <bcp14>MUST</bcp14> be
percent-encoded. For example, if the target host is "2001:db8::42", it will
be encoded in the URI as "2001%3Adb8%3A%3A42".</li>
          <li>If present, the IP prefix length in "target" <bcp14>SHALL</bcp14> be preceded by a
percent-encoded slash ("/"): "%2F". The IP prefix length <bcp14>MUST</bcp14> represent a
decimal integer between 0 and the length of the IP address in bits, inclusive.</li>
          <li>"ipproto" <bcp14>MUST</bcp14> represent a decimal integer between 0 and 255 inclusive, or
the wildcard value "*".</li>
        </ul>
        <figure anchor="target-format">
          <name>URI Template Variable Format</name>
          <artwork type="ascii-art"><![CDATA[
target = IPv6prefix / IPv4prefix / reg-name / "*"
IPv6prefix = IPv6address ["%2F" 1*3DIGIT]
IPv4prefix = IPv4address ["%2F" 1*2DIGIT]
ipproto = 1*3DIGIT / "*"
]]></artwork>
        </figure>
        <t>IP proxies <bcp14>MAY</bcp14> perform access control using the scoping information provided by
the client: if the client is not authorized to access any of the destinations
included in the scope, then the IP proxy can immediately fail the request.</t>
        <t>Note that IP protocol numbers represent both upper layers (as defined in
<xref section="2" sectionFormat="of" target="IPv6"/>, examples include TCP and UDP) and IPv6
extension headers (as defined in <xref section="4" sectionFormat="of" target="IPv6"/>, examples include
Fragment and Options headers). IP proxies <bcp14>MAY</bcp14> reject requests to scope to
protocol numbers that are used for extension headers. Upon receiving packets,
implementations that support scoping by IP protocol number <bcp14>MUST</bcp14> walk the chain
of extensions to find the matching IP protocol number.</t>
      </section>
      <section anchor="capsules">
        <name>Capsules</name>
        <t>This document defines multiple new capsule types that allow endpoints to
exchange IP configuration information. Both endpoints <bcp14>MAY</bcp14> send any number of
these new capsules.</t>
        <section anchor="addressassign-capsule">
          <name>ADDRESS_ASSIGN Capsule</name>
          <t>The ADDRESS_ASSIGN capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to inform its peer of the list of IP addresses or
prefixes it has assigned to it. Every capsule contains the full list of IP
prefixes currently assigned to the receiver. Any of these addresses can be used
as the source address on IP packets originated by the receiver of this capsule.</t>
          <figure anchor="addr-assign-format">
            <name>ADDRESS_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
ADDRESS_ASSIGN Capsule {
  Type (i) = ADDRESS_ASSIGN,
  Length (i),
  Assigned Address (..) ...,
}
]]></artwork>
          </figure>
          <t>The ADDRESS_ASSIGN capsule contains a sequence of zero or more Assigned
Addresses.</t>
          <figure anchor="assigned-addr-format">
            <name>Assigned Address Format</name>
            <artwork><![CDATA[
Assigned Address {
  Request ID (i),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <t>Each Assigned Address contains the following fields:</t>
          <dl spacing="compact">
            <dt>Request ID:</dt>
            <dd>
              <t>Request identifier, encoded as a variable-length integer. If this address
assignment is in response to an Address Request (see <xref target="addr_req"/>), then this
field <bcp14>SHALL</bcp14> contain the value of the corresponding field in the request.
Otherwise, this field <bcp14>SHALL</bcp14> be zero.</t>
            </dd>
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address assignment, encoded as an unsigned 8-bit integer.
<bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>IP Address:</dt>
            <dd>
              <t>Assigned IP address. If the IP Version field has value 4, the IP Address
field <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP Version field has value 6, the
IP Address field <bcp14>SHALL</bcp14> have a length of 128 bits.</t>
            </dd>
            <dt>IP Prefix Length:</dt>
            <dd>
              <t>The number of bits in the IP address that are used to define the prefix that
is being assigned, encoded as an unsigned 8-bit integer. This <bcp14>MUST</bcp14> be less than
or equal to the length of the IP Address field, in bits. If the prefix length
is equal to the length of the IP address, the receiver of this capsule is
allowed to send packets from a single source address. If the prefix length is
less than the length of the IP address, the receiver of this capsule is allowed
to send packets from any source address that falls within the prefix.</t>
            </dd>
          </dl>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the
capsule <bcp14>MUST</bcp14> follow the error handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          <t>If an ADDRESS_ASSIGN capsule does not contain an address that was previously
transmitted in another ADDRESS_ASSIGN capsule, that indicates that the address
has been removed. An ADDRESS_ASSIGN capsule can also be empty, indicating that
all addresses have been removed.</t>
          <t>In some deployments of IP proxying in HTTP, an endpoint needs to be assigned an
address by its peer before it knows what source address to set on its own
packets. For example, in the Remote Access VPN case (<xref target="example-remote"/>) the
client cannot send IP packets until it knows what address to use. In these
deployments, the endpoint that is expecting an address assignment <bcp14>MUST</bcp14> send an
ADDRESS_REQUEST capsule. This isn't required if the endpoint does not need any
address assignment, for example when it is configured out-of-band with static
addresses.</t>
          <t>While ADDRESS_ASSIGN capsules are commonly sent in response to ADDRESS_REQUEST
capsules, endpoints <bcp14>MAY</bcp14> send ADDRESS_ASSIGN capsules unprompted.</t>
        </section>
        <section anchor="addr_req">
          <name>ADDRESS_REQUEST Capsule</name>
          <t>The ADDRESS_REQUEST capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to request assignment of IP addresses from its peer.
The capsule allows the endpoint to optionally indicate a preference for which
address it would get assigned.</t>
          <figure anchor="addr-req-format">
            <name>ADDRESS_REQUEST Capsule Format</name>
            <artwork><![CDATA[
ADDRESS_REQUEST Capsule {
  Type (i) = ADDRESS_REQUEST,
  Length (i),
  Requested Address (..) ...,
}
]]></artwork>
          </figure>
          <t>The ADDRESS_REQUEST capsule contains a sequence of one or more Requested
Addresses.</t>
          <figure anchor="requested-addr-format">
            <name>Requested Address Format</name>
            <artwork><![CDATA[
Requested Address {
  Request ID (i),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <t>Each Requested Address contains the following fields:</t>
          <dl spacing="compact">
            <dt>Request ID:</dt>
            <dd>
              <t>Request identifier, encoded as a variable-length integer. This is the
identifier of this specific address request. Each request from a given endpoint
carries a different identifier. Request IDs <bcp14>MUST NOT</bcp14> be reused by an endpoint,
and <bcp14>MUST NOT</bcp14> be zero.</t>
            </dd>
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address request, encoded as an unsigned 8-bit integer.
<bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>IP Address:</dt>
            <dd>
              <t>Requested IP address. If the IP Version field has value 4, the IP Address
field <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP Version field has value 6, the
IP Address field <bcp14>SHALL</bcp14> have a length of 128 bits.</t>
            </dd>
            <dt>IP Prefix Length:</dt>
            <dd>
              <t>Length of the IP Prefix requested, in bits, encoded as an unsigned 8-bit
integer. <bcp14>MUST</bcp14> be less than or equal to the length of the IP Address field, in
bits.</t>
            </dd>
          </dl>
          <t>If the IP address is all-zero (0.0.0.0 or ::), this indicates that the sender
is requesting an address of that address family but does not have a preference
for a specific address. In that scenario, the prefix length still indicates the
sender's preference for the prefix length it is requesting.</t>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the
capsule <bcp14>MUST</bcp14> follow the error handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          <t>Upon receiving the ADDRESS_REQUEST capsule, an endpoint <bcp14>SHOULD</bcp14> assign one or
more IP addresses to its peer, and then respond with an ADDRESS_ASSIGN capsule
to inform the peer of the assignment. For each Requested Address, the receiver
of the ADDRESS_REQUEST capsule <bcp14>SHALL</bcp14> respond with an Assigned Address with a
matching Request ID. If the requested address was assigned, the IP Address and
IP Prefix Length fields in the Assigned Address response <bcp14>SHALL</bcp14> be set to the
assigned values. If the requested address was not assigned, the IP address
<bcp14>SHALL</bcp14> be all-zero and the IP Prefix Length <bcp14>SHALL</bcp14> be the maximum length
(0.0.0.0/32 or ::/128) to indicate that no address was assigned. These address
rejections <bcp14>SHOULD NOT</bcp14> be included in subsequent ADDRESS_ASSIGN capsules. Note
that other Assigned Address entries that do not correspond to any Request ID
can also be contained in the same ADDRESS_ASSIGN response.</t>
          <t>If an endpoint receives an ADDRESS_REQUEST capsule that contains zero Requested
Addresses, it <bcp14>MUST</bcp14> abort the IP proxying request stream.</t>
          <t>Note that the ordering of Requested Addresses does not carry any semantics.
Similarly, the Request ID is only meant as a unique identifier, it does not
convey any priority or importance.</t>
        </section>
        <section anchor="routeadvertisement-capsule">
          <name>ROUTE_ADVERTISEMENT Capsule</name>
          <t>The ROUTE_ADVERTISEMENT capsule (see <xref target="iana-types"/> for the value of the
capsule type) allows an endpoint to communicate to its peer that it is willing
to route traffic to a set of IP address ranges. This indicates that the sender
has an existing route to each address range, and notifies its peer that if the
receiver of the ROUTE_ADVERTISEMENT capsule sends IP packets for one of these
ranges in HTTP Datagrams, the sender of the capsule will forward them along its
preexisting route. Any address which is in one of the address ranges can be
used as the destination address on IP packets originated by the receiver of
this capsule.</t>
          <figure anchor="route-adv-format">
            <name>ROUTE_ADVERTISEMENT Capsule Format</name>
            <artwork><![CDATA[
ROUTE_ADVERTISEMENT Capsule {
  Type (i) = ROUTE_ADVERTISEMENT,
  Length (i),
  IP Address Range (..) ...,
}
]]></artwork>
          </figure>
          <t>The ROUTE_ADVERTISEMENT capsule contains a sequence of zero or more IP Address
Ranges.</t>
          <figure anchor="addr-range-format">
            <name>IP Address Range Format</name>
            <artwork><![CDATA[
IP Address Range {
  IP Version (8),
  Start IP Address (32..128),
  End IP Address (32..128),
  IP Protocol (8),
}
]]></artwork>
          </figure>
          <t>Each IP Address Range contains the following fields:</t>
          <dl spacing="compact">
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this range, encoded as an unsigned 8-bit integer. <bcp14>MUST</bcp14> be
either 4 or 6.</t>
            </dd>
            <dt>Start IP Address and End IP Address:</dt>
            <dd>
              <t>Inclusive start and end IP address of the advertised range. If the IP Version
field has value 4, these fields <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP
Version field has value 6, these fields <bcp14>SHALL</bcp14> have a length of 128 bits. The
Start IP Address <bcp14>MUST</bcp14> be less than or equal to the End IP Address.</t>
            </dd>
            <dt>IP Protocol:</dt>
            <dd>
              <t>The Internet Protocol Number for traffic that can be sent to this range,
encoded as an unsigned 8-bit integer. If the value is 0, all protocols are
allowed. ICMP traffic is always allowed, regardless of the value of this field.</t>
            </dd>
          </dl>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the
capsule <bcp14>MUST</bcp14> follow the error handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          <t>Upon receiving the ROUTE_ADVERTISEMENT capsule, an endpoint <bcp14>MAY</bcp14> update its
local state regarding what its peer is willing to route (subject to local
policy), such as by installing entries in a routing table.</t>
          <t>Each ROUTE_ADVERTISEMENT contains the full list of address ranges. If multiple
ROUTE_ADVERTISEMENT capsules are sent in one direction, each
ROUTE_ADVERTISEMENT capsule supersedes prior ones. In other words, if a given
address range was present in a prior capsule but the most recently received
ROUTE_ADVERTISEMENT capsule does not contain it, the receiver will consider
that range withdrawn.</t>
          <t>If multiple ranges using the same IP protocol were to overlap, some routing
table implementations might reject them. To prevent overlap, the ranges are
ordered; this places the burden on the sender and makes verification by the
receiver much simpler. If an IP Address Range A precedes an IP Address Range B
in the same ROUTE_ADVERTISEMENT capsule, they <bcp14>MUST</bcp14> follow these requirements:</t>
          <ul spacing="normal">
            <li>IP Version of A <bcp14>MUST</bcp14> be less than or equal to IP Version of B</li>
            <li>If the IP Version of A and B are equal, the IP Protocol of A <bcp14>MUST</bcp14> be less
than or equal to IP Protocol of B.</li>
            <li>If the IP Version and IP Protocol of A and B are both equal, the End IP
Address of A <bcp14>MUST</bcp14> be strictly less than the Start IP Address of B.</li>
          </ul>
          <t>If an endpoint receives a ROUTE_ADVERTISEMENT capsule that does not meet these
requirements, it <bcp14>MUST</bcp14> abort the IP proxying request stream.</t>
          <t>Since setting the IP protocol to zero indicates all protocols are allowed, the
requirements above make it possible for two routes to overlap when one has IP
protocol set to zero and the other set to non-zero. Endpoints <bcp14>MUST NOT</bcp14> send a
ROUTE_ADVERTISEMENT capsule with routes that overlap in such a way. Validating
this requirement is <bcp14>OPTIONAL</bcp14>, but if an endpoint detects the violation, it <bcp14>MUST</bcp14>
abort the IP proxying request stream.</t>
        </section>
      </section>
    </section>
    <section anchor="context-identifiers">
      <name>Context Identifiers</name>
      <t>The mechanism for proxying IP in HTTP defined in this document allows future
extensions to exchange HTTP Datagrams that carry different semantics from IP
payloads. Some of these extensions can augment IP payloads with additional data
or compress IP header fields, while others can exchange data that is completely
separate from IP payloads. In order to accomplish this, all HTTP Datagrams
associated with IP proxying request streams start with a Context ID field; see
<xref target="payload-format"/>.</t>
      <t>Context IDs are 62-bit integers (0 to 2<sup>62</sup>-1). Context IDs are
encoded as variable-length integers; see <xref section="16" sectionFormat="of" target="QUIC"/>. The Context ID
value of 0 is reserved for IP payloads, while non-zero values are dynamically
allocated. Non-zero even-numbered Context IDs are client-allocated, and
odd-numbered Context IDs are proxy-allocated. The Context ID namespace is tied
to a given HTTP request; it is possible for a Context ID with the same numeric
value to be simultaneously allocated in distinct requests, potentially with
different semantics. Context IDs <bcp14>MUST NOT</bcp14> be re-allocated within a given HTTP
request but <bcp14>MAY</bcp14> be allocated in any order. The Context ID allocation
restrictions to the use of even-numbered and odd-numbered Context IDs exist in
order to avoid the need for synchronization between endpoints. However, once a
Context ID has been allocated, those restrictions do not apply to the use of
the Context ID; it can be used by either the client or the IP proxy,
independent of which endpoint initially allocated it.</t>
      <t>Registration is the action by which an endpoint informs its peer of the
semantics and format of a given Context ID. This document does not define how
registration occurs. Future extensions <bcp14>MAY</bcp14> use HTTP header fields or capsules
to register Context IDs. Depending on the method being used, it is possible for
datagrams to be received with Context IDs that have not yet been registered.
For instance, this can be due to reordering of the packet containing the
datagram and the packet containing the registration message during transmission.</t>
    </section>
    <section anchor="payload-format">
      <name>HTTP Datagram Payload Format</name>
      <t>When associated with IP proxying request streams, the HTTP Datagram Payload
field of HTTP Datagrams (see <xref target="HTTP-DGRAM"/>) has the format defined in
<xref target="dgram-format"/>. Note that when HTTP Datagrams are encoded using QUIC DATAGRAM
frames, the Context ID field defined below directly follows the Quarter Stream
ID field which is at the start of the QUIC DATAGRAM frame payload:</t>
      <figure anchor="dgram-format">
        <name>IP Proxying HTTP Datagram Format</name>
        <artwork><![CDATA[
IP Proxying HTTP Datagram Payload {
  Context ID (i),
  Payload (..),
}
]]></artwork>
      </figure>
      <t>The IP Proxying HTTP Datagram Payload contains the following fields:</t>
      <dl spacing="compact">
        <dt>Context ID:</dt>
        <dd>
          <t>A variable-length integer that contains the value of the Context ID. If an
HTTP/3 datagram which carries an unknown Context ID is received, the receiver
<bcp14>SHALL</bcp14> either drop that datagram silently or buffer it temporarily (on the order
of a round trip) while awaiting the registration of the corresponding Context
ID.</t>
        </dd>
        <dt>Payload:</dt>
        <dd>
          <t>The payload of the datagram, whose semantics depend on value of the previous
field. Note that this field can be empty.</t>
        </dd>
      </dl>
      <t>IP packets are encoded using HTTP Datagrams with the Context ID set to zero.
When the Context ID is set to zero, the Payload field contains a full IP packet
(from the IP Version field until the last byte of the IP Payload).</t>
    </section>
    <section anchor="ip-packet-handling">
      <name>IP Packet Handling</name>
      <t>Clients <bcp14>MAY</bcp14> optimistically start sending proxied IP packets before receiving
the response to its IP proxying request, noting however that those may not be
processed by the IP proxy if it responds to the request with a failure, or if
the datagrams are received by the IP proxy before the request. Since receiving
addresses and routes is required in order to know that a packet can be sent
through the tunnel, such optimistic packets might be dropped by the IP proxy if
it chooses to provide different addressing or routing information than what the
client assumed.</t>
      <t>When an endpoint receives an HTTP Datagram containing an IP packet, it will
parse the packet's IP header, perform any local policy checks (e.g., source
address validation), check their routing table to pick an outbound interface,
and then send the IP packet on that interface or pass it to a local
application. The endpoint can also choose to drop any received packets instead
of forwarding them. If a received IP packet fails any correctness or policy
checks, that is a forwarding error, not a protocol violation as far as IP
proxying is concerned; see <xref target="error-signal"/>.</t>
      <t>In the other direction, when an endpoint receives an IP packet, it checks to see
if the packet matches the routes mapped for an IP tunnel, and performs the same
forwarding checks as above before transmitting the packet over HTTP Datagrams.</t>
      <t>Note that endpoints will decrement the IP Hop Count (or TTL) upon encapsulation
but not decapsulation. In other words, the Hop Count is decremented right
before an IP packet is transmitted in an HTTP Datagram. This prevents infinite
loops in the presence of routing loops, and matches the choices in IPsec
<xref target="IPSEC"/>.</t>
      <t>Note that the IP forwarding tunnels described in this document are not
fully featured "interfaces" in the IPv6 addressing architecture sense
<xref target="IPv6-ADDR"/>. In particular, they do not necessarily have
IPv6 link-local addresses. Additionally, IPv6 stateless
autoconfiguration or router advertisement messages are not used in
such interfaces, and neither is neighbor discovery. Implementers need
to ensure that they do not forward any link-local traffic beyond the
IP proxying interface that it was received on. IP proxying endpoints
also need to properly reply to packets destined to link-local
multicast addresses.</t>
      <t>IPv6 requires that every link have an MTU of at least 1280 bytes <xref target="IPv6"/>.
Since IP proxying in HTTP conveys IP packets in HTTP Datagrams and those can in
turn be sent in QUIC DATAGRAM frames which cannot be fragmented
<xref target="DGRAM"/>, the MTU of an IP tunnel can be limited by the MTU of the
QUIC connection that IP proxying is operating over. This can lead to situations
where the IPv6 minimum link MTU is violated. IP proxying endpoints that support
IPv6 <bcp14>MUST</bcp14> ensure that the IP tunnel link MTU is at least 1280 (i.e., that they
can send HTTP Datagrams with payloads of at least 1280 bytes). This can be
accomplished using various techniques:</t>
      <ul spacing="normal">
        <li>if both IP proxying endpoints know for certain that HTTP intermediaries are
not in use, the endpoints can pad the QUIC INITIAL packets of the outer
QUIC connection that IP proxying is running over. (Assuming QUIC version 1 is
in use, the overhead is 1 byte type, 20 bytes maximal connection ID length, 4
bytes maximal packet number length, 1 byte DATAGRAM frame type, 8 bytes
maximal quarter stream ID, one byte for the zero Context ID, and 16 bytes for
the AEAD authentication tag, for a total of 51 bytes of overhead which
corresponds to padding QUIC INITIAL packets to 1331 bytes or more.)</li>
        <li>IP proxying endpoints can also send ICMPv6 echo requests with 1232 bytes of
data to ascertain the link MTU and tear down the tunnel if they do not
receive a response. Unless endpoints have an out of band means of
guaranteeing that the previous techniques is sufficient, they <bcp14>MUST</bcp14> use this
method. If an endpoint does not know an IPv6 address of its peer, it can send
the ICMPv6 echo request to the link local all nodes multicast address
(ff02::1).</li>
      </ul>
      <t>If an endpoint is using QUIC DATAGRAM frames to convey IPv6 packets, and it
detects that the QUIC MTU is too low to allow sending 1280 bytes, it <bcp14>MUST</bcp14> abort
the IP proxying request stream.</t>
      <t>Endpoints <bcp14>MAY</bcp14> implement additional filtering policies on the IP packets they
forward.</t>
      <t>Note that it is possible for multiple proxied IP packets to be encapsulated in
the same outer packet, for example because a QUIC packet can carry two QUIC
DATAGRAM frames. It is also possible for a proxied IP packet to span multiple
outer packets, because a DATAGRAM capsule can be split across multiple QUIC or
TCP packets.</t>
    </section>
    <section anchor="error-signal">
      <name>Error Signalling</name>
      <t>Since IP proxying endpoints often forward IP packets onwards to other network
interfaces, they need to handle errors in the forwarding process. For example,
forwarding can fail if the endpoint does not have a route for the destination
address, or if it is configured to reject a destination prefix by policy, or if
the MTU of the outgoing link is lower than the size of the packet to be
forwarded. In such scenarios, IP proxying endpoints <bcp14>SHOULD</bcp14> use ICMP
<xref target="ICMP"/> <xref target="ICMPv6"/> to signal the forwarding error to its
peer by generating ICMP packets and sending them using HTTP Datagrams.</t>
      <t>Endpoints are free to select the most appropriate ICMP errors to send. Some
examples that are relevant for IP proxying include:</t>
      <ul spacing="normal">
        <li>For invalid source addresses, send Destination Unreachable (<xref section="3.1" sectionFormat="of" target="ICMPv6"/>) with code 5, "Source address failed ingress/egress policy".</li>
        <li>For unroutable destination addresses, send Destination Unreachable (<xref section="3.1" sectionFormat="of" target="ICMPv6"/>) with a code 0, "No route to destination", or code 1,
"Communication with destination administratively prohibited".</li>
        <li>For packets that cannot fit within the MTU of the outgoing link, send Packet
Too Big (<xref section="3.2" sectionFormat="of" target="ICMPv6"/>).</li>
      </ul>
      <t>In order to receive these errors, endpoints need to be prepared to receive ICMP
packets. If an endpoint does not send ROUTE_ADVERTISEMENT capsules, such as a
client opening an IP flow through an IP proxy, it <bcp14>SHOULD</bcp14> process proxied ICMP
packets from its peer in order to receive these errors. Note that ICMP messages
can originate from a source address different from that of the IP proxying peer.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>IP proxying in HTTP enables many different use cases that can benefit from IP
packet proxying and tunnelling. These examples are provided to help illustrate
some of the ways in which IP proxying in HTTP can be used.</t>
      <section anchor="example-remote">
        <name>Remote Access VPN</name>
        <t>The following example shows a point-to-network VPN setup, where a client
receives a set of local addresses, and can send to any remote host through the
IP proxy. Such VPN setups can be either full-tunnel or split-tunnel.</t>
        <figure anchor="diagram-tunnel">
          <name>VPN Tunnel Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="512" viewBox="0 0 512 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 248,32 L 248,96" fill="none" stroke="black"/>
                <path d="M 320,32 L 320,96" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 248,32 L 320,32" fill="none" stroke="black"/>
                <path d="M 416,32 L 448,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 248,48" fill="none" stroke="black"/>
                <path d="M 192,64 L 216,64" fill="none" stroke="black"/>
                <path d="M 320,64 L 448,64" fill="none" stroke="black"/>
                <path d="M 80,80 L 248,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 248,96 L 320,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 448,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="456,96 444,90.4 444,101.6" fill="black" transform="rotate(0,448,96)"/>
                <polygon class="arrowhead" points="456,64 444,58.4 444,69.6" fill="black" transform="rotate(0,448,64)"/>
                <polygon class="arrowhead" points="456,32 444,26.4 444,37.6" fill="black" transform="rotate(0,448,32)"/>
                <polygon class="arrowhead" points="224,64 212,58.4 212,69.6" fill="black" transform="rotate(0,216,64)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(180,192,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="212" y="36">IP</text>
                  <text x="232" y="36">B</text>
                  <text x="468" y="36">IP</text>
                  <text x="488" y="36">D</text>
                  <text x="284" y="52">IP</text>
                  <text x="340" y="52">IP</text>
                  <text x="360" y="52">C</text>
                  <text x="44" y="68">Client</text>
                  <text x="100" y="68">IP</text>
                  <text x="140" y="68">Subnet</text>
                  <text x="176" y="68">C</text>
                  <text x="232" y="68">?</text>
                  <text x="288" y="68">Proxy</text>
                  <text x="468" y="68">IP</text>
                  <text x="488" y="68">E</text>
                  <text x="468" y="100">IP</text>
                  <text x="496" y="100">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A          IP B +--------+           +---> IP D
|        +--------------------+   IP   | IP C      |
| Client | IP Subnet C <--> ? |  Proxy +-----------+---> IP E
|        +--------------------+        |           |
+--------+                    +--------+           +---> IP ...

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client does not specify any scope in its request. The IP
proxy assigns the client an IPv4 address (192.0.2.11) and a full-tunnel route
of all IPv4 addresses (0.0.0.0/0). The client can then send to any IPv4 host
using a source address in its assigned prefix.</t>
        <figure anchor="fig-full-tunnel">
          <name>VPN Full-Tunnel Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /vpn
:authority = proxy.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

STREAM(44): DATA
Capsule Type = ADDRESS_REQUEST
(Request ID = 1
 IP Version = 4
 IP Address = 0.0.0.0
 IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 1
                               IP Version = 4
                               IP Address = 192.0.2.11
                               IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 0.0.0.0
                               End IP Address = 255.255.255.255
                               IP Protocol = 0) // Any

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated IP Packet
]]></artwork>
        </figure>
        <t>A setup for a split-tunnel VPN (the case where the client can only access a
specific set of private subnets) is quite similar. In this case, the advertised
route is restricted to 192.0.2.0/24, rather than 0.0.0.0/0.</t>
        <figure anchor="fig-split-tunnel">
          <name>VPN Split-Tunnel Capsule Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 4
                               IP Address = 192.0.2.42
                               IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 192.0.2.0
                               End IP Address = 192.0.2.255
                               IP Protocol = 0) // Any
]]></artwork>
        </figure>
      </section>
      <section anchor="site-to-site-vpn">
        <name>Site-to-Site VPN</name>
        <t>The following example shows how to connect a branch office network to a
corporate network such that all machines on those networks can communicate. In
this example, the IP proxying client is attached to the branch office network
192.0.2.0/24, and the IP proxy is attached to the corporate network
203.0.113.0/24. There are legacy clients on the branch office network that only
allow maintenance requests from machines on their subnet, so the IP Proxy is
provisioned with an IP address from that subnet.</t>
        <figure anchor="diagram-s2s">
          <name>Site-to-site VPN Example</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="560" viewBox="0 0 560 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 112,32 L 112,96" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,96" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,96" fill="none" stroke="black"/>
                <path d="M 328,32 L 328,96" fill="none" stroke="black"/>
                <path d="M 392,32 L 392,96" fill="none" stroke="black"/>
                <path d="M 424,32 L 424,96" fill="none" stroke="black"/>
                <path d="M 88,32 L 112,32" fill="none" stroke="black"/>
                <path d="M 144,32 L 216,32" fill="none" stroke="black"/>
                <path d="M 328,32 L 392,32" fill="none" stroke="black"/>
                <path d="M 424,32 L 456,32" fill="none" stroke="black"/>
                <path d="M 216,48 L 328,48" fill="none" stroke="black"/>
                <path d="M 88,64 L 144,64" fill="none" stroke="black"/>
                <path d="M 392,64 L 456,64" fill="none" stroke="black"/>
                <path d="M 216,80 L 328,80" fill="none" stroke="black"/>
                <path d="M 88,96 L 112,96" fill="none" stroke="black"/>
                <path d="M 144,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 328,96 L 392,96" fill="none" stroke="black"/>
                <path d="M 424,96 L 456,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,96 452,90.4 452,101.6" fill="black" transform="rotate(0,456,96)"/>
                <polygon class="arrowhead" points="464,64 452,58.4 452,69.6" fill="black" transform="rotate(0,456,64)"/>
                <polygon class="arrowhead" points="464,32 452,26.4 452,37.6" fill="black" transform="rotate(0,456,32)"/>
                <polygon class="arrowhead" points="96,96 84,90.4 84,101.6" fill="black" transform="rotate(180,88,96)"/>
                <polygon class="arrowhead" points="96,64 84,58.4 84,69.6" fill="black" transform="rotate(180,88,64)"/>
                <polygon class="arrowhead" points="96,32 84,26.4 84,37.6" fill="black" transform="rotate(180,88,32)"/>
                <g class="text">
                  <text x="40" y="36">192.0.2.1</text>
                  <text x="512" y="36">203.0.113.9</text>
                  <text x="356" y="52">IP</text>
                  <text x="40" y="68">192.0.2.2</text>
                  <text x="180" y="68">Client</text>
                  <text x="236" y="68">IP</text>
                  <text x="284" y="68">Proxying</text>
                  <text x="360" y="68">Proxy</text>
                  <text x="512" y="68">203.0.113.8</text>
                  <text x="40" y="100">192.0.2.3</text>
                  <text x="512" y="100">203.0.113.7</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
192.0.2.1 <--+   +--------+             +-------+   +---> 203.0.113.9
             |   |        +-------------+  IP   |   |
192.0.2.2 <--+---+ Client | IP Proxying | Proxy +---+---> 203.0.113.8
             |   |        +-------------+       |   |
192.0.2.3 <--+   +--------+             +-------+   +---> 203.0.113.7

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client does not specify any scope in its request. The IP
proxy assigns the client an IPv4 address (203.0.113.100) and a split-tunnel
route to the corporate network (203.0.113.0/24). The client assigns the IP
proxy an IPv4 address (192.0.2.200) and a split-tunnel route to the branch
office network (192.0.2.0/24). This allows hosts on both networks to
communicate with each other, and allows the IP proxy to perform maintenance on
legacy hosts in the branch office.</t>
        <figure anchor="fig-s2s">
          <name>Site-to-site VPN Capsule Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /corp
:authority = proxy.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

STREAM(44): DATA
Capsule Type = ADDRESS_ASSIGN
(Request ID = 0
IP Version = 4
IP Address = 192.0.2.200
IP Prefix Length = 32)

STREAM(44): DATA
Capsule Type = ROUTE_ADVERTISEMENT
(IP Version = 4
Start IP Address = 192.0.2.0
End IP Address = 192.0.2.255
IP Protocol = 0) // Any

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 4
                               IP Address = 203.0.113.100
                               IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 203.0.113.0
                               End IP Address = 203.0.113.255
                               IP Protocol = 0) // Any

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated IP Packet
]]></artwork>
        </figure>
      </section>
      <section anchor="ip-flow-forwarding">
        <name>IP Flow Forwarding</name>
        <t>The following example shows an IP flow forwarding setup, where a client
requests to establish a forwarding tunnel to target.example.com using SCTP (IP
protocol 132), and receives a single local address and remote address it can
use for transmitting packets. A similar approach could be used for any other IP
protocol that isn't easily proxied with existing HTTP methods, such as ICMP,
ESP, etc.</t>
        <figure anchor="diagram-flow">
          <name>Proxied Flow Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="440" viewBox="0 0 440 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,96" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 240,48" fill="none" stroke="black"/>
                <path d="M 160,64 L 184,64" fill="none" stroke="black"/>
                <path d="M 312,64 L 392,64" fill="none" stroke="black"/>
                <path d="M 80,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 312,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="400,64 388,58.4 388,69.6" fill="black" transform="rotate(0,392,64)"/>
                <polygon class="arrowhead" points="192,64 180,58.4 180,69.6" fill="black" transform="rotate(0,184,64)"/>
                <polygon class="arrowhead" points="168,64 156,58.4 156,69.6" fill="black" transform="rotate(180,160,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="276" y="52">IP</text>
                  <text x="332" y="52">IP</text>
                  <text x="352" y="52">C</text>
                  <text x="44" y="68">Client</text>
                  <text x="124" y="68">IP</text>
                  <text x="144" y="68">C</text>
                  <text x="200" y="68">D</text>
                  <text x="280" y="68">Proxy</text>
                  <text x="412" y="68">IP</text>
                  <text x="432" y="68">D</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+
|        +-------------------+   IP   | IP C
| Client |    IP C <--> D    |  Proxy +---------> IP D
|        +-------------------+        |
+--------+                   +--------+

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client specfies both a target hostname and an IP protocol
number in the scope of its request, indicating that it only needs to
communicate with a single host. The IP proxy is able to perform DNS resolution
on behalf of the client and allocate a specific outbound socket for the client
instead of allocating an entire IP address to the client. In this regard, the
request is similar to a traditional CONNECT proxy request.</t>
        <t>The IP proxy assigns a single IPv6 address to the client (2001:db8:1234::a) and
a route to a single IPv6 host (2001:db8:3456::b), scoped to SCTP. The client
can send and receive SCTP IP packets to the remote host.</t>
        <figure anchor="fig-flow">
          <name>Proxied SCTP Flow Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /proxy?target=target.example.com&ipproto=132
:authority = proxy.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 6
                               IP Address = 2001:db8:1234::a
                               IP Prefix Length = 128)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 6
                               Start IP Address = 2001:db8:3456::b
                               End IP Address = 2001:db8:3456::b
                               IP Protocol = 132)

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated SCTP/IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated SCTP/IP Packet
]]></artwork>
        </figure>
      </section>
      <section anchor="proxied-connection-racing">
        <name>Proxied Connection Racing</name>
        <t>The following example shows a setup where a client is proxying UDP packets
through an IP proxy in order to control connection establishment racing through
an IP proxy, as defined in Happy Eyeballs <xref target="HEv2"/>. This example is a
variant of the proxied flow, but highlights how IP-level proxying can enable
new capabilities even for TCP and UDP.</t>
        <figure anchor="diagram-racing">
          <name>Proxied Connection Racing Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="144" width="472" viewBox="0 0 472 144" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,112" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,112" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,112" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 240,48" fill="none" stroke="black"/>
                <path d="M 320,48 L 424,48" fill="none" stroke="black"/>
                <path d="M 144,64 L 168,64" fill="none" stroke="black"/>
                <path d="M 144,80 L 168,80" fill="none" stroke="black"/>
                <path d="M 80,96 L 240,96" fill="none" stroke="black"/>
                <path d="M 320,96 L 424,96" fill="none" stroke="black"/>
                <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 240,112 L 312,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="432,96 420,90.4 420,101.6" fill="black" transform="rotate(0,424,96)"/>
                <polygon class="arrowhead" points="432,48 420,42.4 420,53.6" fill="black" transform="rotate(0,424,48)"/>
                <polygon class="arrowhead" points="328,96 316,90.4 316,101.6" fill="black" transform="rotate(180,320,96)"/>
                <polygon class="arrowhead" points="328,48 316,42.4 316,53.6" fill="black" transform="rotate(180,320,48)"/>
                <polygon class="arrowhead" points="176,80 164,74.4 164,85.6" fill="black" transform="rotate(0,168,80)"/>
                <polygon class="arrowhead" points="176,64 164,58.4 164,69.6" fill="black" transform="rotate(0,168,64)"/>
                <polygon class="arrowhead" points="152,80 140,74.4 140,85.6" fill="black" transform="rotate(180,144,80)"/>
                <polygon class="arrowhead" points="152,64 140,58.4 140,69.6" fill="black" transform="rotate(180,144,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="332" y="36">IP</text>
                  <text x="352" y="36">C</text>
                  <text x="444" y="52">IP</text>
                  <text x="464" y="52">E</text>
                  <text x="44" y="68">Client</text>
                  <text x="108" y="68">IP</text>
                  <text x="128" y="68">C</text>
                  <text x="184" y="68">E</text>
                  <text x="276" y="68">IP</text>
                  <text x="128" y="84">D</text>
                  <text x="184" y="84">F</text>
                  <text x="280" y="84">Proxy</text>
                  <text x="444" y="100">IP</text>
                  <text x="464" y="100">F</text>
                  <text x="332" y="116">IP</text>
                  <text x="352" y="116">D</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+ IP C
|        +-------------------+        |<------------> IP E
| Client |  IP C <--> E      |   IP   |
|        |     D <--> F      |  Proxy |
|        +-------------------+        |<------------> IP F
+--------+                   +--------+ IP D

]]></artwork>
          </artset>
        </figure>
        <t>As with proxied flows, the client specfies both a target hostname and an IP
protocol number in the scope of its request. When the IP proxy performs DNS
resolution on behalf of the client, it can send the various remote address
options to the client as separate routes. It can also ensure that the client
has both IPv4 and IPv6 addresses assigned.</t>
        <t>The IP proxy assigns both an IPv4 address (192.0.2.3) and an IPv6
address (2001:db8:1234::a) to the client, as well as an IPv4 route
(198.51.100.2) and an IPv6 route (2001:db8:3456::b), which represent the
resolved addresses of the target hostname, scoped to UDP. The client can send
and receive UDP IP packets to either one of the IP proxy addresses to enable
Happy Eyeballs through the IP proxy.</t>
        <figure anchor="fig-listen">
          <name>Proxied Connection Racing Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /proxy?target=target.example.com&ipproto=17
:authority = proxy.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 4
                               IP Address = 192.0.2.3
                               IP Prefix Length = 32),
                              (Request ID = 0
                               IP Version = 6
                               IP Address = 2001:db8::1234:1234
                               IP Prefix Length = 128)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 198.51.100.2
                               End IP Address = 198.51.100.2
                               IP Protocol = 17),
                              (IP Version = 6
                               Start IP Address = 2001:db8:3456::b
                               End IP Address = 2001:db8:3456::b
                               IP Protocol = 17)
...

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IPv6 Packet

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IPv4 Packet

]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="extensibility-considerations">
      <name>Extensibility Considerations</name>
      <t>Extensions to IP proxying in HTTP can define behavior changes to this
mechanism. Such extensions <bcp14>SHOULD</bcp14> define new capsule types to exchange
configuration information if needed. It is <bcp14>RECOMMENDED</bcp14> for extensions that
modify addressing to specify that their extension capsules be sent before the
ADDRESS_ASSIGN capsule and that they do not take effect until the
ADDRESS_ASSIGN capsule is parsed. This allows modifications to address
assignement to operate atomically. Similarly, extensions that modify routing
<bcp14>SHOULD</bcp14> behave similarly with regards to the ROUTE_ADVERTISEMENT capsule.</t>
    </section>
    <section anchor="performance-considerations">
      <name>Performance Considerations</name>
      <t>Bursty traffic can often lead to temporally-correlated packet losses; in turn,
this can lead to suboptimal responses from congestion controllers in protocols
running inside the tunnel. To avoid this, endpoints <bcp14>SHOULD</bcp14> strive to avoid
increasing burstiness of IP traffic; they <bcp14>SHOULD NOT</bcp14> queue packets in order to
increase batching beyond the minimal amount required to take advantage of
hardware offloads.</t>
      <t>When the protocol running inside the tunnel uses congestion control (e.g.,
<xref target="TCP"/> or <xref target="QUIC"/>), the proxied traffic will incur at least two nested
congestion controllers. The outer HTTP connection <bcp14>MAY</bcp14> disable congestion
control if it knows that the inner packets belong to congestion-controlled
connections.</t>
      <t>When the protocol running inside the tunnel uses loss recovery (e.g., <xref target="TCP"/>
or <xref target="QUIC"/>), and the outer HTTP connection runs over TCP, the proxied traffic
will incur at least two nested loss recovery mechanisms. This can reduce
performance as both can sometimes independently retransmit the same data. To
avoid this, IP proxying <bcp14>SHOULD</bcp14> be performed over HTTP/3 to allow leveraging the
QUIC DATAGRAM frame.</t>
      <section anchor="mtu-considerations">
        <name>MTU Considerations</name>
        <t>When using HTTP/3 with the QUIC Datagram extension <xref target="DGRAM"/>, IP packets are
transmitted in QUIC DATAGRAM frames. Since these frames cannot be fragmented,
they can only carry packets up to a given length determined by the QUIC
connection configuration and the Path MTU (PMTU). If an endpoint is using QUIC
DATAGRAM frames and it attempts to route an IP packet through the tunnel that
will not fit inside a QUIC DATAGRAM frame, the IP proxy <bcp14>SHOULD NOT</bcp14> send the IP
packet in a DATAGRAM capsule, as that defeats the end-to-end unreliability
characteristic that methods such as Datagram Packetization Layer PMTU Discovery
(DPLPMTUD) depend on <xref target="DPLPMTUD"/>. In this scenario, the endpoint
<bcp14>SHOULD</bcp14> drop the IP packet and send an ICMP Packet Too Big message to the sender
of the dropped packet; see <xref section="3.2" sectionFormat="of" target="ICMPv6"/>.</t>
      </section>
      <section anchor="ecn-considerations">
        <name>ECN Considerations</name>
        <t>If a client or IP proxy with a connection containing an IP Proxying request
stream disables congestion control, it cannot signal Explicit Congestion
Notification (ECN) <xref target="ECN"/> support on that outer connection. That is,
the QUIC sender <bcp14>MUST</bcp14> mark all IP headers with the Not-ECT codepoint for QUIC
packets which are outside of congestion control. The endpoint can still report
ECN feedback via QUIC ACK_ECN frames or the TCP ECE bit, as the peer might not
have disabled congestion control.</t>
        <t>Conversely, if congestion control is not disabled on the outer congestion, the
guidance in <xref target="ECN-TUNNEL"/> about transferring ECN marks between inner
and outer IP headers does not apply because the outer connection will react
correctly to congestion notifications if it uses ECN. The inner traffic can
also use ECN, independently of whether it is in use on the outer connection.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>There are significant risks in allowing arbitrary clients to establish a tunnel
that permits sending to arbitrary hosts, regardless of whether tunnels are
scoped to specific hosts or not. Bad actors could abuse this capability to send
traffic and have it attributed to the IP proxy. HTTP servers that support IP
proxying <bcp14>SHOULD</bcp14> restrict its use to authenticated users. Depending on the
deployment, possible authentication mechanisms include mutual TLS between
clients and proxies, HTTP-based authentication via the HTTP Authorization
header <xref target="HTTP"/>, or even bearer tokens. Proxies can enforce policies for
authenticated users to further constrain client behavior or deal with possible
abuse. For example, proxies can rate limit individual clients that send an
excessively large amount of traffic through the proxy. As another example,
proxies can restrict address (prefix) assignment to clients based on certain
client attributes such as geographic location.</t>
      <t>Address assignment can have privacy implications for endpoints. For example, if
a proxy partitions its address space by the number of authenticated clients and
then assigns distinct address ranges to each client, target hosts could use
this information to determine when IP packets correspond to the same client.
Avoiding such tracking vectors may be important for certain proxy deployments.
Proxies <bcp14>SHOULD</bcp14> avoid persistent per-client address (prefix) assignment when
possible.</t>
      <t>Falsifying IP source addresses in sent traffic has been common for denial of
service attacks. Implementations of this mechanism need to ensure that they do
not facilitate such attacks. In particular, there are scenarios where an
endpoint knows that its peer is only allowed to send IP packets from a given
prefix. For example, that can happen through out of band configuration
information, or when allowed prefixes are shared via ADDRESS_ASSIGN capsules.
In such scenarios, endpoints <bcp14>MUST</bcp14> follow the recommendations from
<xref target="BCP38"/> to prevent source address spoofing.</t>
      <t>Limiting request scope (see <xref target="scope"/>) allows two clients to share one of the
proxy's external IP addresses if their requests are scoped to different IP
protocol numbers. If the proxy receives an ICMP packet destined for that
external IP address, it has the option to forward it back to the clients.
However, some of these ICMP packets carry part of the original IP packet that
triggered the ICMP response. Forwarding such packets can accidentally divulge
information about one client's traffic to another client. To avoid this,
proxies that forward ICMP on shared external IP addresses <bcp14>MUST</bcp14> inspect the
invoking packet included in the ICMP packet and only forward the ICMP packet to
the client whose scoping matches the invoking packet.</t>
      <t>Since there are known risks with some IPv6 extension headers (e.g.,
<xref target="ROUTING-HDR"/>), implementers need to follow the latest guidance
regarding handling of IPv6 extension headers.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-upgrade-token">
        <name>HTTP Upgrade Token</name>
        <t>This document will request IANA to register "connect-ip" in the HTTP Upgrade
Token Registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-upgrade-tokens"/>&gt;.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>connect-ip</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Proxying of IP Payloads</t>
          </dd>
          <dt>Expected Version Tokens:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>References:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-suffix">
        <name>Creation of the MASQUE URI Suffixes Registry</name>
        <t>This document requests that IANA create a new "MASQUE URI Suffixes" registry
maintained at IANA_URL_TBD. This new registry governs the path segment that
immediately follows "masque" in paths that start with "/.well-known/masque/",
see &lt;<eref target="https://www.iana.org/assignments/well-known-uris"/>&gt; for the registration
of "masque" in the "Well-Known URIs" registry. This new registry contains three
columns:</t>
        <dl>
          <dt>Path Segment:</dt>
          <dd>
            <t>An ASCII string containing only characters allowed in tokens; see
<xref section="5.6.2" sectionFormat="of" target="HTTP"/>. Entries in this registry <bcp14>MUST</bcp14> all have distinct
entries in this column.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>A description of the entry.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>An optional reference defining the use of the entry.</t>
          </dd>
        </dl>
        <t>The registration policy for this registry is Expert Review; see
<xref section="4.5" sectionFormat="of" target="IANA-POLICY"/>.</t>
        <t>There are initially two entries in this registry:</t>
        <table anchor="iana-suffixes-table">
          <name>New MASQUE URI Suffixes</name>
          <thead>
            <tr>
              <th align="left">Path Segment</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">udp</td>
              <td align="left">UDP Proxying</td>
              <td align="left">RFC 9298</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Proxying</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-uri">
        <name>Updates to masque Well-Known URI</name>
        <t>This document will request IANA to update the entry for the "masque"
URI suffix in the "Well-Known URIs" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/well-known-uris"/>&gt;.</t>
        <t>IANA is requested to update the "Reference" field to include this
document in addition to previous values from that field.</t>
        <t>IANA is requested to replace the "Related Information" field with
"For sub-suffix allocations, see registry at IANA_URL_TBD." where
IANA_URL_TBD is the URL of the new registry described in <xref target="iana-suffix"/>.</t>
      </section>
      <section anchor="iana-types">
        <name>Capsule Type Registrations</name>
        <t>This document requests IANA to add the following values to the "HTTP Capsule
Types" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-capsule-protocol"/>&gt;.</t>
        <table anchor="iana-capsules-table">
          <name>New Capsules</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x01</td>
              <td align="left">ADDRESS_ASSIGN</td>
              <td align="left">Address Assignment</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">ADDRESS_REQUEST</td>
              <td align="left">Address Request</td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">ROUTE_ADVERTISEMENT</td>
              <td align="left">Route Advertisement</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl>
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent when this document is approved)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This Document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>masque@ietf.org</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>Empty</t>
          </dd>
        </dl>
        <t>RFC Editor: please remove the rest of this subsection before publication.</t>
        <t>Since this document has not yet been published, it might still change before
publication as RFC. Any implementer that wishes to deploy IP proxying in
production before publication <bcp14>MUST</bcp14> use the following temporary codepoints
instead: 0x2575D601 for ADDRESS_ASSIGN, 0x2575D602 for ADDRESS_REQUEST, and
0x2575D603 for ROUTE_ADVERTISEMENT.</t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="H1" to="HTTP/1.1"/>
    <displayreference target="H2" to="HTTP/2"/>
    <displayreference target="H3" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="H1">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns. </t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="H2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="H3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="TCP">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP).  TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet.  Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion.  This document collects and brings those changes together with the protocol specification from RFC 793.  This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793.  It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements.  It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state.  The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="TEMPLATE">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="L. Pardue" initials="L." surname="Pardue">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="EXT-CONNECT2">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="EXT-CONNECT3">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </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="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="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="PROXY-STATUS">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P. Sikora" initials="P." surname="Sikora">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </reference>
        <reference anchor="RFC6874">
          <front>
            <title>Representing IPv6 Zone Identifiers in Address Literals and Uniform Resource Identifiers</title>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter">
              <organization/>
            </author>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire">
              <organization/>
            </author>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <date month="February" year="2013"/>
            <abstract>
              <t>This document describes how the zone identifier of an IPv6 scoped address, defined as &lt;zone_id&gt; in the IPv6 Scoped Address Architecture (RFC 4007), can be represented in a literal IPv6 address and in a Uniform Resource Identifier that includes such a literal address.  It updates the URI Generic Syntax specification (RFC 3986) accordingly.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6874"/>
          <seriesInfo name="DOI" value="10.17487/RFC6874"/>
        </reference>
        <reference anchor="ABNF">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="IPv6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="DGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="ICMP">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel">
              <organization/>
            </author>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </reference>
        <reference anchor="ICMPv6">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta">
              <organization/>
            </author>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol).  ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="ECN">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan">
              <organization/>
            </author>
            <author fullname="S. Floyd" initials="S." surname="Floyd">
              <organization/>
            </author>
            <author fullname="D. Black" initials="D." surname="Black">
              <organization/>
            </author>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
        <reference anchor="BCP38">
          <front>
            <title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
            <author fullname="P. Ferguson" initials="P." surname="Ferguson">
              <organization/>
            </author>
            <author fullname="D. Senie" initials="D." surname="Senie">
              <organization/>
            </author>
            <date month="May" year="2000"/>
            <abstract>
              <t>This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point.  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="38"/>
          <seriesInfo name="RFC" value="2827"/>
          <seriesInfo name="DOI" value="10.17487/RFC2827"/>
        </reference>
        <reference anchor="IANA-POLICY">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="IANA-PN" target="https://www.iana.org/assignments/protocol-numbers">
          <front>
            <title>Protocol Numbers</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="IPSEC">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author fullname="S. Kent" initials="S." surname="Kent">
              <organization/>
            </author>
            <author fullname="K. Seo" initials="K." surname="Seo">
              <organization/>
            </author>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer.  This document obsoletes RFC 2401 (November 1998).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
        <reference anchor="IPv6-ADDR">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol.  The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture".   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="HEv2">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs".  This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="DPLPMTUD">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst">
              <organization/>
            </author>
            <author fullname="T. Jones" initials="T." surname="Jones">
              <organization/>
            </author>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen">
              <organization/>
            </author>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler">
              <organization/>
            </author>
            <author fullname="T. Völker" initials="T." surname="Völker">
              <organization/>
            </author>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document specifies Datagram Packetization Layer Path MTU Discovery (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for datagram Packetization Layers (PLs). It allows a PL, or a datagram application that uses a PL, to discover whether a network path can support the current size of datagram.  This can be used to detect and reduce the message size when a sender encounters a packet black hole. It can also probe a network path to discover whether the maximum packet size can be increased.  This provides functionality for datagram transports that is equivalent to the PLPMTUD specification for TCP, specified in RFC 4821, which it updates. It also updates the UDP Usage Guidelines to refer to this method for use with UDP datagrams and updates SCTP.</t>
              <t>The document provides implementation notes for incorporating Datagram PMTUD into IETF datagram transports or applications that use datagram transports.</t>
              <t>This specification updates RFC 4960, RFC 4821, RFC 6951, RFC 8085, and RFC 8261.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8899"/>
          <seriesInfo name="DOI" value="10.17487/RFC8899"/>
        </reference>
        <reference anchor="ECN-TUNNEL">
          <front>
            <title>Tunnelling of Explicit Congestion Notification</title>
            <author fullname="B. Briscoe" initials="B." surname="Briscoe">
              <organization/>
            </author>
            <date month="November" year="2010"/>
            <abstract>
              <t>This document redefines how the explicit congestion notification (ECN) field of the IP header should be constructed on entry to and exit from any IP-in-IP tunnel.  On encapsulation, it updates RFC 3168 to bring all IP-in-IP tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing.  On decapsulation, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unused combinations of inner and outer headers.  The new rules ensure the ECN field is correctly propagated across a tunnel whether it is used to signal one or two severity levels of congestion; whereas before, only one severity level was supported.  Tunnel endpoints can be updated in any order without affecting pre-existing uses of the ECN field, thus ensuring backward compatibility.  Nonetheless, operators wanting to support two severity levels (e.g., for pre-congestion notification -- PCN) can require compliance with this new specification.  A thorough analysis of the reasoning for these changes and the implications is included.  In the unlikely event that the new rules do not meet a specific need, RFC 4774 gives guidance on designing alternate ECN semantics, and this document extends that to include tunnelling issues.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6040"/>
          <seriesInfo name="DOI" value="10.17487/RFC6040"/>
        </reference>
        <reference anchor="ROUTING-HDR">
          <front>
            <title>Deprecation of Type 0 Routing Headers in IPv6</title>
            <author fullname="J. Abley" initials="J." surname="Abley">
              <organization/>
            </author>
            <author fullname="P. Savola" initials="P." surname="Savola">
              <organization/>
            </author>
            <author fullname="G. Neville-Neil" initials="G." surname="Neville-Neil">
              <organization/>
            </author>
            <date month="December" year="2007"/>
            <abstract>
              <t>The functionality provided by IPv6's Type 0 Routing Header can be exploited in order to achieve traffic amplification over a remote path for the purposes of generating denial-of-service traffic.  This document updates the IPv6 specification to deprecate the use of IPv6 Type 0 Routing Headers, in light of this security concern.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5095"/>
          <seriesInfo name="DOI" value="10.17487/RFC5095"/>
        </reference>
        <reference anchor="PROXY-REQS">
          <front>
            <title>Requirements for a MASQUE Protocol to Proxy IP Traffic</title>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dallas McCall" initials="D." surname="McCall">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="27" month="August" year="2021"/>
            <abstract>
              <t>   There is interest among MASQUE working group participants in
   designing a protocol that can proxy IP traffic over HTTP.  This
   document describes the set of requirements for such a protocol.

   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/ietf-wg-masque/draft-ietf-
   masque-ip-proxy-reqs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-ip-proxy-reqs-03"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The design of this method was inspired by discussions in the MASQUE working
group around <xref target="PROXY-REQS"/>. The authors would
like to thank participants in those discussions for their feedback.
Additionally, <contact fullname="Mike Bishop"/>, <contact fullname="Lucas Pardue"/>, and <contact fullname="Alejandro Sedeño"/>
provided valuable feedback on the document.</t>
      <t>Most of the text on client configuration is based on the corresponding text in
<xref target="CONNECT-UDP"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196Xbb2Jng//sUiDzdkSoktdplq8qp0JJcpdO2rFhy0jnp
nGqQvJIQgwADgKIZlfMs8wrzCjMvNt96FxCUXEt3p9PlLJJI4K7fvvb7fdNk
TW4Pk43zqvywzIrr5PQ8yYrkm8vL8w0zKcdFOoWvJ1V61fQz21z1p2n9l7nt
j8uisGP4bNbfeWZuD5N9U89H06yus7JoljN46fTk8qUZp429LqvlYVI3E5NW
Nj1MLqu0qGdl1ZjF9WHyenjx23cnpphPR7Y6NBN44dDA8LUt6nl9mDTV3Jr5
DD+Hv57tPXtqbm0xh4eS5Loq5zNYPY+xAZ/w1Bu/L6v3uJuv8QH8fJpmOXzO
q/8N7mRQVtf4TVqNb+Cbm6aZ1Yfb2/ggfpTd2oE+to0fbI+qclHbbR5iG1+9
zpqb+QheppNZXMvhbN93XPhejntpgknj9wc87iAr7x3p3i8HN8003zDv7XJR
VhM8q37yl3k2pl9wWvoFDjW9rtIp/fG78zP6OUNQoN+aOQyX1+5lhIz5ZIY/
GEzciM28AjiqkzTPk+bGJot0mUzKRUFf8uLczP3i2qTz5qasaFnwvwTGgru9
HCTn6Txf0icMeJfldLoMPq1KhFY7yZqyog/gdtIi+2vaANgdJsPZLLfJaTEe
0JeWb72Z4fu/SfHLwbicxrMeD5ILuO4i/WsWTHyc3maT+AuY6jD5uiyvYYpX
r47os7qprIWb3H2ys5MMp7MbuDmbwoew5uo9nAI9Nc4aQIDX5bxoUji132V2
wbux17TsoyE/Vk5g5mcHOwf78je8gKjzrsgaC6tpEG6S8gpmslU2TsNNTmpZ
K0Htb67x09XNDgfJ0Y2timX6/qa8rd+HZz3M7Yeub+Mjbh2AzJ6O+b3fXNPX
qxO/HiT/Mrc3uV1kxSSY9HVW/TltfxXPeAJbreuyCOeb4muD9+6131h5qHPm
3wO22SqfxzOn18W8bn/3CVPTe4OFey+euyirKbx9S/Tpm91DevX5YfL25dGz
3d09+nOS1bM8hYtFMru9O9jFR/daj+53PIqvf7PfevCg48F9kxVX4UpOh2fD
/vkZv+qxz8E1fk9/BwyhKcdlnpwRYa43eBakzslVmteWn06raxtSssViMcjS
ImWyCdzgupjaoqm3ZzJev9DxTL/fT9IRoFA6boy5vMlqoBnjOT6fTGw9rrIR
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
opubdp9XepVaHEt4eR9EKGRG/x/+K0+BQfUAAA==

-->

</rfc>
