<?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.29 (Ruby 3.2.2) -->


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

<!ENTITY RFC0768 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0768.xml">
<!ENTITY RFC0791 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0791.xml">
<!ENTITY RFC1122 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1122.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8200 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml">
<!ENTITY RFC9293 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9293.xml">
<!ENTITY RFC2991 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2991.xml">
<!ENTITY RFC2992 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2992.xml">
<!ENTITY RFC6335 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6335.xml">
<!ENTITY RFC7413 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7413.xml">
]>


<rfc ipr="trust200902" docName="draft-cmcc-asrp-01" category="std" consensus="true" 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>luozhaoyu@cmss.chinamobile.com</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@cmss.chinamobile.com</email>
      </address>
    </author>

    <date year="2025" month="December" day="25"/>

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

    <abstract>


<?line 65?>

<t>This document describes an experimental protocol named the Available Session Recovery Protocol (ASRP). The protocol aims to optimize high-availability network cluster architectures, providing a superior cluster high-availability solution for stateful network services such as load balancing and Network Address Translation (NAT). ASRP defines the procedures for session backup and recovery, along with the message formats used in interactions, enabling efficient and streamlined session state management.</t>

<t>Unlike traditional high-availability technologies that back up session states within the cluster, the core innovation of ASRP lies in distributing state information to clients or servers. This approach offers multiple advantages, significantly enhancing the cluster&#39;s elastic scaling capability; supporting rapid recovery from single-point or even multi-point failures; reducing resource redundancy by eliminating centralized backup nodes; and substantially simplifying cluster implementation complexity.</t>

<t>The ASRP protocol provides network clusters with ultimate elastic scalability, facilitating the implementation and deployment of large-scale elastic network clusters.</t>



    </abstract>



  </front>

  <middle>


<?line 73?>

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

<t>Traditional high-availability network cluster architectures, such as active-standby or hierarchical models, rely on session state synchronization and backup within the cluster nodes. While these architectures are functionally complete, they face challenges in the cloud era, including limited flexibility in elastic scaling, resource redundancy, and high implementation complexity.</t>

<t>The Available Session Recovery Protocol (ASRP) proposes an innovative approach aimed at building a simpler, more efficient, and more elastic high-availability solution for stateful services. Its core idea fundamentally shifts the paradigm by distributing the backup of network session state information to the endpoints of the session-clients or servers-rather than within the cluster. This allows network service nodes in the cluster (such as load balancers or NAT devices) to quickly retrieve and reconstruct session states from endpoints during failure recovery or scaling, thereby logically achieving &quot;stateless&quot; nodes.</t>

<t>Based on this concept, ASRP designs corresponding session backup and recovery mechanisms. The backed-up session state is strictly synchronized with the lifecycle of the actual network session-it becomes effective upon session establishment and is cleared upon session termination. This eliminates the need for independent keep-alive or timeout management, ensuring the timeliness and availability of the backup information.</t>

<t>Another key design goal of ASRP is to improve the efficiency of session backup. The protocol ingeniously utilizes in-band original data packets carrying service traffic to transmit session state information, embedding it into the payload of packets such as those in the TCP three-way handshake (<xref target="RFC9293"/> <xref target="RFC1122"/>). This approach avoids the overhead of generating additional control packets for state synchronization in most cases. While its implementation shares similarities with TCP Fast Open (TFO, <xref target="RFC7413"/>), it remains fully transparent to the application layer.</t>

<section anchor="elastic-stateful-clusters"><name>Elastic Stateful Clusters</name>
<figure title="Fast/Slow Path Design for Elastic Stateful Clusters" anchor="Elastic-Stateful-Cluster"><artwork><![CDATA[
                   +--------------------------+
                   | +----------------------+ |
                   | |                      | |
                   | |    Slow Path Nodes   | |
                   | |                      | |
                   | +----------------------+ |
                   |         ^        |       |
                   |         |        |       |
                   | +-------|--------|-----+ |
                   | |       |  ...   |     | |
+----------+       | |       |  ...   V     | |       +----------+
|          |       | |  +----------------+  | |       |          |
|  Client  | <--------> | Fast Path Node | <--------> |  Server  |
|          |       | |  +----------------+  | |       |          |
+----------+       | |          ...         | |       +----------+
                   | |          ...         | |
                   | +----------------------+ |
                   +--------------------------+
]]></artwork></figure>

<t>Elastic Stateful Cluster is a highly available network service cluster composed of multiple coordinated nodes that collectively provide stateful network services such as load balancing (SLB) and network address translation (NAT) to external users. To achieve elastic scaling capabilities, traditional Elastic Stateful Clusters typically adopt a fast-path/slow-path architecture, separating session management from packet forwarding. This allows the fast-path layer to scale elastically with high efficiency. A schematic representation is shown below:</t>

<t>The slow-path nodes are responsible for session creation and session synchronization, while the fast-path nodes handle high-speed packet forwarding. When a fast-path node fails, external traffic is automatically redirected to other healthy nodes, ensuring continuous service availability. The main drawback of traditional Elastic Stateful Clusters is the limited elastic scalability of the slow-path layer. The slow-path nodes must implement complex session-synchronization mechanisms internally. A typical implementation can be found in the AWS Hyperplane NFV platform.</t>

<t>The ASRP protocol focuses on session-state backup and recovery, ensuring session consistency and continuity for stateful services within cluster nodes. An Elastic Stateful Cluster built on ASRP features atomic internal nodes - nodes do not need to communicate with each other, and no session synchronization is required within the cluster. This design significantly enhances the cluster&#39;s elastic scaling capability, supports fast recovery from single-point or even multi-point failures, and reduces resource overhead and implementation complexity by eliminating centralized backup nodes. These characteristics make ASRP particularly suitable for network environments that require frequent elastic scaling, pursue high resource efficiency, and demand high service stability. ASRP thereby provides a powerful solution for the implementation and deployment of large-scale network clusters.</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>

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

<section anchor="core-concepts"><name>Core Concepts</name>

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

<t>For the ASRP protocol to function properly, all network nodes within the cluster must first deploy service programs that support the ASRP protocol. Additionally, the clients or servers responsible for backing up sessions must deploy EBPF modules or kernel modules that support the ASRP protocol. Whether these modules are deployed on the client side or the server side corresponds to the two operational modes of the ASRP protocol, respectively:</t>

<section anchor="passive-psv-mode"><name>Passive (PSV) Mode</name>

<t>In Passive (PSV) mode, the network nodes and the servers are typically located within the same trusted network domain (e.g., inside a data center). The network nodes back up session state information to the servers and recover sessions from the servers when needed. This mode requires both the network nodes and the servers to support the ASRP protocol. Typical application scenarios include traditional load balancers that provide services through a Virtual IP (VIP), or NFV load balancing network elements offering cloud load balancing services.</t>

</section>
<section anchor="active-act-mode"><name>Active (ACT) Mode</name>

<t>In Active (ACT) mode, the network nodes are typically located within the same trusted network domain as the clients (e.g., a corporate intranet). The network nodes back up session state information to the clients and recover sessions from the clients when needed. This mode requires both the network nodes and the clients to support the ASRP protocol. Typical application scenarios include Source Network Address Translation (SNAT) scenarios (such as internal network devices accessing the internet through an SNAT gateway) or NFV SNAT network elements providing cloud SNAT services.</t>

</section>
</section>
<section anchor="two-path-models"><name>Two Path Models</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 a path model in which the bidirectional traffic of the same session between a client and a server is always routed to the same node within the cluster. This path consistency is the foundation for the proper functioning of stateful network services (such as NAT and firewalls), ensuring that a single node maintains and processes the complete session state information.</t>

<t>Typical examples that demonstrate symmetric routing include,</t>

<t><list style="numbers" type="1">
  <t>Active-Standby High Availability Architecture  <vspace blankLines='1'/>
