<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-cmcc-asrp-09" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Available Session Recovery Protocol</title>

    <author initials="Z." surname="Luo" fullname="Zhaoyu Luo" role="editor">
      <organization>CMCC</organization>
      <address>
        <postal>
          <street>No. 58 Kunlunshan Road</street>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>lluozy@yeah.net</email>
      </address>
    </author>
    <author initials="H." surname="Yan" fullname="Haishuang Yan">
      <organization>CMCC</organization>
      <address>
        <postal>
          <street>No. 58 Kunlunshan Road</street>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>yanhaishuang_yewu@cmss.chinamobile.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="21"/>

    <area>Applications</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 71?>

<t>This document describes an experimental protocol, the Available Session Recovery Protocol (ASRP), for high-availability clusters that provide stateful network services - load balancing, Network Address Translation (NAT <xref target="RFC4787"/>), and other layer-4 stateful network functions, including their virtualized (NFV) forms. ASRP backs up the session state at the session&#39;s own endpoints, so that the cluster nodes hold no replicated state: no inter-node synchronization, no backup node, and no state warm-up for a newly added node. The document defines the procedures and message formats for session backup and recovery.</t>

<t>In contrast to traditional high-availability techniques that back up session state within the cluster itself, the core innovation of ASRP lies in its distributed backup of state information to the client or server side. This approach offers multiple advantages: theoretically unlimited elastic scaling capacity; support for rapid recovery from multi-point failures; reduction of resource redundancy through the elimination of centralized backup nodes; and significant simplification of cluster implementation complexity.</t>

<t>The ASRP protocol provides a standardized method for constructing elastic service clusters, facilitating broader participation from software and hardware developers in building elastic cloud network service clusters.</t>



    </abstract>



  </front>

  <middle>


<?line 79?>

<section anchor="introduction"><name>Introduction</name>

<t>Many network functions are stateful: load balancers, NAT gateways, connection trackers, and other layer-4 network functions, in physical and virtualized (NFV) forms alike, each maintain per-session state for the traffic they forward, and are deployed at scale in every data center and enterprise edge. That state is the root cause of the complexity of operating these services at scale - it is what master/backup replication, intra-cluster session synchronization, and failover machinery all exist to protect.</t>

<t>This document takes a different starting point: the state of a session does not need to live in the cluster at all. The Available Session Recovery Protocol (ASRP) backs up the session state at the session&#39;s own endpoints - the client or the server - so that the cluster nodes hold no replicated state: no inter-node synchronization, no backup node, and no state warm-up for a newly added node; a node that receives a packet of a session it does not hold recovers the session from the endpoint on demand.</t>

<t>The protocol is not specific to load balancing or NAT. Any network function that maintains per-session state can use ASRP to keep that state at the endpoints and gain the same properties: sessions survive node restarts, failovers, and elastic scaling without inter-node machinery. The availability boundary is the same as that of conventional high-availability designs - ASRP protects against failures of the network function itself; the failure of an endpoint takes down its sessions under any design.</t>

<section anchor="comparison-with-existing-approaches"><name>Comparison with Existing Approaches</name>

<t>High-availability mechanisms evolved together with the deployment model they serve. The industry&#39;s answer for elastically scaling deployments is the Elastic Stateful Cluster (ESC): a group of network nodes, all active, that simultaneously provide the same stateful network function, such as load balancing (SLB), Network Address Translation (NAT), and other layer-4 functions. In such a cluster the hard problem is session state: a design has to decide where the state lives, and how a node that receives a packet of a session it does not hold recovers that session.</t>

<t>Master/backup HA (e.g., VRRP <xref target="RFC5798"/>) solved the failover problem of the master/backup era: it provides fast takeover of a shared address, with session continuity typically left to private synchronization between the active node and its backup (e.g., the LVS connection synchronization daemon, DPVS). The drawback is the single-active model: for a given service address, exactly one node forwards while the others stand by, so a service is capped at the capacity of one node, the standby nodes sit idle, and load cannot be met by adding nodes.</t>

<t>The conventional Elastic Stateful Cluster keeps session state inside the cluster: its nodes communicate with each other to synchronize session state, and redundant backup nodes are kept within the cluster for failover. The architecture is typically layered - a Fast/Slow Path design that separates session management from packet forwarding:</t>

<figure title="Fast/Slow Path Elastic Stateful Cluster" anchor="FP-SP-CLUSTER"><artwork><![CDATA[
                   +--------------------------+
                   | +----------------------+ |
                   | |          ...         | |
                   | |          ...         | |
                   | |  +----------------+  | |
                   | |  | Slow Path Node |  | |
                   | |  +----------------+  | |
                   | |          ...         | |
                   | |          ...         | |
                   | +----------------------+ |
                   |            ^ |           |
                   |            | V           |
                   | +----------------------+ |
                   | |          ...         | |
+----------+       | |          ...         | |       +----------+
|          |       | |  +----------------+  | |       |          |
|  Client  | <--------> | Fast Path Node | <--------> |  Server  |
|          |       | |  +----------------+  | |       |          |
+----------+       | |          ...         | |       +----------+
                   | |          ...         | |
                   | +----------------------+ |
                   +--------------------------+
]]></artwork></figure>

<t>The slow path nodes are responsible for session creation and synchronization, while the fast path nodes are responsible for rapid packet forwarding. The drawback is the weak elastic scaling capability of the slow path nodes: new sessions must be propagated to other nodes so that asymmetric traffic can be handled anywhere, the synchronization traffic grows with the session creation rate and the node count, and a newly added node starts without state. A typical implementation reference is the AWS Hyperplane NFV platform.</t>

<t>Stateless scheduling (e.g., Maglev-style consistent hashing, ECMP <xref target="RFC2991"/> <xref target="RFC2992"/>) avoids session state on the nodes entirely by hashing each flow to a node. Node failure is handled by rehashing flows, which works only when the service can tolerate a flow landing on a node that holds no state for it; stateful services such as NAT cannot.</t>

<t>These mechanisms are what make elastic clusters work in practice, but they are private. The contrast with the previous generation is telling: the master/backup architecture is served by a standard (VRRP), while the Elastic Stateful Cluster - the architecture that large deployments actually use today - has no standard protocol for its session-state layer. Routing, failure detection, and address takeover are individually standardized; session synchronization and recovery are not, and every production cluster ships its own.</t>

<t>ASRP fills this gap by removing the session state from the cluster altogether: the backup of a session is stored at one of the session&#39;s own endpoints, nodes share no protocol state with each other, and recovery state is pulled on demand (QS/RS) only when a node actually needs a session it does not have. This structure - state held at an endpoint and recovered against an opaque token - mirrors the pattern proven at Internet scale by TLS session tickets <xref target="RFC8446"/> and QUIC address validation tokens <xref target="RFC9000"/>. This addresses the hardest problem of the elastic cluster and, as a side effect, simplifies the cluster itself: no inter-node protocol, no synchronization traffic, and no state warm-up for a newly added node. The tradeoff is that the client or server side must support the protocol. Within a single administrative domain - a data center for load balancing, an enterprise edge for SNAT - this is a deployment decision rather than a protocol limitation.</t>

<t><xref target="ARCH-COMP"/> summarizes the comparison of master/backup HA with the two Elastic Stateful Cluster designs, conventional and ASRP:</t>

