<?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-08" 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="September" day="14"/>

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

    <abstract>


<?line 67?>

<t>This document describes an experimental protocol named the Available Session Recovery Protocol (ASRP). The protocol is designed to optimize high-availability network cluster architectures, providing a superior high-availability solution for clusters offering stateful network services such as load balancing and Network Address Translation (NAT <xref target="RFC4787"/>). ASRP defines the procedures for session backup and recovery, as well as the message formats used during these interactions, enabling efficient and streamlined session state management.</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 75?>

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

<t>Traditional high-availability network clusters based on a master-backup architecture rely on session state synchronization between the master and backup nodes. While functionally complete, this architecture faces challenges in the cloud era, such as insufficient flexibility for elastic scaling, resource redundancy, and high implementation complexity. To address these challenges, the industry has moved to the Elastic Stateful Cluster.</t>

<t>An Elastic Stateful Cluster is a high-availability network service cluster composed of multiple active nodes whose number can be elastically scaled, providing stateful network services such as load balancing (SLB) and Network Address Translation (NAT). 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>

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

<t>High-availability mechanisms evolved together with the deployment model they serve.</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 between two nodes, with session continuity typically left to private synchronization between the pair. The model fits a two-node deployment. In a multi-node cluster where every node forwards traffic simultaneously, there is no natural mapping onto a master/backup pair, and the failover unit no longer corresponds to the service unit.</t>

<t>The industry answer is the Elastic Stateful Cluster itself: all nodes are active, and session state is shared through intra-cluster synchronization (e.g., LVS connection synchronization daemons, DPVS), typically as full-mesh or master/replica replication. Conventional Elastic Stateful Clusters realize this with a Fast/Slow Path design that separates session management from packet forwarding:</t>

<figure title="Fast/Slow Path Elastic Stateful Cluster" anchor="FP-SP-ESC"><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 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="ESC-COMP"/> summarizes the comparison.</t>

<texttable title="Comparison of HA Architectures" anchor="ESC-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 (backup idles)</c>
      <c>Private pairwise sync</c>
      <c>VRRP <xref target="RFC5798"/></c>
      <c>Elastic Stateful Cluster (conventional)</c>
      <c>Fast path: easy; slow path: hard</c>
      <c>Complex (intra-cluster synchronization)</c>
      <c>None (private implementations)</c>
      <c>Elastic Stateful Cluster (ASRP)</c>
      <c>Yes (all nodes uniform)</c>
      <c>Simple (state kept outside the cluster)</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-ESC"><artwork><![CDATA[
                     +----------------------+
                     |          ...         |
+----------+         |          ...         |         +----------+
|          |         |  +----------------+  |         |          |
|  Client  | <--------> |    ASRP Node   | <--------> |  Server  |
|          |         |  +----------------+  |         |          |
+----------+         |          ...         |         +----------+
                     |          ...         |
                     +----------------------+
]]></artwork></figure>

<t>The Available Session Recovery Protocol (ASRP) proposes an innovative high-availability solution, aiming to provide a standardized method for constructing elastic service clusters. This facilitates broader participation from software and hardware developers in building elastic cloud network service clusters. Its core idea is to innovatively 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>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, preceded by the ASRP Signature.</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). Its typical service is load balancing.</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). Its typical service is Source Network Address Translation (SNAT).</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 devices). 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 protocol messages: New Session message (NS), New Session Acknowledge message (NA), New Session Conflict message (NC), Query Session message (QS), Recover Session message (RS), Recovery no-session message (RX), Hello Session message (HS) and Push Session message (PS).</t>

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

<t>Generated by the network node, it is used to send session state information to a designated client (in ACT mode) or server (in PSV mode) for backup when creating a new session.</t>

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

<t>Generated by the server as a response to an NS message in PSV mode, acknowledging the receipt of the NS message.</t>

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

