<?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.13 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-ip-02" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title abbrev="HTTP IP Proxy">IP Proxying Support for HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-02"/>
    <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="2022" month="July" day="11"/>
    <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 a method of proxying IP packets over HTTP. This protocol
is similar to CONNECT-UDP, but allows transmitting arbitrary IP packets, without
being limited to just TCP like CONNECT or UDP like CONNECT-UDP.</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/"/>.
      </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>This document describes a method of proxying IP packets over HTTP. When using
HTTP/2 or HTTP/3, IP proxying uses HTTP Extended CONNECT as described in
<xref target="EXT-CONNECT2"/> and <xref target="EXT-CONNECT3"/>.
When using HTTP/1.x, IP proxying uses HTTP Upgrade as defined in <xref section="7.8" sectionFormat="of" target="SEMANTICS"/>. This protocol is similar to
CONNECT-UDP <xref target="CONNECT-UDP"/>, but allows
transmitting arbitrary IP packets, without being limited to just TCP like
CONNECT <xref target="SEMANTICS"/> or UDP like CONNECT-UDP.</t>
      <t>The HTTP Upgrade Token defined for this mechanism is "connect-ip", which is also
referred to as CONNECT-IP in this document.</t>
      <t>The CONNECT-IP protocol allows endpoints to set up a tunnel for proxying IP
packets using an HTTP proxy. This can be used for various solutions that include
general-purpose packet tunnelling, such as for a point-to-point or
point-to-network VPN, or for limited forwarding of packets to specific hosts.</t>
      <t>Forwarded IP packets can be sent efficiently via the proxy using HTTP Datagram
support <xref target="HTTP-DGRAM"/>.</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 "proxy" to refer to the HTTP server that
responds to the CONNECT-IP request. If there are HTTP intermediaries (as defined
in <xref section="3.7" sectionFormat="of" target="SEMANTICS"/>) between the client and the proxy, those are
referred to as "intermediaries" in this document.</t>
    </section>
    <section anchor="client-config">
      <name>Configuration of Clients</name>
      <t>Clients are configured to use IP Proxying over HTTP via an URI Template
<xref target="TEMPLATE"/>. The URI template <bcp14>MAY</bcp14> contain two variables: "target" and
"ipproto" (<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
works 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://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.</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>
    </section>
    <section anchor="the-connect-ip-protocol">
      <name>The CONNECT-IP Protocol</name>
      <t>This document defines the "connect-ip" HTTP Upgrade Token. "connect-ip" uses the
Capsule Protocol as defined in <xref target="HTTP-DGRAM"/>.</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>When using HTTP/2 or HTTP/3, the following requirements apply to requests:</t>
      <ul spacing="normal">
        <li>The ":method" pseudo-header field <bcp14>SHALL</bcp14> be set to "CONNECT".</li>
        <li>The ":protocol" pseudo-header field <bcp14>SHALL</bcp14> be set to "connect-ip".</li>
        <li>The ":authority" pseudo-header field <bcp14>SHALL</bcp14> contain the host and port of the
proxy, not an individual endpoint with which a connection is desired.</li>
        <li>The contents of the ":path" pseudo-header <bcp14>SHALL</bcp14> be determined by the URI
template expansion, 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>The client <bcp14>SHOULD</bcp14> also include the "Capsule-Protocol" header with a value of
"?1" to negotiate support for sending and receiving HTTP capsules
(<xref target="HTTP-DGRAM"/>).</t>
      <t>Any 2xx (Successful) response indicates that the proxy is willing to open an IP
forwarding tunnel between it and the client. Any response other than a
successful response indicates that the tunnel has not been formed.</t>
      <t>A proxy <bcp14>MUST NOT</bcp14> send any Transfer-Encoding or Content-Length header fields in a
2xx (Successful) response to the IP Proxying request. A client <bcp14>MUST</bcp14> treat a
successful response containing any Content-Length or Transfer-Encoding header
fields as malformed.</t>
      <t>The lifetime of the forwarding tunnel is tied to the CONNECT stream. Closing the
stream (in HTTP/3 via the FIN bit on a QUIC STREAM frame, or a QUIC RESET_STREAM
frame) closes the associated forwarding tunnel.</t>
      <t>Along with a successful response, the 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 proxy for network-to-network
routing.</t>
      <section anchor="scope">
        <name>Limiting Request Scope</name>
        <t>Unlike CONNECT-UDP requests, which require specifying a target host, CONNECT-IP
requests can allow endpoints to send arbitrary IP packets to any host. The
client can choose to restrict a given request to a specific prefix or IP
protocol by adding parameters to its request. When the server 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 server can
assign the same public IP address to two CONNECT-IP requests that are scoped to
different prefixes and/or different protocols.</t>
        <t>CONNECT-IP uses URI template variables (<xref target="client-config"/>) to determine the
scope of the request for packet proxying. All variables defined here are
optional, and have default values if not included.</t>
        <t>The defined variables are:</t>
        <dl spacing="compact">
          <dt>target:</dt>
          <dd>
            <t>The variable "target" contains a DNS hostname (reg-name) or IP prefix
(IPv6address / IPv4address ["%2F" 1*3DIGIT]) (<xref target="URI"/> syntax elements within
parentheses) 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. 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 server is expected to perform DNS resolution to
determine which route(s) to advertise to the client. The server <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 server, and
belong to an address family for which the server also sends an ADDRESS_ASSIGN
capsule. Note that IPv6 scoped addressing zone identifiers are not supported.</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. 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>
      </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 that it has assigned an IP address
or prefix to it. The ADDRESS_ASSIGN capsule allows assigning a prefix which can
contain multiple addresses. 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),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <dl spacing="compact">
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address assignment. <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. 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 only 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 an endpoint receives multiple ADDRESS_ASSIGN capsules, all of the assigned
addresses or prefixes can be used. For example, multiple ADDRESS_ASSIGN capsules
are necessary to assign both IPv4 and IPv6 addresses.</t>
          <t>In some deployments of CONNECT-IP, 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 case (<xref target="example-remote"/>) the client cannot send
