<?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.21 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-gage-quic-pathmgmt-00" category="exp" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="QUIC Path Management">QUIC Path Management for Multi-Path Configurations</title>
    <seriesInfo name="Internet-Draft" value="draft-gage-quic-pathmgmt-00"/>
    <author initials="W." surname="Gage" fullname="Bill Gage">
      <organization>Unaffiliated</organization>
      <address>
        <postal>
          <city>Ottawa</city>
          <country>Canada</country>
        </postal>
        <email>billgage.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="December" day="04"/>
    <area>Internet</area>
    <workgroup>QUIC Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 57?>

<t>This document defines path management procedures for QUIC that operate independently of the connection management procedures defined in RFC9000. The path management procedures enable a multipath configuration between endpoints by allowing QUIC packets associated with any connection identifier to be transported over any of the paths established between the endpoints. As a consequence, the principles and operations of RFC9000 are retained regardless of the path used to a convey QUIC packet.</t>
    </abstract>
  </front>
  <middle>
    <?line 62?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Architecturally, one may consider two models for data transport over multiple paths: model (A) is a collection of uni-path connection constructs while model (B) is a uni-path connection construct operating over a collection of paths.</t>
      <t>Model (A) is like multipath TCP <xref target="MPTCP"/> that uses multiple TCP connections, one for each of the paths. Model (B) is like a single TCP connection operating over a layer 2 link aggregation group <xref target="LAG"/>. In model (B), a TCP segment can be transmitted in an IP datagram over any of the links in the LAG.</t>
      <t>In model (B), path management is distinct from connection management. Conceptually, a connection entity sits on top of a path management entity. A packet transmitted by a connection entity is redirected over one of the available paths by the path management entity. A packet received over any of the available paths is redirected by the path management entity to the connection associated with the packet. The addition, removal and maintenance of paths is handled by the path management entity in a way that is transparent to the connection entities.</t>
      <figure anchor="fig-path-model">
        <name>Model (B)</name>
        <artwork align="center"><![CDATA[
    +--------------+  +--------------+
    | connection X |  | connection Y |
    +--------------+  +--------------+
           |                 |
    +--------------------------------+
    |        path management         |
    +--------------------------------+
        |          |              |
   +--------+ +--------+     +--------+
   | path 1 | | path 2 | ... | path n |
   +--------+ +--------+     +--------+
]]></artwork>
      </figure>
      <t>This document describes multi-path QUIC procedures using model (B). In particular, a QUIC packet can be sent over any of the available (and unrestricted) paths. Since connection identifiers are independent of path, a QUIC packet received over any path is processed in the same way as a packet received over the single path construct of <xref target="RFC9000"/> -- i.e. there is a single application data packet number space and an ACK received over any path contains unambiguous packet numbers. While congestion control must clearly be path-specific, connection management, key management and packet loss recovery are not path-specific.</t>
      <section anchor="conventions">
        <name>Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
        </t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the following terminology:</t>
        <dl>
          <dt>path:</dt>
          <dd>
            <t>an association with the 4-tuple of an IP/UDP datagram (source IP address, destination IP address, source UDP port, and destination UDP port). The term "path" is used for consistency with other multipath protocols such as <xref target="MPTCP"/> since, in fact, an endpoint has no knowledge of the path a datagram follows through the network beyond the first hop to a network access point.</t>
          </dd>
          <dt>PathID:</dt>
          <dd>
            <t>path identifier.</t>
          </dd>
          <dt>PMQUIC:</dt>
          <dd>
            <t>path-managed QUIC (as defined in this document).</t>
          </dd>
          <dt>session:</dt>
          <dd>
            <t>a collection of QUIC connections and paths used to exchange QUIC packets between two endpoints.</t>
          </dd>
        </dl>
      </section>
      <section anchor="notation">
        <name>Notation</name>
        <t>This document uses the field notation defined in <xref target="RFC9000"/> and quoted below:</t>
        <blockquote>
          <t>Individual fields use the following notational conventions, with all lengths in bits:</t>
          <t>x (A): Indicates that x is A bits long</t>
          <t>x (i): Indicates that x holds an integer value using the variable length encoding described in <xref target="RFC9000"/> Section 16</t>
          <t>x (A..B): Indicates that x can be any length from A to B; A can be omitted to indicate a minimum of zero bits, and B can be omitted to indicate no set upper limit; values in this format always end on a byte boundary</t>
          <t>x (L) = C: Indicates that x has a fixed value of C; the length of x is described by L, which can use any of the length forms above</t>
          <t>x (L) = C..D: Indicates that x has a value in the range from C to D, inclusive, with the length described by L, as above</t>
          <t>x (L)...: Indicates that x is repeated zero or more times and that each instance has a length of L</t>
        </blockquote>
      </section>
    </section>
    <section anchor="multipathmgmt">
      <name>Multipath Management</name>
      <t>Connection migration to a new path is already supported in <xref target="RFC9000"/>. While <xref target="RFC9000"/> only defines communication over one path at any given time, path-managed QUIC (PMQUIC) provides multiple paths between session endpoints where the paths can be simultaneously active and used to exchange QUIC packets. PMQUIC also provides facilities to explicitly manage the use of paths.</t>
      <t>PMQUIC is based on several basic design points:</t>
      <ul spacing="normal">
        <li>
          <t>Re-use the mechanisms of <xref target="RFC9000"/> as much as possible. In particular, PMQUIC uses path validation based on <xref target="RFC9000"/> and re-uses all of the connection management, key management and loss recovery procedures of <xref target="RFC9000"/>.</t>
        </li>
        <li>
          <t>Use the same packet header formats as <xref target="RFC9000"/> to avoid differences between multipath and non-multipath traffic over a particular path.</t>
        </li>
        <li>
          <t>Do not modify frame formats defined in <xref target="RFC9000"/>; if necessary, define new frame types for path management operations.</t>
        </li>
      </ul>
      <t>PMQUIC changes the path management mechanisms specified in Section 9 of <xref target="RFC9000"/>:</t>
      <ul spacing="normal">
        <li>
          <t>allow simultaneous transmission of non-probing frames on multiple paths;</t>
        </li>
        <li>
          <t>continue using an existing path even if non-probing frames have been received on another path;</t>
        </li>
        <li>
          <t>manage the removal of paths that have been abandoned or lost.</t>
        </li>
      </ul>
      <t>In addition, PMQUIC changes several QUIC path-specific procedures described in <xref target="RFC9002"/>:</t>
      <ul spacing="normal">
        <li>
          <t>congestion control;</t>
        </li>
        <li>
          <t>RTT measurements;</t>
        </li>
        <li>
          <t>path maximum payload size discovery.</t>
        </li>
      </ul>
    </section>
    <section anchor="highlevel">
      <name>High-level Overview</name>
      <t>PMQUIC enables the simultaneous use of different paths to exchange non-probing QUIC frames. This differs from <xref target="RFC9000"/> where the connection migration procedure selects only one path to exchange non-probing frames.</t>
      <t>A PMQUIC session between endpoints starts with a standard QUIC handshake over an initial (default) path. As indicated by <xref target="RFC9000"/>, an endpoint MUST NOT attempt to activate a new path before the handshake is confirmed. The endpoints use a new <tt>max_active_paths</tt> transport parameter during the initial cryptographic handshake to negotiate the use of path management capabilities (<xref target="transport_max_active_paths"/>). The <tt>max_active_paths</tt> transport parameter indicates support for path management operations and limits the maximum number of active paths that can be used between the endpoints.</t>
      <t>To add a new path to an existing PMQUIC session, a client starts a path validation on the chosen path. A new path can only be used to transport non-probing frames once the path has been validated using mechanisms similar to those described in Section 8 of <xref target="RFC9000"/>. New PM_CHALLENGE and PM_CHALLENGE_RESPONSE frames are used to validate the path and to assign an identifier to the path. A new PM_STATUS frame may be used to control use of a path and a new PM_ABANDON frame may be used to abandon a path between endpoints, preventing further use of that path to exchange QUIC packets.</t>
      <t>PM_STATUS and PM_ABANDON frames include a path identifier that is assigned to the affected path, allowing the frame to be forwarded over any of the (allowable) paths active at the time of transmission.</t>
      <t>PMQUIC operations do not change the basic operations described in <xref target="RFC9000"/>. In particular, <em>none</em> of the following procedures described in <xref target="RFC9000"/> are affected by the use of multiple paths:</t>
      <ul spacing="normal">
        <li>
          <t>connection management (e.g. the use of NEW_CONNECTION_ID frames and subsequent rotation of connection identifiers);</t>
        </li>
        <li>
          <t>key management (e.g. use of key phase bit) and derivation of AEAD parameters;</t>
        </li>
        <li>
          <t>packet loss detection and loss recovery (e.g. using type 0x02 ACK frames).</t>
        </li>
      </ul>
      <t>However, changes to <xref target="RFC9002"/> procedures are required to deal with path-dependent characteristics such as path MTU size, RTT and congestion.</t>
    </section>
    <section anchor="pathid">
      <name>Path Identification</name>
      <t>A path is associated with the 4-tuple of an IP/UDP datagram (source IP address, destination IP address, source UDP port, and destination UDP port). However, PMQUIC explicitly assigns an identifier to each path to decouple path management from the 4-tuple of the IP/UDP datagram used to transport a QUIC packet.</t>
      <t>A path identifier is an integer assigned to a path by an endpoint that unambiguously identifies the path within the session from the perspective of that endpoint. The initial (default) path (i.e. the path used for the exchange of QUIC initial and handshake packets) is implicitly assigned path identifier (PathID) 0 (zero) for the client and PathID 1 (one) for the server. Other than PathID 0 and PathID 1, each endpoint independently selects the path identifier that it wants to assign to a new path and communicates the chosen PathID to its peer in a PM_CHALLENGE/PM_CHALLENGE_RESPONSE transaction.</t>
      <t>An endpoint MUST choose a different PathID for each path in the session -- i.e. a path identifier assigned to one path MUST NOT be reused by the endpoint as the identifier for a different path within the session. For example, a PathID may be a monotonically increasing value, or a randomly generated value, or a sequence of bytes with some internal structure. Since each endpoint independently selects its path identifier, the two endpoints may choose different PathIDs to refer to the same path. A server MAY choose to use the PathID provided by the client in the PM_CHALLENGE frame or the server may choose a different PathID.</t>
      <t>A received path identifier that is invalid MUST be treated as a connection error using transport error code <tt>Error_pmInvalidPathID</tt> (<xref target="connectionerrors"/>).</t>
      <t>If the 4-tuple associated with a QUIC connection changes without the use of path validation (<xref target="pathactivation"/>), this is considered a passive migration event (e.g. due to a NAT rebinding) and is outside the scope of this document -- i.e. it is already covered by <xref target="RFC9000"/>.</t>
      <t>QUIC connections exist and are managed independently of paths. An outgoing QUIC packet may be transmitted over any of the available and active paths, subject to any constraints that may have been placed on path usage by either of the QUIC endpoints (<xref target="packetsched"/>). Similarly, an incoming QUIC packet received over any path will be processed according to <xref target="RFC9000"/>, as though it had been received over a uni-path transport between the QUIC endpoints.</t>
    </section>
    <section anchor="path-activation-and-removal">
      <name>Path Activation and Removal</name>
      <t>PMQUIC provides mechanisms for adding new paths to a session and for removing unused or unusable paths from a session.</t>
      <section anchor="pathactivation">
        <name>Path Activation</name>
        <t>To initiate communications over a new path, an endpoint MUST send a PM_CHALLENGE frame in the first QUIC packet conveyed over the new path. The PM_CHALLENGE frame contains a new path identifier (PathID) and an unpredictable nonce (<xref target="frame_challenge"/>).</t>
        <t>The PM_CHALLENGE frame is encapsulated (in a QUIC packet) in an IP/UDP datagram where the 4-tuple of the datagram corresponds to the new path. Discovery of an endpoint IP address and UDP port is outside the scope of this document.</t>
        <t>To protect against correlation of communications across different IP addresses, it is RECOMMENDED that an endpoint use a new destination connection identifier in the QUIC packet containing the PM_CHALLENGE frame. The new destination connection identifier would have been previously provided by the peer endpoint in a NEW_CONNECTION_ID frame (<xref target="RFC9000"/> Section 19.15).</t>
        <t>The peer endpoint confirms use of the new path by sending a PM_CHALLENGE_RESPONSE frame (<xref target="frame_response"/>) that echoes the received nonce and provides a local PathID as a reference for the path (<xref target="pathid"/>). Again, it is RECOMMENDED that the peer endpoint use a new destination connection identifier in the QUIC packet containing the PM_CHALLENGE_RESPONSE frame.</t>
        <t>In implementations with decoupling between the path management and connection management entities, the PM_CHALLENGE and PM_CHALLENGE_RESPONSE frames MAY be sent in a QUIC packet using a current connection identifier. An endpoint can disable this behaviour by including a <tt>disable_path_migration</tt> transport parameter in the initial cryptographic handshake (<xref target="transport_disable_path_migration"/>). An endpoint using a zero-length connection identifier MUST NOT include a <tt>disable_path_migration</tt> transport parameter in the initial handshake.</t>
        <t>The peer endpoint may refuse use of the new path by not sending a PM_CHALLENGE_RESPONSE in response to the PM_CHALLENGE or by sending a PM_CHALLENGE_RESPONSE with a path status parameter (<xref target="parameter_pathStatus"/>) set to <tt>Status_NotAvailable</tt>.</t>
        <t>If the initiating endpoint does not receive a confirming PM_CHALLENGE_RESPONSE frame, it may transmit a new PM_CHALLENGE frame using the same (or a different) IP/UDP 4-tuple but MUST use a new PathID and a different nonce.</t>
        <t>To guard against reception of a PM_CHALLENGE frame in an IP/UDP datagram with a spoofed source address, an endpoint receiving a PM_CHALLENGE frame on a new path SHOULD send its own PM_CHALLENGE frame in an IP/UDP datagram that is separate from the IP/UDP datagram used to convey its PM_CHALLENGE_RESPONSE frame.</t>
      </section>
      <section anchor="pathremoval">
        <name>Path Removal</name>
        <t>To terminate communications over an established path, an endpoint sends a PM_ABANDON frame (<xref target="frame_abandon"/>) containing the PathID of the path to be abandoned. A PM_ABANDON frame may be transmitted over any path that is active (and allowable) at the time of transmission. Abandoning a path has no effect on a QUIC connection.</t>
        <t>If the endpoint does not receive an ACK to the QUIC packet containing the PM_ABANDON frame, the PM_ABANDON frame may be retransmitted over the same or a different path.</t>
        <t>The reason for abandoning a path may be one of the following (<xref target="iana_abandon_reason"/>):</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt><tt>Reason_Failing</tt></dt>
              <dd>
                <t>indicating that the path is failing (e.g. the path is experiencing excessive transmission errors);</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Reason_Lost</tt></dt>
              <dd>
                <t>indicating that the path is no longer available to the endpoint;</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Reason_NoAck</tt></dt>
              <dd>
                <t>indicating that the endpoint failed to received ACKs for QUIC packets transmitted over the path;</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Reason_Timeout</tt></dt>
              <dd>
                <t>indicating that a idle timer expired with no QUIC packets transmitted or received over the path;</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Reason_MaxData</tt></dt>
              <dd>
                <t>indicating that the maximum amount of data allowed to be sent on the path has been reached.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Reason_Unspecified</tt></dt>
              <dd>
                <t>indicating that the reason is unknown or is otherwise unspecified.</t>
              </dd>
            </dl>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="pathmaintain">
      <name>Path Maintenance</name>
      <t>Once a path between endpoints has been validated, PMQUIC provides mechanisms for defining and updating operational parameters related to the path.</t>
      <section anchor="pathstatus">
        <name>Path Transmission Status</name>
        <t>An endpoint may indicate its initial path transmission status in a PM_CHALLENGE frame (<xref target="frame_challenge"/>) or in the corresponding PM_CHALLENGE_RESPONSE frame (<xref target="frame_response"/>). By default, the initial path transmission status is <tt>Status_Available</tt> (<xref target="pathstatusvalue"/>).</t>
        <t>Subsequently, an initiating endpoint may send a PM_STATUS frame (<xref target="frame_status"/>) to inform its peer endpoint of the desired status of a path (<xref target="pathstatusvalue"/>) and, optionally, to indicate the precedence assigned to the path by the initiating endpoint (<xref target="pathprecedence"/>).</t>
        <t>Each PM_STATUS frame includes a status sequence number that is generated by the initiating endpoint; each endpoint maintains it own status sequence number. The status sequence number MUST be a monotonically increasing value and MUST NOT be used more than once within a session.</t>
        <t>If the initiating endpoint does not receive an ACK to the QUIC packet containing the PM_STATUS frame, the PM_STATUS frame may be retransmitted over the same or a different path but MUST include a new status sequence number.</t>
        <t>The receiving endpoint MUST ignore an incoming PM_STATUS frame if it previously received another PM_STATUS frame with a status sequence number equal to or higher than the status sequence number of the incoming frame.</t>
        <t>If the receiving endpoint does not agree with the status change, the receiving endpoint may send a PM_STATUS frame to inform the initiator of its desired status of the path.</t>
        <t>A PM_STATUS frame may be transmitted over any path that is active (and allowable) at the time of transmission.</t>
      </section>
      <section anchor="pathstatusvalue">
        <name>Path Status</name>
        <t>The status of a path may be set to one of the following:</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt><tt>Status_Available</tt></dt>
              <dd>
                <t>indicates that the path may used for transmission of a QUIC packet.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Status_Backup</tt></dt>
              <dd>
                <t>indicates that the path should not be used for transmission of a QUIC packet if another path exists in a <tt>Status_Available</tt> state. This path should only be used if no other path exists in a <tt>Status_Available state</tt>.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Status_Blocked</tt></dt>
              <dd>
                <t>indicates that the initiating endpoint has reached the maximum transmitted data limit imposed by a previously received <tt>Parameter_pathMaxData</tt> path parameter (<xref target="parameter_pathMaxData"/>). The receiving endpoint may increase the maximum data limit (and change the status of the path) using a subsequent PATH_STATUS frame (<xref target="frame_status"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Status_NotAvailable</tt></dt>
              <dd>
                <t>indicates that the path should not be used for transmission of a QUIC packet. Unlike an abandoned path (<xref target="pathremoval"/>), a path with <tt>Status_NotAvailable</tt> may be moved to <tt>Status_Available</tt> or <tt>Status_Backup</tt> when and if allowed by operational considerations.</t>
              </dd>
            </dl>
          </li>
        </ul>
      </section>
      <section anchor="pathprecedence">
        <name>Path Precedence</name>
        <t>A path precedence is a variable-length integer value that may be used to distinguish between paths when scheduling the transmission of a QUIC packet:</t>
        <ul spacing="normal">
          <li>
            <t>in general, a path with a higher precedence value is preferred over a path with a lower precedence value;</t>
          </li>
          <li>
            <t>multiple paths may be assigned the same precedence value;</t>
          </li>
          <li>
            <t>congestion control may override precedence to allow transmission over a less congested path;</t>
          </li>
        </ul>
        <t>Each endpoint independently determines the precedence of a path and communicates that precedence to its peer (<xref target="parameter_pathPrecedence"/>). The use of the local and peer path precedence values by an endpoint is beyond the scope of this document.</t>
      </section>
      <section anchor="pathcc">
        <name>Path Congestion Control</name>
        <t>Congestion control is applied per path, as described in <xref target="RFC9002"/> Section 7. QUIC packets sent on one path do not affect the congestion state of another path.</t>
      </section>
      <section anchor="pathrtt">
        <name>Path RTT Measurements</name>
        <t>Round-Trip Time measurements are performed per path, as described in <xref target="RFC9002"/> Section 5. In general, different paths may exhibit different RTTs.</t>
      </section>
      <section anchor="pathmptu">
        <name>Path Maximum UDP Payload Size</name>
        <t>By default, the maximum UDP payload size for a path is the <tt>max_udp_payload_size</tt> transport parameter defined in <xref target="RFC9000"/> Section 18.2.</t>
        <t>The maximum UDP payload size for a path can be adjusted by including a <tt>Parameter_pathPayloadSize</tt> (<xref target="parameter_pathPayloadSize"/>) in the list of path parameters in a PM_CHALLENGE frame (<xref target="frame_challenge"/>) or in a PM_CHALLENGE_RESPONSE frame (<xref target="frame_response"/>).</t>
        <t>If a <tt>Parameter_pathPayloadSize</tt> is included in a PM_CHALLENGE frame, this value takes precedence over the <tt>max_udp_payload_size</tt> transport parameter.</t>
        <t>If a <tt>Parameter_pathPayloadSize</tt> is included in a PM_CHALLENGE_RESPONSE frame, this value must be less than the value included in (or defaulted by) the PM_CHALLENGE frame and takes precedence over the value included in (or defaulted by) the PM_CHALLENGE frame.</t>
        <t>The mechanism used by an endpoint to determine maximum UDP payload size for a path is beyond the scope of this document. For example, the value may be determined by pre-configuration, by using a Path MTU Discovery (PMTUD) mechanism, or as a property of the endpoint.</t>
      </section>
    </section>
    <section anchor="packetsched">
      <name>Packet Scheduling</name>
      <t>A QUIC packet may be scheduled for transmission over a given path only if:</t>
      <ul spacing="normal">
        <li>
          <t>the path status is either <tt>Status_Available</tt> or <tt>Status_Backup</tt> (<xref target="pathstatusvalue"/>);</t>
        </li>
        <li>
          <t>there is no outstanding PM_ABANDON frame that is pending acknowledgement;</t>
        </li>
        <li>
          <t>transmission of the packet does not increase the number of bytes-in-flight beyond the congestion window of the path (<xref target="pathcc"/>);</t>
        </li>
        <li>
          <t>transmission of the packet does not cause the path maximum data limit to be exceeded (<xref target="parameter_pathMaxData"/>).</t>
        </li>
      </ul>
      <t>An endpoint SHOULD schedule a transmission over a path with <tt>Status_Available</tt>. If this is not possible, the endpoint MAY attempt a transmission over a path with <tt>Status_Backup</tt>.</t>
      <t>If more than one path is eligible for transmission of a packet, the algorithm used to select the path is beyond the scope of this document. An implementation may, for example, use the precedence value provided in a PM_CHALLENGE, PM_CHALLENGE_RESPONSE or PM_STATUS frame (<xref target="pathprecedence"/>).</t>
      <t>Precedence should only used to distinguish between paths with the same status -- i.e. between paths with <tt>Status_Available</tt> or between paths with <tt>Status_Backup</tt>.</t>
    </section>
    <section anchor="packetloss">
      <name>Packet Loss Detection and Recovery</name>
      <t>QUIC senders use acknowledgements to detect lost packets and a probe timeout (PTO) to ensure acknowledgements are received. Loss detection through acknowledgements is performed as described in <xref target="RFC9002"/> Section 6.1.</t>
      <t>Timer-based loss detection (<xref target="RFC9002"/> Section 6.1.2) must recognise that different paths may exhibit different RTTs (<xref target="pathrtt"/>) and SHOULD adjust the packet loss time threshold to accommodate those differences. Probe timeout (<xref target="RFC9002"/> Section 6.2) requires derivation of a PTO period that should also accommodate the different RTT that may be experienced over different paths.</t>
      <t>The mechanism used to accommodate those differences in path RTT is beyond the scope of this document.</t>
    </section>
    <section anchor="connectionerrors">
      <name>Path Management Connection Errors</name>
      <t>This document extends the QUIC Transport Error Codes of <xref target="RFC9000"/> Section 22.5 with the following values (<xref target="iana_error_codes"/>):</t>
      <ul spacing="normal">
        <li>
          <dl>
            <dt><tt>Error_pmExceededMaxData</tt></dt>
            <dd>
              <t>indicates that the endpoint received more data than allowed over a path (<xref target="parameter_pathMaxData"/>).</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt><tt>Error_pmInvalidPathID</tt></dt>
            <dd>
              <t>indicates the endpoint received an invalid path identifier (<xref target="pathid"/>) -- e.g. a duplicated path identifier, an unknown path identifier, or the identifier of an abandoned path.</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt><tt>Error_pmPathParameter</tt></dt>
            <dd>
              <t>indicates that a received path parameter (<xref target="path_parameters"/>) was invalid -- e.g.
was badly formatted, included an invalid type, included an invalid value, omitted a mandatory path parameter, included a forbidden path parameter, included a duplicated path parameter, or was otherwise in error.</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt><tt>Error_pmProtocolViolation</tt></dt>
            <dd>
              <t>indicates an error with protocol compliance that is not covered by a more specific error code -- e.g. an endpoint received a path management frame when path management is not enabled.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <t>Path management connection errors MUST be processed according to <xref target="RFC9000"/> Section 11.1.</t>
    </section>
    <section anchor="frametypes">
      <name>Path Management Frame Types</name>
      <t>PMQUIC procedures utilise four new QUIC frame types -- PM_CHALLENGE, PM_CHALLENGE_RESPONSE, PM_STATUS and PM_ABANDON:</t>
      <ul spacing="normal">
        <li>
          <t>all four path management frame types are ack-eliciting;</t>
        </li>
        <li>
          <t>PM_CHALLENGE and PM_CHALLENGE_RESPONSE frames are "probing frames";</t>
        </li>
        <li>
          <t>PM_STATUS and PM_ABANDON are "non-probing frames".</t>
        </li>
      </ul>
      <section anchor="frame_challenge">
        <name>PM_CHALLENGE frame</name>
        <t>When an endpoint (typically a client) wants to enable use of a new path, it initiates path validation by sending a PM_CHALLENGE frame over the new path. This is analogous to the use of a PATH_CHALLENGE frame in <xref target="RFC9000"/>.</t>
        <t>A PM_CHALLENGE frame (<xref target="fig-pm_challenge_frame"/>) includes the following fields:</t>
        <figure anchor="fig-pm_challenge_frame">
          <name>PM_CHALLENGE Frame Fields</name>
          <artwork><![CDATA[
   PM_CHALLENGE Frame {
     Type (i) = Type_pmChallenge,
     Initiator_PathID (i),
     Nonce (64),
     Path_Parameter (8..) ...,
   }
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <dl>
              <dt><tt>Type</tt></dt>
              <dd>
                <t>is set to <tt>Type_pmChallenge</tt> (<xref target="iana_frame_types"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Initiator_PathID</tt></dt>
              <dd>
                <t>is the PathID assigned to the path by the endpoint sending the PM_CHALLENGE frame (<xref target="pathid"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Nonce</tt></dt>
              <dd>
                <t>is an unpredictable nonce generated by the endpoint for use in this instance of a PM_CHALLENGE frame (<xref target="pathactivation"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Path_Parameter</tt></dt>
              <dd>
                <t>is a list of path parameters (<xref target="path_parameters"/>) although the list may be an empty list (<xref target="parameter_empty"/>). Path parameters not included in the PM_CHALLENGE frame assume their default values.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>The QUIC packet containing the PM_CHALLENGE frame MUST include PADDING frames to the maximum UDP payload size as defined by <tt>Parameter_pathPayloadSize</tt> (<xref target="parameter_pathPayloadSize"/>), if included in the path parameters, or by the default value if not included in the path parameters.</t>
      </section>
      <section anchor="frame_response">
        <name>PM_CHALLENGE_RESPONSE frame</name>
        <t>When an endpoint (typically a server) wants to acknowledge use of a new path, it confirms path validation by sending a PM_CHALLENGE_RESPONSE frame over the new path. This is analogous to the use of a PATH_RESPONSE frame in <xref target="RFC9000"/>.</t>
        <t>A PM_CHALLENGE_RESPONSE frame (<xref target="fig-pm_challenge_response_frame"/>) includes the following fields:</t>
        <figure anchor="fig-pm_challenge_response_frame">
          <name>PM_CHALLENGE_RESPONSE Frame Fields</name>
          <artwork><![CDATA[
   PM_CHALLENGE_RESPONSE Frame {
     Type (i) = Type_pmChallengeResponse,
     Initiator_PathID (i),
     Responder_PathID (i),
     Nonce (64),
     Path_Parameter (8..) ...,
   }
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <dl>
              <dt><tt>Type</tt></dt>
              <dd>
                <t>is set to <tt>Type_pmChallengeResponse</tt> (<xref target="iana_frame_types"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Initiator_PathID</tt></dt>
              <dd>
                <t>is the PathID included in the corresponding PM_CHALLENGE frame (<xref target="frame_challenge"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Responder_PathID</tt></dt>
              <dd>
                <t>is the PathID assigned to the path by the endpoint sending the PM_CHALLENGE_RESPONSE frame (<xref target="pathid"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Nonce</tt></dt>
              <dd>
                <t>is the nonce included in the corresponding PM_CHALLENGE frame (<xref target="frame_challenge"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Path_Parameter</tt></dt>
              <dd>
                <t>is a list of path parameters (<xref target="path_parameters"/>) although the list may be an empty list (<xref target="parameter_empty"/>). Path parameters not included in the PM_CHALLENGE_RESPONSE frame assume the (default) values indicated by the corresponding PM_CHALLENGE frame.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>The QUIC packet containing the PM_CHALLENGE_RESPONSE frame MUST include PADDING frames to the maximum UDP payload size as defined by <tt>Parameter_pathPayloadSize</tt> (<xref target="parameter_pathPayloadSize"/>), if specified, or by the default value, if not specified.</t>
      </section>
      <section anchor="frame_status">
        <name>PM_STATUS frame</name>
        <t>An endpoint uses a PM_STATUS frame to signal a change in a path parameter.</t>
        <t>A PM_STATUS frame (<xref target="fig-pm_status_frame"/>) includes the following fields:</t>
        <figure anchor="fig-pm_status_frame">
          <name>PM_STATUS Frame Fields</name>
          <artwork><![CDATA[
   PM_STATUS Frame {
     Type (i) = Type_pmStatus,
     Receiver_PathID (i),
     Path_Status_Sequence_Number (i),
     Path_Parameter (8..) ...,
    }
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <dl>
              <dt><tt>Type</tt></dt>
              <dd>
                <t>is set to <tt>Type_pmStatus</tt> (<xref target="iana_frame_types"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Receiver_PathID</tt></dt>
              <dd>
                <t>is the PathID assigned to the path by the peer endpoint receiving the PM_STATUS frame.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Path_Status_Sequence_Number</tt></dt>
              <dd>
                <t>is the sending endpoint's sequence number for this PM_STATUS frame (<xref target="pathstatus"/>).
d</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Path_Parameter</tt></dt>
              <dd>
                <t>is a list of path parameters (<xref target="path_parameters"/>) that MUST NOT be an empty list (<xref target="parameter_empty"/>) and MUST NOT include the following path parameters:
</t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Parameter_pathPayloadSize</tt> (<xref target="parameter_pathPayloadSize"/>)</t>
                  </li>
                </ul>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Note that the status of the path defaults to <tt>Status_Available</tt> unless explicitly defined by including a <tt>Parameter_pathStatus</tt> (<xref target="parameter_pathStatus"/>) in the list of path parameters.</t>
      </section>
      <section anchor="frame_abandon">
        <name>PM_ABANDON frame</name>
        <t>An endpoint uses a PM_ABANDON frame to to indicate that it will no longer use the indicated path.</t>
        <t>A PM_ABANDON frame (<xref target="fig-pm_abandon_frame"/>) includes the following fields:</t>
        <figure anchor="fig-pm_abandon_frame">
          <name>PM_ABANDON Frame Fields</name>
          <artwork><![CDATA[
   PM_ABANDON Frame {
     Type (i) = Type_pmAbandon,
     Receiver_PathID (i),
     Reason_Code (i)
   }
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <dl>
              <dt><tt>Type</tt></dt>
              <dd>
                <t>is set to <tt>Type_pmAbandon</tt> (<xref target="iana_frame_types"/>).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Receiver_PathID</tt></dt>
              <dd>
                <t>is the PathID assigned to the path by the peer endpoint receiving the PM_ABANDON frame.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt><tt>Reason_Code</tt></dt>
              <dd>
                <t>is the reason that the path is being abandoned (<xref target="pathremoval"/>).</t>
              </dd>
            </dl>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="path_parameters">
      <name>Path Parameters</name>
      <t>Each path parameter in a list of path parameters includes the following fields (<xref target="fig-path-parameter"/>):</t>
      <figure anchor="fig-path-parameter">
        <name>Path Parameter Encoding</name>
        <artwork><![CDATA[
Path_Parameter {
  End_of_List (1),
  Path_Parameter_ID (7),
  Path_Parameter_Value (i),
}
]]></artwork>
      </figure>
      <ul spacing="normal">
        <li>
          <dl>
            <dt><tt>End_of_List</tt></dt>
            <dd>
              <t>is a boolean value identifying the last parameter in a list of path parameters. A value of 0 (zero) indicates this is the last parameter; a value of 1 (one) indicates that there is at least one more parameter in the list of path parameters.</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt><tt>Path_Parameter_ID</tt></dt>
            <dd>
              <t>uniquely identifies the path parameter (<xref target="iana_path_parameters"/>).</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt><tt>Path_Parameter_Value</tt></dt>
            <dd>
              <t>is a variable-length integer value assigned to the path parameter.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <t>A path parameter, or a list of path parameters, that is malformed or invalid MUST be treated as a connection error using transport error code <tt>Error_pmPathParameter</tt> (<xref target="connectionerrors"/>).</t>
      <section anchor="parameter_pathMaxData">
        <name>Parameter_pathMaxData</name>
        <t>The path maximum data parameter is a variable-length integer value that indicates the maximum amount of data that can be sent on the path by the peer endpoint, expressed as a number of octets. The mechanism used by an endpoint to determine this value is beyond the scope of this document.</t>
        <t>The maximum data limit applies only in a single direction -- i.e. from the peer endpoint towards the endpoint defining the path maximum data value. Each endpoint may specify a limit, corresponding to a different direction; the specified limits do not need to be the same.</t>
        <t>The maximum data limit applies only to the indicated path. A session that migrates to a different path cannot assume that the maximum data limit from an existing path applies to the new path.</t>
        <t>By default, the maximum amount of data that can be sent on the path is not limited.</t>
        <t>If included in a PM_STATUS frame (<xref target="frame_status"/>), a maximum data value that is less the previous maximum data value associated with the path MUST be treated as as an invalid path parameter.</t>
        <t>Receiving an ack-eliciting packet that exceeds the maximum data value previously authorised for a path MUST be treated as a connection error using transport error code <tt>Error_pmExceededMaxData</tt> (<xref target="connectionerrors"/>).</t>
      </section>
      <section anchor="parameter_pathPayloadSize">
        <name>Parameter_pathPayloadSize</name>
        <t>The path payload size parameter is a variable-length integer value that limits the size of UDP payloads that an endpoint believes can be transmitted over the path and/or the endpoint is willing to receive over the path (<xref target="pathmptu"/>), expressed as a number of octets. UDP datagrams with payloads larger than this limit are not likely to be received and/or processed by the endpoint.</t>
        <t>The default value for this parameter is the <tt>max_udp_payload_size</tt> transport parameter defined in <xref target="RFC9000"/> Section 18.2.</t>
      </section>
      <section anchor="parameter_pathPrecedence">
        <name>Parameter_pathPrecedence</name>
        <t>The path precedence parameter is a variable-length integer value that indicates the precedence of the path to be used in path selection algorithms (<xref target="pathprecedence"/>).</t>
        <t>There is no default value for this parameter. It is RECOMMENDED that precedence values be limited to the range 0..100.</t>
      </section>
      <section anchor="parameter_pathStatus">
        <name>Parameter_pathStatus</name>
        <t>The path status parameter is a variable-length integer value that indicates the current status of the path (<xref target="pathstatus"/>).</t>
        <t>The default value for this parameter is <tt>Status_Available</tt>.</t>
      </section>
      <section anchor="parameter_empty">
        <name>Parameter_empty</name>
        <t>The empty list parameter indicates that there are no entries in the list of path parameters. If specified, the empty list parameter MUST be the only entry in the list of path parameters. The empty list parameter MUST NOT be included if there are other path parameters in a list of path parameters.</t>
        <t>The empty list parameter MUST include a <tt>Path_Parameter_ID</tt> field but MUST NOT include a <tt>Path_Parameter_Value</tt> field. The <tt>End_of_List</tt> field MUST be set to 0 (zero).</t>
      </section>
    </section>
    <section anchor="transport_parameters">
      <name>Transport Parameters</name>
      <t>PMQUIC defines two new transport parameters that may be encoded in the initial cryptographic handshake (<xref target="RFC9000"/> Section 7.4) -- <tt>max_active_paths</tt> and <tt>disable_path_migration</tt>.</t>
      <section anchor="transport_max_active_paths">
        <name>max_active_paths</name>
        <t>An endpoint signals support for PMQUIC procedures by including a <tt>max_active_paths</tt> transport parameter in the initial handshake.</t>
        <t><tt>max_active_paths</tt> (<xref target="iana_transport_parameters"/>) is an integer value indicating the maximum number of active paths supported by the initiating endpoint. To enable PMQUIC, an endpoint MUST set the maximum number of active paths to a value greater that 1 (one). The maximum number of active paths allowed in the session is the minimum of the exchanged <tt>max_active_paths</tt> values.</t>
        <t>If a <tt>max_active_paths</tt> transport parameter value is received that is higher than 255 or less than 2, the receiving endpoint MUST close the connection with an error of type TRANSPORT_PARAMETER_ERROR.</t>
        <t>To enable use of PMQUIC procedures, both endpoints in a session MUST include a valid <tt>max_active_paths</tt> transport parameter in the initial handshake. If either of the endpoints does not include the <tt>max_active_paths</tt> transport parameter, then the endpoints MUST NOT use any of the PMQUIC procedures or frames defined in this document.</t>
      </section>
      <section anchor="transport_disable_path_migration">
        <name>disable_path_migration</name>
        <t>An endpoint can prevent use of a connection identifier on more than one path by including a <tt>disable_path_migration</tt> transport parameter in the initial handshake.</t>
        <t><tt>disable_path_migration</tt> (<xref target="iana_transport_parameters"/>) is a zero-length value where presence of the transport parameter indicates migration is disabled.</t>
        <t>If migration is disabled, a peer connection identifier is bound to a single path -- i.e. the peer connection identifier may be used as the destination connection identifier in a QUIC packet for transmission over only one path. The bound path is determined by the the first appearance of the peer connection identifier as the destination connection identifier in a QUIC packet.</t>
        <t>If migration is not disabled (i.e. the <tt>disable_path_migration</tt> transport parameter is not included in the initial handshake), a peer connection identifier may be used as the destination connection identifier in a QUIC packet used for transmission over any available path -- i.e. the connection identifier may appear as the destination connection identifier in different QUIC packets on different paths.</t>
        <t>Migration is disabled if at least one of the endpoints includes a <tt>disable_path_migration</tt> transport parameter in the initial cryptographic handshake.</t>
        <t>Receiving a <tt>disable_path_migration</tt> transport parameter without also receiving a <tt>max_active_paths</tt> transport parameter MUST be treated as a connection error using transport error code <tt>Error_pmProtocolViolation</tt> (<xref target="connectionerrors"/>).</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>PMQUIC does not change the operating principles of <xref target="RFC9000"/> and, as such,
is subject to the same security considerations as <xref target="RFC9000"/> Section 21.</t>
      <t>Specific security considerations, associated with the use of path management procedures, include:</t>
      <ul spacing="normal">
        <li>
          <dl>
            <dt>resource usage:</dt>
            <dd>
              <t>Due to the simultaneous use of multiple paths between session endpoints, PMQUIC may require additional resources in a client and/or in a server. Resource usage associated with paths can be limited by each endpoint through the <tt>max_active_paths</tt> transport parameter (<xref target="transport_parameters"/>).</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>data amplification:</dt>
            <dd>
              <t>The simultaneous use of multiple paths between session endpoints potentially allows for a higher rate of data exchange than might be possible with only a single path between session endpoints. Since PMQUIC uses a path validation mechanism similar to <xref target="RFC9000"/>, the anti-amplification limits of <xref target="RFC9000"/> Section 8.2 are also valid for PMQUIC.
</t>
              <t>Further, an endpoint can limit the maximum amount of data that can be sent on a particular path through the PMQUIC <tt>Parameter_pathMaxData</tt> path parameter (<xref target="parameter_pathMaxData"/>). This value may be initially set in a PM_CHALLENGE or PM_CHALLENGE_RESPONSE frame and may be subsequently adjusted in a PM_STATUS frame.</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>address spoofing:</dt>
            <dd>
              <t>PMQUIC uses a path validation mechanism (<xref target="pathactivation"/>) similar to <xref target="RFC9000"/> to prevent address spoofing over a new path by a malicious intermediate node.</t>
            </dd>
          </dl>
        </li>
        <li>
          <dl>
            <dt>correlation of activity across multiple paths:</dt>
            <dd>
              <t>Due to the possible decoupling of connection management and path management, PMQUIC recommends but does not mandate that different connection identifiers be used on different paths (<xref target="pathactivation"/>). As discussed in <xref target="RFC9000"/> Section 9.5, using the same connection identifier on multiple paths would allow a passive observer to correlate activity between those paths. An endpoint can prevent use of a connection identifier on more than one path by including a <tt>disable_path_migration</tt> transport parameter in the initial cryptographic handshake (<xref target="transport_disable_path_migration"/>).</t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <aside>
        <t>The values in this section of the Internet Draft are preliminary, for testing purposes only.</t>
      </aside>
      <section anchor="iana_transport_parameters">
        <name>New QUIC transport parameters</name>
        <t>This document defines two new (preliminary) QUIC transport parameters (<xref target="transport_parameters"/>):</t>
        <ul spacing="normal">
          <li>
            <t><tt>max_active_paths</tt> (0x21c7948988209ada)</t>
          </li>
          <li>
            <t><tt>disable_path_migration</tt> (0x33186fc5d0c7cac3)</t>
          </li>
        </ul>
      </section>
      <section anchor="iana_frame_types">
        <name>New QUIC frame types</name>
        <t>This document defines four new (preliminary) QUIC frame types:</t>
        <ul spacing="normal">
          <li>
            <t>Type_pmChallenge (0x1ae4ea418795ad60) -- <xref target="frame_challenge"/></t>
          </li>
          <li>
            <t>Type_pmChallengeResponse (0x12c5938576430d3f) -- <xref target="frame_response"/></t>
          </li>
          <li>
            <t>Type_pmStatus (0x06614d6b80a40a24) -- <xref target="frame_status"/></t>
          </li>
          <li>
            <t>Type_pmAbandon (0x2dde9db26610d041) -- <xref target="frame_abandon"/></t>
          </li>
        </ul>
      </section>
      <section anchor="iana_path_parameters">
        <name>PMQUIC path parameters</name>
        <t>This document defines five PMQUIC path parameters:</t>
        <ul spacing="normal">
          <li>
            <t>Parameter_empty (0x00) -- <xref target="parameter_empty"/></t>
          </li>
          <li>
            <t>Parameter_pathMaxData (0x01) -- <xref target="parameter_pathMaxData"/></t>
          </li>
          <li>
            <t>Parameter_pathPayloadSize (0x02) -- <xref target="parameter_pathPayloadSize"/></t>
          </li>
          <li>
            <t>Parameter_pathPrecedence (0x03) -- <xref target="parameter_pathPrecedence"/></t>
          </li>
          <li>
            <t>Parameter_pathStatus (0x04) -- <xref target="parameter_pathStatus"/></t>
          </li>
        </ul>
      </section>
      <section anchor="iana_path_status">
        <name>PMQUIC path status</name>
        <t>This document defines four PMQUIC path status values:</t>
        <ul spacing="normal">
          <li>
            <t>Status_NotAvailable (0x01)</t>
          </li>
          <li>
            <t>Status_Blocked (0x02)</t>
          </li>
          <li>
            <t>Status_Backup (0x03)</t>
          </li>
          <li>
            <t>Status_Available (0x04)</t>
          </li>
        </ul>
      </section>
      <section anchor="iana_abandon_reason">
        <name>PMQUIC path abandon reasons</name>
        <t>This document defines five PMQUIC path abandon reason codes:</t>
        <ul spacing="normal">
          <li>
            <t>Reason_Unspecified (0x00)</t>
          </li>
          <li>
            <t>Reason_Failing (0x01)</t>
          </li>
          <li>
            <t>Reason_Lost (0x02)</t>
          </li>
          <li>
            <t>Reason_NoAck (0x03)</t>
          </li>
          <li>
            <t>Reason_Timeout (0x04)</t>
          </li>
          <li>
            <t>Reason_MaxData (0x05)</t>
          </li>
        </ul>
      </section>
      <section anchor="iana_error_codes">
        <name>PMQUIC transport error codes</name>
        <t>This document extends the QUIC Transport Error Codes of <xref target="RFC9000"/> Section 22.5 with the following (preliminary) values:</t>
        <ul spacing="normal">
          <li>
            <t>Error_pmExceededMaxData (0x165ee2f99e0d09fa)</t>
          </li>
          <li>
            <t>Error_pmInvalidPathID (0x07c0907b4c18170f)</t>
          </li>
          <li>
            <t>Error_pmPathParameter (0x0170789441bc48aa)</t>
          </li>
          <li>
            <t>Error_pmProtocolViolation (0x297abbb8bb0b3afa)</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MPTCP">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <author fullname="A. Ford" initials="A." surname="Ford"/>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure"/>
            <author fullname="C. Paasch" initials="C." surname="Paasch"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
              <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
              <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8684"/>
          <seriesInfo name="DOI" value="10.17487/RFC8684"/>
        </reference>
        <reference anchor="MPQUIC-DRAFT">
          <front>
            <title>Multipath Extension for QUIC</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 Tessares</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="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies a multipath extension for the QUIC protocol
   to enable the simultaneous usage of multiple paths for a single
   connection.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the QUIC Working Group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/quicwg/multipath.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath-11"/>
        </reference>
        <reference anchor="LAG" target="https://en.wikipedia.org/wiki/Link_aggregation">
          <front>
            <title>Link aggregation</title>
            <author>
              <organization>Wikipedia</organization>
            </author>
            <date year="2023" month="October" day="18"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 700?>

<section numbered="false" anchor="appendix_mpquic">
      <name>Appendix A: Comparison to <xref target="MPQUIC-DRAFT"/></name>
      <aside>
        <t>This section is provided for information only.</t>
      </aside>
      <t><xref target="MPQUIC-DRAFT"/> diverges from the principles of <xref target="RFC9000"/> in a number of areas, as described below.</t>
      <section numbered="false" anchor="a1-connection-identifiers">
        <name>A.1 Connection identifiers</name>
        <t><xref target="MPQUIC-DRAFT"/> binds every connection identifier to a specific path. A path may be associated with multiple connection identifiers but a connection identifier can only be used on a pre-defined path. A change in in the connection identifier used in a QUIC packet header is used to signal an explicit change in the path.</t>
        <t>By contrast, <xref target="RFC9000"/> (and PMQUIC) does not associate a connection identifier with a path -- i.e. connection identifiers are independent of paths.</t>
      </section>
      <section numbered="false" anchor="a2-connection-identifier-sequence-numbers">
        <name>A.2 Connection identifier sequence numbers</name>
        <t><xref target="MPQUIC-DRAFT"/> introduces the concept of multiple connection identifier sequence number spaces with a different connection identifier sequence number space for each path. As a consequence, it is possible for different connection identifiers associated with different paths to be assigned the same connection identifier sequence number.</t>
        <t>By contrast <xref target="RFC9000"/> (and PMQUIC) define a single connection identifier sequence number space.</t>
      </section>
      <section numbered="false" anchor="a3-application-data-packet-number-spaces">
        <name>A.3 Application data packet number spaces</name>
        <t><xref target="MPQUIC-DRAFT"/> introduces the concept of multiple application data (1RTT) packet number spaces with a different application data number space for each path. As a consequence, it is possible for different QUIC packets transmitted over different paths to be assigned the same packet number.</t>
        <t>By contrast <xref target="RFC9000"/> (and PMQUIC) define a single application data packet number space.</t>
      </section>
      <section numbered="false" anchor="a4-aead-encryption-nonce">
        <name>A.4 AEAD encryption nonce</name>
        <t>Due to the use of a different application data number space for each path, it is possible for different QUIC packets transmitted over different paths to be assigned the same packet number. As a consequence, <xref target="MPQUIC-DRAFT"/> changes the AEAD calculation by using the path identifier as part of AEAD encryption nonce.</t>
        <t>By contrast <xref target="RFC9000"/> (and PMQUIC) use a single application data packet number space which ensures that different QUIC packets are assigned different packet numbers regardless of the path used to convey a packet.</t>
      </section>
      <section numbered="false" anchor="a5-multipath-specific-frames-and-procedures">
        <name>A.5 Multipath-specific frames and procedures</name>
        <t>Due to the use of a different application data number space for each path and the use of a different connection identifier sequence number space for each path, endpoints must use multipath-specific frames for packet acknowledgement (PATH_ACK), assignment of new connection identifiers (PATH_NEW_CONNECTION_ID), and retirement of connection identifier (PATH_RETIRE_CONNECTION_ID).</t>
        <t>By contrast, <xref target="RFC9000"/> operations are not affected by the use of PMQUIC procedures which obviates the need for multipath-specific connection management procedures and frames.</t>
      </section>
      <section numbered="false" anchor="a6-zero-length-connection-identifiers">
        <name>A.6 Zero-length connection identifiers</name>
        <t>Because <xref target="MPQUIC-DRAFT"/> uses connection identifiers to identify paths, a zero-length connection identifier cannot be used with multipath operations.</t>
        <t>By contrast, PMQUIC does not associate a connection identifier with a path and allows a QUIC packet to be transmitted over any path, including a QUIC packet with a zero-length connection identifier.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