<texttable title="Comparison of HA Architectures" anchor="ARCH-COMP">
      <ttcol align='left'>Architecture</ttcol>
      <ttcol align='left'>Elasticity</ttcol>
      <ttcol align='left'>Implementation</ttcol>
      <ttcol align='left'>Standard protocol</ttcol>
      <c>Master/backup HA</c>
      <c>No</c>
      <c>Pairwise sync</c>
      <c>VRRP <xref target="RFC5798"/></c>
      <c>Conventional cluster</c>
      <c>Partial</c>
      <c>Complex</c>
      <c>None</c>
      <c>ASRP cluster</c>
      <c>Yes</c>
      <c>Simple</c>
      <c>This document</c>
</texttable>

</section>
<section anchor="asrp-elastic-stateful-cluster"><name>ASRP Elastic Stateful Cluster</name>
<figure title="ASRP Elastic Stateful Cluster" anchor="ASRP-CLUSTER"><artwork><![CDATA[
                     +----------------------+
                     |          ...         |
+----------+         |          ...         |         +----------+
|          |         |  +----------------+  |         |          |
|  Client  | <--------> |    ASRP Node   | <--------> |  Server  |
|          |         |  +----------------+  |         |          |
+----------+         |          ...         |         +----------+
                     |          ...         |
                     +----------------------+
]]></artwork></figure>

<t>The Available Session Recovery Protocol (ASRP) provides a standardized method for constructing elastic service clusters, facilitating broader participation from software and hardware developers in building elastic cloud network service clusters. Its core idea is to distribute session state information to the client or server. The lifecycle of the backup state is synchronized with the real session, eliminating the need for independent keepalive and timeout mechanisms. This design ensures the timeliness and availability of the backup information.</t>

<t>ASRP defines corresponding session backup and recovery mechanisms. The protocol allows protocol messages to be transmitted together with the original service data packets, thereby reducing control overhead for state synchronization. In an Elastic Stateful Cluster built on ASRP, network nodes possess atomic and mutually independent properties. There is no need for communication between nodes, nor is session synchronization required within the cluster. This fundamental design provides theoretically unlimited scaling capability and supports rapid recovery from multi-point failures.</t>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
   &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and
   &quot;OPTIONAL&quot; in this document are to be interpreted as described in
   BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
   capitals, as shown here.</t>

<t>This document uses the following terms:</t>

<t>Elastic Stateful Cluster (ESC): A group of network nodes, all active, that simultaneously provide the same stateful network function; any node may receive any flow of the service, and nodes can be added or removed at any time. In this document, &quot;cluster&quot; refers to an ESC.</t>

<t>Network Node: A device that provides stateful network services (e.g., load balancing, NAT) and creates and maintains sessions for the traffic it forwards.</t>

<t>Client / Server: The two endpoints of a session. Depending on the operational mode, the server (PSV mode) or the client (ACT mode) also holds the backup of the session.</t>

<t>Backup Holder: The client or server that stores the backed-up state of a session.</t>

<t>Session: The state a network node maintains for a flow, keyed by the flow&#39;s 5-tuple.</t>

<t>Explicit First Packet: A packet whose characteristics explicitly indicate the start of a session, e.g., a TCP SYN or a DNS query.</t>

<t>Inline Message: An ASRP message carried within a packet of the flow itself - at the head of the segment payload marked by the ASRP option, in the datagram&#39;s option area, or in a separate packet that copies the original packet header.</t>

<t>ASRP option: The transport-layer option that marks the presence of an ASRP message. On TCP it carries no data (a Length of 2) and marks the message at the head of the segment payload; on UDP it carries the message as its option data, in the datagram&#39;s option area.</t>

<t>Standalone Message: An ASRP message carried in an independent UDP packet whose destination port is ASRP-PORT.</t>

<t>ASRP-PORT: The UDP destination port used for standalone ASRP messages.</t>

</section>
<section anchor="protocol-overview"><name>Protocol Overview</name>

<section anchor="two-operational-modes"><name>Two Operational Modes</name>

<t>For the ASRP protocol to function correctly, two prerequisites must be met. First, all network nodes within the cluster MUST run service software supporting the ASRP protocol. Second, the server or client responsible for backing up sessions MUST deploy a kernel module or an eBPF module that supports ASRP. Depending on whether this module is deployed on the server or the client, the protocol operates in one of two corresponding modes: Passive (PSV) Mode and Active (ACT) Mode.</t>

<section anchor="psv-mode"><name>PSV Mode</name>

<t>In PSV mode, the network node is typically deployed in the same network domain as the server (e.g., inside a data center). Load balancing is the typical example; any stateful function serving that domain can use the protocol.</t>

</section>
<section anchor="act-mode"><name>ACT Mode</name>

<t>In ACT mode, the network node is typically deployed in the same network domain as the client (e.g., an enterprise intranet). Source NAT is the typical example; any stateful function serving that domain can use the protocol.</t>

<t>The operational mode (PSV or ACT) is determined by the deployment configuration of the network node and is not carried in ASRP messages.</t>

</section>
</section>
<section anchor="two-routing-behaviors"><name>Two Routing Behaviors</name>

<section anchor="symmetric-routing"><name>Symmetric Routing</name>
<figure title="Symmetric Routing" anchor="Symmetric-Routing"><artwork><![CDATA[
                             Elastic
                             Stateful
                             Cluster
                       +------------------+
+----------+           |       ...        |           +----------+
|          |           |  +------------+  |           |          |
|  Client  | <----------> |   node X   | <----------> |  Server  |
|          |           |  +------------+  |           |          |
+----------+           |       ...        |           +----------+
                       +------------------+
]]></artwork></figure>

<t>Symmetric routing refers to the path mode where bidirectional traffic of the same session between a client and a server is always routed to the same node within the cluster.</t>

</section>
<section anchor="asymmetric-routing"><name>Asymmetric Routing</name>
<figure title="Asymmetric Routing" anchor="Asymmetric-Routing"><artwork><![CDATA[
                             Elastic
                             Stateful
                             Cluster
                       +------------------+
                       |       ...        |
+----------+           |  +------------+  |           +----------+
|          | -----------> |   node X   | -----------> |          |
|          |           |  +------------+  |           |          |
|  Client  |           |       ...        |           |  Server  |
|          |           |  +------------+  |           |          |
|          | <----------- |   node Y   | <----------- |          |
+----------+           |  +------------+  |           +----------+
                       |       ...        |
                       +------------------+
]]></artwork></figure>

<t>Asymmetric routing refers to the scenario where bidirectional traffic of the same session may be routed (e.g., by mechanisms such as ECMP <xref target="RFC2991"/>, <xref target="RFC2992"/>) to different nodes within a cluster. In cloud networking environments, asymmetric routing is a common phenomenon, which imposes higher demands on the implementation of elastic stateful clusters.</t>

</section>
</section>
<section anchor="protocol-message"><name>Protocol Message</name>

<t>ASRP achieves distributed backup and recovery of session state information by exchanging specific protocol messages among the client, server, and network nodes (such as load balancers or NAT gateways). In a load-balancing scenario, session state is distributed and backed up to individual servers; in an SNAT scenario, session state is distributed and backed up to individual clients.</t>

<t>ASRP defines the following messages:</t>

<texttable>
      <ttcol align='left'>Message</ttcol>
      <ttcol align='left'>Generated by</ttcol>
      <ttcol align='left'>Full name</ttcol>
      <c>NS</c>
      <c>Network node</c>
      <c>New Session</c>
      <c>NA</c>
      <c>Backup holder</c>
      <c>New Session Acknowledge</c>
      <c>NC</c>
      <c>Backup holder</c>
      <c>New Session Conflict</c>
      <c>QS</c>
      <c>Network node</c>
      <c>Query Session</c>
      <c>RS</c>
      <c>Backup holder</c>
      <c>Recover Session</c>
      <c>RX</c>
      <c>Backup holder</c>
      <c>Recovery no-session</c>
      <c>HS</c>
      <c>Client (ACT mode)</c>
      <c>Hello Session</c>
      <c>PS</c>
      <c>Server (PSV mode)</c>
      <c>Push Session</c>