IP packets until it knows what address to use. In these deployments, endpoints
need to send ADDRESS_ASSIGN capsules to allow their peers to send traffic.</t>
        </section>
        <section anchor="addressrequest-capsule">
          <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 an IP address from its peer.
This capsule is not required for simple client/proxy communication where the
client only expects to receive one address from the proxy. 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),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <dl spacing="compact">
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address request. <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. <bcp14>MUST</bcp14> be lesser or equal to the
length of the IP Address field, in bits.</t>
            </dd>
          </dl>
          <t>Upon receiving the ADDRESS_REQUEST capsule, an endpoint <bcp14>SHOULD</bcp14> assign an IP
address to its peer, and then respond with an ADDRESS_ASSIGN capsule to inform
the peer of the assignment.</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 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>
          <dl spacing="compact">
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this range. <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 lesser 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. If
the value is 0, all protocols are allowed.</t>
            </dd>
          </dl>
          <t>Upon receiving the ROUTE_ADVERTISEMENT capsule, an endpoint <bcp14>MAY</bcp14> start routing IP
packets in these ranges to its peer.</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 lesser or equal than 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 lesser or
equal than 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 received a ROUTE_ADVERTISEMENT capsule that does not meet these
requirements, it <bcp14>MUST</bcp14> abort the stream.</t>
        </section>
      </section>
    </section>
    <section anchor="context-identifiers">
      <name>Context Identifiers</name>
      <t>This protocol allows future extensions to exchange HTTP Datagrams which carry
different semantics from IP packets. For example, an extension could define a
way to send compressed IP header fields. In order to allow for this
extensibility, all HTTP Datagrams associated with IP proxying request streams
start with a context ID, 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 packets, while non-zero values are dynamically
allocated: non-zero even-numbered context IDs are client-allocated, and
odd-numbered context IDs are server-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 assigned different semantics in distinct requests,
potentially with different semantics. Context IDs <bcp14>MUST NOT</bcp14> be re-allocated
within a given HTTP namespace but <bcp14>MAY</bcp14> be allocated in any order. Once allocated,
any context ID can be used by both client and server - only allocation carries
separate namespaces to avoid requiring synchronization.</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. Depending on the method being used, it is possible for
datagrams to be received with Context IDs which have not yet been registered,
for instance due to reordering of the datagram and the registration packets
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>
      <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>
      <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 proxy if it responds to the request with a failure, or if the