<t>Generated by the client or server when the session state carried in a received NS message conflicts with an existing local session, indicating the session conflict to the network node.</t>

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

<t>Generated by the network node, it is used to query the client or server for backup session state information when a received packet cannot match any local session and a session cannot be directly created.</t>

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

<t>Generated by the client or server holding the backup as a response to a QS message, it contains the state information required to recover the session. The network node parses the RS message and reconstructs or marks the local session, thereby achieving failure recovery.</t>

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

<t>Generated by the client or server holding the backup as a response to a QS message, indicating that the session queried by the QS message was not found. Except for the MsgType field, the RX message is identical to the corresponding QS message.</t>

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

<t>Generated by the client, it is used in ACT mode to announce to the network node its capability to support the ASRP protocol and to trigger the network node to return an NS message to complete session backup.</t>

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

<t>Generated by the server, it is used in PSV mode to push session state information to the network node. In the case of asymmetric routing, the network node utilizes the PS message to create/update sessions for fast packet forwarding.</t>

</section>
</section>
<section anchor="transmission-modes-and-signature"><name>Transmission Modes and Signature</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, either inserted into the original packet or carried in a separate packet that copies the original packet header. 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. 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 first packet of a 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.</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 anchor="asrp-signature"><name>ASRP Signature</name>

<t>In Inline Message mode, an ASRP Signature is used to indicate that a packet contains an ASRP message.</t>

<t>Inspired by the Proxy Protocol, an 8-byte ASRP Signature is used:</t>

<t>0x41, 0x53, 0x52, 0x50, 0x0D, 0x0A, 0x00, 0xF1.</t>

<t>The signature consists of the ASCII string &quot;ASRP&quot; followed by 0x0D, 0x0A, 0x00, 0xF1. The &quot;ASRP&quot; prefix keeps the marker readable and distinct from other in-stream protocols; the trailing bytes reduce the chance of a false match against application data that happens to begin with the ASCII string.</t>

<t>The ASRP Signature is a fixed marker for message identification; it is not a cryptographic signature. It is inserted in front of the ASRP message. In Standalone Message mode, the UDP destination port is ASRP-PORT, and the ASRP Signature is not required.</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 TCP 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 load balancing and NAT sessions, keyed by the session&#39;s 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 an active-active 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>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 ten fields in total. The message header has a fixed length and is composed of the first six fields. The message body comprises the remaining four fields: the fixed-length Protocol and Cookie fields, and the variable-length Session-Tuple and Session-Data fields. 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: 8 octets, an opaque value used for message validation.
   The sender of a request message SHOULD fill this field with a
   per-request random value; the responder MUST echo it unchanged.
   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>

<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 anchor="ns-message-format"><name>NS Message Format</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>NS Message Format:</t>

<figure title="ASRP NS Message Format" 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     MsgType   |     STType    |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |    Reserved   |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Cookie                             |
|                          (8 octets)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~               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="na-message-format"><name>NA Message Format</name>

<t>The NA message acknowledges the receipt of an NS message that carries the F-NA flag.</t>

<t>The NA message has the same structure as the NS message, except that the Node-Local-IP field is not present.</t>

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

<t>The structure of the message is the same as that of the NA message.</t>

<t>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.</t>

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

<t>QS Message Format:</t>

<figure title="ASRP QS Message Format" 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     MsgType   |     STType    |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |    Reserved   |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Cookie                             |
|                          (8 octets)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                   Session-Tuple: ST4 or ST6                   ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                         Session-Data                          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t>RS Message Format: The structure of the message is the same as that of the NA message.</t>

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

<t>RX Message Format: The structure of the message is the same as that of the QS message.</t>

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

<t>HS Message Format:</t>

<figure title="ASRP HS Message Format" anchor="ASRP-HS-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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     MsgType   |     STType    |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |    Reserved   |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Cookie                             |
|                          (8 octets)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t>PS Message Format: The structure of the message is the same as that of the NA message.</t>