</texttable>

<t>The network node sends an NS message to deliver the state of a newly created session to the backup holder - the server in PSV mode, or the client in ACT mode; the backup holder acknowledges it with an NA message, or reports a conflict with an existing local session with an NC message. When a received packet matches no local session and none can be created directly, the network node queries the backup holder with a QS message; the holder answers with an RS message carrying the state required to recover the session, or an RX message when the queried session is not found. In ACT mode, a client sends an HS message to announce its support of the protocol and trigger the network node to return an NS message; in PSV mode, a server sends a PS message to push session state to the network node, e.g. to create or update a session under asymmetric routing.</t>

</section>
<section anchor="transmission-modes"><name>Transmission Modes</name>

<t>ASRP messages can be transmitted in two modes: Inline Message and Standalone Message.</t>

<section anchor="inline-message"><name>Inline Message</name>

<t>The Inline Message is transmitted with the same 5-tuples as the flow. The carriage differs by transport.</t>

<t>For TCP flows, the ASRP option is a TCP option with Kind TBD and a Length of 2; it carries no data and marks the presence of the message. The message occupies the leading octets of the segment payload. When the total packet length does not exceed the MTU, NS, HS, and PS messages SHOULD be inserted into the original packet; otherwise, they are carried in a separate packet that copies the original packet header, including the ASRP option, without the original packet data.</t>

<t>For UDP flows, the ASRP message is carried as the option data of the ASRP option, a UDP option <xref target="RFC9868"/> placed in the datagram&#39;s option area. The datagram&#39;s own payload is untouched. When the datagram leaves no room for the option within the MTU, the message is carried in a separate packet that copies the original datagram header.</t>

<t>HS messages are sent after forwarded packets, and PS messages are sent before forwarded packets.</t>

<t>Traveling with the flow&#39;s 5-tuple is a structural requirement for HS and PS: both are sent from an endpoint towards the cluster, and under asymmetric routing the sender cannot predict which network node handles the corresponding direction of the flow. Since per-flow scheduling (e.g., ECMP hashing) maps one 5-tuple to one node, a message carried with the flow&#39;s 5-tuple - whether inserted into a packet of the flow or in a separate packet copying its header - is delivered to the same node as the flow itself, which is the node that holds (for HS) or needs (for PS) the session. NS, by contrast, is sent from a network node to a known endpoint (the selected server in PSV mode, or the client in ACT mode) and can also be transmitted as a Standalone Message; carrying it inline is a performance optimization that piggybacks on a packet about to be forwarded.</t>

<t>Inserting a message into the payload of the first packet of a TCP session makes that packet carry data (e.g., a TCP SYN with a non-empty payload). Some middleboxes drop such packets; this behavior has been observed in the deployment of TCP Fast Open <xref target="RFC7413"/>. Where such interference is known or detected on a path, the implementation SHOULD use the separate-packet form instead of inserting into the original packet, since the separate packet carries the message without altering the characteristics of the session&#39;s own packets. The UDP form is not affected: an option in the datagram&#39;s option area does not change the datagram&#39;s payload or its UDP length.</t>

</section>
<section anchor="standalone-message"><name>Standalone Message</name>

<t>The Standalone Message is transmitted in an independent packet with its own 5-tuples. It is encapsulated using IP/UDP <xref target="RFC0768"/>, with IP addresses configured to ensure mutual reachability and a fixed destination port ASRP-PORT (e.g., 51200). QS, RS, RX, NA and NC messages typically use this transmission mode.</t>

</section>
</section>
<section anchor="session-creationrecovery-scenarios"><name>Session Creation/Recovery Scenarios</name>

<t>This section elaborates on, through a series of typical scenarios, how the ASRP protocol achieves session backup and recovery via message interaction in the event of network node failures under different operational modes. Each scenario details the involved protocol message flows and the processing steps of each entity.</t>

<section anchor="psv-scenario-1"><name>PSV-Scenario-1</name>

<figure title="Direct Session Creation in PSV Mode" anchor="PSV-Scenario-1"><artwork><![CDATA[
                           ASRP Cluster
+----------+             +--------------+                +----------+
|          | ---1:PKT--> |              | -----2:NS----> |          |
|          |             |              | <----3:NC----- |          |
|  client  |             |  ASRP Nodes  |                |  server  |
|          |             |              |                |          |
|          | <--5:PKT--- |              | <----4:PS----- |          |
+----------+             +--------------+                +----------+
]]></artwork></figure>

<t>This scenario describes that, in PSV mode, a network node receives an explicit first packet (i.e., a packet whose characteristics explicitly indicate the start of a session) and directly creates a session flow. Common examples of explicit first packets include TCP SYN <xref target="RFC9293"/> and DNS <xref target="RFC1034"/> <xref target="RFC1035"/> query, among others.</t>

<t>The processing flow is as follows:</t>

<t><list style="numbers" type="1">
  <t>Session Creation: Upon receiving a packet from the client (e.g., TCP SYN), the network node first creates a new session and then sends an NS message to the selected server.</t>
  <t>Server Response: Upon receiving the NS message, the server stores the session state information and associates it with its local session. If a conflict occurs, it sends an NC message. In the case of asymmetric routing, when sending its first response packet, the server sends a PS message to the network node.</t>
  <t>Session Recovery: Upon receiving the PS message, the network node restores the session and forwards packets accordingly.</t>
</list></t>

<t>The session state information backed up by the server is released upon local session termination, without requiring any additional teardown message.</t>

</section>
<section anchor="psv-scenario-2"><name>PSV-Scenario-2</name>

<figure title="Session Recovery for Server in PSV Mode" anchor="PSV-Scenario-2"><artwork><![CDATA[
                           ASRP Cluster
+----------+             +--------------+                +----------+
|          |             |              | <----1:PKT---- |          |
|          |             |              |                |          |
|  client  | <--4:PKT--- |  ASRP Nodes  | -----2:QS----> |  server  |
|          |             |              |                |          |
|          |             |              | <---3:RS/RX--- |          |
+----------+             +--------------+                +----------+
]]></artwork></figure>

<t>This scenario describes the session recovery flow triggered by a server packet.</t>

<t>The processing flow is as follows:</t>

<t><list style="numbers" type="1">
  <t>Session Query: Upon receiving a packet from the server, the network node searches its local session table. If no matching session is found, the node SHOULD first buffer the packet for forwarding, then sends a QS message back to the server.</t>
  <t>Server Response: After receiving the QS message, the server looks up the backed-up session state information and sends an RS/RX message.</t>
  <t>Session Recovery: Upon receiving an RS message, the network node creates a new local session and forwards packets accordingly. Upon receiving an RX message, the node SHOULD discard the pending packets.</t>
</list></t>

</section>
<section anchor="psv-scenario-3"><name>PSV-Scenario-3</name>

