<?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 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 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 RFC3828 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3828.xml">
<!ENTITY RFC4787 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4787.xml">
<!ENTITY RFC4987 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4987.xml">
<!ENTITY RFC5508 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5508.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">
<!ENTITY RFC9293 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9293.xml">
]>


<rfc ipr="trust200902" docName="draft-cmcc-asrp-02" 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="2026" month="January" day="04"/>

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

    <abstract>


<?line 68?>

<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 <xref target="RFC4787"/> <xref target="RFC5508"/>). 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 76?>

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

<t>Traditional high-availability network clusters based on primary-backup architecture rely on session-state synchronization between the primary and backup nodes. Although functionally complete, such architectures face challenges in the cloud era, including insufficient flexibility for elastic scaling, resource redundancy, and high implementation complexity. To address these issues, the Elastic Stateful Cluster has been proposed.</t>

<section anchor="elastic-stateful-clusters"><name>Elastic Stateful Clusters</name>

<t>Elastic Stateful Cluster is a highly available network service cluster composed of multiple coordinated nodes, where the number of nodes can be elastically scaled in or out. It provides stateful network services such as load balancing (SLB) and network address translation (NAT) to external users. To achieve elastic scaling, traditional Elastic Stateful Clusters adopt a fast-path/slow-path design, separating session management from packet forwarding. This enables excellent elastic scalability at the fast-path node layer.</t>

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

<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 switched to other healthy nodes, ensuring continuous service availability. The drawback of Elastic Stateful Clusters with this architecture 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>

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

<t>ASRP introduces an innovative approach aimed at constructing a more concise, efficient, and elastic high-availability solution for stateful services. Its core idea revolutionarily distributes the state information of network sessions to the client or server at the session endpoints. 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, eliminating the need for independent keep-alive or timeout management. This ensures the real-time availability and usability of the backed-up state information. Consequently, network service nodes within the cluster (e.g., load balancers, NAT devices) can quickly retrieve and reconstruct session states from the endpoints during failure recovery or scaling operations, thereby logically achieving the &quot;statelessness&quot; of the nodes.</t>

<t>Based on this concept, the ASRP protocol designs corresponding session backup and recovery mechanisms. The protocol ingeniously leverages the original in-band data packets that carry service traffic to transmit session state information (e.g., embedding protocol messages into the payload of TCP three-way handshake <xref target="RFC9293"/> packets). In this way, it avoids generating additional control packet overhead for state synchronization in the vast majority of cases. Its implementation approach resembles that of TCP Fast Open (TFO, <xref target="RFC7413"/>), yet remains entirely transparent to the application layer.</t>

<t>The ASRP protocol focuses on session-state backup and recovery, ensuring session consistency and continuity for stateful services within cluster nodes. In an Elastic Stateful Cluster built on ASRP, the internal nodes are atomic-they require no communication among themselves, and no session synchronization is needed inside the cluster. This characteristic significantly enhances the cluster&#39;s elastic scaling capability, supports rapid recovery from single-point or even multi-point failures, and reduces resource consumption and implementation complexity by eliminating centralized backup nodes. These properties make ASRP particularly suitable for network environments that require frequent elastic scaling, pursue high resource efficiency, and demand superior service stability. Thus, ASRP provides a powerful solution for the implementation and deployment of large-scale network clusters.</t>

</section>
</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 <xref target="RFC3828"/> 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-rfc4987"><name>Mitigation Against EQS/ERS Flood Attacks <xref target="RFC4987"/></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;
&RFC2119;
&RFC8174;
&RFC8200;


    </references>

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

&RFC2991;
&RFC2992;
&RFC3828;
&RFC4787;
&RFC4987;
&RFC5508;
&RFC6335;
&RFC7413;
&RFC9293;


    </references>

</references>


<?line 841?>

<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:
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
YbDTvuoxjjenvVivQ9lylbhDHtVh4RP1fIWLyZSZgQFwzzLwqu5b/9UrZ2Qq
DkMDtJDWBBR/c9DEVPsQV/C70HhdFpJ2NLXdi90xrWnutCkyRf5mAIrT/pQK
Es24BbsD6r7/VtiHaXlJPIEHO0+D6SGq9douKrYaFj3k+UCdjpZdz+OqDcm0
dQV1uHLi2qkZmtpQ3yMzPFraIzku606rAPE2nQyQo8zS61VJ71OWKV3B1lrt
GjSutY1I/OnYmPJAzzF9SZD9sGgzz7ZNP7xyMG55g5+YxbJ+hXW4MtfLdyBz
Qa/XsXogKaKU72FiyePEKGuwCNMvKjoxzmHt+o3vcgEyoOZdaT6pWaSU5B01
owdNOSYztbLkmF/dYZyEmeetJ8lCjqJqTh4svt3i5wm3k7PuYUHLqlgkbhs0
6WfHk5ed2Vg47orbKGtSjB2Nw73LcI4tZxOYLmXchUhH/mivWh5BhMt1Zg8h
xWIzwsLAxlCfGc7GDWdwIZyef0N5ADWq++74dZzuKCSb4Fi2oOWNW/h3GHaH
941OhvA2Ht/t/L1benvv9vVuLjDb6Ovd8zMZnQ+jrr83+Xrv9xCv+s8U+LWW
/3kZl1tU/332doZDU+B3L5h8ldPZcar4gvucdMcdW6cX3OSkNKJr9bqo29Ib
nRK+Ham1i9eNYrw7+2Lgz1ZVeG1leE0XqCnD24IG72qS0TRpnHZx4sAzxl5Q
COSMdfNtcFsN5LHhOXU/rOoWu+MeyVyHfkOGkSzmYlNDBnelnh3b3oKBLPcr
bfwRszL2B9X7dKZ8RT3THUlKe9RPKoaJ75Duk1j/qgU8ZC7+IUU8NHuebQ9J
7IJdm089D4tp7UhxXvvYbyvTMa0o++r1EaS4dK0+Eh5bVvzcbWP6rrFWLP7n
1PYYLeZfs7ZHcyxtbc+rP6K2pz2dqyMYsiGP6yuW9jSZTXt9j/pgw/oe04Qh
5FFfVuhjHatAE5t7a7cVANnWuyfc4M3vg0ewr9qmRWpTP3OBu7bSuALTaNg4
qrEtj1kz9na2eVS2lSC+CqytzG3EW5KvpUBDRs2uqzc/R70reOLwTZJf1/Ph
z3G2SvoRt3+EBfAz8hUoxjjmIk2yKdslig3jNTq8S+yA1xun10MMmMQ5chv8
YtBgkXPBlaysH3+GZgC2ETWiC9eEVLBHLxgYi2mVp3BG6IhAwxzjTjanxnuZ
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
5bjIgQMcAQA=

-->

</rfc>