In this model, all traffic for a specific session is always handled and maintained by the primary node (e.g., NAT mapping tables, firewall session states). The standby node remains on standby and only takes over when the primary node fails. This architecture inherently ensures symmetric routing of traffic to the primary node.</t>
  <t>Stateful Load Balancing Cluster with a &quot;Same-Source-Same-Destination&quot; Mechanism  <vspace blankLines='1'/>
In this modern extended architecture, network devices (such as OVS or routers) use a &quot;same-source-same-destination&quot; policy to ensure that all packets belonging to the same connection are directed to the same load balancing node, thereby maintaining symmetric routing in a distributed environment.</t>
</list></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>The bidirectional traffic of the same session may be routed to different nodes within the cluster. Specifically, requests sent from the client to the server may be processed by node X, while responses sent from the server to the client may be processed by node Y. This path inconsistency requires two or more nodes to collaboratively maintain the state information of the same session, posing new challenges to the failure recovery mechanisms of stateful service clusters.</t>

<t>In cloud network environments, asymmetric routing is an extremely common and often default phenomenon. Taking NFV element clusters that require elastic scaling as an example, one of the core goals of their architectural design is to allow nodes to independently and flexibly scale horizontally. In such distributed architectures, without deploying specific traffic steering strategies like &quot;same-source-same-destination,&quot; underlying network devices (such as switches or load balancers) typically distribute traffic naturally and evenly across multiple available nodes based on mechanisms like ECMP (Equal-Cost Multi-Path <xref target="RFC2991"/>, <xref target="RFC2992"/>), thereby commonly forming asymmetric routing.</t>

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

<t>ASRP achieves distributed backup and on-demand recovery of session state information by exchanging specific protocol messages among clients, servers, and network nodes (such as load balancers and NAT devices). In load balancing scenarios, session states are backed up to individual servers; in Source NAT (SNAT) scenarios, session states are backed up to individual clients.</t>

<section anchor="new-session-message-ns"><name>New session message (NS)</name>

<t>Generated by the network node, it is used to send the initial state information of a session to the designated client (in ACT mode) or server (in PSV mode) for backup when a new session is created. The NS message can be inserted into the original service packet for transmission or independently encapsulated and transmitted.</t>

</section>
<section anchor="hello-session-message-hs"><name>Hello session message (HS)</name>

<t>Generated by the client, it is used in ACT mode to declare its support for the ASRP protocol to the network node and to trigger the network node to return an NS message to complete session backup. The message also supports in-band or independent transmission.</t>

</section>
<section anchor="query-session-message-qs"><name>Query session message (QS)</name>

<t>Generated by the network node, it is used to query the backup party (client or server) for session status when a packet is received from the end where the session is backed up but cannot match a local session. This message is typically transmitted by modifying and echoing the original packet.</t>

</section>
<section anchor="recover-session-message-rs"><name>Recover session message (RS)</name>

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

</section>
<section anchor="encap-nsqsrs-message-enseqsers"><name>Encap NS/QS/RS message (ENS/EQS/ERS)</name>

<t>When a packet received by the network node originates from a client or server that does not hold the backup of the session, ASRP messages cannot be transmitted simply by modifying the original packet. Instead, the ASRP message must be encapsulated in a new packet for transmission. In such cases, ASRP defines a format for encapsulating NS, QS, or RS messages within UDP (<xref target="RFC0768"/>) packets for transmission, referred to as ENS, EQS, and ERS messages, respectively.</t>

</section>
</section>
<section anchor="message-flows-and-session-recovery-scenarios"><name>Message Flows and Session 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-mode-creationrecovery-scenarios"><name>PSV Mode Creation/Recovery Scenarios</name>

<section anchor="scenario-1-direct-session-creation"><name>Scenario 1, direct session creation</name>

<figure title="direct session creation" anchor="PSV-Mode-Scenario-1"><artwork><![CDATA[
                            Elastic
                            Stateful
                            Cluster
+----------+            +-------------+                 +----------+
|          | --1:PKT--> |             | -----2:NS-----> |          |
|          |            |             |                 |          |
|  client  |            |    Nodes    |                 |  server  |
|          |            |             |                 |          |
|          | <--4:PKT-- |             | <-----3:RS----- |          |
+----------+            +-------------+                 +----------+

                      a. recv PKT                    a. recv NS
                      b. new SESS                    b. new/get SESS
                      c. FWD NS                      c. send RS
                      d. recv RS
                      e. new/update SESS
                      f. FWD PKT
]]></artwork></figure>

<t>This scenario describes the processing flow when a network node receives a packet that explicitly triggers the establishment of a new session. The most common example is the TCP SYN packet during connection establishment, which indicates that the client is initiating a new connection. Additionally, upon receiving a DNS request packet, the network node may also directly proceed with creating a new session. For convenience, subsequent descriptions will use the TCP SYN packet as the representative example of such packets, without elaborating on other similar packet types.</t>

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

<t><list style="numbers" type="1">
  <t><strong>Client sends a packet</strong>: The client sends a packet (e.g., a TCP SYN packet) to the server.</t>
  <t><strong>Network node processes and forwards</strong>: Upon receiving this packet, if no matching existing session is found, the network node directly creates a new session. Subsequently, the network node generates an NS (New Session) message, embeds it into the payload of the original packet to form an NS packet, and forwards it to the selected server.</t>
  <t><strong>Server responds</strong>: After receiving the NS packet, the server parses the NS message and creates or retrieves the corresponding session state based on its content. The server then generates an RS (Recover Session) message, embeds it into the payload of its response packet (e.g., TCP SYN-ACK) to form an RS packet, and sends it back to the network node.</t>
  <t><strong>Network node completes session establishment</strong>: Upon receiving the RS packet, the network node parses the RS message and uses the information within it to finalize the establishment or update of the local session. Next, the network node removes the RS message from the packet, restores the original service response packet, and forwards it to the client.</t>
</list></t>

<t>At this point, the session is successfully established, and subsequent packets can be forwarded normally based on this session.</t>

</section>
<section anchor="scenario-2-session-recovery-triggered-by-server"><name>Scenario 2, session recovery triggered by server</name>

<figure title="session recovery triggered by server" anchor="PSV-Mode-Scenario-2"><artwork><![CDATA[
                            Elastic
                            Stateful
                            Cluster
+----------+             +-------------+                +----------+
|          |             |             | <----1:PKT---- |          |
|          |             |             |                |          |
|  client  | <--4:PKT--- |    Nodes    | -----2:QS----> |  server  |
|          |             |             |                |          |
|          |             |             | <----3:RS----- |          |
+----------+             +-------------+                +----------+

                         a. recv PKT                    a. send PKT
                         b. no SESS                     b. recv QS
                         c. reply QS                    c. get SESS
                         d. recv RS                     d. reply RS
                         e. new SESS
                         f. FWD PKT
]]></artwork></figure>

<t>The server first sends the original packet (PKT) to the client. Upon receiving this packet, the network node checks its local session table. If no corresponding session is found, the node does not forward the packet directly to the client. Instead, it attempts to insert a QS message into the original packet, swaps the source and destination addresses and ports to form a QS packet, and sends it back to the server.
After receiving the QS packet, the server looks up the corresponding session state, generates an RS message to replace the QS message in the packet, swaps the source and destination addresses and ports again to form an RS packet, and returns it to the network node.
Upon receiving the RS packet, the network node parses the RS message, creates a new session state based on the message content, removes the RS message from the packet, and then forwards the original packet to the client.</t>

<t>This scenario describes the recovery process when a server actively sends a packet to the client, but the intermediate network node cannot find the corresponding session.</t>

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