<figure title="Session Creation/Recovery for Client in PSV Mode" anchor="PSV-Scenario-3"><artwork><![CDATA[
                          ASRP Cluster
+----------+             +------------+                +------------+
|          |             |            | ----2:QS-----> |    ...     |
|          | ---1:PKT--> |            | <---3:RS/RX--- | +--------+ |
|          |             |            |      ...       | | server | |
|          |             |            |      ...       | +--------+ |
|  client  |             | ASRP Nodes | ---4:PKT/NS--> |    ...     |
|          |             |            |                | +--------+ |
|          |             |            |                | | server | |
|          | <--7:PKT--- |            | <--5:NA/NC---- | +--------+ |
|          |             |            | <----6:PS----- |    ...     |
+----------+             +------------+                +------------+
]]></artwork></figure>

<t>This scenario describes the session creation/recovery flow triggered by a client packet.</t>

<t>The processing flow is as follows:</t>

<t><list style="numbers" type="1">
  <t>Query Local Session: Upon receiving a packet from the client, if no matching session is found, the network node first obtains a list of candidate servers (possibly multiple) for querying.</t>
  <t>Query Backup Session: The network node sends QS messages to each candidate server. Each server replies with an RS or RX message.</t>
  <t>Process Query Results: If a session is found, the network node restores the session and forwards the packet. Otherwise, for TCP packets: drop the packet. For UDP packets: create a new local session and send an NS message to the selected server.</t>
  <t>Server Creates New Session: Upon receiving an NS message, the server stores the session state information and associates it with its local session. If a conflict occurs, it sends an NC message; otherwise, if the F-NA flag is set, it immediately replies with an NA packet.</t>
  <t>Session Recovery: In an asymmetric routing environment, when sending its first response packet, the server sends a PS message to restore the session at the network node.</t>
</list></t>

<t>In this scenario, obtaining the list of candidate servers is a key challenge. Two solutions are proposed:</t>

<t><list style="numbers" type="1">
  <t>The network node derives an ordered list of candidate servers from the packet&#39;s 5-tuple using a deterministic server-selection algorithm, such as consistent hashing or history-aware consistent hashing, and sends QS messages to the candidates in order.</t>
  <t>Enhance the client so that client packets carry backend server information, allowing the network node to directly extract the target server from the client packet. One such enhancement is specified in <xref target="I-D.draft-cmcc-tcp-sro"/>, which carries the selected backend identity in a transport-layer option. ASRP works with either solution and does not depend on the SR option.</t>
</list></t>

<t>For the first solution, the specific algorithm is a local implementation choice; what the protocol relies on are three properties of it:</t>

<t>Determinism: The mapping from a session&#39;s 5-tuple to its candidate list MUST be identical on every node of the cluster, so that any node receiving a packet of a session it does not hold computes the same candidates to query.</t>

<t>History awareness: When the backend pool changes (e.g., a server is added), the algorithm SHOULD keep the servers that previously served the affected hash region in the candidate list, so that sessions created before the change can still locate their backup holder. A removed server simply fails to answer; the recovery attempt moves on to the next candidate or is abandoned.</t>

<t>Bounded querying: The number of candidates queried for one recovery MAY be limited to a small constant, bounding the QS traffic and the recovery latency. When the limit is reached without an RS response, the node stops querying and falls back to its local handling of packets without a session (<xref target="state-consistency"/>).</t>

</section>
<section anchor="act-scenario-1"><name>ACT-Scenario-1</name>

<figure title="Session Creation/Recovery in ACT Mode" anchor="ACT-Scenario-1"><artwork><![CDATA[
                              ASRP Cluster
+----------+                +--------------+             +----------+
|          | -----1:HS----> |              |             |          |
|          | <----2:NS----- |              | ---3:PKT--> |          |
|  client  |                |  ASRP Nodes  |             |  server  |
|          | <----5:QS----- |              | <--4:PKT--- |          |
|          | ---6:RS/RX---> |              |             |          |
+----------+                +--------------+             +----------+
]]></artwork></figure>

<t>This scenario describes session creation at a network node and server-initiated session restoration.</t>

<t>The processing flow is as follows:</t>

<t><list style="numbers" type="1">
  <t>Session Backup: When sending a packet without receiving an NS message, the client sends an HS message to the network node to request session backup (the client MAY rate-limit the HS messages it generates). Upon receiving the HS message, the node replies with an NS message.</t>
  <t>Session Lookup: For packets from a server with no matching session, the network node identifies the target client and sends it a QS message.</t>
  <t>Session Recovery: Upon receiving QS, the client sends an RS/RX message to the network node to restore the session.</t>
</list></t>

<t>In step 2, identifying the target client is challenging. Two solutions are proposed:</t>

<t><list style="numbers" type="1">
  <t>Use static mapping (e.g., map destination port to client). For SNAT, client IP addresses can be statically mapped to distinct port ranges.</t>
  <t>Enhance the server to embed client information in its packets, allowing the network node to extract the client address directly.</t>
</list></t>

</section>
<section anchor="act-scenario-2"><name>ACT-Scenario-2</name>

<figure title="Session Recovery for Client in ACT Mode" anchor="ACT-Scenario-2"><artwork><![CDATA[
                              ASRP Cluster
+----------+                +--------------+             +----------+
|          | ----1:PKT----> |              |             |          |
|          |                |              |             |          |
|  client  | <----2:QS----- |  ASRP Nodes  | ---4:PKT--> |  server  |
|          |                |              |             |          |
|          | ---3:RS/RX---> |              |             |          |
+----------+                +--------------+             +----------+
]]></artwork></figure>

<t>This scenario describes the client-packet-triggered session recovery.</t>

<t>The processing flow is as follows:</t>

<t><list style="numbers" type="1">
  <t>Session Query: Upon receiving a packet from a client with no local session and without an HS message, the network node sends a QS message to the client.</t>
  <t>Session Recovery: The client responds with an RS/RX message; the RS message enables session restoration.</t>
</list></t>

</section>
</section>
<section anchor="state-consistency"><name>State Consistency</name>

<t>ASRP does not need a distributed consistency protocol, because the session state has a single writer at any time and the backup is a read-only copy.</t>

<t>The backup of a session is created by the NS message at session creation and is never modified afterwards; it is released when the local session terminates. It therefore reflects the session state at creation time. For the state that ASRP targets - the flow-defining state of a session, keyed by its 5-tuple - this snapshot remains valid for the lifetime of the session, since the key does not change. Implementations that maintain additional mutable state (e.g., timeouts or counters) recover a usable approximation of it.</t>

<t>Recovery is a local action of one network node: the node rebuilds the session from the backup delivered in an RS message and thereafter owns the session. If, under asymmetric routing, two nodes receive packets of the same session and each recovers it independently, both hold the session locally and each forwards the packets that reach it - which is exactly how the cluster treats any session it holds. No node writes to another node&#39;s session state, so there is no split-brain condition to resolve.</t>

<t>In this sense, a node&#39;s session table is a cache rather than a source of truth. A session that a node does not hold locally can always be rebuilt from the endpoint backup - including the complete address-and-port mapping that a full-NAT load balancer maintains - so nothing is lost when a table is dropped, a node restarts, or traffic shifts to a new node.</t>

<t>If recovery fails (an RX response, or no response before the recovery attempt is abandoned), the network node falls back to its local handling of packets without a session, e.g., discarding them or creating a new session.</t>

</section>
</section>
<section anchor="protocol-details"><name>Protocol Details</name>

<section anchor="message-format"><name>Message Format</name>

<t>An ASRP message consists of a fixed 12-octet header followed by a variable-length body. The header comprises the first eight fields below; the body comprises the Session-Tuple and Session-Data fields and, for the NS message, the Node-Local-IP field. The fields are defined as follows:</t>