</section>
</section>
<section anchor="asrp-packet-format"><name>ASRP packet Format</name>

<t>A packet that carries a single ASRP message is referred to as an ASRP packet. Based on the two transmission modes of ASRP messages, the format of ASRP packets can also be classified into two types.</t>

<section anchor="inline-asrp-packet"><name>Inline-ASRP packet</name>

<t>In Inline Message mode, the ASRP packet shares the 5-tuples with the flow. The ASRP message is either inserted into the original packet:</t>

<figure title="Inline-ASRP packet" anchor="Inline-ASRP-PKT"><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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~             Original packet header (IP + TCP/UDP)             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        ASRP Signature                         |
|                          (8 octets)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                       NS/HS/PS message                        ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                     Original packet data                      ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>or carried in a separate packet that copies the original packet header, without the original packet data:</t>

</section>
<section anchor="standalone-asrp-packet"><name>Standalone-ASRP packet</name>

<t>In Standalone Message mode, the ASRP packet uses its own 5-tuples and is encapsulated using IP/UDP. The packet format is as follows:</t>

<figure title="Standalone-ASRP packet" anchor="Standalone-ASRP-PKT"><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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~      IP + UDP Header (with destination port: ASRP-PORT)       ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                    QS/RS/RX/NA/NC message                     ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<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 strips it). The message occupies leading octets of the segment payload, but it is never part of either endpoint&#39;s TCP sequence space: the sender&#39;s transport stack generated the segment without the message, and the receiver&#39;s transport stack processes the segment without it. In this respect an inline message travels like application data - the signature and the message simply occupy the head of the payload - yet it is handled entirely below the transport layer, and neither the application nor either transport stack observes it.</t>

<t>Consequently, implementations MUST NOT modify TCP sequence or acknowledgment numbers when inserting or stripping an inline message. The only fields requiring adjustment are the IP total length and the transport checksums, which MUST be recomputed after insertion or removal. After stripping, the byte stream each endpoint&#39;s transport stack observes is identical to that of a session that never carried ASRP messages.</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 Signature. Once an ASRP packet is identified, the ASRP messages within it are 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 8-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 carrying F-NA, or HS) SHOULD fill the Cookie field with a random value that is unique to this request. 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.</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. Messages with no request/response pairing (e.g., PS) set the Cookie field to zero. 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-processing"><name>NS Message Processing</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 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-processing"><name>NA Message Processing</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-processing"><name>NC Message Processing</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-processing"><name>QS Message Processing</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-processing"><name>RS Message Processing</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-processing"><name>RX Message Processing</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-processing"><name>HS Message Processing</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-processing"><name>PS Message Processing</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 MUST recover 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 layers draw on information local to the validating node, so no protocol-level trust relationship between nodes is required.</t>

<t>Cookie-based validation: Every ASRP message carries an 8-octet Cookie field. A node that sends a request (a QS message, an NS message carrying F-NA, or an HS message) fills the cookie with a per-request random value and verifies that the corresponding response (RS/RX, NA/NC, or NS, respectively) echoes it. This verifies that the response belongs to an outstanding request of the receiving node; a forged response that guesses the cookie, or a replayed response from an earlier request, can be recognized and discarded. Cookie generation and verification rules are determined by the implementation and deployment; see &quot;Cookie Handling&quot;.</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. For the implementation of this protocol, a UDP destination port requires allocation:</t>

<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>


  </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>



    </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="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="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 Option (SRO) for TCP</title>
      <author fullname="Zhaoyu Luo" initials="Z." surname="Luo">
         <organization>CMCC</organization>
      </author>
      <date day="13" month="August" year="2026"/>
      <abstract>
	 <t>   This document defines the Session Recovery Option (SRO) for TCP.  SRO
   improves the reliability of Source Network Address Translation (SNAT)
   and load balancing (LB) services and simplifies the implementation of
   elastically scaling SNAT/LB clusters.  SRO enables a client and a
   server to exchange their identifiers during connection establishment.
   When a session needs to be recovered, an endpoint conveys the
   identifier of the peer to the network node, which uses it to locate
   the endpoint holding the session backup and recover the session.  SRO
   is optional: 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-01"/>
   
