<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-seemann-quic-nat-traversal-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="QUIC NAT Traversal">Using QUIC to traverse NATs</title>
    <seriesInfo name="Internet-Draft" value="draft-seemann-quic-nat-traversal-04"/>
    <author fullname="Marten Seemann">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author fullname="Eric Kinnear">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>ekinnear@apple.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>QUIC</keyword>
    <keyword>ICE</keyword>
    <keyword>NAT traversal</keyword>
    <keyword>hole punching</keyword>
    <abstract>
      <?line 40?>

<t>This document specifies a QUIC extension for traversing Network Address
Translators (NATs). Endpoints use an existing proxied QUIC connection to
coordinate path validation attempts that create the NAT bindings needed for a
direct path and test its connectivity. Application data can be exchanged over
the proxied path while NAT traversal is in progress. Once a suitable direct
path has been validated, the connection can migrate to it.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    QUIC Working Group mailing list (quic@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/marten-seemann/draft-seemann-quic-nat-traversal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies an extension to QUIC (<xref target="RFC9000"/>) that enables
endpoints behind NATs to establish a direct path for an existing connection. The
extension uses QUIC's path validation mechanism to create NAT bindings and test
connectivity, and connection migration to move the connection to a suitable
direct path.</t>
      <t>The endpoints first establish a QUIC connection over a proxied path (<xref target="setup"/>).
This connection carries both application data and the signaling needed to
coordinate NAT traversal. The server advertises its address candidates, and the
client pairs them with its own candidates and requests coordinated path
validation attempts. Both endpoints send path validation packets toward the
selected peer addresses to create the necessary NAT bindings.</t>
      <t>Application data can be exchanged over the proxied path while these attempts are
in progress. If a suitable direct path is validated, the connection can migrate
to it. Otherwise, the endpoints can continue using the proxied path.</t>
      <t>The extension borrows address candidate pairing concepts from Interactive
Connectivity Establishment (ICE; <xref target="RFC8445"/>), but does not use the ICE
protocol.</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>
      <?line -18?>

<dl>
        <dt>Sending base:</dt>
        <dd>
          <t>The local sending context used for an address candidate, such as a UDP socket
on a particular network interface or a tunnel.</t>
        </dd>
      </dl>
    </section>
    <section anchor="background-nat-traversal-with-ice">
      <name>Background: NAT Traversal with ICE</name>
      <t>When an external signaling channel is used, the QUIC connection is established
after the two ICE agents have agreed on a candidate pair. This mode doesn't
require any modification to existing QUIC stacks. In particular, it does not
necessitate the negotiation of the extension defined in this document.</t>
      <t>For address discovery to work, QUIC and ICE need to use the same UDP socket.
Since this requires demultiplexing of QUIC and STUN packets, the QUIC bit cannot
be greased as described in <xref target="RFC9287"/>.</t>
      <t>Once ICE has completed, the client immediately initiates a normal QUIC handshake
using the server's address from the nominated address pair. The ICE connectivity
checks should have created the necessary NAT bindings for the client's first
flight to reach the server and for the server's first flight to reach the
client.</t>
    </section>
    <section anchor="setup">
      <name>NAT Traversal Extension Overview</name>
      <t>The extension described in this document assumes that the endpoints first
establish a QUIC connection over a proxied path. One or both endpoints can be
behind a NAT. The terms client and server refer to their roles in this QUIC
connection: the client initiates the handshake, and the server responds.</t>
      <t>The proxied path runs through a relay, which forwards UDP payloads between the
endpoints without terminating the QUIC connection. Each endpoint's connection to
the relay (for example, an HTTP connection to a proxy) is separate from the
end-to-end QUIC connection. <xref target="setup-topology"/> shows a setup with both endpoints
behind NATs. The dotted line shows the direct path that the endpoints attempt to
establish.</t>
      <figure anchor="setup-topology">
        <name>Proxied and direct paths between QUIC endpoints</name>
        <artwork><![CDATA[
                         Proxied path
                          +-------+
                          | Relay |
                          +-------+
                         /         \
                        /           \
+-------------+   +-----+           +-----+   +-------------+
| QUIC client |---| NAT |...........| NAT |---| QUIC server |
+-------------+   +-----+           +-----+   +-------------+
                   Potential direct path
]]></artwork>
      </figure>
      <t>Establishing the proxied path is out of scope for this document. This can be
done in multiple ways, for example using Traversal Using Relays around NAT
(TURN; <xref target="TURN"/>), CONNECT-UDP Bind (<xref target="CONNECT-UDP-LISTEN"/>), or UDP
Rendezvous over HTTP (<xref target="UDP-RENDEZVOUS"/>). Peer discovery and address candidate
gathering (<xref target="gathering-candidates"/>) are also out of scope.</t>
      <t>The protocol is asymmetric by design. Only the server advertises its address
candidates over the connection. The client pairs them with its own candidates
and decides which pairs to try and when. The server authorizes attempts and
probes the requested pairs. This allows the client to change its pairing and
scheduling algorithms without updating the server.</t>
      <t>Both endpoints send QUIC path validation packets to create the NAT bindings
needed for a direct path and test its connectivity. Once a suitable direct path
has been validated, the connection can migrate to it. Multiple paths can be
validated in parallel. When using QUIC Multipath <xref target="MULTIPATH"/>, these paths may
be used at the same time; however, this extension does not require multipath.</t>
    </section>
    <section anchor="candidate-discovery-and-exchange">
      <name>Candidate Discovery and Exchange</name>
      <section anchor="gathering-candidates">
        <name>Gathering Address Candidates</name>
        <t>The gathering of address candidates is out of scope for this document. Endpoints
<bcp14>MAY</bcp14> use the logic described in Sections <xref target="RFC8445" section="5.1.1" sectionFormat="bare"/> and <xref target="RFC8445" section="5.2" sectionFormat="bare"/> of <xref target="RFC8445"/>, or they
<bcp14>MAY</bcp14> use address candidates provided by the application.</t>
      </section>
      <section anchor="advertising-server-address-candidates">
        <name>Advertising Server Address Candidates</name>
        <t>The server advertises its address candidates using ALTERNATIVE_ADDRESS frames,
as defined in <xref target="ALTERNATIVE-ADDRESS"/>. Each frame advertises the complete set of
alternative addresses and replaces the previously advertised set. The server
<bcp14>SHOULD NOT</bcp14> wait until address candidate discovery has finished; instead, it
<bcp14>SHOULD</bcp14> update the advertised set as soon as new candidates become available.
This speeds up NAT traversal and is similar to Trickle ICE (<xref target="RFC8838"/>).</t>
        <t>The server stores the sending bases associated with each advertised address.
Candidates with different sending bases <bcp14>MUST</bcp14> be advertised as separate
entries, even if their advertised addresses are identical.</t>
        <t>Each advertisement of an address <bcp14>MUST</bcp14> retain one entry per base ever advertised
for it on this connection. Without an increase in the entry count, the client
cannot distinguish a replaced base from an unchanged one and might not schedule
another attempt.</t>
        <t>Across advertisements, entries for the same address <bcp14>MUST</bcp14> retain their relative
order and associated sending bases. Entries for new bases <bcp14>MUST</bcp14> follow the
existing entries for that address.</t>
        <t>The server <bcp14>MAY</bcp14> withdraw an address by omitting all its entries from a subsequent
address-set update.</t>
      </section>
      <section anchor="forming-candidate-pairs">
        <name>Forming Candidate Pairs</name>
        <t>The client matches the address candidates sent by the server with its own
address candidates, forming candidate pairs. <xref section="6.1.2.2" sectionFormat="of" target="RFC8445"/>
describes an algorithm for pairing address candidates. The client is free to use
a different algorithm.</t>
        <t>The client <bcp14>MUST</bcp14> treat local candidates with different sending bases and
distinct server entries as separate candidates, even if their addresses are
identical. It <bcp14>SHOULD</bcp14> request one attempt per compatible pair. Across
advertisements, the client identifies a server candidate by its address and
position among entries for that address.</t>
      </section>
    </section>
    <section anchor="coordinated-probing">
      <name>Coordinated Path Probing</name>
      <t>The server authorizes attempts using PUNCH_GRANT (<xref target="punch-grant-frame"/>). Each
grant permits one independent path validation attempt for an address pair. The
client uses a grant by sending PUNCH_REQUEST with its Grant ID and the selected
address pair on an established path. It <bcp14>SHOULD</bcp14> start validation immediately
after sending this request; the server <bcp14>SHOULD</bcp14> start immediately upon accepting
it. Validation follows <xref section="8.2" sectionFormat="of" target="RFC9000"/>, with additional rate limits
(<xref target="amplification-attack"/>). Each endpoint <bcp14>MUST</bcp14> set its own timeout following
<xref section="8.2.4" sectionFormat="of" target="RFC9000"/>.</t>
      <t>Each endpoint <bcp14>MUST</bcp14> send probe packets containing PATH_CHALLENGE frames for an
attempt from a single sending base to the peer address specified in the
PUNCH_REQUEST.</t>
      <t>Each endpoint <bcp14>MUST</bcp14> report success or timeout using PUNCH_DONE
(<xref target="punch-done-frame"/>); the server <bcp14>MUST</bcp14> also report rejection. Before sending it,
the endpoint <bcp14>MUST</bcp14> permanently stop sending probe packets containing
PATH_CHALLENGE frames for that attempt.</t>
      <t>PUNCH_DONE does not stop the peer's probing or change its validation result.</t>
      <t>The client <bcp14>SHOULD</bcp14> request attempts as candidate pairs and unused grants become
available, but <bcp14>MAY</bcp14> delay requests to prioritize pairs.</t>
      <section anchor="grant-limits">
        <name>Grant Limits</name>
        <t>The client's nat_traversal transport parameter (<xref target="negotiate-extension"/>) sets
the initial cumulative grant limit. MAX_PUNCH_GRANTS
(<xref target="max-punch-grants-frame"/>) can increase it. The server <bcp14>MUST NOT</bcp14> issue a grant
whose Grant ID is greater than or equal to the largest limit received. The
client <bcp14>MUST</bcp14> treat receipt of a grant at or above its largest advertised limit
as a connection error of type PROTOCOL_VIOLATION.</t>
        <t>The server decides when to issue grants within the limit; the client decides
when to increase it.</t>
      </section>
      <section anchor="punching-cids">
        <name>Punching Connection IDs</name>
        <t>This document introduces punching connection IDs, a new type of connection ID
for coordinated path probing. They have the same wire format in packet headers
as ordinary connection IDs and <bcp14>MUST</bcp14> satisfy the unlinkability requirements in
<xref section="5.1" sectionFormat="of" target="RFC9000"/>.</t>
        <t>The server and client each issue two punching connection IDs per grant, using
PUNCH_GRANT and PUNCH_REQUEST, respectively. The IDs <bcp14>MUST</bcp14> be distinct from all
others issued by that endpoint on the connection.</t>
        <t>In most circumstances, only one of the two connection IDs is needed, but there
are certain network setups where both need to be used (<xref target="different-base"/>).</t>
        <t>The NEW_CONNECTION_ID and RETIRE_CONNECTION_ID mechanisms of <xref target="RFC9000"/> and the
active_connection_id_limit transport parameter do not apply to punching
connection IDs.</t>
        <t>Packets containing PATH_CHALLENGE or PATH_RESPONSE frames for an attempt <bcp14>MUST</bcp14>
use one of the peer's punching connection IDs for that grant. Non-probing
packets <bcp14>MUST NOT</bcp14> use these IDs. If a peer receives a non-probing packet that
used a punching connection ID, it <bcp14>MUST</bcp14> close the connection with an error of
type PROTOCOL_VIOLATION.</t>
        <t>An endpoint retires a grant's punching connection IDs after both sending and
receiving PUNCH_DONE (<xref target="punch-done-frame"/>) for that attempt.</t>
        <section anchor="punching-multipath">
          <name>Use with Multipath</name>
          <t>When QUIC multipath <xref target="MULTIPATH"/> is negotiated, packets using punching
connection IDs <bcp14>MUST</bcp14> use the reserved Path ID 0xffffffff for nonce calculation
and acknowledgments. All grants share its packet number space, which <bcp14>MUST</bcp14>
persist for the connection's lifetime without resetting packet numbers. This
ID is excluded from ordinary path allocation, path limits, and path management.
PATH_ACK frames for this ID <bcp14>MUST</bcp14> be sent on a validated path using an ordinary
destination connection ID.</t>
        </section>
      </section>
      <section anchor="different-base">
        <name>Probes Received on a Different Base</name>
        <t>Under certain network configurations, a probe packet can arrive at a different
base than the one the receiving endpoint selected for its attempt. This can
happen when overlapping address spaces give candidates with different bases
the same address (<xref section="B.2" sectionFormat="of" target="RFC8445"/>).</t>
        <t>Both endpoints follow the path validation rules of <xref target="RFC9000"/> in addition to
the coordinated probing rules above. An endpoint sends a packet containing the
PATH_RESPONSE from the receiving base to the probe's source address. A matching
PATH_RESPONSE validates the path on which the corresponding probe was sent,
regardless of where the response arrives.</t>
      </section>
      <section anchor="amplification-attack">
        <name>Amplification Attack Mitigation</name>
        <t>TODO describe exactly how to mitigate amplification attacks</t>
      </section>
    </section>
    <section anchor="negotiate-extension">
      <name>Extension Negotiation</name>
      <t>Endpoints advertise their support of the extension by sending the nat_traversal
(0x3d7e9f0bca12fea6) transport parameter (<xref section="7.4" sectionFormat="of" target="RFC9000"/>).</t>
      <t>The client's value is a single variable-length integer specifying the initial
cumulative grant limit (<xref target="grant-limits"/>). The server <bcp14>MUST</bcp14> send an empty value.
An endpoint that understands this transport parameter <bcp14>MUST</bcp14> treat receipt of an
invalid value as a connection error of type TRANSPORT_PARAMETER_ERROR.</t>
      <t>The client <bcp14>MUST</bcp14> also send the alternative_address transport parameter defined in
<xref target="ALTERNATIVE-ADDRESS"/>. A server that understands nat_traversal <bcp14>MUST</bcp14> treat
receipt of nat_traversal without alternative_address as a connection error of
type TRANSPORT_PARAMETER_ERROR.</t>
      <t>This transport parameter <bcp14>MUST NOT</bcp14> be remembered for use in 0-RTT. The frames
defined in this document <bcp14>MUST</bcp14> only be sent in 1-RTT packets.</t>
    </section>
    <section anchor="frames">
      <name>Frames</name>
      <t>This extension defines the PUNCH_GRANT, MAX_PUNCH_GRANTS, PUNCH_REQUEST, and
PUNCH_DONE frames.</t>
      <section anchor="punch-grant-frame">
        <name>PUNCH_GRANT Frame</name>
        <artwork><![CDATA[
PUNCH_GRANT Frame {
    Type (i) = 0x3d7e96,
    Grant ID (i),
    Connection ID 1 Length (8),
    Connection ID 1 (8..160),
    Connection ID 2 Length (8),
    Connection ID 2 (8..160),
}
]]></artwork>
        <t>PUNCH_GRANT authorizes one attempt and supplies the two server-issued punching
connection IDs (<xref target="punching-cids"/>). The server <bcp14>MUST</bcp14> number new grants
consecutively from 0 within each connection, subject to the client's grant
limit (<xref target="grant-limits"/>).</t>
        <t>Both Connection ID Length fields specify a length in bytes from 1 to 20;
other values <bcp14>MUST</bcp14> be treated as FRAME_ENCODING_ERROR.</t>
        <t>PUNCH_GRANT is ack-eliciting and sent on a validated path. The Grant ID <bcp14>SHOULD</bcp14>
be retransmitted on loss until acknowledged.</t>
        <t>This frame is only sent from the server to the client. Servers <bcp14>MUST</bcp14> treat
receipt of a PUNCH_GRANT frame as a connection error of type PROTOCOL_VIOLATION.</t>
      </section>
      <section anchor="max-punch-grants-frame">
        <name>MAX_PUNCH_GRANTS Frame</name>
        <artwork><![CDATA[
MAX_PUNCH_GRANTS Frame {
    Type (i) = 0x3d7e97,
    Maximum Grants (i),
}
]]></artwork>
        <t>Maximum Grants is the cumulative number of grants the server may issue,
including grants already used. Servers <bcp14>MUST</bcp14> ignore values that do not increase
the limit.</t>
        <t>MAX_PUNCH_GRANTS is ack-eliciting and sent on a validated path. On loss, the
client <bcp14>MUST</bcp14> retransmit its current limit unless it has already been
acknowledged.</t>
        <t>This frame is only sent from the client to the server. Clients <bcp14>MUST</bcp14> treat
receipt of a MAX_PUNCH_GRANTS frame as a connection error of type
PROTOCOL_VIOLATION.</t>
      </section>
      <section anchor="punchrequest-frame">
        <name>PUNCH_REQUEST Frame</name>
        <artwork><![CDATA[
PUNCH_REQUEST Frame {
    Type (i) = 0x3d7e92,
    Grant ID (i),
    Connection ID Length (8),
    Connection ID (8..160),
    Client Address Type (8),
    Client IP Address (32..128),
    Client Port (16),
    Advertisement Sequence Number (i),
    Entry Index (i),
}
]]></artwork>
        <t>The PUNCH_REQUEST frame contains the following fields:</t>
        <dl>
          <dt>Grant ID:</dt>
          <dd>
            <t>The grant used for this attempt (<xref target="punch-grant-frame"/>).</t>
          </dd>
          <dt>Connection ID Length and Connection ID:</dt>
          <dd>
            <t>The length in bytes and value of a client-issued punching connection ID
(<xref target="punching-cids"/>). Lengths outside 1 to 20 <bcp14>MUST</bcp14> be treated as
FRAME_ENCODING_ERROR.</t>
          </dd>
          <dt>Client Address Type:</dt>
          <dd>
            <t>The address family of the Client IP Address field. The values 0x01 and
 0x02 indicate IPv4 and IPv6, respectively, as in <xref target="ALTERNATIVE-ADDRESS"/>.
 Receipt of any other value <bcp14>MUST</bcp14> be treated as a connection error of type
 FRAME_ENCODING_ERROR.</t>
          </dd>
          <dt>Client IP Address:</dt>
          <dd>
            <t>The client's address candidate. This field is 32 bits long for IPv4 and 128
 bits long for IPv6, as indicated by Client Address Type.</t>
          </dd>
          <dt>Client Port:</dt>
          <dd>
            <t>The port number of the client's address candidate.</t>
          </dd>
          <dt>Advertisement Sequence Number:</dt>
          <dd>
            <t>The Sequence Number of the referenced ALTERNATIVE_ADDRESS frame.</t>
          </dd>
          <dt>Entry Index:</dt>
          <dd>
            <t>The zero-based index of the selected IPv4 or IPv6 entry in that frame,
counting all entries, including CURRENT_PATH.</t>
          </dd>
        </dl>
        <t>The client <bcp14>MUST</bcp14> use a received, unused grant for each new attempt. Sending
PUNCH_REQUEST permanently binds that grant to the client address and server
entry reference, even if rejected. The client <bcp14>MUST</bcp14> send PUNCH_REQUEST:</t>
        <ul spacing="normal">
          <li>
            <t>On an established path, using an ordinary destination connection ID and
carrying one of its punching connection IDs. Only this copy starts the
server's validation.</t>
          </li>
          <li>
            <t>In every probe packet containing PATH_CHALLENGE for the attempt, carrying
its other punching connection ID.</t>
          </li>
        </ul>
        <t>The server <bcp14>MUST</bcp14> process both forms in either arrival order, ignoring duplicates
of each form, and process the direct copy before answering its PATH_CHALLENGE.
Both forms <bcp14>MUST</bcp14> use the same Grant ID, client address, Advertisement Sequence
Number, and Entry Index; retransmissions <bcp14>MUST</bcp14> repeat each form's connection ID.
Unissued Grant IDs, mismatched destination connection IDs, and detected
conflicting values <bcp14>MUST</bcp14> be treated as PROTOCOL_VIOLATION.</t>
        <t>For the first established-path copy, the server <bcp14>MUST</bcp14> send PUNCH_DONE with
Status STALE_ADVERTISEMENT if the referenced advertisement is older than its
latest, without starting validation. Otherwise, an unsent advertisement or
an index that does not select an IPv4 or IPv6 entry <bcp14>MUST</bcp14> be treated as
PROTOCOL_VIOLATION.</t>
        <t>For accepted attempts, the server <bcp14>MUST</bcp14> use the selected entry's sending base.
Later advertisements <bcp14>MUST NOT</bcp14> change the selected address or base.</t>
        <t>PUNCH_REQUEST is a probing frame (<xref section="9.1" sectionFormat="of" target="RFC9000"/>) and is
ack-eliciting. The established-path copy <bcp14>MUST</bcp14> be retransmitted on loss until it
is acknowledged or the server's PUNCH_DONE is received, even after local probing
ends. Direct copies <bcp14>MUST NOT</bcp14> be retransmitted independently.</t>
        <t>This frame is only sent from the client to the server. Clients <bcp14>MUST</bcp14> treat
receipt of a PUNCH_REQUEST frame as a connection error of type
PROTOCOL_VIOLATION.</t>
      </section>
      <section anchor="punch-done-frame">
        <name>PUNCH_DONE Frame</name>
        <artwork><![CDATA[
PUNCH_DONE Frame {
    Type (i) = 0x3d7e95,
    Grant ID (i),
    Status (i),
}
]]></artwork>
        <t>The Grant ID identifies the attempt. Status reports the sender's result:</t>
        <ul spacing="normal">
          <li>
            <t>SUCCEEDED (0x00): The sender's path validation succeeded.</t>
          </li>
          <li>
            <t>FAILED (0x01): The sender's path validation timed out.</t>
          </li>
          <li>
            <t>REJECTED (0x02): The server declined to start the attempt. The client <bcp14>SHOULD
NOT</bcp14> retry the same candidate pair.</t>
          </li>
          <li>
            <t>STALE_ADVERTISEMENT (0x03): The referenced advertisement was superseded.</t>
          </li>
        </ul>
        <t>After STALE_ADVERTISEMENT, the client <bcp14>MUST</bcp14> use a newer advertisement for any
retry.</t>
        <t>Each endpoint's Status <bcp14>MUST</bcp14> remain unchanged for a given Grant ID. Endpoints
<bcp14>MUST</bcp14> treat detected conflicting statuses from the peer for a grant as a
connection error of type PROTOCOL_VIOLATION.</t>
        <t>PUNCH_DONE can only be sent in response to a PUNCH_REQUEST. A client that
receives a PUNCH_DONE frame with a Grant ID for which it didn't send a
PUNCH_REQUEST frame <bcp14>MUST</bcp14> close the connection with an error of type
PROTOCOL_VIOLATION. Due to packet reordering, a server might receive a
PUNCH_DONE frame before receiving the corresponding PUNCH_REQUEST frame.
Servers <bcp14>MUST</bcp14> treat an unissued Grant ID as a connection error of type
PROTOCOL_VIOLATION.</t>
        <t>An unknown Status, or REJECTED or STALE_ADVERTISEMENT received by a server, <bcp14>MUST</bcp14>
be treated as a connection error of type FRAME_ENCODING_ERROR.</t>
        <t>If PUNCH_DONE arrives before the request sent on the established path, the
server <bcp14>MUST</bcp14> retain the Status and process that request normally when it arrives.</t>
        <t>PUNCH_DONE is a non-probing, ack-eliciting frame sent on a validated path. It
<bcp14>MUST</bcp14> be retransmitted on loss until acknowledged.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document expands QUIC's path validation logic to QUIC servers, allowing a
QUIC client to request the sending of path validation packets on unverified
paths. A malicious client can direct traffic to a target IP. This attack is
similar to the IP address spoofing attack that address validation during
connection establishment (see <xref section="8.1" sectionFormat="of" target="RFC9000"/>) is designed to
prevent. In practice, however, IP address spoofing is often additionally
mitigated by ingress and egress filtering at the IP layer. This mitigation is
not possible when using this extension. The server therefore needs to carefully
limit the amount of data it sends on unverified paths.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: fill out registration request for the transport parameter and frame types</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ALTERNATIVE-ADDRESS">
          <front>
            <title>QUIC Alternative Server Address Frames</title>
            <author fullname="Marco Munizaga" initials="M." surname="Munizaga">
              <organization>Ethereum Foundation</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <date day="25" month="September" year="2026"/>
            <abstract>
              <t>   This document specifies an extension to QUIC that allows a server to
   advertise a prioritized set of alternative addresses.  This allows a
   client to migrate the connection as the availability of, or
   preference among, server addresses changes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-munizaga-quic-alternative-server-address-02"/>
        </reference>
        <reference anchor="MULTIPATH">
          <front>
            <title>Managing multiple paths for a QUIC connection</title>
            <author fullname="Yanmei Liu" initials="Y." surname="Liu">
              <organization>Alibaba Inc.</organization>
            </author>
            <author fullname="Yunfei Ma" initials="Y." surname="Ma">
              <organization>Uber Technologies Inc.</organization>
            </author>
            <author fullname="Quentin De Coninck" initials="Q." surname="De Coninck">
              <organization>University of Mons (UMONS)</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>UCLouvain and WELRI</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <date day="17" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies a multipath extension for the QUIC protocol
   to enable the simultaneous usage of multiple paths for a single
   connection.  It introduces explicit path identifiers to create,
   delete, and manage multiple paths.  This document does not specify
   address discovery or management, nor how applications using QUIC
   schedule traffic over multiple paths.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath-21"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC8445">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9287">
          <front>
            <title>Greasing the QUIC Bit</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes a method for negotiating the ability to send an arbitrary value for the second-most significant bit in QUIC packets.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9287"/>
          <seriesInfo name="DOI" value="10.17487/RFC9287"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CONNECT-UDP-LISTEN">
          <front>
            <title>Proxying Bound UDP in HTTP</title>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Abhijit Singh" initials="A." surname="Singh">
              <organization>Google LLC</organization>
            </author>
            <date day="24" month="August" year="2026"/>
            <abstract>
              <t>   The mechanism defined in "Proxying UDP in HTTP" (RFC 9298) only
   allows each UDP proxying request to transmit to a specific host and
   port.  This is well suited for UDP client-server protocols such as
   HTTP/3, but is not sufficient for some UDP peer-to-peer protocols
   like WebRTC.  This document defines an extension to that mechanism
   that enables such use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-listen-16"/>
        </reference>
        <reference anchor="UDP-RENDEZVOUS">
          <front>
            <title>UDP Rendezvous over HTTP</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <date day="16" month="August" year="2026"/>
            <abstract>
              <t>   This document defines an Extended CONNECT protocol for relaying UDP
   between two clients authenticated by the same proxy.  A Listener
   registers with the proxy, and a Client uses the resulting Rendezvous
   ID to connect to it.  No public UDP address is allocated.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-seemann-masque-connect-udp-rendezvous-00"/>
        </reference>
        <reference anchor="TURN">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="T. Reddy" initials="T." role="editor" surname="Reddy"/>
            <author fullname="A. Johnston" initials="A." role="editor" surname="Johnston"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>If a host is located behind a NAT, it can be impossible for that host to communicate directly with other hosts (peers) in certain situations. In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called "Traversal Using Relays around NAT" (TURN), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.</t>
              <t>The TURN protocol was designed to be used as part of the Interactive Connectivity Establishment (ICE) approach to NAT traversal, though it can also be used without ICE.</t>
              <t>This document obsoletes RFCs 5766 and 6156.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8656"/>
          <seriesInfo name="DOI" value="10.17487/RFC8656"/>
        </reference>
        <reference anchor="RFC8838">
          <front>
            <title>Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol</title>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document describes "Trickle ICE", an extension to the Interactive Connectivity Establishment (ICE) protocol that enables ICE agents to begin connectivity checks while they are still gathering candidates, by incrementally exchanging candidates over time instead of all at once. This method can considerably accelerate the process of establishing a communication session.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8838"/>
          <seriesInfo name="DOI" value="10.17487/RFC8838"/>
        </reference>
      </references>
    </references>
    <?line 519?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ZxU8BRuI/wN8MGdYrlMAAA==

-->

</rfc>