<t><list style="numbers" type="1">
  <t><strong>Server sends a packet</strong>: The server first sends an original packet (PKT) to the client.</t>
  <t><strong>Network node queries the session</strong>: Upon receiving this packet, the network node checks its local session table. If no corresponding session is found, it does not forward the packet directly but initiates the recovery process. The network node generates a QS (Query Session) message, inserts it into the received packet, swaps the source and destination addresses and ports of the packet to form a QS packet, and sends it back to the server.</t>
  <t><strong>Server responds to the query</strong>: After receiving the QS packet, the server looks up the locally stored corresponding session state based on the message content, generates an RS (Recover Session) message, and uses it to replace the QS message in the packet. The server then swaps the source and destination addresses and ports of the packet again to form an RS packet and sends it back to the network node.</t>
  <t><strong>Network node recovers and forwards</strong>: Upon receiving the RS packet, the network node parses the RS message and creates a new local session based on this information. Subsequently, the network node removes the RS message from the packet, restores the original packet (PKT) initially sent by the server, and forwards it to the client.</t>
</list></t>

<t>At this point, the session is successfully recovered, and the communication link is reestablished.</t>

</section>
<section anchor="PSV-Scenario3"><name>Scenario 3: probe-based session creation/recovery</name>

<figure title="probe-based session creation/recovery" anchor="PSV-Mode-Scenario-3"><artwork><![CDATA[
                            Elastic
                            Stateful
                            Cluster
+----------+             +-----------+               +------------+
|          |             |           | ----2:EQS---> |    ...     |
|          | ---1:PKT--> |           | <---3:ERS---- | +--------+ |
|          |             |           |      ...      | | server | |
|          |             |           |      ...      | +--------+ |
|  client  |             |   Nodes   | ----4:PKT---> |    ...     |
|          |             |           |               | +--------+ |
|          |             |           | ----5:ENS---> | | server | |
|          | <--8:PKT--- |           | <---6:ERS---- | +--------+ |
|          |             |           | <---7:RS----- |    ...     |
+----------+             +-----------+               +------------+

                      a. recv PKT                    a. recv EQSs
                      b. no SESS                     b. reply ERSs
                      c. send EQSs                   c. recv PKT/ENS
                      d. recv ERSs                   d. new SESS
                      e. new/recover SESS            e. reply ERS
                      f. send PKT/ENS                f. send RS
                      g. recv RS/ERS
                      h. FWD PKT
]]></artwork></figure>

<t>This scenario describes that, in PSV mode, when a network node receives a client packet that neither can trigger the creation of a new session (e.g., a non-TCP SYN packet) nor matches any existing session entry, ASRP relies on the cluster to employ a deterministic backend server selection algorithm (such as Deterministic Bucket-Mapped Consistent Hashing, DBMCH).</t>

<t>By leveraging the deterministic mapping property of the DBMCH algorithm, all packets belonging to the same session will always be scheduled to the same node (or the same group of nodes). ASRP utilizes this property to determine, on the target node and in conjunction with synchronized session state replicas, whether the packet belongs to an existing session.</t>

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

<t><list style="numbers" type="1">
  <t><strong>Network Node Receives Packet and Performs Lookup</strong>: The network node receives an original packet (PKT) from the client and checks its local session table. If no matching session is found, the network node uses the DBMCH algorithm to compute a set of potential servers (typically small in number) corresponding to the packet&#39;s 5-tuple.</t>
  <t><strong>Parallel Probing Queries</strong>: The network node generates EQS (Encapsulated Query Session) messages and sends them to each candidate server in the set in parallel to probe for the existence of a corresponding session.</t>
  <t>**Server Responses to Probes  <vspace blankLines='1'/>
If a server has the session: That server will reply with an ERS (Encapsulated Recover Session) message containing the state information needed to recover the session.  <vspace blankLines='1'/>
If none of the servers has a corresponding session: The process proceeds to the new session creation flow.</t>
  <t><strong>Network Node Processes Probe Results</strong>  <vspace blankLines='1'/>
<strong>Case A</strong>: Successful Session Recovery: If the network node receives a valid ERS message from a server, it uses the information therein to recover the session locally. Subsequently, the original packet (PKT) is forwarded to that server based on the recovered session (corresponding to step 4 in the diagram).  <vspace blankLines='1'/>
<strong>Case B</strong>: New Session Required: If all EQS probes return responses indicating no session, the network node creates a new session and selects a server for it via the DBMCH algorithm. The network node then generates an ENS (Encapsulated New Session) message and sends it to the selected server (step 5).</t>
  <t><strong>Server Acknowledgment and Response</strong>: Upon receiving the ENS message, the server creates a locally associated session and replies with an ERS message carrying no service data as an acknowledgment (step 6). In cases of asymmetric routing, the first service packet (PKT) sent from the server to the client will also carry an RS (Recover Session) message (step 7) to allow other nodes along the path to recover the session.</t>
  <t><strong>Final Packet Forwarding</strong>: Upon receiving the service packet carrying the RS message, the network node parses and extracts the session state, removes the RS message from the packet, and forwards the restored original packet to the client (step 8).</t>
</list></t>

<t><strong>Technical Notes</strong>:</t>

<t><list style="symbols">
  <t><strong>Reason for using ENS/EQS/ERS</strong>: In this scenario, the IP addresses used for communication between the network node and the servers may be completely different from those in the original packet. Therefore, NS/QS/RS messages need to be encapsulated within UDP packets (i.e., as ENS/EQS/ERS) to ensure routing reachability.</t>
  <t><strong>Algorithm Choice</strong>: The DBMCH algorithm maintains the mapping of all existing sessions unchanged when the number of servers changes, thereby minimizing session disruption caused by scaling. Its principles are detailed in Appendix A.</t>
</list></t>

</section>
</section>
<section anchor="act-mode-creationrecovery-scenarios"><name>ACT Mode Creation/Recovery Scenarios</name>

<section anchor="ACT-Scenario1"><name>Scenario 1: session creation, session recovry triggered by server</name>

<figure title="session creation, session recovry triggered by server" anchor="ACT-Mode-Scenario-1"><artwork><![CDATA[
                                Elastic
                                Stateful
                                Cluster
+----------+                +-------------+             +----------+
|          | -----1:HS----> |             |             |          |
|          |                |             | ---3:PKT--> |          |
|          | <----2:NS----- |             |             |          |
|  client  |                |    Nodes    |             |  server  |
|          | <----5:PKT---- |             | <--4:PKT--- |          |
|          | <---5':EQS---- |             |             |          |
|          | ----6':ERS---> |             |             |          |
+----------+                +-------------+             +----------+

a. send HS                  a. recv HS
b. recv NS                  b. new session
c. store NS                 c. reply NS
d. recv PKT/EQS             d. recv PKT
e. reply ERS                e. no SESS
                            f. send EQS
                            g. recv ERS
                            h. FWD PKT
]]></artwork></figure>

<t>In ACT mode, the client first sends a packet containing an HS message to the network node, declaring its support for the ASRP protocol. Upon receiving the HS message, the network node follows the normal procedure to create a new session and should immediately return an NS message to the client to back up the newly created session to the client.</t>

<t>In ACT mode, when a response packet from the server does not match any session, the session needs to be queried from the client. The network node faces the challenge of determining which client to query. To simplify implementation, ASRP recommends using a fixed mapping to locate the client.</t>

<t>This scenario describes the complete process in ACT mode, from session creation to the handling triggered by server response packets. Depending on whether the session exists on the network node, the processing path diverges into two branches.</t>

<t>Processing Flow:</t>

<t><list style="numbers" type="1">
  <t><strong>Capability Declaration and Session Creation</strong>: When initiating a new session, the client first sends a packet containing an HS (Hello Session) message to the network node, declaring its support for ASRP. Upon receiving the HS message, the network node creates a new session following the normal procedure and immediately generates an NS (New Session) message to return to the client, thereby completing the backup of the session state on the client side.</t>
  <t><strong>Service Request Forwarding</strong>: The network node forwards the original request packet (PKT) used to establish the session to the server.</t>
  <t><strong>Server Response</strong>: After processing the request, the server sends a response packet (PKT) back to the network node.</t>
  <t><strong>Network Node Processes the Response (Branching Occurs)</strong>  <vspace blankLines='1'/>