</reference>



    </references>

</references>


<?line 812?>

<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, covering both roles the protocol defines, and the implementations have been interoperability tested on a three-node testbed consisting of a client, a load-balancing cluster node, and a backend server:</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 server: NS backup from session first packets, session reconstruction from PS messages, and response generation with cookie echoing.</t>
</list></t>

<t>The testbed exercised direct session creation (PSV-Scenario-1), recovery after cluster session-table loss simulating node failure (PSV-Scenario-2), and the fallback when no backed-up session exists (RX). Recovery was observed to be driven by the retransmission behavior of the recovered session, as described in the scenarios.</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:
H4sIAAAAAAAAA+19W3PbRpbwu6v8H7DOw0gbkpZkWY7pydYqsj12jS3LonLb
h28LJJsi1iDAQYOSGTv57d+59gUAKTlxZrNT0VQ8Ei6N7tOnz/3S7/fv3qmz
OjfD5PgqzfJ0nJtkZKzNyiI5N5PyylTr5Kwq63JS5nfvfJGk43FlruDx0fnZ
3TvTclKkC3h7WqWzuj9ZTCb91FbL/t5X+PA0reHewd7BUX/vcX//sHXt7p27
d2ydFtP/TvOygOt1tTJ4MVtW9IetD/b2Hu8d3L2TViaFzy6XeTZJa5ifvXvn
+nKYnJr6uqzeJd/DP1lxmfytKlfLu3feXQ+Tl0VtqsLU/ac4u7t34L1hYt7D
XbsaLzJaZb1ewmdfPrt4jp+dlFMYY5isLCxjkmV37yyzYQI/XySTtIDLJkmr
Kl0nO9ksSfM8WRu7m5RVMk/tPJmbyuASk34C8JLfbFnVlZlZ/XO94L8SfGaI
A+Dv+tSQvjU1s3SV1xYecQ/we/ICgGNVz8tqiLfwp6+/JElWwFP/NUherUp/
kXfpv+ZpuV7Fd8oK1nvy+uTEX6pKRAgzzeqy8lctTNAAAE/LQfLwq+TvqyJf
FXYOYDkv06l/bpLV62EyWv00L1fB1XKK277/cG9vL7y6KuoKHj+ZZ0Xqr5sF
IOMwyfNV+dP6P9cmnQ9gHzct9sUg+TEtmot9kWZ2vkoBJaKbHev9X1jZOi3m
Or//Xpvr1X9OFtYOJvjwohxnuRlMygVudFFWC8D3KzMkDBIIJNVscrC//7h5
7av9R4f4sfPnJ3uPjr4ayu/4qP6OjwzpjBWzYGy6t7/34DD4/aF7//Hj/eD3
A/398NFXj9zvj/3vDx89dt8+euDHeXS4/0B/f3zwmH9/2X86COhHPVn2bVXS
FPv9PlAc2J90UuPfF/PMJkB0VgtT1HBM7KTKxsYmsFVwrk2V4fU0T5ZCsQgV
pkk9N7ehb8kOUrXdQXIBz7sh8IvGZpcFDlQm5bLOFtlPJplnl/N+yqNmOaBG
UggpmuRAt0wFpAL2szaTelUZ28MRrzKkL0ma2BXOFglHaxRb5iukbwnsjg5l
k3I2gxfgXSCXtZmtcvc1a6qrbAJAsKvJPEltkgPSJuM0T4sJfayYOiJ5PJ3C
VGxyUaWFzYmMJjunxxfJhw+ymz//DOtHMCARygoYtmZgTMwUl0GzsgLBcTp5
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

-->

</rfc>