datagrams are received by the proxy before the request.</t>
      <t>When a CONNECT-IP 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.</t>
      <t>In the other direction, when a CONNECT-IP endpoint receives an IP packet, it
checks to see if the packet matches the routes mapped for a CONNECT-IP
forwarding tunnel, and performs the same forwarding checks as above before
transmitting the packet over HTTP Datagrams.</t>
      <t>Note that CONNECT-IP 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>IPv6 requires that every link have an MTU of at least 1280 bytes
<xref target="IPv6"/>. Since CONNECT-IP 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 a CONNECT-IP link can be limited by the MTU of
the QUIC connection that CONNECT-IP is operating over. This can lead to
situations where the IPv6 minimum link MTU is violated. CONNECT-IP endpoints
that support IPv6 <bcp14>MUST</bcp14> ensure that the CONNECT-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 HTTP intermediaries are not in use, both CONNECT-IP endpoints can pad the
QUIC INITIAL packets of the underlying QUIC connection that CONNECT-IP is
running over.</li>
        <li>if HTTP intermediaries are in use, CONNECT-IP endpoints can enter in an out of
band agreement with the intermediaries to ensure that endpoints and
intermediaries pad QUIC INITIAL packets.</li>
        <li>CONNECT-IP 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
one of the two previous techniques is sufficient, they <bcp14>MUST</bcp14> use this method.</li>
      </ul>
      <t>Endpoints <bcp14>MAY</bcp14> implement additional filtering policies on the IP packets they
forward.</t>
    </section>
    <section anchor="error-signalling">
      <name>Error Signalling</name>
      <t>Since CONNECT-IP 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 doesn't 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, CONNECT-IP endpoints <bcp14>SHOULD</bcp14> use ICMP
<xref target="ICMP"/> to signal the forwarding error to its peer.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>CONNECT-IP 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 CONNECT-IP 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 server through
the proxy. Such VPN setups can be either full-tunnel or split-tunnel.</t>
        <figure anchor="diagram-tunnel">
          <name>VPN Tunnel Setup</name>
          <artwork><![CDATA[
+--------+ IP A         IP B +--------+              +---> IP D
|        |-------------------|        | IP C         |
| Client | IP Subnet C <-> * | Server |--------------+---> IP E
|        |-------------------|        |              |
+--------+                   +--------+              +---> IP ...

]]></artwork>
        </figure>
        <t>In this case, the client does not specify any scope in its request. The server
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 Server ]]

SETTINGS
H3_DATAGRAM = 1

                              SETTINGS
                              SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                              H3_DATAGRAM = 1

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

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

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 4
                              IP Address = 192.0.2.11
                              IP Prefix Length = 32

                              STREAM(44): CAPSULE
                              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 Server ]]

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 4
                              IP Address = 192.0.2.42
                              IP Prefix Length = 32

                              STREAM(44): CAPSULE
                              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="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>
          <artwork><![CDATA[
+--------+ IP A         IP B +--------+
|        |-------------------|        | IP C
| Client |    IP C <-> D     | Server |---------> IP D
|        |-------------------|        |
+--------+                   +--------+

]]></artwork>
        </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 proxy server 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 server assigns a single IPv6 address to the client (2001:db8::1234:1234) and
a route to a single IPv6 host (2001:db8::3456), scoped to SCTP. The client can
send and recieve SCTP IP packets to the remote host.</t>
        <figure anchor="fig-flow">
          <name>Proxied SCTP Flow Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Server ]]

SETTINGS
H3_DATAGRAM = 1
                              SETTINGS
                              SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                              H3_DATAGRAM = 1

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

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

                              STREAM(52): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 6
                              IP Address = 2001:db8::1234:1234
                              IP Prefix Length = 128

                              STREAM(52): CAPSULE
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 6
                               Start IP Address = 2001:db8::3456
                               End IP Address = 2001:db8::3456
                               IP Protocol = 132)

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

                              DATAGRAM
                              Quarter Stream ID = 13
                              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 a CONNECT-IP proxy in order to control connection establishement racing