<figure><artwork><![CDATA[
1. Version: 1 octet. This document defines version 0 (Ver0).
2. MsgType: 1 octet, the message type: NS=0, NA=1, QS=2, RS=3,
   RX=4, HS=5, PS=6, NC=7.
3. STType: 1 octet, the Session-Tuple layout carried in the
   message body: NULL=0 (no Session-Tuple), ST44=1, ST66=2,
   ST46=3, ST64=4, ST4=5, ST6=6.
4. Flags: 1 octet. Bits are allocated from the least significant
   bit:
   - F-LIP6 (0x1): the Node-Local-IP carried by the NS message is
     an IPv6 address.
   - F-CC (0x2): client-side session conflict (NC message).
   - F-NA (0x4): NA acknowledgment requested (NS message).
   Unassigned bits MUST be sent as zero and ignored on receipt.
5. Length: 2 octets, the total length of the ASRP message in
   octets, from the first octet of the Version field through the
   last octet of the message body.
6. Reserved: 1 octet, reserved for future use. It MUST be sent as
   zero and ignored on receipt.
7. Protocol: 1 octet, transport-layer protocol (e.g., TCP, UDP).
8. Cookie: 4 octets, an opaque value used for message validation.
   The sender of a request message SHOULD fill this field with a
   value that identifies the request; the responder MUST echo it
   unchanged, and a backup holder MUST echo the stored NS Cookie
   in its PS messages. See "Cookie Handling" and the Security
   Considerations.
9. Session-Tuple (ST): source and destination addresses and ports.
   The IP address type is IPv4/IPv6.
   There are 6 types of ST, as follows:
   - ST4: IPv4-only tuple;
   - ST6: IPv6-only tuple;
   - ST44/ST66: Pairs of ST4 or ST6;
   - ST46/ST64: Mixed IPv4/IPv6 tuples.
10. Session-Data (SD): opaque session state information.
]]></artwork></figure>

<t>Rules for validating these fields on receipt are specified in &quot;Message Validation&quot;.</t>

<section anchor="message-header"><name>Message Header</name>

<t>Every ASRP message begins with the following 12-octet header:</t>

<figure title="ASRP Message Header" anchor="ASRP-MSG-HDR"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     MsgType   |     STType    |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |    Reserved   |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Cookie                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<section anchor="session-tuples"><name>Session Tuples</name>

<t>ST4 (length 12) Format:</t>

<figure title="IPv4 Session Tuple Format" anchor="ASRP-ST4"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Source IP (IPv4)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Destination IP (IPv4)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<figure><artwork><![CDATA[
ST6(length 36)  Format: Same structure as ST4, but with IPv6
ST44(length 24) Format: ST4 pair
ST66(length 72) Format: ST6 pair
ST46(length 48) Format: Mixed ST pair(ST4->ST6 sequence)
ST64(length 48) Format: Mixed ST pair(ST6->ST4 sequence)
]]></artwork></figure>

<t>For messages carrying two Session-Tuples (NS, NA, NC, RS, and PS), the first Session-Tuple (ST1) MUST be the client-side tuple, and the second Session-Tuple (ST2) MUST be the server-side tuple. For messages carrying a single Session-Tuple (QS and RX), the Session-Tuple MUST be the 5-tuple of the triggering packet.</t>

</section>
<section anchor="ns-message"><name>NS Message</name>

<t>The NS message contains a Node-Local-IP field and two Session-Tuples.</t>

<t>The Node-Local-IP field is located at the end of the NS message and carries the local IP address of the network node that sends the NS message. Its length is 16 octets when the F-LIP6 flag is set, and 4 octets otherwise. The client or server uses this address as the destination IP to send the NA message back to the network node.</t>

<t>The body of the NS message follows the header:</t>

<figure title="ASRP NS Message Body" anchor="ASRP-NS-MSG"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~               Session-Tuples: ST44/ST66/ST46/ST64             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                         Session-Data                          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                   Node-Local-IP (IPv4 or IPv6)                ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The two Session-Tuples represent the network node&#39;s connections with the client and the server, respectively.</t>

</section>
<section anchor="qs-message"><name>QS Message</name>

<t>The body of the QS message follows the header:</t>

<figure title="ASRP QS Message Body" anchor="ASRP-QS-MSG"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                   Session-Tuple: ST4 or ST6                   ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                         Session-Data                          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<section anchor="hs-message"><name>HS Message</name>

<t>The HS message consists of the message header followed by a 4-octet Reserved field.</t>

</section>
<section anchor="other-messages"><name>Other Messages</name>

<t>The NA message has the same structure as the NS message, except that the Node-Local-IP field is not present. The NC, RS, and PS messages have the structure of the NA message. In the NC message, the client-side Session-Tuple remains unchanged, while the server-side Session-Tuple may be modified to reflect the conflicting session; the F-CC flag indicates whether the conflict is on the client side or the server side. The RX message has the structure of the QS message.</t>

</section>
</section>
<section anchor="asrp-packets"><name>ASRP Packets</name>

<t>A packet that carries a single ASRP message is referred to as an ASRP packet. An inline-ASRP packet is a packet of the flow itself: how the message is placed in it - at the head of the segment payload marked by the ASRP option, or in the datagram&#39;s option area - is specified in <xref target="transmission-modes"/>. A standalone-ASRP packet is an independent packet with its own 5-tuples, encapsulated using IP/UDP <xref target="RFC0768"/> with the destination port ASRP-PORT; its payload is the message.</t>

<section anchor="transport-layer-transparency"><name>Transport-Layer Transparency</name>

<t>An inline ASRP message exists only on the wire between the sending side&#39;s ASRP module (which inserts it) and the receiving side&#39;s ASRP module (which removes or reads it). Neither the application nor either transport stack observes it.</t>

<t>On a TCP flow, an inline message is never part of either endpoint&#39;s TCP sequence space: the sender&#39;s transport stack generated the segment without it, and the receiver&#39;s transport stack processes the segment without it. The receiving ASRP module removes the message from the head of the payload and the ASRP option from the header before the segment is handed to the transport stack. Implementations MUST NOT modify TCP sequence or acknowledgment numbers when inserting or removing an inline message; the fields requiring adjustment are the IP total length, the TCP data offset, and the transport checksums, which MUST be recomputed. After removal, the byte stream each endpoint&#39;s transport stack observes is identical to that of a session that never carried ASRP messages.</t>

<t>On a UDP flow, no such machinery is required. The ASRP Option is carried in the datagram&#39;s option area, beyond the length indicated by the UDP header: a receiving stack that does not process UDP options ignores it by definition, and the receiving ASRP module reads the option without modifying the datagram. The datagram delivered to the application is the one the sender&#39;s application wrote.</t>

<t>A separate packet that copies the original packet header carries no data of the flow: the receiving ASRP module processes the message and discards the packet, on both TCP and UDP flows.</t>

</section>
</section>
<section anchor="message-processing"><name>Message Processing</name>

<t>Standalone-ASRP packets are identified by the UDP destination port, while Inline-ASRP packets are identified by the ASRP option. Once an ASRP packet is identified, the ASRP message within it is then parsed and processed.</t>

<section anchor="message-validation"><name>Message Validation</name>

<t>Before processing any ASRP message, a receiver MUST perform the following checks and silently discard the message if any of them fails:</t>

<t><list style="numbers" type="1">
  <t>The Version field is a version the receiver implements.</t>
  <t>The Length field matches the number of ASRP message octets actually present in the packet.</t>
  <t>The STType field matches the MsgType: QS and RX carry a single Session-Tuple (ST4 or ST6); NS, NA, NC, RS, and PS carry a Session-Tuple pair (ST44, ST66, ST46, or ST64); HS carries no Session-Tuple (NULL).</t>
  <t>The Reserved field and any unassigned flag bits are ignored.</t>