<strong>Path A (Session Exists, Step 5)</strong>: If the network node successfully finds a matching session locally, it directly forwards the server&#39;s response packet (PKT) to the client according to the session&#39;s forwarding rules. This is the normal forwarding path.  <vspace blankLines='1'/>
<strong>Path B (Session Lost, Steps 5&#39; and 6&#39;)</strong>: If the network node loses the session due to reasons such as a reboot or failure and cannot find a match, the recovery process is triggered. At this point, the network node generates an EQS (Encapsulated Query Session) message (which may encapsulate the original response packet or be sent separately) and sends it to the corresponding client through a fixed mapping relationship (e.g., port mapping in SNAT scenarios).</t>
  <t><strong>Client Assists in Recovery</strong>: Upon receiving the EQS message, the client queries its locally stored session backup and replies with an ERS (Encapsulated Recover Session) message containing the session state to the network node. If the EQS message encapsulates the original packet, the network node&#39;s ASRP module, after processing the EQS message, processes the original packet according to the session and then submits it to the normal packet processing module.</t>
  <t><strong>Recovery and Completion of Forwarding</strong>: After receiving the ERS message, the network node restores the session state locally.</t>
</list></t>

<t><strong>Technical Notes</strong>:</t>

<t><list style="symbols">
  <t><strong>Processing Path Branching</strong>: This scenario clearly illustrates the two key branches when the network node processes server response packets in ACT mode: Fast Forwarding (session exists) and Query Recovery (session lost).</t>
  <t><strong>Flexibility of EQS Messages</strong>: EQS messages can be sent independently or encapsulate the original packet, providing flexibility in balancing protocol overhead and processing efficiency.</t>
  <t><strong>Core Mapping Mechanism</strong>: Unlike during session creation where the client is known, in the recovery phase, the network node must be able to deterministically locate the client that backed up the session. ASRP recommends using a static, configurable mapping strategy as the foundation for achieving efficient and reliable recovery. If such a mapping cannot be established, it is not recommended to use ASRP in this scenario. For SNAT services, ports can typically be used to map clients. Different clients use configurable, distinct port ranges. When a server packet arrives at the network node, the network node can locate the client through the destination port.</t>
  <t><strong>Design Choice</strong>: Unlike some mechanisms that rely on keep-alive timers to trigger recovery, ASRP adopts an on-demand query approach. This avoids the additional latency or packet overhead introduced by timer interval settings, enabling fast and precise recovery.</t>
</list></t>

</section>
<section anchor="scenario-2-recover-session-triggered-by-client"><name>Scenario 2: recover session triggered by client</name>

<figure title="recover session triggered by client" anchor="ACT-Mode-Scenario-2"><artwork><![CDATA[
                              Elastic
                              Stateful
                              Cluster
+----------+              +-------------+               +----------+
|          | ---1:PKT---> |             |               |          |
|          |              |             |               |          |
|  client  | <---2:QS---- |    Nodes    | ----4:PKT---> |  server  |
|          |              |             |               |          |
|          | ----3:RS---> |             |               |          |
+----------+              +-------------+               +----------+

a. send PKT               a. recv PKT
b. recv QS                b. no SESS
c. got SESS               c. reply QS
d. replay RS              d. recv RS
                          e. new SESS
                          f. FWD PKT
]]></artwork></figure>

<t>This scenario describes the recovery process in ACT mode when a client actively sends a data packet to the server, but the network node has lost the corresponding session.</t>

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

<t><list style="numbers" type="1">
  <t><strong>Client Sends a Packet</strong>: The client sends a data packet (PKT) to the server.</t>
  <t><strong>Network Node Triggers a Query</strong>: Upon receiving this packet, the network node checks its local session table. If no matching session is found (and the packet does not contain an HS message), it generates a QS (Query Session) message, inserts it into the received packet, and swaps the source and destination addresses and ports of the packet to form a QS packet. It then sends this QS packet back to the client (i.e., the packet&#39;s originator).</t>
  <t><strong>Client Replies with State</strong>: After receiving the QS packet, the client queries its locally stored backup of the corresponding session, generates an RS (Recover Session) message, and uses it to replace the QS message in the packet. The client then swaps the source and destination addresses and ports of the packet again to form an RS packet and sends it back to the network node.</t>
  <t><strong>Network Node Recovers and Forwards</strong>: Upon receiving the RS packet, the network node parses the RS message and uses the information to create a new session locally. Subsequently, the network node removes the RS message from the packet, restores the original data packet (PKT) initially sent by the client, and forwards it normally to the server.</t>
</list></t>

<t>At this point, the session is successfully recovered, and the request path from the client to the server is reestablished.</t>

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

<section anchor="message-formats"><name>Message Formats</name>

<t>The ASRP protocol defines protocol signature, multiple message types, and their associated packet formats. All messages are encoded using a TLV (Type-Length-Value) structure. All numeric fields use network byte order (big-endian).</t>

<t>All ASRP messages consist of the following five parts:</t>

<t><list style="numbers" type="1">
  <t><strong>Type</strong>: 1 byte, used to uniquely identify different ASRP messages.</t>
  <t><strong>Flags</strong>: 1 byte, indicating message attributes. Two flag bits are currently defined:  <vspace blankLines='1'/>
<strong>ASRP_F_ACT (0x1)</strong>: If set, indicates the message belongs to ACT mode; otherwise, it belongs to PSV mode.  <vspace blankLines='1'/>
<strong>ASRP_F_MSG (0x2)</strong>: If set, indicates this message is transmitted independently (not together with the original service packet); otherwise, it indicates the message is embedded within the original service packet for transmission.</t>
  <t><strong>Length</strong>: 2 bytes, representing the total length of the entire ASRP message (including the header).</t>
  <t><strong>Session-Tuple</strong>: Carries the address and port information of the session. Its length depends on the address type (<xref target="RFC0791"/> <xref target="RFC8200"/>):  <vspace blankLines='1'/>
<strong>IPv4</strong>: Contains source IPv4 address, destination IPv4 address, source port, and destination port, totaling 12 bytes.  <vspace blankLines='1'/>
<strong>IPv6</strong>: Contains source IPv6 address, destination IPv6 address, source port, and destination port, totaling 36 bytes.</t>
  <t>Session-Data: A variable-length field that carries the private state information of the network node. Its specific content is implementation-defined.</t>
</list></t>

<section anchor="asrp-signature"><name>ASRP Signature</name>

<t>ASRP messages are placed before the packet data. In actual transmission, not all packets carry ASRP messages, so a ASRP Signature or a new TCP option needs to be added to the packet to quickly determine whether it contains an ASRP message.</t>

<t>For the TCP protocol, a new TCP option can be defined in the TCP header to indicate that an ASRP message is located at the beginning of the TCP data. The newly added TCP option type is TCPOPT_ASRP(60), with a length of 2. Its format is as follows:</t>

<figure title="ASRP TCP Option" anchor="ASRP-TCP-OPT"><artwork><![CDATA[
                   0                   1
                   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
                  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                  |    Kind       |     Length    |
                  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>For other transport-layer protocols, similar to the Proxy Protocol, a 12-byte ASRP Signature is used at the beginning of the data: 0x0D 0x0A 0x0D 0x0A 0x00 0x0D 0x0A 0x41 0x53 0x52 0x50 0x0A</t>

<t>This Signature contains a CRLF pattern, a null byte, and the specific ASCII sequence ASRP. The probability of this sequence occurring in normal data streams is less than 2^{-96}, making it easy to debug and identify: during packet capture analysis, the clear ASRP identifier is visible.</t>

<t>After an ASRP message is inserted into a packet, ASRP Signature must be applied to the packet. This is the default operation and will not be reiterated in subsequent discussions.</t>

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

<t>The NS message is used by the network node to back up session state information to the client or server. There are two types of NS messages, corresponding to IPv4 and IPv6 respectively.</t>

<t>Type Assignments:</t>

<t>ASRP_NS4 = 1 (IPv4)</t>

<t>ASRP_NS6 = 2 (IPv6)</t>

<t>NS (IPv4) Message Format:</t>

<figure title="ASRP NS(IPv4) 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |      Mode     |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Source IP (IPv4)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Destination IP (IPv4)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                         Session-Data                          ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>NS (IPv6) Message Format:</t>

<t>The structure of IPv6 NS messages is the same as IPv4, with the main difference being the IP address length in the Session-Tuple field. IPv6 uses 128-bit addresses, so both Source IP and Destination IP occupy 16 octets each, expanding the entire Session-Tuple field to 36 octets.</t>

<t>The NS message is inserted before the original packet data. The packet carrying the NS message is referred to as an NS packet, and its format is as follows:</t>

<figure title="ASRP NS Packet format" anchor="ASRP-NS-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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                           PKT-Header                          ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                           NS message                          ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                            PKT-DATA                           ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>In PSV mode, the NS message is inserted into the original packet, and the source and destination addresses remain unchanged. The NS packet is then forwarded to the server.</t>

<t>In ACT mode, the NS message is inserted into a newly allocated packet. The source and destination addresses and ports of the original packet are copied and swapped, and the NS packet is returned to the client.</t>

<t>It is important to note that the NS message internally contains only one Session-Tuple. However, a session on a network node requires two Session-Tuples, representing the connections between the network node and the client, and between the network node and the server, respectively. To improve transmission efficiency, ASRP extracts the other Session-Tuple directly from the packet header of the NS message packet. Similarly, QS and RS messages also require extracting the other Session-Tuple from the message packet header. This will not be elaborated on further in subsequent sections.</t>

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

<t>The HS message is sent by the client during the initial connection establishment phase to declare its support for the ASRP protocol capability to the network node.</t>

<t>Type Assignment:</t>

<t>ASRP_HS = 3</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type       |      Mode     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The HS message is inserted at the beginning of the original packet data. The packet carrying the HS message is referred to as an HS packet, and its format is similar to that of the NS packet, with the only difference being the type of message it carries.</t>

</section>
<section anchor="query-session-qs-message-format"><name>Query Session (QS) message format</name>

<t>The QS message is used by the network node to query session information.</t>

<t>In PSV mode, if the network node receives a packet from the server and cannot find a matching session, it uses the QS message to query the server for the session.</t>

<t>In ACT mode, if the network node receives a packet from the client, and the packet does not contain an HS message while no matching session is found, it uses the QS message to query the client for the session.</t>

<t>Type Assignment:</t>

<t>ASRP_QS = 4</t>

<t>The QS message format is identical to HS message, differing only in the type identifier.</t>

<t>The QS message is inserted before the original packet data, and the source and destination addresses and ports are swapped (in order to return the QS message to the client or server that backs up the session). The packet carrying the QS message is referred to as a QS packet, and its format is similar to that of the NS packet, with the only difference being the type of message it carries.</t>

</section>
<section anchor="recover-session-rs-message-format"><name>Recover Session (RS) message format</name>

<t>The RS message is used to recover the network node session. There are three types of RS messages, corresponding respectively to IPv4 sessions, IPv6 sessions, and null sessions.</t>

<t>Type Assignments:</t>

<t>ASRP_RS4 = 5 (IPv4)</t>

<t>ASRP_RS6 = 6 (IPv6)</t>

<t>ASRP_RSN = 7 (null)</t>

<t>When the RS message type is <spanx style="verb">ASRP_RS4</spanx> or <spanx style="verb">ASRP_RS6</spanx>, its message format is identical to the NS message of the corresponding IP version, differing only in the type identifier.</t>

<t>When the RS message type is <spanx style="verb">ASRP_RSN</spanx>, the message length is 4 bytes, indicating that the message does not contain information for session recovery (i.e., a null session). Its message format is similar to that of the HS message.</t>

<t>The RS message is the response to the QS message. The packet carrying the QS message is referred to as a QS packet, and its format is similar to that of the NS/HS packet, with the only difference being the type of message it carries.</t>

</section>
<section anchor="enseqsers-message-format"><name>ENS/EQS/ERS message format</name>

<t>When the packet received by the network node originates from a client or server that does not back up the session, the original destination address of the original packet may differ entirely from that of the ASRP message packet. Therefore, encapsulation is required before transmission. ASRP employs a UDP encapsulation format to encapsulate NS/QS/RS message packets. The encapsulated NS/QS/RS messages are referred to as ENS/EQS/ERS messages.</t>

<t>The format of the ENS/EQS/ERS message packet is as follows:</t>

<t>IP + UDP + NS/QS/RS Packet</t>

<figure title="ASRP ENS/EQS/ERS Packet format" anchor="ASRP-ENCAP-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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                      Encap IP + UDP Header                    ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                        NS/QS/RS Packet                        ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The source and destination addresses in the Encap IP header ensure the normal delivery of messages between the network node and the client or server. In the Encap UDP header, the source port is adjustable, while the destination port defaults to 55555 (configurable). The receiving end uses the destination port to distinguish between ENS, EQS, and ERS packets.</t>

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

<section anchor="asrp-signature-detection"><name>ASRP Signature Detection</name>

<t>For the TCP protocol, the TCP option <spanx style="verb">TCPOPT_ASRP(60)</spanx> is checked. If this option is present, it indicates that the beginning of the data contains an ASRP message.</t>

<t>For other protocols, the Signature at the beginning of the data is matched first. A successful match indicates that an ASRP message follows the Signature.</t>

<t>In subsequent discussions regarding the processing of ASRP messages in packets, it is assumed that ASRP Signature has already been handled and will not be reiterated.</t>

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

<t>In PSV mode, when the network node receives an original packet such as a TCP SYN, it proceeds directly to the session creation flow. After creating the session, it generates an NS message and sends it to the server.</t>

<t>In ACT mode, after creating a session, the network node needs to allocate a new packet, insert the NS message into this new packet, and return the NS packet to the client. Upon receiving the NS message, the client parses its content and stores the session state information locally.</t>

<t><strong>Avoiding IP Fragmentation</strong>:</t>

<t>In PSV mode, the NS message is typically transmitted together with the TCP SYN packet. In ACT mode, the NS message is transmitted independently (not together with the original packet), so the NS packet generally does not exceed the MTU. If inserting the NS message into the original packet would cause it to exceed the MTU, to avoid IP fragmentation, the NS message should be transmitted separately and prioritized, with the <spanx style="verb">Flags</spanx> field set to <spanx style="verb">ASRP_F_MSG</spanx>, followed by the transmission of the original packet. This approach of separate transmission (not combined with the original packet) will be referenced subsequently.</t>

<t><strong>Solutions for NS Message Loss</strong>:</t>

<t>In PSV mode, the NS message is typically bound to the TCP SYN packet. If the packet is lost, reliance is placed on the TCP protocol&#39;s own retransmission mechanism or application-layer retries to resend the packet carrying the NS message.</t>

<t>In ACT mode, if the client does not receive the NS message, its subsequent data packets will continue to carry HS messages. When the network node receives these subsequent HS messages, it must also return an NS message to the client.</t>

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

<t>HS messages are generated only in ACT mode. When a client initiates a new session, it creates an HS message, inserts it into a packet, and sends it to the network node. After sending the HS message, the client waits for an NS message. If the NS message is not received, the client continues to insert the HS message into subsequent packets it sends, thereby prompting the network node to return the NS message.</t>

<t>Upon receiving an HS message, if the network node does not find a matching local session, it creates a session, generates an NS message, and sends it to the client. If the network node receives subsequent HS messages and finds a matching local session, it should also immediately send an NS message to the client.</t>

<t><strong>Avoiding IP Fragmentation</strong>:</t>

<t>Although the HS message is only 4 bytes long, inserting it into the original packet may cause the total size to exceed the MTU. In such cases, the HS message must be sent separately and prioritized, followed by the transmission of the original packet. For the standalone HS message, the <spanx style="verb">Flags</spanx> field should be set to <spanx style="verb">ASRP_F_MSG</spanx> to indicate that the message is not transmitted together with the original packet.</t>

<t><strong>Solution for HS Message Loss</strong>:</t>

<t>All packets sent by the client must carry the HS message until an NS message is received.</t>

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

<t>The QS message is generated by the network node to query sessions.</t>

<t>In PSV mode, when the network node receives a packet from the server and cannot find a matching session, it returns a QS message to the server to query the session.</t>

<t>In ACT mode, when the network node receives a packet from the client and cannot find a matching session (and the packet does not contain an HS message), it returns a QS message to the client to query the session.</t>

<t>The QS message attempts to be inserted into the original packet, after which the source and destination addresses and ports of the original packet are swapped. This allows the QS message and the original packet to be returned together to the client or server. The benefit of this approach is that there is no need to discard or buffer the original packet.</t>

<t><strong>Avoiding IP Fragmentation</strong>:</t>

<t>When inserting the QS message into the original packet, it is necessary not only to check whether the size of the resulting QS packet exceeds the MTU but also to calculate whether the size of the responding RS message packet would exceed the MTU. Since RS messages are generally larger than QS messages, if the calculation indicates that the original packet length of the RS message packet would exceed the MTU, the original packet should be discarded. In this case, the <spanx style="verb">Flags</spanx> field of the QS message should be set to <spanx style="verb">ASRP_F_MSG</spanx> to indicate that the QS message is not transmitted together with the original packet.</t>

<t><strong>Solution for QS Message Loss</strong>:</t>

<t>Subsequent packets continue to generate QS messages, and attempts to recover the session persist.</t>

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

<t>The RS message is generated by either the client or the server and processed by the network node to recover a session.</t>

<t>When the client or server receives a QS message, it looks up the corresponding session state information locally. If found, it returns this information to the network node by converting the QS message. If the corresponding session state information is not found, it returns an RS message indicating a null session.</t>

<t>The method to convert a QS message packet into an RS message is as follows: replace the QS message in the packet with the RS message, and swap the source and destination addresses and ports of the packet.</t>

<t>Upon receiving a non-null RS message, the network node uses the session information within the RS message to recover the session locally.</t>

</section>
<section anchor="enseqsers-message-processing"><name>ENS/EQS/ERS Message Processing</name>

<section anchor="passive-psv-mode-1"><name>Passive (PSV) Mode</name>

<t>When a network node receives a packet from a client, cannot match an existing session, and cannot directly create a new session, it will communicate with the server using ENS/EQS/ERS messages.</t>

<t>PSV EQS/ERS/ENS Flow:</t>

<t><list style="numbers" type="1">
  <t>The network node uses the DBMCH algorithm to determine the candidate server set.</t>
  <t>It sequentially sends EQS messages (encapsulating session queries) to the candidate servers.</t>
  <t>The network node checks the returned ERS messages from the servers. If a session is found, it recovers the session.</t>
  <t>If the network node does not find the session after querying all candidates, it uses an ENS message to create a new session.</t>
  <t>Upon receiving the ENS message, the server returns an ERS message for acknowledgment.</t>
</list></t>

<t>ENS/EQS/ERS messages can be transmitted along with the original packet. To avoid IP fragmentation: If the ENS message packet size exceeds the MTU, send the ENS message separately first; If the EQS/ERS message packet size exceeds the MTU, buffer the original packet and send the EQS/ERS message separately.</t>

<t>Message Loss Handling:</t>

<t><list style="numbers" type="1">
  <t>EQS message loss: A query timeout occurs; the node deletes the associated data and buffered packet (if any).</t>
  <t>ENS message loss: The network node continues to send ENS messages periodically until it receives an ERS response.</t>
</list></t>

</section>
<section anchor="active-act-mode-1"><name>Active (ACT) Mode</name>

<t>When a network node receives a packet from a server and cannot match an existing session, it will communicate with the client using EQS/ERS messages.</t>

<t>ACT EQS/ERS Flow:</t>

<t><list style="numbers" type="1">
  <t>The network node locates the client using a fixed mapping (e.g., SNAT port mapping).</t>
  <t>It sends an EQS message to query that client, and the client returns an ERS message.</t>
  <t>The network node processes the ERS message and recovers the session if found.</t>
</list></t>

<t>EQS/ERS messages can be transmitted along with the original packet. To avoid IP fragmentation: If the EQS/ERS message packet size exceeds the MTU, discard the original packet and send the EQS message separately.</t>

<t>Message Loss Handling: Lost EQS/ERS messages are handled by triggering a new EQS query upon the arrival of subsequent packets from the server.</t>

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

<section anchor="general-defenses-against-message-forgery-attacks"><name>General Defenses Against Message Forgery Attacks</name>

<t>The security design of the ASRP protocol is based on its typical deployment model.</t>

<t><strong>Deployment Boundaries and Access Control</strong>: ASRP recommends deploying network nodes and the clients or servers that back up sessions within the same trusted internal network domain. Under this model, all ASRP protocol packets communicate within the internal address space. By implementing appropriate network segmentation (e.g., using firewall policies or security groups) and rigorously checking the source addresses of packets, forged ASRP packets originating from untrusted external networks can be effectively prevented from reaching the target nodes.</t>

<t><strong>Session Legitimacy Validation</strong>: When processing any ASRP packet that may establish a new session (e.g., packets carrying NS or RS messages), network nodes must perform basic validation according to the specific policies of the upper-layer application or service. For example, in a load balancing scenario, a node should verify whether the session points to a known and healthy server; in a NAT scenario, it should validate whether the address translation complies with predefined rules. This prevents the establishment of illegal sessions at the application level.</t>

<t><strong>Internal Threat Assessment</strong>: Even if an attacker is located within the trusted network and can forge ASRP packets, the scope of impact is inherently limited. The attacker can only forge sessions where they themselves are the endpoint (e.g., impersonating a client to request recovery of a non-existent connection). Such forged sessions are indistinguishable in form from those established through normal access, do not directly endanger the security of other users or nodes, and cannot elevate the attacker&#39;s privileges or grant access to unauthorized resources.</t>

<t><strong>Trade-offs Regarding Enhanced Authentication</strong>: Theoretically, stronger authentication mechanisms could be introduced for ASRP, such as having the network node generate a random number (Cookie) during session backup and include it in the transmission, then requiring the other party to echo this Cookie during the recovery phase. However, considering that ASRP primarily operates within trusted domains and faces a limited external attack surface, introducing such mechanisms would increase protocol complexity and processing overhead. Therefore, this protocol does not recommend mandating such inter-node Cookie validation in its base design.</t>

</section>
<section anchor="mitigation-against-eqsers-flood-attacks"><name>Mitigation Against EQS/ERS Flood Attacks</name>

<t>In the PSV mode&#39;s probe-based session creation/recovery scenario (Section 2.4.1, Scenario 3) and the ACT mode scenario where recovery is triggered by server traffic (Section 2.4.2, Scenario 1), a network node may send a large number of EQS query messages to multiple backup parties upon session loss. This behavior, if maliciously exploited or resulting from a fault, could lead to flood attacks.</t>

<t>To mitigate such risks, implementers should consider the following protective measures:</t>

<t><strong>Message Aggregation</strong>: When a network node needs to query multiple sessions from the same backup party (e.g., a specific server) within a short timeframe, the implementation SHOULD support aggregating multiple QS messages into a single EQS packet for transmission. This can significantly reduce the number of control packets, lowering network and processing overhead.</t>

<t><strong>Rate Limiting and Traffic Shaping</strong>: Each network node MUST implement monitoring and limiting of the rate at which EQS packets are sent. A reasonable threshold (e.g., the maximum number of EQS packets allowed per second) should be established. When the rate exceeds this threshold, the node should adopt a packet discarding policy, such as:</t>

<t>Discarding newly arrived service packets that would trigger queries, or, discarding lower-priority pending EQS query requests.</t>

<t>This measure aims to prevent EQS packet floods caused by node failures, configuration errors, or malicious traffic, thereby protecting the backup parties (clients or servers) from resource exhaustion attacks. The parameters for rate limiting should be configurable to adapt to deployment environments of different scales.</t>

<t><strong>State Monitoring and Alerting</strong>: Implementations are advised to log the frequency and patterns of EQS/ERS messages. Abnormally high query rates should trigger logging and system alerts, enabling administrators to promptly detect potential network issues or security attacks.</t>

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

<t>This document defines the Application-layer Session Recovery Protocol (ASRP), an application-layer protocol whose message types and internal identifiers are scoped to its own specification. Therefore, no registration in the &quot;Assigned Internet Protocol Numbers&quot; registry is required.</t>

<t>However, to support in-band signaling over TCP and encapsulated control messaging over UDP, the following IANA allocations are requested.</t>

<section anchor="tcp-option-for-asrp"><name>TCP Option for ASRP</name>

<t>The ASRP protocol uses a TCP option to signal that the beginning of the TCP payload contains an ASRP message (e.g., HS, NS, or RS). This option is defined as follows:</t>

<t><strong>Option Name</strong>: TCPOPT_ASRP</t>

<t><strong>Option Kind</strong>: To be assigned by IANA</t>

<t><strong>Length</strong>: 2 bytes</t>

<t>The format and semantics of this option are specified in Section ASRP Signature.</t>

<t>IANA is requested to assign a value from the &quot;TCP Option Kind Numbers&quot; registry (within the &quot;TCP Parameters&quot; registry) for TCPOPT_ASRP and to reference this document.</t>

<t><strong>Note</strong>: Early implementations used Kind 60 for experimentation. However, this document requests a permanent, unassigned value suitable for standards-track use.</t>

</section>
<section anchor="udp-port-for-encapsulated-asrp-messages"><name>UDP Port for Encapsulated ASRP Messages</name>

<t>Encapsulated ASRP control messages (ENS, EQS, ERS) are transmitted over UDP between network nodes and servers or clients. To support interoperable testing and early deployments, this document requests a standardized UDP port assignment.</t>

<t><strong>Service Name</strong>: asrp-encap</t>

<t><strong>Transport Protocol</strong>: udp</t>

<t><strong>Port Number</strong>: To be assigned by IANA (from the User Ports range, 1024-49151)</t>

<t><strong>Description</strong>: UDP port for receiving encapsulated ASRP protocol messages (ENS/EQS/ERS).</t>

<t>For experimental implementations and interoperability testing prior to IANA assignment, <strong>UDP port 55555</strong> 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-encap&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">

&RFC0768;
&RFC0791;
&RFC1122;
&RFC2119;
&RFC8174;
&RFC8200;
&RFC9293;


    </references>

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

&RFC2991;
&RFC2992;
&RFC6335;
&RFC7413;


    </references>

</references>


<?line 824?>

<section anchor="deterministic-bucket-mapping-hash-dbmh"><name>Deterministic Bucket Mapping Hash, DBMH</name>

<section anchor="principles-of-the-dbmh-algorithm"><name>Principles of the DBMH Algorithm</name>

<t>When the passive (PSV) mode of ASRP is applied to load balancing scenarios, the core requirement is to stably map client connections (identified by a 5-tuple) to a backend server. Even when the server cluster scales in or out, the mapping of existing connections should remain unchanged to ensure session recoverability. The DBMCH (Deterministic Bucket Mapping Consistent Hash) algorithm achieves this goal by introducing the concepts of virtual buckets, server weight, and bucket weight, combined with ASRP&#39;s session probing capability.</t>

<section anchor="core-concepts-and-design-goals"><name>Core Concepts and Design Goals</name>

<t><list style="numbers" type="1">
  <t><strong>Virtual Buckets</strong>: Set a fixed number (N, default 65536) of virtual buckets. N should be far greater than the maximum expected number of servers to ensure balance. Once set, the value of N does not change.</t>
  <t><strong>Fixed Mapping from Sessions to Buckets</strong>: Through a stable hash function, deterministically map the 5-tuple of each connection to a virtual bucket in the range 0, N-1. This ensures that all packets of the same connection always hit the same bucket.</t>
  <t><strong>Server List in a Bucket</strong>: Each virtual bucket maintains an ordered list of servers. The first server in this list is called the preferred server of the bucket, specifically used to handle new connections.</t>
  <t><strong>Server Weight</strong>: The weight of a server is defined as the total number of times the server appears in the server lists of all N virtual buckets (regardless of whether it is the preferred server). It reflects the &quot;distribution breadth&quot; of the server in the global mapping.</t>
  <t><strong>Bucket Weight</strong>: The weight of a virtual bucket is defined as the sum of the weights of all servers in its server list. It reflects the &quot;global influence&quot; of the bucket.</t>
  <t><strong>Core Design Goals</strong>  <vspace blankLines='1'/>
<strong>Session Stability</strong>: When the cluster scales in or out, the preferred server of the virtual bucket where an existing connection resides never changes. This ensures uninterrupted recovery of these connections through the ASRP mechanism.  <vspace blankLines='1'/>
<strong>Load Balancing</strong>: After scaling, by adjustment, ensure that each server serves as the preferred server an equal number of times, so that new connections are evenly distributed.</t>
</list></t>

</section>
<section anchor="dynamic-scaling-steps-of-the-algorithm"><name>Dynamic Scaling Steps of the Algorithm</name>

<t>The ingenuity of the algorithm lies in achieving the above goals by adjusting weights and preferred servers when the server set changes.</t>

<t><list style="numbers" type="1">
  <t><strong>Scaling Out</strong> (Add m servers, currently n servers, target total n+m)  <vspace blankLines='1'/>
<strong>Goal</strong>: The number of times each server is preferred should be adjusted to N/(n+m).  <vspace blankLines='1'/>
<strong>Step 1, Selection and Retention</strong>: Sort the existing n servers by weight from lightest to heaviest. For each existing server, from all virtual buckets that currently include this server, retain the heaviest N/(n+m) buckets, and ensure that the preferred server of these buckets is set to this server.  <vspace blankLines='1'/>
<strong>Step 2, Allocation of New Buckets</strong>: After step 1, there will be a batch of remaining virtual buckets. Sort these buckets by weight from lightest to heaviest. Then, allocate buckets to each new server in turn and cyclically until each new server obtains N/(n+m) buckets. Set the preferred server of these allocated buckets to the corresponding new server.</t>
  <t><strong>Scaling In</strong> (Remove some servers, leaving k servers)  <vspace blankLines='1'/>
<strong>Goal</strong>: The number of times each remaining server is preferred should be adjusted to N/k.  <vspace blankLines='1'/>
<strong>Step 1, Cleanup and Calculation</strong>: Remove the deleted servers from the lists of all virtual buckets. Calculate the weight N/k that each of the remaining k servers should obtain.  <vspace blankLines='1'/>
<strong>Step 2, Priority Satisfaction</strong>: Sort the remaining k servers by weight from lightest to heaviest. For each server, from all available virtual buckets, allocate the heaviest N/k buckets and make this server the preferred server of these buckets. Record which servers have obtained enough buckets.  <vspace blankLines='1'/>
<strong>Step 3, Make Up the Shortfall</strong>: After step 2, there may still be some servers that have not obtained enough buckets (less than N/k). Match the servers that are still short with the remaining virtual buckets (sorted by weight from lightest to heaviest) and allocate them in turn until all remaining servers have reached N/k preferred buckets.</t>
</list></t>

<t><strong>Summary</strong>: The DBMCH algorithm dynamically manages &quot;weight&quot; and &quot;preferred server&quot; to achieve uniform load distribution of new connections after cluster scaling while ensuring absolute stability of all historical connection mappings. Combined with ASRP&#39;s session probing capability, it constitutes a robust and efficient scaling solution for stateful services.</t>

</section>
</section>
<section anchor="estimation-of-server-count-per-virtual-bucket-in-dbmch"><name>Estimation of Server Count per Virtual Bucket in DBMCH</name>

<t>The core conclusion is: The length of the server list within a virtual bucket grows slowly and has a definite upper bound. Its growth is primarily related to two factors: (1) the number of scaling operations, and (2) the ratio of the number of newly added servers to the current scale during each scaling operation.</t>

<t>Quantitative analysis of the following two typical scaling strategies clearly demonstrates this characteristic:</t>

<t><list style="numbers" type="1">
  <t><strong>Incremental Scaling Strategy</strong>  <vspace blankLines='1'/>
Assume an initial server count of K, and each scaling operation adds K new servers (i.e., the scale doubles each time). After 8 consecutive scaling operations, the total number of servers reaches 9K. During this process, the mathematical expectation (which can approximate the average number) of servers in any virtual bucket is roughly 1 + 1/2 + 1/3 + ... + 1/8 approximately equal to 2.7. Therefore, the maximum number of servers per bucket is 3, and the minimum is 2.  <vspace blankLines='1'/>
<strong>Scale Example</strong>: This means that scaling from a small cluster of 4 servers to 36 servers, or from 32 servers to 288 servers, the maximum number of servers per bucket remains merely 3.</t>
  <t><strong>Aggressive Scaling Strategy</strong>  <vspace blankLines='1'/>
Assume an initial server count of K, and each scaling operation adds 8K new servers (i.e., significant expansion). After 4 scaling operations, the total number of servers reaches 33K. The mathematical expectation of servers per bucket is roughly 1 + 8/9 + 8/17 + 8/25 + 8/33 approximately equal to 2.92. Similarly, the maximum number of servers per bucket is 3, and the minimum is 2.  <vspace blankLines='1'/>
<strong>Scale Example</strong>: This means scaling from 4 servers to 132, or from 32 servers to 1056, the maximum number of servers per bucket still stabilizes at 3.</t>
</list></t>

<t><strong>Implications and Guidance</strong></t>

<t>The above analysis demonstrates that the DBMCH algorithm possesses excellent scalability. Even when the cluster scale grows by tens or even hundreds of times, the number of server probes required to recover any connection remains extremely limited (typically no more than 3). This theoretically ensures the efficiency of the ASRP session recovery mechanism, making it suitable for large-scale, elastically scaling cloud-native environments.</t>

<t>In practical operations, it is recommended to adopt relatively centralized scaling batches (such as the aggressive strategy mentioned above) to better control the average probing cost.</t>

</section>
<section anchor="advantages-and-disadvantages-of-the-dbmch-algorithm"><name>Advantages and Disadvantages of the DBMCH Algorithm</name>

<section anchor="advantages"><name>Advantages</name>

<t><list style="numbers" type="1">
  <t><strong>Complete Session Stability</strong>  <vspace blankLines='1'/>
During dynamic scaling (expansion or contraction) or node failures, the algorithm guarantees that the mapping of all existing connections remains absolutely unchanged. This provides a solid foundation for ASRP-based session recovery and is a key factor in achieving high availability.</t>
  <t><strong>Excellent Load Balancing for New Connections</strong>  <vspace blankLines='1'/>
After each scaling operation, the algorithm reallocates virtual buckets so that each server serves as the preferred server for an equal number of buckets. This ensures that newly established connections are evenly distributed across all available servers, effectively preventing load imbalance.</t>
  <t><strong>Enhanced Robustness through Synergy with ASRP</strong>  <vspace blankLines='1'/>
The algorithm maintains a server list for each virtual bucket, providing a well-defined target set for ASRP&#39;s session probing mechanism (EQS/ERS). Working in synergy, they enable precise location and recovery of any connection after a node failure, achieving connection recoverability at the cluster level.</t>
</list></t>

</section>
<section anchor="limitations-and-considerations"><name>Limitations and Considerations</name>

<t><list style="numbers" type="1">
  <t><strong>Probe Overhead and Server Count per Bucket</strong>  <vspace blankLines='1'/>
For connectionless protocols (e.g., UDP) or TCP connections that need recovery, ASRP must sequentially probe the server list within a bucket via EQS messages. In the worst-case scenario of frequent scaling operations and continuous cluster growth, the number of servers in a bucket may gradually accumulate, leading to decreased probing efficiency.</t>
  <t><strong>Operational Recommendations</strong>  <vspace blankLines='1'/>
To control the average length of bucket lists, it is recommended to adopt a batch-operation strategy when planning scaling events: &quot;reduce the frequency of operations, but adjust more servers each time.&quot;</t>
  <t><strong>Optimization Directions</strong>  <vspace blankLines='1'/>
Since new connections are handled only by the preferred server, it can be envisioned that once all old connections previously mapped to non-preferred servers are closed, those servers can be safely removed from the corresponding virtual bucket lists. Ideally, after some time, most virtual buckets will retain only the preferred server, bringing the average list length close to 1, which would significantly reduce probing costs. For the few remaining long-lived connections, special handling mechanisms (such as maintaining a separate small mapping table) could be considered to further reduce the number of servers in virtual bucket lists.</t>
</list></t>

<t>In summary, the DBMCH algorithm provides an innovative solution for seamless scaling and high availability of stateful services. Its value is particularly pronounced when combined with distributed session state backup (ASRP). By understanding its characteristics, designers and operators can maximize its benefits and control its potential overhead through reasonable cluster sizing planning and operational strategies.</t>

</section>
</section>
</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+V9bVvbVtrgd36FNv1Qk9okQJK2zDx7LQEy5GpCCKbtzn7Y
qbAPWE9kySPJEHfa+e17v543ScYk6ezss8xcKciydM597vfX0Wi01WRNbg6S
w9s0y9Or3CRjU9dZWSQXZlLemmqVnFdlU07KfOurJL26qswt3D2+ON+alpMi
ncN3p1V63Ywm88lklNbVYvR0F26dpg18tPd07/lod2+017oU/L0Ff9VNWkz/
luZlARebamm2trJFRb/Wzd7Tp98/3dtKK5PC2xeLPJukDayy3rq7OUjOTHNX
Vh+Sn+GfrLhJ/lKVy8XWh7uD5HXRmKowzegY17gFXzqAF0236uXVPKN9NqsF
vO/1yeWrra1JOYWvHyTLGjYyybKtRXaQwM9XySQt4KpJ0qpKV8kgu07SPE9W
pt5OyiqZpfUsmZnKwDaSUQLQ4l/qsmoqc13LX6s5/ZHgDQf4ZfhVbzmg10zN
dbrMmxru0M/5S3z7VrpsZmV1sJXQz0j+myRZAXf8r53kzbK01/hs/tcsLVfL
4IOygi0evT06sleqElHATLOmrOzFGtZlAFxn5U7y/Lvkh2WRL4t6BoC4KNOp
vW2SNauDZLz8dVYu3cVyiie7+/zp06fexWXRVHDz0SwrUnvZzAHzDpJ8Wf5K
a/0fk3ld70zwnnl5leVmZ1LOu3d8upP8NS2iHZ+mWT1bpoAG/mftTf+L97dK
i5murHuLW0VZzQGrb80BIozsOKmuJ3u7u99Hl77b/fYZvOLi1dHTb198d6C/
fr8rv+7u7u3Jr/ht+RW/pb8CScmv3+99v38A1FZcuwXwN7+3z4Nf9Xkv9vef
y6/fPtvFb45GI2ANANB00mxtXc6yOgHmsJybogGUridVdmXqBCBrPi5MleH1
NE8Wwlfo3KZJMzObcKFkgMxneye5hPvtI9JsTkRTLppsnv1qkll2Mxul/Lgs
hzNMCmESkxz4iamAlOEAGjNplpWph/io2wzJP0mTeonLBMLWe9tPq8t8iQwo
AZgh62rM9TK376hNdZtNYM/1cjJL0jrJAaWSqzRPiwm9ophapnU4ncIC6uSy
Sos6J66WDM4OL2GLuFPkCVkBj2p4vxMzxQXzewVIV+nkw3JBT60EXsMEOelN
cpc1M/rqHO5Nb0zCZ1wjN5sCFcH/YYNwbshMh4kpAPq4QnN9nU0yPEB8KtJK
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
QAUlIugpdMvW/wHSZo5shxkBAA==

-->

</rfc>