through a 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>
          <artwork><![CDATA[
+--------+ IP A         IP B +--------+ IP C
|        |-------------------|        |<------------> IP E
| Client |  IP C<->E, D<->F  | Server |
|        |-------------------|        |<------------> IP F
+--------+                   +--------+ IP D

]]></artwork>
        </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 proxy server 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 server assigns the client both an IPv4 address (192.0.2.3) and an IPv6
address (2001:db8::1234:1234) to the client, as well as an IPv4 route
(198.51.100.2) and an IPv6 route (2001:db8::3456), which represent the resolved
addresses of the target hostname, scoped to UDP. The client can send and recieve
UDP IP packets to the either of the server addresses to enable Happy Eyeballs
through the proxy.</t>
        <figure anchor="fig-listen">
          <name>Proxied Connection Racing Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Server ]]

SETTINGS
H3_DATAGRAM = 1

                              SETTINGS
                              SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                              H3_DATAGRAM = 1

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

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

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 4
                              IP Address = 192.0.2.3
                              IP Prefix Length = 32

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 6
                              IP Address = 2001:db8::1234:1234
                              IP Prefix Length = 128

                              STREAM(44): CAPSULE
                              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
                               End IP Address = 2001:db8::3456
                               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="security-considerations">
      <name>Security Considerations</name>
      <t>There are significant risks in allowing arbitrary clients to establish a tunnel
to arbitrary servers, as that could allow bad actors to send traffic and have it
attributed to the proxy. Proxies that support CONNECT-IP <bcp14>SHOULD</bcp14> restrict its use
to authenticated users. The HTTP Authorization header <xref target="SEMANTICS"/> <bcp14>MAY</bcp14> be
used to authenticate clients. More complex authentication schemes are out of
scope for this document but can be implemented using CONNECT-IP extensions.</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>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="connect-ip-http-upgrade-token">
        <name>CONNECT-IP 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>The CONNECT-IP Protocol</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-types">
        <name>Capsule Type Registrations</name>
        <t>This document will request IANA to add the following values to the "HTTP
Capsule Types" registry created by <xref target="HTTP-DGRAM"/>:</t>
        <table anchor="iana-capsules-table">
          <name>New Capsules</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xfff100</td>
              <td align="left">ADDRESS_ASSIGN</td>
              <td align="left">Address Assignment</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">0xfff101</td>
              <td align="left">ADDRESS_REQUEST</td>
              <td align="left">Address Request</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">0xfff102</td>
              <td align="left">ROUTE_ADVERTISEMENT</td>
              <td align="left">Route Advertisement</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="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="SEMANTICS">
          <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="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="17" month="June" year="2022"/>
            <abstract>
              <t>   This document describes HTTP Datagrams, a convention for conveying
   multiplexed, potentially unreliable datagrams inside an HTTP
   connection.

   In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC
   DATAGRAM extension.  When the QUIC DATAGRAM frame is unavailable or
   undesirable, they can be sent using the Capsule Protocol, a more
   general convention for conveying data in HTTP connections.

   HTTP Datagrams and the Capsule Protocol are intended for use by HTTP
   extensions, not applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-11"/>
        </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="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="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="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="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>Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH)</title>
            <author fullname="P. Wouters" initials="P." surname="Wouters">
              <organization/>
            </author>
            <author fullname="D. Migault" initials="D." surname="Migault">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="Y. Nir" initials="Y." surname="Nir">
              <organization/>
            </author>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>This document replaces RFC 7321, "Cryptographic Algorithm Implementation         Requirements and Usage Guidance for Encapsulating Security Payload               (ESP) and Authentication Header (AH)".  The goal of this document is to enable ESP and AH to benefit from cryptography that is up to date while making IPsec interoperable.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8221"/>
          <seriesInfo name="DOI" value="10.17487/RFC8221"/>
        </reference>
        <reference anchor="ICMP">
          <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="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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="17" month="June" 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="Internet-Draft" value="draft-ietf-masque-connect-udp-15"/>
        </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="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="PROXY-REQS">
          <front>
            <title>Requirements for a MASQUE Protocol to Proxy IP Traffic</title>
            <author fullname="Alex Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dallas McCall">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David 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.</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:
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
fvAxI7rw9n9rgY3M4oYAAA==

-->

</rfc>