</list></t>

<t>A message that passes these checks is processed according to its MsgType as described in the following subsections.</t>

</section>
<section anchor="cookie-handling"><name>Cookie Handling</name>

<t>Every ASRP message carries the 4-octet Cookie field defined in <xref target="message-format"/>. The cookie associates a response with the request that triggered it.</t>

<t>The sender of a request message (QS, NS, or HS) SHOULD fill the Cookie field with a value that identifies the request; a per-request random value is a typical choice. A responder (the sender of RS/RX, NA/NC, or the NS replying to HS) MUST copy the Cookie field of the request into the Cookie field of its response, unchanged. The Cookie is opaque on the wire and echoed verbatim, so interoperability does not depend on how it is generated; the security properties of different generation methods are discussed in the Security Considerations.</t>

<t>A node that receives a response SHOULD verify that the Cookie field matches the outstanding request it is applying the response to, and discard the response otherwise.</t>

<t>A backup holder MUST store the Cookie of the NS message that created the backup, and MUST echo that Cookie in every PS message it sends for that session. A network node that receives a PS message SHOULD verify the echoed Cookie when it can - e.g., by matching its local record for the session, or by recomputing a Cookie whose derivation it is configured with - and silently discard the PS message if verification fails. A PS message whose Cookie the node cannot verify is processed according to the node&#39;s local policy; see the Security Considerations.</t>

<t>An implementation that does not use cookie validation MAY set the Cookie field of its requests to zero and skip the verification above; see the Security Considerations for how this affects message validation.</t>

<t>Stronger message authentication, e.g., based on a message authentication code, can be introduced as a future extension carried in the variable-length Session-Data field, without any change to the message format.</t>

</section>
<section anchor="ns-message-1"><name>NS Message</name>

<t>When a client or server receives an NS message, it MUST first check for session conflicts on the client side and then on the server side. A client-side conflict occurs when the client-side tuple matches an existing backed-up session on either side. If a conflict is found, it MUST clear the F-NA flag and send an NC message, with the F-CC flag set to indicate a client-side conflict.</t>

<t>If no conflict is found, it MUST back up the session state information together with the Cookie of the NS message, and hand the embedded packet (if present) over to the system. If the F-NA flag is set, it MUST send an NA message.</t>

<t>The F-NA flag SHOULD be set when the session is created from a non-explicit first packet; explicit first packets (e.g., TCP SYN or DNS query) do not require it.</t>

<t>If an NS message is lost, in PSV mode a TCP SYN retransmission or subsequent packets regenerate NS messages until an NA message is received; in ACT mode, subsequent packets generate HS messages, prompting the network node to retransmit the NS message.</t>

<t>NS messages may be generated in both PSV and ACT modes. The handling procedures are described in <xref target="PSV-Scenario-1"/>, <xref target="PSV-Scenario-3"/>, and <xref target="ACT-Scenario-1"/>.</t>

</section>
<section anchor="na-message"><name>NA Message</name>

<t>The destination IP of the NA packet MUST be set to the Node-Local-IP field carried in the received NS message, and the destination port MUST be set to ASRP-PORT.</t>

<t>Upon receiving an NA message, the network node considers that the corresponding NS message has been processed by the responder, and MUST NOT send any further NS messages for this session.</t>

</section>
<section anchor="nc-message"><name>NC Message</name>

<t>The destination IP of the NC packet MUST be set to the Node-Local-IP field carried in the received NS message, and the destination port MUST be set to ASRP-PORT.</t>

<t>Upon receiving an NC message, the network node considers that the session conflicts with an existing local session on the responder. If the F-CC flag is set, the conflict is on the client side; otherwise, it is on the server side. The network node SHOULD handle the conflict according to its local policy.</t>

</section>
<section anchor="qs-message-1"><name>QS Message</name>

<t>The source IP of the QS packet MUST be set to the network node&#39;s local IP (obtainable from configuration), and the destination IP MUST be set to the client&#39;s or server&#39;s IP (obtainable from the forwarded packet as described in <xref target="PSV-Scenario-2"/> and <xref target="ACT-Scenario-2"/>, or derived via algorithmic mapping to the client or server as described in <xref target="PSV-Scenario-3"/> and <xref target="ACT-Scenario-1"/>). The source port MUST be randomly generated, and the destination port MUST be set to ASRP-PORT.</t>

<t>The backup holder MUST index the backed-up session by both the client-side and the server-side 5-tuples. When a client or server receives a QS packet, it MUST look up the backed-up session whose client-side or server-side 5-tuple matches the Session-Tuple in the QS message. If a match is found, it MUST return an RS message; otherwise, it MUST return an RX message.</t>

<t>If a QS message is lost, subsequent packets will trigger the generation of new QS packets, continuing the attempt to recover the session.</t>

<t>QS messages may be generated in both PSV and ACT modes. The handling procedures are described in <xref target="PSV-Scenario-2"/>, <xref target="PSV-Scenario-3"/>, and <xref target="ACT-Scenario-2"/>.</t>

</section>
<section anchor="rs-message"><name>RS Message</name>

<t>The RS packet MUST reuse the protocol header of the QS packet, with the source and destination IP addresses swapped.</t>

<t>When a network node receives an RS packet, it MUST recover the session and forward packets according to the session.</t>

<t>If an RS message is lost, subsequent QS messages will continue the attempt to recover the session, thereby triggering retransmission of the RS message.</t>

<t>RS messages may be generated in both PSV and ACT modes. The handling procedures are described in <xref target="PSV-Scenario-1"/>, <xref target="PSV-Scenario-2"/>, <xref target="PSV-Scenario-3"/>, <xref target="ACT-Scenario-1"/>, and <xref target="ACT-Scenario-2"/>.</t>

</section>
<section anchor="rx-message"><name>RX Message</name>

<t>Upon receiving an RX message, the network node MUST follow the processing procedures described in the respective scenarios under PSV/ACT mode.</t>

</section>
<section anchor="hs-message-1"><name>HS Message</name>

<t>The network node identifies the session by the 5-tuple of the packet carrying the HS message. If a local session is found, it MUST return an NS message for that session to the client, addressed to the source IP of that packet; otherwise, no NS message is returned.</t>

<t>HS messages are only generated in ACT mode. The handling procedure is described in <xref target="ACT-Scenario-1"/>.</t>

</section>
<section anchor="ps-message"><name>PS Message</name>

<t>The source IP, destination IP, and source port of the PS packet MUST be copied from the packet sent by the server.</t>

<t>When a network node receives a PS message, it SHOULD verify the echoed Cookie as described in &quot;Cookie Handling&quot; before recovering the session; it extracts the forwarded packet (if present) and forwards it according to the session.</t>

<t>PS messages are only generated in PSV mode. The handling procedure is described in <xref target="PSV-Scenario-1"/> <xref target="PSV-Scenario-3"/>.</t>

</section>
</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>ASRP messages may be subject to forgery, replay, or flooding by attackers who are able to inject traffic into the network that carries them. ASRP deployments can counter this with two layers of message validation. Both draw only on information available to the validating node - including, where deployed, a cluster-wide key, which is deployment configuration rather than protocol state - so no protocol-level trust relationship between nodes is required.</t>

<t>Cookie-based validation: Every ASRP message carries a 4-octet Cookie field. For a request/response pair (QS and RS/RX, NS and NA/NC, HS and the NS replying to it), a node that sends a request fills the Cookie and verifies that the response echoes it; this binds the response to an outstanding request of the receiving node, so that a forged response that guesses the Cookie, or a replayed response from an earlier request, can be recognized and discarded. A backup holder likewise echoes in its PS messages the Cookie of the NS message that created the backup, and a network node verifies the echoed Cookie before recovering a session; this binds a PS message to a session the cluster actually created. This document specifies the echo and verification framework and intentionally leaves Cookie generation to the implementation and deployment, since the Cookie is opaque and echoed verbatim: a per-request random value resists guessing and replay, and a value derived with a key shared across the cluster additionally lets any node verify a PS message, which matters under asymmetric routing, where the node receiving a PS message need not be the node that created the session.</t>

<t>Session-legitimacy validation: Nodes SHOULD validate the session referenced by a message against application-level policies, such as verifying that the session points to a known and healthy server in a load-balancing deployment, or that the address translation complies with configured rules in a NAT deployment. Nodes that perform this validation MUST discard messages that fail it and MUST NOT create a new session for them.</t>

<t>Implementations MAY apply rate limiting to ASRP messages as appropriate, e.g., to contain QS floods <xref target="RFC4987"/>. ASRP responses are comparable in size to the requests that trigger them, so the protocol itself provides no amplification.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>ASRP messages carry the 5-tuple of the session they describe. This is the same information that is visible in the session&#39;s own packets; observing ASRP traffic reveals the existence of a session between two endpoints and their addresses, but nothing beyond what the carried traffic already exposes.</t>

<t>The Node-Local-IP field of an NS message discloses the address of the network node that created the session to the backup holder. This is information the backup holder requires in order to return NA/NC messages, and the network node address is in any case observable in the forwarded traffic of the session.</t>

<t>ASRP introduces no new identifiers that persist across sessions and no tracking mechanism. Operators who wish to limit the visibility of session metadata can apply the usual operational measures to ASRP traffic, e.g., restricting routing of the ASRP-PORT destination to the serving domain.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document defines an application-layer protocol (ASRP). All values of the MsgType, STType, and Flags fields used by this version of the protocol are defined in this specification. New values MUST be defined via an update to this document or a successor specification; a future standards-track version of ASRP SHOULD request the creation of IANA registries for these fields. The implementation of this protocol requires the allocation of a TCP option Kind, a UDP option Kind, and a UDP destination port:</t>

<section anchor="tcp-option-kind"><name>TCP Option Kind</name>

<t>The ASRP option (see <xref target="transmission-modes"/>) requires the allocation of a TCP option Kind number from the TCP option kind registry:</t>

<texttable>
      <ttcol align='left'>Kind</ttcol>
      <ttcol align='left'>Length</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>2</c>
      <c>ASRP</c>
      <c>This document</c>
</texttable>

</section>
<section anchor="udp-option-kind"><name>UDP Option Kind</name>

<t>The ASRP option requires the allocation of a UDP option Kind number from the &quot;UDP Option Kind Numbers&quot; registry <xref target="RFC9868"/>:</t>

<texttable>
      <ttcol align='left'>Kind</ttcol>
      <ttcol align='left'>Length</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>variable</c>
      <c>ASRP</c>
      <c>This document</c>
</texttable>

</section>
<section anchor="udp-destination-port"><name>UDP Destination Port</name>

<t>QS/RS/RX/NA/NC messages are encapsulated within UDP datagrams for transmission. A fixed UDP destination port number is required so that the receiving end can identify and process such encapsulated packets.</t>

<t>Service Name: asrp</t>

<t>Port Number: 51200 (proposed value for current experimentation)</t>

<t>Transport Protocol: udp</t>

<t>Description: Used for receiving UDP-encapsulated ASRP protocol messages.</t>

<t>For experimental implementations and interoperability testing prior to IANA assignment, UDP port 51200 MAY be used as a temporary default. This port falls within the dynamic/private port range (49152-65535) reserved for local or temporary use and documentation examples <xref target="RFC6335"/>.</t>

<t>IANA is requested to assign a permanent port number in the &quot;User Ports&quot; range (1024-49151) for the &quot;asrp&quot; service in the &quot;Service Name and Transport Protocol Port Number Registry&quot;, with a reference to this document.</t>

</section>
<section anchor="experimental-use"><name>Experimental Use</name>

<t>Prior to IANA assignment of permanent option Kind values, implementations deployed for experimentation or interoperability testing SHOULD use the option Kind values reserved for experimental use, together with an Experiment Identifier (ExID), as described in <xref target="RFC6994"/> for TCP and <xref target="RFC9868"/> for UDP.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC0768">
  <front>
    <title>User Datagram Protocol</title>
    <author fullname="J. Postel" initials="J." surname="Postel"/>
    <date month="August" year="1980"/>
  </front>
  <seriesInfo name="STD" value="6"/>
  <seriesInfo name="RFC" value="768"/>
  <seriesInfo name="DOI" value="10.17487/RFC768"/>
</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="RFC9868">
  <front>
    <title>Transport Options for UDP</title>
    <author fullname="J. Touch" initials="J." surname="Touch"/>
    <author fullname="C. Heard" initials="C." role="editor" surname="Heard"/>
    <date month="October" year="2025"/>
    <abstract>
      <t>Transport protocols are extended through the use of transport header options. This document updates RFC 768 (UDP) by indicating the location, syntax, and semantics for UDP transport layer options within the surplus area after the end of the UDP user data but before the end of the IP datagram.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9868"/>
  <seriesInfo name="DOI" value="10.17487/RFC9868"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC1034">
  <front>
    <title>Domain names - concepts and facilities</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1034"/>
  <seriesInfo name="DOI" value="10.17487/RFC1034"/>
</reference>
<reference anchor="RFC1035">
  <front>
    <title>Domain names - implementation and specification</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1035"/>
  <seriesInfo name="DOI" value="10.17487/RFC1035"/>
</reference>
<reference anchor="RFC2991">
  <front>
    <title>Multipath Issues in Unicast and Multicast Next-Hop Selection</title>
    <author fullname="D. Thaler" initials="D." surname="Thaler"/>
    <author fullname="C. Hopps" initials="C." surname="Hopps"/>
    <date month="November" year="2000"/>
    <abstract>
      <t>The effect of multipath routing on a forwarder is that the forwarder potentially has several next-hops for any given destination and must use some method to choose which next-hop should be used for a given data packet. This memo summarizes current practices, problems, and solutions. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2991"/>
  <seriesInfo name="DOI" value="10.17487/RFC2991"/>
</reference>
<reference anchor="RFC2992">
  <front>
    <title>Analysis of an Equal-Cost Multi-Path Algorithm</title>
    <author fullname="C. Hopps" initials="C." surname="Hopps"/>
    <date month="November" year="2000"/>
    <abstract>
      <t>Equal-cost multi-path (ECMP) is a routing technique for routing packets along multiple paths of equal cost. The forwarding engine identifies paths by next-hop. When forwarding a packet the router must decide which next-hop (path) to use. This document gives an analysis of one method for making that decision. The analysis includes the performance of the algorithm and the disruption caused by changes to the set of next-hops. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2992"/>
  <seriesInfo name="DOI" value="10.17487/RFC2992"/>
</reference>
<reference anchor="RFC4787">
  <front>
    <title>Network Address Translation (NAT) Behavioral Requirements for Unicast UDP</title>
    <author fullname="F. Audet" initials="F." role="editor" surname="Audet"/>
    <author fullname="C. Jennings" initials="C." surname="Jennings"/>
    <date month="January" year="2007"/>
    <abstract>
      <t>This document defines basic terminology for describing different types of Network Address Translation (NAT) behavior when handling Unicast UDP and also defines a set of requirements that would allow many applications, such as multimedia communications or online gaming, to work consistently. Developing NATs that meet this set of requirements will greatly increase the likelihood that these applications will function properly. 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="127"/>
  <seriesInfo name="RFC" value="4787"/>
  <seriesInfo name="DOI" value="10.17487/RFC4787"/>
</reference>
<reference anchor="RFC4987">
  <front>
    <title>TCP SYN Flooding Attacks and Common Mitigations</title>
    <author fullname="W. Eddy" initials="W." surname="Eddy"/>
    <date month="August" year="2007"/>
    <abstract>
      <t>This document describes TCP SYN flooding attacks, which have been well-known to the community for several years. Various countermeasures against these attacks, and the trade-offs of each, are described. This document archives explanations of the attack and common defense techniques for the benefit of TCP implementers and administrators of TCP servers or networks, but does not make any standards-level recommendations. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4987"/>
  <seriesInfo name="DOI" value="10.17487/RFC4987"/>
</reference>
<reference anchor="RFC5798">
  <front>
    <title>Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6</title>
    <author fullname="S. Nadas" initials="S." role="editor" surname="Nadas"/>
    <date month="March" year="2010"/>
    <abstract>
      <t>This memo defines the Virtual Router Redundancy Protocol (VRRP) for IPv4 and IPv6. It is version three (3) of the protocol, and it is based on VRRP (version 2) for IPv4 that is defined in RFC 3768 and in "Virtual Router Redundancy Protocol for IPv6". VRRP specifies an election protocol that dynamically assigns responsibility for a virtual router to one of the VRRP routers on a LAN. The VRRP router controlling the IPv4 or IPv6 address(es) associated with a virtual router is called the Master, and it forwards packets sent to these IPv4 or IPv6 addresses. VRRP Master routers are configured with virtual IPv4 or IPv6 addresses, and VRRP Backup routers infer the address family of the virtual addresses being carried based on the transport protocol. Within a VRRP router, the virtual routers in each of the IPv4 and IPv6 address families are a domain unto themselves and do not overlap. The election process provides dynamic failover in the forwarding responsibility should the Master become unavailable. For IPv4, the advantage gained from using VRRP is a higher-availability default path without requiring configuration of dynamic routing or router discovery protocols on every end-host. For IPv6, the advantage gained from using VRRP for IPv6 is a quicker switchover to Backup routers than can be obtained with standard IPv6 Neighbor Discovery mechanisms. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5798"/>
  <seriesInfo name="DOI" value="10.17487/RFC5798"/>
</reference>
<reference anchor="RFC6335">
  <front>
    <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="L. Eggert" initials="L." surname="Eggert"/>
    <author fullname="J. Touch" initials="J." surname="Touch"/>
    <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
    <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
    <date month="August" year="2011"/>
    <abstract>
      <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry. It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
      <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV specification to clarify what a service name is and how it is registered. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="165"/>
  <seriesInfo name="RFC" value="6335"/>
  <seriesInfo name="DOI" value="10.17487/RFC6335"/>
</reference>
<reference anchor="RFC6994">
  <front>
    <title>Shared Use of Experimental TCP Options</title>
    <author fullname="J. Touch" initials="J." surname="Touch"/>
    <date month="August" year="2013"/>
    <abstract>
      <t>This document describes how the experimental TCP option codepoints can concurrently support multiple TCP extensions, even within the same connection, using a new IANA TCP experiment identifier. This approach is robust to experiments that are not registered and to those that do not use this sharing mechanism. It is recommended for all new TCP options that use these codepoints.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6994"/>
  <seriesInfo name="DOI" value="10.17487/RFC6994"/>
</reference>
<reference anchor="RFC7413">
  <front>
    <title>TCP Fast Open</title>
    <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
    <author fullname="J. Chu" initials="J." surname="Chu"/>
    <author fullname="S. Radhakrishnan" initials="S." surname="Radhakrishnan"/>
    <author fullname="A. Jain" initials="A." surname="Jain"/>
    <date month="December" year="2014"/>
    <abstract>
      <t>This document describes an experimental TCP mechanism called TCP Fast Open (TFO). TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged. However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances. Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7413"/>
  <seriesInfo name="DOI" value="10.17487/RFC7413"/>
</reference>
<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</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="RFC9293">
  <front>
    <title>Transmission Control Protocol (TCP)</title>
    <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="7"/>
  <seriesInfo name="RFC" value="9293"/>
  <seriesInfo name="DOI" value="10.17487/RFC9293"/>
</reference>

<reference anchor="I-D.draft-cmcc-tcp-sro">
   <front>
      <title>The Session Recovery (SR) Option for TCP</title>
      <author fullname="Zhaoyu Luo" initials="Z." surname="Luo">
         <organization>CMCC</organization>
      </author>
      <author fullname="Haishuang Yan" initials="H." surname="Yan">
         <organization>CMCC</organization>
      </author>
      <date day="14" month="September" year="2026"/>
      <abstract>
	 <t>   This document defines the Session Recovery (SR) option for TCP.  The
   option lets the endpoints of a connection exchange identifiers:
   during the handshake each endpoint carries its own identifier, and
   designated segments afterwards carry the identifier of the peer.
   This places the knowledge of which endpoint a connection belongs to
   inside the TCP header, where network functions on the path - load
   balancers, NAT gateways, firewalls - can read it without per-flow
   state and without payload inspection.  The primary use is session
   recovery in SNAT and load-balancing clusters; further uses include
   reduced-state forwarding, connection-tracking recovery, and per-
   backend telemetry.  The option is carried in the SYN, the SYN-ACK,
   and retransmitted segments, or in every segment when so configured;
   the default adds no overhead to normal data segments.  Endpoints that
   do not support it behave as if the option did not exist.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-cmcc-tcp-sro-02"/>
   
</reference>



    </references>

</references>


<?line 751?>

<section anchor="implementation-status"><name>Implementation Status</name>

<t>Note to the RFC Editor: Please remove this section before publication.</t>

<t>ASRP has been implemented twice, through two independent technology stacks, and the implementations are interoperable:</t>

<t><list style="symbols">
  <t>A Linux kernel module extending IPVS, implementing the network-node role in PSV mode: session creation with inline NS insertion, QS/RS exchange for session recovery, NA/NC handling, cookie verification of responses, and the ASRP-PORT UDP listener.</t>
  <t>An eBPF implementation based on traffic-control programs, implementing the backup-holder role on the endpoints: NS backup from session first packets, session reconstruction from PS messages, and response generation with cookie echoing.</t>
</list></t>

<t>The two stacks were interoperability tested on a three-node testbed (client, load-balancing node, backend server), covering direct session creation, recovery after cluster session-table loss simulating node failure, and the fallback when no backed-up session exists. Recovery is driven by the retransmission behavior of the recovered session, as described in the scenarios. The small footprint of both implementations - a kernel module and a set of eBPF programs - indicates that endpoint support for ASRP is a modest engineering effort.</t>

</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank all individuals who have provided valuable feedback and contributions during the development of this document.</t>

</section>


  </back>

<!-- ##markdown-source:
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
I3R3AZ8ZvRyNorO/XeBQ/3H/3v8FRDwE1rnfAAA=

-->

</rfc>

