<?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-03" 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="07"/>

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

<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="traditional-path-elastic-stateful-cluster"><name>Traditional Path Elastic Stateful Cluster</name>
<figure title="Fast/Slow Path Elastic Stateful Cluster" 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-cluster"><name>ASRP Elastic Stateful Cluster</name>
<figure title="ASRP Elastic Stateful Cluster" anchor="ASRP-ESC"><artwork><![CDATA[
                     +----------------------+
                     |          ...         |
+----------+         |          ...         |         +----------+
|          |         |  +----------------+  |         |          |
|  Client  | <--------> |    ASRP Node   | <--------> |  Server  |
|          |         |  +----------------+  |         |          |
+----------+         |          ...         |         +----------+
                     |          ...         |
                     +----------------------+
]]></artwork></figure>

<t>The Available Session Recovery Protocol (ASRP) proposes an innovative high-availability solution designed to build a more concise, efficient, and elastic architecture for stateful services. Its core idea is to disruptively distribute session state information to the endpoints of a session (client or server). The backup state is strictly synchronized with the lifecycle of the real session-created as the session is established and cleared upon its termination. By eliminating the need for independent keep-alive and timeout mechanisms, this design ensures the real-time availability of backup information. Based on this mechanism, network nodes within a cluster (e.g., load balancers, NAT devices), when facing failures or during cluster scaling, can quickly rebuild the complete session state directly from the endpoints. This logically achieves &quot;stateless&quot; network nodes (ASRP node).</t>

<t>To achieve this goal, ASRP defines corresponding session backup and recovery mechanisms. The protocol cleverly utilizes the original data packets carrying business traffic (in-band transmission) to convey session state information (for example, embedding protocol messages into the payload of a TCP three-way handshake <xref target="RFC9293"></xref>). This avoids the overhead of additional control packets for state synchronization in the vast majority of cases. Its implementation shares similarities with TCP Fast Open (TFO, <xref target="RFC7413"></xref>) and remains completely transparent to upper-layer applications.</t>

<t>In summary, the ASRP protocol, by focusing on endpoint backup and rapid recovery of session state, effectively guarantees session consistency and service continuity for applications on network nodes within a cluster. In an elastic stateful cluster built upon ASRP, network nodes possess the characteristic of being atomic and mutually independent-no communication is required between nodes, and no session synchronization is needed within the cluster. This fundamental design significantly enhances the cluster&#39;s ability to scale elastically, supports rapid recovery from single-point and even multi-point failures, and reduces resource redundancy and system implementation complexity by eliminating centralized backup nodes. Consequently, the ASRP protocol is particularly suited for network environments requiring frequent elastic scaling, pursuing extremely high resource utilization, and demanding high service stability. It provides a robust solution for the deployment and operation of large-scale, highly elastic 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="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="passivepsv-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="activeact-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-routing-behaviors"><name>Two Routing Behaviors</name>

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

<t>Symmetric routing refers to a path type 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 <xref target="RFC4787"/> <xref target="RFC5508"/> 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 path type, 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 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="session-creationrecovery-scenarios"><name>Session Creation/Recovery Scenarios</name>

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

<section anchor="psv-scenario-1-direct-session-creation"><name>PSV-Scenario-1: Direct Session Creation</name>

<figure title="Direct Session Creation in PSV Mdoe" anchor="PSV-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 direct session creation flow in Passive (PSV) mode. The most common example is the TCP SYN packet during connection establishment, which indicates that the client is initiating a new connection. In addition, after receiving a DNS request packet, the network node can also directly enter the new session creation flow. For convenience, SYN packets will be used as typical examples of such packets in the following discussion, and other similar packets will not be elaborated on further.</t>

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

<t><list style="numbers" type="1">
  <t>Session Creation: When the network node receives a packet from a client (e.g., a TCP SYN) and finds no local session, it directly creates a new session. Subsequently, the network node generates an NS message and forwards it to the selected server.</t>
  <t>Server Response: After receiving the NS message, the server creates or retrieves the corresponding session state based on its content. When the server sends a response packet, it generates an RS message and sends it back to the network node.</t>
  <t>Session Synchronization and Packet Forwarding under Asymmetric Routing: Upon receiving the RS message, the network node uses the information within it to complete the establishment or update of the local session, and then forwards the packet according to the session.</t>
</list></t>

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

<t>NS/RS messages can be inserted into original packets (e.g., TCP SYN/SYN-ACK) or transmitted independently. Similarly, other messages in subsequent scenarios can also be inserted into original packets or transmitted independently.</t>

</section>
<section anchor="psv-scenario-2-session-recovery-for-server"><name>PSV-Scenario-2: Session Recovery for Server</name>

<figure title="Session Recovery for Server in PSV Mode" anchor="PSV-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>This scenario describes the server packet-triggered session recovery flow in Passive (PSV) mode.</t>

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

<t><list style="numbers" type="1">
  <t>Session Query: After receiving a packet from a server, the network node searches its local session table. If no corresponding session is found, the network node generates a QS message and sends it back to the server.</t>
  <t>Server-Assisted Reply: Upon receiving the QS message, the server looks up the corresponding locally stored backup session state information based on the message content, generates an RS message, and sends it back to the network node.</t>
  <t>Session Recovery: After receiving the RS message, the network node creates a new local session and then forwards the packet according to the session.</t>
</list></t>

</section>
<section anchor="psv-scenario-3-session-creationrecovery"><name>PSV-Scenario-3: Session Creation/Recovery</name>

<figure title="Session Creation/Recovery for Client in PSV Mode" anchor="PSV-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 a situation in Passive (PSV) mode where a network node receives a client packet that neither triggers the creation of a new session (e.g., a non-TCP SYN packet) nor matches any existing session entry. The network node needs to determine whether the packet belongs to an existing session to decide how to process it. In this case, the network node must use the ASRP protocol to query the session state and proceed based on the query result. ASRP relies on the cluster employing a deterministic server selection algorithm (such as a consistent hashing algorithm) to locate the target server to be queried. The Deterministic Bucket Mapping Consistent Hashing (DBMCH) algorithm is an enhanced algorithm that ensures the network node can still query the correct target server even when the number of servers changes. Its principles are detailed in Appendix A.</t>

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

<t><list style="numbers" type="1">
  <t>Query Local Session: The network node receives an original packet from the client and searches its local session table. If no local session is found, it calculates the corresponding server for the packet using a consistent hashing algorithm or the DBMCH algorithm.</t>
  <t>Query Backup Session: The network node generates EQS messages and sends them sequentially to each candidate server (typically one), querying the candidate servers for the backup session. The server returns the query result via an ERS message.</t>
  <t>Process Query Results: If a session is found, the local session is recovered using the ERS message, and the original packet is forwarded. If none of the servers has a corresponding session, the process proceeds to the new session creation flow. An ENS message is sent to the server selected by the algorithm.</t>
  <t>Server Creates New Session: 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. In cases of asymmetric routing, the first service packet sent from the server to the client will simultaneously carry an RS message, allowing nodes along the path to recover the session.</t>
  <t>Session Synchronization and Packet Forwarding under Asymmetric Routing: After receiving the RS message, the network node first recovers the local session based on the message and then forwards the packet according to the session.</t>
</list></t>

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

<t>Reason for using ENS/EQS/ERS: In this scenario, the IP addresses used for communication between the network node and the server may be completely different from those in the original packet. Therefore, NS/QS/RS messages need to be encapsulated within UDP packets (as ENS/EQS/ERS) to ensure routing reachability.</t>

</section>
<section anchor="act-scenario-1-session-creationrecovery"><name>ACT-Scenario-1: Session Creation/Recovery</name>

<figure title="Session Creation/Recovery in ACT Mode" anchor="ACT-Scenario-1"><artwork><![CDATA[
                                Elastic
                                Stateful
                                Cluster
+----------+                +-------------+             +----------+
|          | -----1:HS----> |             |             |          |
|          |                |             | ---3:PKT--> |          |
|          | <----2:NS----- |             |             |          |
|  client  |                |    Nodes    |             |  server  |
|          | <----5:EQS---- |             | <--4:PKT--- |          |
|          | -----6:ERS---> |             |             |          |
|          | <----7:PKT---- |             |             |          |
+----------+                +-------------+             +----------+

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>This scenario describes the session establishment process in Active (ACT) mode and the session recovery flow triggered by server-side packets.</t>

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

<t><list style="numbers" type="1">
  <t>Session Creation: When a client initiates a new session, it first sends a packet containing an HS message to the network node, announcing its support for ASRP. Upon receiving the HS message, the network node creates a new session following the normal procedure, generates an NS message to return to the client, and forwards the original packet according to the session.</t>
  <t>Processing Server Response Packets: If a matching session is found, the packet is forwarded based on that session. If no matching session is found, the network node locates the corresponding client through a mapping relationship and sends an EQS message to it.</t>
  <t>Client-Assisted Recovery: After receiving the EQS message, the client replies with an ERS message to the network node.</t>
  <t>Session Recovery: Upon receiving the ERS message, the network node restores the session state locally and then forwards the packet according to the session.</t>
</list></t>

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

<t>Fixed Mapping Mechanism: During the server packet-triggered recovery phase, the network node must be able to deterministically locate the client that backs up the session. ASRP recommends using a static, configurable mapping policy as the foundation for achieving efficient and reliable recovery. If such a mapping cannot be established, it is not advisable to use ASRP in this scenario. For SNAT services, ports can typically be used to map clients, with different clients assigned configurable, distinct port ranges. When a server packet arrives at the network node, the network node can locate the client based on the destination port.</t>

</section>
<section anchor="act-scenario-2-session-recovery-for-client"><name>ACT-Scenario-2: Session Recovery for Client</name>

<figure title="Session Recovery for Client in ACT Mode" anchor="ACT-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 client packet-triggered session recovery flow in Active (ACT) mode.</t>

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

<t><list style="numbers" type="1">
  <t>Session Query: When the network node receives a packet from a client and finds no local session, and if the packet does not contain an HS message, it generates a QS message and sends it back to the client (i.e., the originator of the packet).</t>
  <t>Client-Assisted Recovery: Upon receiving the QS message, the client queries its locally stored corresponding session backup, then generates an RS message and sends it back to the network node.</t>
  <t>Session Recovery: After receiving the RS message, the network node restores the session locally and then forwards the packet according to the session.</t>
</list></t>

</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>Type: 1 byte, used to uniquely identify different ASRP messages.</t>
  <t>Flags: 1 byte, indicating message attributes. Two flag bits are currently defined:  <vspace blankLines='1'/>
ASRP_F_ACT (0x1): If set, indicates the message belongs to ACT mode; otherwise, it belongs to PSV mode.  <vspace blankLines='1'/>
ASRP_F_MSG (0x2): If set, indicates this message is transmitted independently; otherwise, it indicates the message is embedded within the original service packet for transmission.</t>
  <t>Length: 2 bytes, representing the total length of the entire ASRP message.</t>
  <t>Session-Tuple: 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'/>
IPv4: Contains source IPv4 address, destination IPv4 address, source port, and destination port, totaling 12 bytes.  <vspace blankLines='1'/>
IPv6: 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 + ASRP Signature                 ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                           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="qs-message-format"><name>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="rs-message-format"><name>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>The NS message is generated by the network node when creating a new session and is used to back up the session to the client or the server.</t>

<t>In PSV mode (<xref target="PSV-Scenario-1"/>), after the network node enters the direct session creation flow, it generates an NS message and sends it to the server.</t>

<t>In ACT mode (<xref target="ACT-Scenario-1"/>), after the network node creates a session, it generates an NS message and sends it to the client.</t>

<t>The NS message can be inserted into a packet for transmission or transmitted independently. Upon receiving the NS message, the client or server stores the backup session state information locally and associates it with the local session.</t>

<t>Avoiding IP Fragmentation:</t>

<t>If the original packet exceeds the MTU after inserting the NS message, to avoid IP fragmentation, the NS message should be sent separately and prioritized, with the Flags field set to ASRP_F_MSG, before transmitting the original packet.</t>

<t>NS Message Loss Handling:</t>

<t>In PSV mode, the NS message is typically inserted into the first packet (e.g., TCP SYN). If the first packet is lost, retransmitting the first packet will also generate an NS message.</t>

<t>In ACT mode, if the NS message is lost, the network node regenerates the NS message through subsequent HS messages.</t>

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

<t>HS messages are generated only in ACT mode (<xref target="ACT-Scenario-1"/>). When a client initiates a new session, it generates 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 sent at certain intervals (recommended to be millisecond-level) to remind the network node to return the NS message.</t>

<t>When the network node receives an HS message, if no matching local session is found, it creates a session, generates an NS message, and sends it to the client. If the network node subsequently receives HS messages and matches them to a local session, it also immediately sends an NS message to the client.</t>

<t>Avoiding IP Fragmentation:</t>

<t>If the original packet exceeds the MTU after inserting the HS message, to avoid IP fragmentation, the HS message should be sent separately and prioritized, with the Flags field set to ASRP_F_MSG, before transmitting the original packet.</t>

<t>HS Message Loss Handling:</t>

<t>If the NS message is not received, the client continues to insert the HS message into subsequent packets sent at certain intervals (recommended to be millisecond-level).</t>

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

<t>QS messages are generated by the network node and are used to query sessions.</t>

<t>In PSV mode (<xref target="PSV-Scenario-2"/>), when the network node receives a packet from a server and cannot find a matching session, it returns a QS message to the server to query the session.</t>

<t>In ACT mode (<xref target="ACT-Scenario-2"/>), when the network node receives a packet from a client, 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 is attempted to be inserted into the original packet, and then the source and destination addresses and ports of the original packet are swapped. This returns the QS message together with the original packet to the client or server, with the advantage that the original packet does not need to be discarded or cached.</t>

<t>Avoiding IP Fragmentation:</t>

<t>If the original packet exceeds the MTU after inserting the QS or the corresponding RS message, to avoid IP fragmentation, the QS message should be sent separately with the Flags set to ASRP_F_MSG, and the original packet can be discarded or cached.</t>

<t>QS Message Loss Handling:</t>

<t>Subsequent packets will continue to generate QS messages, continuing the attempt to recover the session.</t>

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

<t>RS messages are generated by the client or server and processed by the network node to recover sessions.</t>

<t>When a client or server receives a QS message, it searches locally for the backed-up session state information, then generates an RS message and returns it to the network node. If no corresponding session state information is found, it returns an RS message with an empty session. The method to convert a QS message packet into an RS message is to replace the QS message in the packet with an RS message and swap the source and destination addresses and ports of the packet.</t>

<t>After receiving a non-empty RS message, the network node uses the session information in the RS message to recover the session locally.</t>

<t>Avoiding IP Fragmentation:</t>

<t>IP fragmentation for the RS message packet should be avoided when generating the QS message.</t>

<t>RS Message Loss Handling:</t>

<t>Subsequent packets will continue to generate QS messages, continuing the attempt to recover the session.</t>

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

<t>ENS/EQS messages are generated by the network node to create/query sessions, while ERS messages are generated by the client or server to recover sessions.</t>

<t>In PSV mode (<xref target="PSV-Scenario-3"/>), when the network node receives a client packet and cannot match a session or directly create a new session, it uses EQS/ERS/ENS messages to communicate with the server, with functions similar to QS/RS/NS messages.</t>

<t>In ACT mode (<xref target="ACT-Scenario-1"/>), when the network node receives a server packet and cannot match a session, it uses EQS/ERS messages to communicate with the client, with functions similar to QS/RS messages.</t>

<t>Avoiding IP Fragmentation:</t>

<t>If the original packet exceeds the MTU after inserting the ENS message, to avoid IP fragmentation, the ENS message should be sent separately and prioritized, followed by forwarding the original packet.</t>

<t>If the original packet exceeds the MTU after inserting EQS/ERS messages, to avoid IP fragmentation, the EQS/ERS messages should be sent separately with the Flags set to ASRP_F_MSG. The original packet needs to be cached and forwarded according to the session after the session is created/recovered.</t>

<t>ENS/EQS/ERS Message Loss Handling:</t>

<t>ENS message loss: The network node continuously sends ENS messages until an ERS response is received.</t>

<t>EQS/ERS message loss: Query timeout, delete related data and packets.</t>

</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>Deployment Boundaries and Access Control: 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>Session Legitimacy Validation: 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>Internal Threat Assessment: 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>Trade-offs Regarding Enhanced Authentication: 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 scenario 3 (<xref target="PSV-Scenario-3"/>) and the ACT mode&#39;s scenario 1 (<xref target="ACT-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 <xref target="RFC4987"/>.</t>

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

<t>Message Aggregation: 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>Rate Limiting and Traffic Shaping: 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>State Monitoring and Alerting: 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"><name>TCP Option</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>Option Name: TCPOPT_ASRP</t>

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

<t>Length: 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>Note: 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"><name>UDP Port</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>Service Name: asrp-encap</t>

<t>Transport Protocol: udp</t>

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

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

<t>For experimental implementations and interoperability testing prior to IANA assignment, UDP port 55555 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 777?>

<section anchor="deterministic-bucket-mapping-consistent-hashing"><name>Deterministic Bucket Mapping Consistent Hashing</name>

<section anchor="principles-of-the-dbmch-algorithm"><name>Principles of the DBMCH algorithm</name>

<t>In passive (PSV) mode, the core reason why the ASRP protocol can recover sessions is that sessions can be stably mapped to a backend server. When needed, the ASRP protocol is used to query the backend server for the session related to the packet.</t>

<t>When the backend servers remain unchanged, consistent hashing algorithms can well meet the above core requirement. However, when backend servers change (such as an increase or decrease in number), consistent hashing algorithms can only guarantee that most mappings remain unchanged, while a small portion of mappings change. This causes related sessions to be unrecoverable. To solve this problem, and considering the characteristics of the ASRP protocol, the Deterministic Bucket Mapping Consistent Hashing (DBMCH) algorithm is proposed. The principles of the DBMCH algorithm are as follows:</t>

<t><list style="numbers" type="1">
  <t>Virtual Buckets: Set a fixed number N of virtual buckets. The number N (such as 65536) should be much larger than the maximum expected number of servers to ensure balance. Once set, the value of N does not change.</t>
  <t>Fixed Mapping of Sessions to Buckets: Use a stable hash function to deterministically map a session to a virtual bucket in the range 0:N-1, ensuring that all packets of the same session always hit the same bucket.</t>
  <t>Server List within Buckets: Each virtual bucket maintains an ordered list of servers. The first server in this list is called the bucket&#39;s preferred server, specifically responsible for handling new connections.</t>
  <t>Three Principles for Adding and Removing Backend Servers: The difference in the lengths of server lists across virtual buckets should not exceed 1; minimize the total length of all server lists; and adjust the load balance of new sessions among nodes by selecting preferred servers.</t>
  <t>Safe Removal of Non-Preferred Servers from Virtual Buckets: Once all old connections mapped to &quot;non-preferred servers&quot; are closed, these servers can be safely removed from the corresponding virtual bucket&#39;s list. Ideally, after a period, most virtual buckets will retain only the preferred server, causing the average list length to approach 1, which reduces query costs.</t>
</list></t>

</section>
<section anchor="asrp-and-dbmch-work-together"><name>ASRP and DBMCH Work Together</name>

<t><list style="numbers" type="1">
  <t>Hash-Based Location: Hash the five-tuple of the arriving packet to determine its corresponding virtual bucket.</t>
  <t>Obtain List: Retrieve the server list for that virtual bucket.</t>
  <t>Query mechanism: Using ASRP&#39;s query mechanism (EQS/ERS), sequentially query the backend servers in the server list within the virtual bucket to retrieve the backup session and restore the local session.</t>
</list></t>

</section>
<section anchor="estimation-of-the-length-of-server-list"><name>Estimation of the Length of Server List</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>Incremental Scaling Strategy  <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'/>
Scale Example: 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>Aggressive Scaling Strategy  <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'/>
Scale Example: 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="dbmch-example"><name>DBMCH Example</name>

<t>Assume the number of virtual buckets N = 12; initial servers are a, b, and c, then server d is added, and finally server a is removed.</t>

<section anchor="initial-servers"><name>Initial Servers</name>

<t>Initial servers: a, b, c</t>

<figure><artwork><![CDATA[
Bucket primary: a   a   a   a   b   b   b   b   c   c   c   c
Virtual bucket: a   a   a   a   b   b   b   b   c   c   c   c
]]></artwork></figure>

</section>
<section anchor="add-server"><name>Add Server</name>

<t>Add server: d</t>

<figure><artwork><![CDATA[
Bucket primary: a   a   a   d   b   b   b   d   c   c   c   d
Virtual bucket: a   a   a   ad  b   b   b   bd  c   c   c   cd
]]></artwork></figure>

</section>
<section anchor="remove-server"><name>Remove Server</name>

<t>Remove server: a</t>

<figure><artwork><![CDATA[
Bucket primary: d   c   b   d   b   b   b   d   c   c   c   d
Virtual bucket: d   c   b   d   b   b   b   bd  c   c   c   cd
]]></artwork></figure>

</section>
<section anchor="safely-removing-non-primary-servers"><name>Safely Removing Non-primary Servers</name>

<t>Since new sessions always select the primary server, after some time, if all sessions mapped to b and c in buckets 7 and 11 have terminated, then b and c can be safely removed from those buckets. After removal, the number of servers in every bucket becomes 1:</t>

<figure><artwork><![CDATA[
Bucket primary: d   c   b   d   b   b   b   d   c   c   c   d
Virtual bucket: d   c   b   d   b   b   b   d   c   c   c   d
]]></artwork></figure>

</section>
</section>
<section anchor="advantages-and-disadvantages"><name>Advantages and Disadvantages</name>

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

<t><list style="numbers" type="1">
  <t>Complete Session Stability  <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>Excellent Load Balancing for New Connections  <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>Enhanced Robustness through Synergy with ASRP  <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>Probe Overhead and Server Count per Bucket  <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>Operational Recommendations  <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>Optimization Directions</t>
</list></t>

<t>Implement dedicated optimizations for long-lived connections to further reduce the number of servers in virtual buckets.</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+V9aXvb2JHud/4KXOdDpJiULcl22+rMPFeW5chP27Isyt03
c5+ZBARAEmMQYLBIZqc7v31qPQsWSnK7c3vmaiZuLiBwTp06VW+tZzKZjOq0
zpKj4Pg6TLNwliXBNKmqtMiDyyQqrpNyE1yURV1ERTb6XRDOZmVyDVdPLy9G
cRHl4Qp+G5fhvJ5EqyiahFW5njw+hEvjsIavDh4fPJ3sH0wO9tsfee9H8K6q
wzz+S5gVOXxYl00yGqXrkl5W9cHjxy8eH4zCMgnh6et1lkZhDaOsRjeLo+A8
qW+K8lPwA/yT5ovgT2XRrEefbo6CN3mdlHlST17hGEfwoyN4UDyqmtkqpXnW
mzU8783p1evRKCpi+PlR0FQwkShNR+v0KIC/3wVRmMOnSRCWZbgJdtJ5EGZZ
sEmq3aAog2VYLYNlUiYwjWASALX4RVWUdZnMK3m3WdGbAC84wh/DS73kiB4T
J/OwyeoKrtDv+Ud8+Shs6mVRHo0C+pvIf4MgzeGKf9sL3jaF+YzX5t+WYbFp
vC+KEqZ48u7kxHxSFsgCSZzWRWk+rGBcCZDrvNgLnj4PvmvyrMmrJRDisghj
c1mU1pujYNr8uCwa+2ER48ruP338+LHzYZPXJVx8skzz0HycrIDzjoKsKX6k
sf7vaFVVexFesypmaZbsRcWqf8Zne8Gfw7w147MwrZZNCGzgfted9D95fpsw
X+rI+qc4yotyBVx9nRwhw8iMg3IeHezvv2h99Hz/myfwiMvXJ4+/efb8SF++
2JeX+BN5iZfqS9hHR7Cv8rl9FF/+wv7yxYsDeXn4/EBv/eSb59/oyxfm5dOn
j/WCZ4eHT+XlN0/2D+Xli4MX8HI0mUxAdgDFw6geja6WaRWA9GhWSV4Dz1dR
mc6SKgDSJ5/XSZni52EWrEXw0MLGQb1M7iKmgh2UTrt7wRVcb24RpivaVcW6
Tlfpj0mwTBfLSci3SzNY5CAXKRJlIHCSEvY6rFCdRHVTJtUYb3WdonwIwqBq
cJiw8/Xa7t2qImtQQgVAapRtdTJvMvOMKimv0wjmXDXRMgirIAOeC2ZhFuYR
PSKPjVQ7jmMYQBVclWFeZST2gp3z4yuYIs4UhUaaw61qnm+UxDhgfq4QaRZG
n5o13bUUeo0DFLWL4Catl/TTFVwbLpKAWaNCcRfDNoP/hwnCuqG0HQdJDtTH
ESbzeRqluIB4V9xM4Qq+gN/oQ2nSwSrM4a64onuj0cc8Sz8lINJDkDVwDSxy
l3JA8mVeZMUipUmFNQ0/gPF7d65o6DBAHLysw5jfFGUCw86LayZWMWdCZXhD
+EGcwnDTGSwPzINHaXYEXA5cEmU4syogEpZArgrZCbg2XAOFQ1iyYj6HT4MV
SOt0DewYxtchMO0COaVKF3kK1IEPsg1QbCmL6gz091WQZGFVp1FQRSERNArX
QoFvkb/WoBjw4zJcp3bVgnlZrOAB+SJLJusC1gbHmFwnOQ9FPpsDOZEJvoUf
xg09HN4VTRkl9Ekew5A2wQxGl8F2yEN6VARzLmEwPyaxckwOgg7uQkvczFBF
1yloPmDvdAVKeL6h38kmwI9opZmOINPg/WeY0B7u+YQXwexI3k+wIq19x+sa
4GxWuDQunYRAY5hghK943EjX1rNxwHGyzooNyRjggCwsF8kEb2Jv2X7yHkuq
VRrHWYKYBOBDWQAB8Z4wh61s25nGLMQdBINZg0QLy81Ed6EjV2A1gJjI0sza
E2bHapNHy7LI0x95OjO4d5LkssXpbjRFd5VAGmSADprFMpg3ecTjhJvzMtTJ
WGSNK9WQjsCTS7gwyRe8O5hLiyYOYNuP4ROYEIk9ULmN2fRzXFmZOUqaFjeP
+/htTGNGym1hleCqgM3EEg+GApgLcFqD2woHdiqPmapAPVEBDDJ0hiQCtloX
QHhYy8GLcSPTOIA8odEoLdls2BoHV9BSzu1+j4qijHHjwOdE/nFwgwiQRpk3
qxn8EK6nrwg9zgzb8f5BRiT5CsQrmnoveFPbLXFvfbEzfftyl8irvzA0bGsN
lG/JZ4TFwMYg5Em2Ac2BLUCOdBfSFdZDFAV6xqBZgapzuGCyDuvloyorbugV
aniQiMB/yTosecuqJLfagSXbGhg6qZGjbkKk70LkLqkdmH7yOUqQV+s+sRCA
qkDymzEQ+WHnb5IS2OF3vwvcHXyBFwxNaPSPf/zDIDjn7+Fk8O9h3/U/Df3i
YfBT//U/9XzKX2y5fgq05gmdE8Pddv097n/f8evff7Q/uuX6n9ovbhnPTxPv
xa30hP/u7e2Z++N8H7rTGbz++9YX7q9GDjV/cm/RodrD1r3Nr/AWJwQ38PM/
6vX/Cm9eA2/aVW1/CwgYkYnc4peOYistAqVF+wuPFlvJ373F12C3rdsRt/Df
j4Lfvb6YTC8mp9OTgHwd//IA6frIbpkhGfDgZ4YtVpCxNA9JbVdrwMMp6g0X
aEcAgw0AMXDV1+aoKcDm6xFVFaixHKAHo4tqnYCG6JGIPyxBz4VtMYeYDwG6
inaQ26itSdk1dYHgVlQP4KtoiQYVmEMwCFCeSQjQYaOKLAFFXxKwKwDu5U3R
VEYpupCHTay4DG8IoIO6G9YPYmbgYFz4k7LZgiAUNWmfUIfb1t4qsDwP+pZm
BU+z2EJhhQVXLVi1AksjzNNqVbGVQ4AJcFRQb9ZIrA5MYT0+B0M/Vqh0/MM0
ONuAObgGXZwE56+/D+BVjeYE6xxCvffVM4Os3bvNgsFt1revh6/ue3ivjAuG
pUvPM7bJOPgjApGE6367VcbddxRfgRZB398g8XuvHlxYlVdID1dcbWUgFVJ3
d4woQiZ/i1rJ130OEePCYADHEmPWpFkM0meFRjYIiCitwLQw3gDG+LqPvb3u
OUIU0CLurcRij5OQBEKBFnrZrHFYIK+MuZ60XAstox13Y5LHZAFXKDZCc/0O
G/TWnhf3kNhPcjvE3WUaodFuJQXM2rhIwOBNok0ERBahBNI+M9KFZD9cHrJM
02cjeoUHzLK0QqGL5IE7gBKJg2aN36O7NynZCi/yveClb5WTQYGaAOmX5mDV
wiRxMp+SZD0BkA5rhzcFczkBQ8IRamMWuLx6LNXFTYTjnuAPPHmOsxKKOKSF
AakhS7cz9x8bW4OFr7hjQmM47SR7i72xa6qAJhgHYITAmGj1d8lqysmch6mq
2wLXKRYVJPcy5gjK4L81afQJVqlMmBvZ6cNmbotH4rRMaEXJvPBYREwLdDSx
YhQTqAoe0G/B3qgetOZIW4he76JTw5pNRJpFEWZj3ykHnM1YIXbNnh5/nLNu
LdclcAtcAOODzYjOGV7CokwXKer5OKxDQQloaZYl+WRmTYXPrwwM2EnzyYz4
BA1CCX6QMQib+DrZbNlbO2Tgfw6RwLDVwbaNaTZmhOI6JC3K+3AdbmjZaRde
nVzAh2WSTG7CDUGcahl+SoL/Kw7if99V79p1kcYyPZgywBK+Q2yMNkQkJTqP
ZL5GpnRcJqKerxFDr8L/BHIxg0fAzCJ1WtodBoW8V8HWy0K4PBWepvETFn8P
Wy/YuXr9fkxjRz/3v+/KKq7CNK8MF8JqEZ3B4MWtClRp1oARJoRd0ItoAljA
Rm/g2c0KnTrs5PD8ZGP00s2LCNdzgZtQ+ddjIt9JCNP0VpPkM2wDlqeLBqxw
gDs4V4WtiGVhn6FTkJGruEAYAKqTxx03DmX7/gci5+TTV1Cnsl/3NG7emoUg
TrktT0BJVeIFQhcV+qCTMqVboaBKyE8OwBb1DIx51dQNbWNHRk5yZO/Vqsll
2CiNywTkB4pf9aoJ7CXvSTGE2vGXKIZFH/h+Z+HfOTq6JHghUrfPFyw72LqC
jee7CDwHJU5nrM7g6nZXMKneIV/wWBg1bnAAfe5gWvkNjGk17J+7q894LzgB
JgFKJzjxHr5GesLugFk2sNtQ5TZkAiCfKR8k+XUKK7AiXzwvG6mJku/b9VWt
mxJug9GJzzVsSeR2cjea2bIIFTOMncSrkGUzXaiMjwpbbBzXLxcGZTFDG8OL
7uDcHGcz3raAzW6CD47reaxuxy0u6N8FVwQHMASyGSGIRHXwCUQ0XAni8cG7
j9OrB2P+b3D+nl5fnn74+Oby9BW+np4dv31rXvAVeBt4//7jW7kEX9kfn7x/
9+70/BX/Hj4NWh+9O/7zAyIY3ef9xdWb9+fHbx+wlHWjeWgcI0pM2KJal4lA
Ig3zoeGEN3kJQnX/SfD3v0uw8uef+TVGK+E1wgJeoSIHcvFbIPQGhRCgJ3wy
bA+8UwTbAnYcMjhItGVxk1MsnihpsO/7a1zZ5IbdgDcFynJeIdir75BjR6PX
spY+n8Js1J9O0BlV8ZjC/73iz9nZbI7O07KqhT8Mf8GNFmW4kviW7PDuw/cw
+JeqK1+iW53YVMcbgRsRWdqGzMQ0llGcvrx4DQA+bjLGWp8wRyIzn9w2ph+W
CbkN2D2vv8KV5/srWNSxgpCKEbAILCaLjj6y4KhSAA8UtZsnpDEllcLtlmLE
36pWO8KFhfUOYbrXyc7F9PtdWlbSrvJpwB/jLccCq90FJHBkRsgTEkcAcGBW
RITunWWuQNZzekpi/e5xgUhAsS9gApxoyCgNhaWxPfyH94Y4+ywcMzqLHe0i
G5CrVxG6ZrUlOgpnryoQHluIabOdFKiYhvnhSrwlDjwAkZzkAKKKSgJIftDX
NwmY4UTI2lAHQEaKZoXB92mJuj14cxHsfP/mAqwGYCb0tLSiIEZvsO6qOErL
ZgQGtFqXGxuUeeeYWGnn+OTKYR3+MOBPBznnl3BKWHnbWhgnxM0BBGcuQCyZ
1L+McfQB2xlHr/qFjKO3+RqMM2XVvTUdYkqRLfvbHY2TqV/PUp0tTzDcIpy8
ho8lT8wyXR7gPYMFUBOsll3lOPqww2c2N4QZja7y2It0zmXBOQcvk2V4nRZl
xYw33axWCXoe9IJhr6D+iTto+0XqK9p+lXoiB77ucVc97PekWUeY4wX7qf9W
A17FrkfvYedr83LAq6h+RXKK/5+g77tbvIr3G8VXoEXQ/9dLevUSGqaZKFeJ
u7DDTegitB+WcnWZzEWyo/cAN/NmjfsAgxMRb+1Zyt4TltnqSFB/PIo0488Q
SypUjY9yIFRdj5Z9BpuoooezG9HcgpZp0KKikbnWqQQMyAUfegicsZnBamQt
z7dE0o2IwL1K0BNz3BSGYmYbvMZ5AIADEZBl6K0yoRFSWaGYXzwJlOY1eQHw
V5SJhQbsNu+U62YbjVQciqtF9CJYKDD/umQnR3sZRUiOR6P9PVFWkylm0oKd
doYWzbHr4Dt2/LFkWbwR/G44gJGtrjUZ/QGiLLRhXZemLCjHq9irqfNHS3Dj
paoQeUSxIbVXIPCJiBTUHxsKtxK8RN9VMp2cFRA7Wvgi+twYCXX4CbEishyp
r84QKESmviYvDJWjxSAmOrtJu6RGxhe6qJfLuTms38Gedc+/Rajx0kANzTwh
f1II9hew/oQV24Rev0pAnrMH+EHwTl2B3hqhAi5zCvDl6IZwZzDu6DfD3u+/
n6Lyoq1XVrucxhw8wM03Yat4Qq9jdwTrAhQyOSSYHsLvmfW8zRJMH6RVdHYz
bNWcJQbbAyQ/Wju+DdoUVJUJLKYyEeGzHm5HKG3iAbHrIVAUV/2306YD1/Zp
kC3aZpvCGta8zm86arPznRnF11be2yftf/1Vlbd3CwcmTCwt/tz/nbnFV1iR
oP+vlwEGrt2KFeyeaIOF7m7RgOLdlf8q3KC/x+r2OEWzC5d2yDMCglJ0Cvs1
yKFX1eiQ1kwwx33gWb76ONWvpGyYaTWxQtwhSft2cgPPHhq+3Z9dCAJq1gEh
xgoib0XJsVCeK8VTMlC4aLqxv11FGo+hY571kHSMvm82aG/c7EwZuXh0+0JH
HuRpJTJKqIEtlD4XKzrQuiJX8vLVn4rudMlvKeZADq1ZCdagcgu4D0YMr0Ly
P6HBlGguhmaCkCYRCnaSoEN5msSaityEWilEjAE29QalXoa+9bhzBBloVtzY
NXFiAhkjBk5g1UzMYFmU6Y8Feu4xA4QiMqA+XVXTKgdApsZwK7u8SF0pTNLN
AvNl7wOjN8pnp/z3rcp3/CAAbIteRtel0VHrksVD/jvfnbLr+CKc2LmOCp6C
5BIyYLiAQp9lUbnp7DYrVrwMEgJ2WI2mcnry7iLYOf1bE2aTk6Kqg3cUeqDE
Kvbtvnix//PPY/Pm4Oefd626Z27KKLy0YgZocyCbz8aR+45jjaMR+RJMyNZd
KScwVuQT9vAPB8e8zYjRjc84w4W3ot1IZ7gqyNpPeeOIo2zspeBKyLgnZVcd
eG4onLiu7aFSh8a4XfuA6ArnSVkEwuHpdRo3YaaD+RbhkjpP4EFtJ8m97ikz
FZB1DnJJ80xkQYKd8+nuaPSnJEfnrbUBXGKMg7TG/UmlJegaSsRdBHgP6wr6
paNN4xD5xxudHiJCfAdmenxyRRB513rG6fOL6ffyubrGYXI3nEKH8tUxaiSD
g82O86kpiZG8L7A7krKmCIaMxAThjV/fZOt5cfbAT90gMyMK11WTccaIDcvX
NaWuI5HPEpBhXTKf9ZKZCeER2KEJaeUkynCFMd9EfXLzoYhHe+V4iPA5THjB
rn//e/iuTECwUMTXIR3pw5bty2vAVNbrQK4XNtKpuQqtjBeXpEKkDw3u6Q6R
PtybF/9GN6ptUhAGJzc9mUNevicybFMpO8nqU4w5SkD7x17aiVMh4DCd3XEg
vZDV8gJRSY1Cg3zJxixWR6xMEhWdEfQO++BsYdGlOIeEfLQs1NNpWJYHK2SU
ZLEuIS99QoYUAxV8pYzywS63x43ORlwWWawjYPoS/TG/gMz5fmhkIvXEXTxC
h3pddzgumrpcLu2oVP6jG6WJask5dUlrNRJrFCcbyWgOIdUp7lxg8Ucfpo/g
GYZSp/DRKXx2SiT7weMIww49jKgrghKYuCXsko8dQQUWSwFzIDFdTlUEqVOh
3Ww0lXDULPF4hOq3Nj6r9LEHKCWAMWHsRPCVqhRRxLIWV5SlKlYHJKHFVpSI
08qWCqX6kEuKzH0JS07HwGgU+bEra2yLj68AhRDEwHJYgBhehpA7gDF7PoWr
gJ9P8c6neGtkk1Pn5n6EkXGIbpATSfR+ZNIsp6pXpcC1Ej9IIsYAQjXiM41q
wdqmEtsUx5+jmpeAXruS2cCdbYlk12loZYQt3tSMKER8VBHnMaFJvSPs6Zhw
nWDsXnCKBZA6Vli7Gt1qoseviwz5vA2YAG4XNzY8JNYWY+NkTURI8K7wRK4X
pGDu9PuJUnWyfxS8IoO0swSjWx08d/Hv3Mm9o96dAZu/ZYU/7Px+mx9m/+ji
u6uWpyUwbpiDo/PpPTwxnZu0/9o3iXp8MfxGK4r6b1Ld5o2590js53+cTJ4w
UTo3YXfM4dHl9O4emfutzgAfhHu40a4DGNa2r8+nA7+f7ZF0nJ5Op8NfP1qA
5MRLBm4S7QWvf3iFMGvoa0LWl0O/j2WUgxckPIxmjS06to1kziMBahhnk79r
1dE0sHcDAejvQLmx5wklpxUt2hqAYD/folNqg6KF7tPJ8hCIiWapuC3Es6Bh
JMzsnP75XJVVbMpe1IltMrdXhK45NoZmUUQCnfSyA3jSSkyZmvsEkP/G3I0T
IiWhB9TNHCMCDA348lewouIKkyF1sw3IGCG0bFKbKatELrzppw8sE3YrwEzf
HEYaAfy180YtmmWoygkMhwZX2kgUGs2otPUHokvmBbpZcPBgf0eNKFhC7pQh
JLm0/nMEjRi9SH6FeVPiL6RS3NEPvLoVjoqfVh1RrKvNSUdcFtUhl0CvyoIx
H2SZfAvhhV2J+WFOUl60USJgVkN2thYr34yEgTWzVt6jN56FYOmqZSjRU7nI
q8LHGKdnxhEUFrQSZWKheyk4/Cg4brFS7dmvY9f7qaPGkBD6WQhOiIOtJ1Od
Qblx/6RUrAH8ltd7luCa05Ug0Rz7QHkYpuNNuwXN+Xep9HnosT5h1od2xaet
xFy8xQUv7WtTJSc4puvfPgo+rsm0cGl12aKVt2KNWhSuaSK4kxfKWLiEr1yR
gWQWKSoovcVQgohyu/acPk/TCaOo4NkYblDb9w9/uMI2GbRLzwug6x/+APvi
nEwSF/p3/RYthG8yjoT/H8H/Jscn35EbxbUYPP8FrAZvbeRx3utOEQD1ipAc
XZuTYwTX7UPa+ugecHhw1C17QuDPG+U3BBBvwyB3SZHpviM0JPixDYbufJPW
3zBAtLBs0kGIglU/TA1UvR0g3nckd7vJH78AIN5rdYb54HaMSPAMQdPgPRAI
FoMwEb+mR3wYAmYBwcAyQSP/Q+894OtbYGbgIsXhr/ERg0gyUDB5y4NuA5IH
Jr1peJ8bMAn8eBuYFLZkgTMRt6bTvMhWWQyjy3tjFXJWdrV1G5nw2Ho0UZVg
EApFbF35ioRTaQBgYsuRAVWOBSqYNrUdlLjevEHl3AUjk+OKwqNgdSBD9GrZ
D/2IJCuKTxVFHDoohOaIMbq6KG1gZ0v4xlYqWtey4JXxEAYZfwkIUfbrx15b
8YSPG/1l/FI40NGIh0fDrqrfqj5sy1s/f+Juop9V0MHRKakgcZZoAsVPndyX
XqcLK4/Do1NWHm5Xiod3VUHy2qRuYCcM4fefvvwe7XH0em3one0Dg5ervt5O
j1vG4bz/Enrg5U+PTs91XYbpAdR/7gEM95vJs1+4LniPb3xcYOnxNfj0l3mO
gHGrLb6j2zABKmOgz9At1DWET+n/Wsf46HTQh6WgAJ/T//Ut+l7cSxrSac8o
cSYy7HdSDIUDHfp68PcLg2seDT9keQsmOWxjkm5QAMGJpLndEZxgTnHdWOdY
B3ZIFDEcdHOIUBClQS6qPEm5Yotxjhj86iCiGLvrOjI+kbzIJ76PbBc+Kzk8
SXoU8yWwJtfBGVgRuumJzWE1CXd3SLjfAU2llkoyHS/nlXIOT969OQeysU6I
IiSFwi/Q3HsmUxZDSz2KlwJWmP7aG/K2AWAfX5hkbgIgDr7gHwBaabJaWnGW
CfWYLPwywGSlKUKhmTvXMRvHSaZJs9kCK9WXK5s2Etr895o6DdON9Dqq4OeK
I3pmjbWmtZPqNuOBpprW8MobwMuGiP5OErJP7JPO5Ek7r16+OznbdUYmGWFc
yhw7XxCruW0mOn5LeGaWOZQmtBfVrVFTCbPJ4LbN9LQajfJztIh/XaZ5lK5t
BSJGoyT7YY1Og/RzcHx3qM75BG8JlMm2Puqyst1tedt50cleZHB5N+Duf2UB
O4bKwyyiGGu/t44IZ0oheCTcMmA7/2hZJq2y/ZihPRPjJaPuYWpYXH36wfE+
WVQND1gF4hDi9qGYWB5SEBgmQO4xzdixKQ1FnuyOmVlM99TW5ZWZsm8aSOEA
35LzUqrOnqVAKSygE/JljH8hIoWnf0kXV0e4ROGAMdVZN1FtmNdhasxO2yZH
T7yd70vQHzcscYXNgdRJL0Us9Fh5Yze+qnKrsvbMYHzgOMdIuJtcUnVzb403
WvIYXH55YvzSJ2LgOFlivfbg6S0u6tDYf6AEiygNa8dA55D3OjNdOvyVtJ1Q
qKUDZ2dRES6nmAK18+IGBMWCagdQdVBCAinDTg4iD48ruVupXndIMaaoR5Vi
cmWYJ0VTYfAAh9exQzWaIsWU1KCZNzSW5/QnwYxGT7+eb/zexizTRMbVk1jT
b5J/Xa/3ZRJWUgjGu81JxTkyoECxFk/izYV2SE0kB2xOATK3V4jbdbebDNfJ
SHd6v9j0CeGMoko0ZtbJsLlCPAdPB/KarCIjRKnzE6txL8/GyXsxfnxOZjFJ
SE71ji36A6GrnS2kXubkykuy+AVeA/y7UylNcNdqmuAOHoRgu9v2ltKX/aMz
66sO3K8H3m2xM3t+Rn6Erouhr/DEZHjcayT9HgC9cCB3Y9gt/0ex0j9Me0fS
cf33TodmoWb6lxKWRvJNX0xj+02+Cp+M1Ed/1mNqq6V+Nh3NTLpH9zLJ9BDh
NULLG72YfdcaTz2Y3LFrgrc89853I9dIbt8vMY6Crdtrbp0BW69bWHt/63U9
9rIvXW63lyVn+W4efDE3vXirMQd7Wjc4crvPyW+DALON7I8Jde8QAfuLcxOM
aS45Iu3cAcL5CjI4lC4qUfJkOZ8XmdJJr+4mNmPCZ8MFBO1kb7RS9/qw2Nnd
PdZKPZv8QT9AJ3xmD6AYD2Y62FRxDyaN/RSIPnC8BRkcGNiOX7cSJAQCKYYn
78VwZKQHibsoJqytlcFW2y3380jJpnqfDafFbiY/VKuky4S7XIDltnaMKsS7
HzyqpjXbL+xwciMy22IVp+2wjAxkG7juD4886QuP9OH+rYgSSIJy0t/k7Iox
5sBXhY+v089AJHWBmNrro+CVlvoPhwuNBFkvt/icALxRLZXj+0rNSQCO88aw
gJx5YqJihuHEy4Q4lZhATXykTxqNUVDM00VT0uOUgaSYO+xtnWDz3f0TXdCV
RXcx6e/I7eyUMne2ueVOi1OtrMBvwvg6rXTu6HqjCaQtSM7ZaV7TFCyBLGtO
GrEuAU1Rq3HTrW35FfGoBd2m1U0lfWtdsoypVizNo5oeEZTiTBIR7a00nvfF
fp66R872uri6y+lZQE6hHz2+D4UPZbPwvr4LDr8bCr8jBr8dgW9Pm9iKwPf9
yJTzZTD0fhsCv99NvJwWk7bSm9TiRdDukNPyxdOZTEzayr1o8lVWZ+TkprSu
c8JXI5t90rrICVEh4F0UdV+4yklMGUkGSbjppJjcmqSMf3fKLelLLvE33Nbk
Ehu/uSs09SIwd0ku6UDVL84t+bIk2G0pr/hdOnc1rClEEljqY9J2uuedEkpM
Hedesjd2sV9dlOr9lAAUg71hjHOHxBN5GsdFHKe8zTTZ1rZ5zNjjK2a0/oJk
kl609EtxklNu/Yqre6j2SUvdXvMJcX2Hemkhl/mAK3XJHjDF5QZFbtbalrbm
en7r5rXlY/goPNvKLb4uyRtWxMa/HgZXb78Pdq7gjpO3Sb6ol5Pvw6xJdgMu
+YMB8D3yZpWgx3OeJhnhJ0vP2QazdEt0je7M0sUEY0dhjvyGP2wV1XFIRVnT
mkJz3MdYOirb84qOF92nm48NeGnyFJgPexVjTms6dz2G3oOY2V9n4aKyd5H6
A3ycYbpaqt+xvdFNAdIiXAQzZGykVdSU0t2I1yc+oiQFfNJfXv8FpdrO48/7
u2QeVZSw7VQ42PVyQrNaWPwtJ//e0CEAqRe91brrPfdZ76Z/wmcdDDyrVd06
lALcfmr/cLHxPvUq93sx3rVmm7coM9NRcEC0p5LANWw3XDXZnnWB7Z4zuk75
Ab8u/XJJzz6aXDVrPHL1BPGlDFsP7KJ4MwLTviYhxvBEkcWPZLqYoLM59wvb
uWlJJLZgkPa6B48f//zzLjPAm4vrJ0cY9OUiXOmRjJ/qbcYeYPW/kctxrNpL
2ce2Y6YNEmpf6Lenz33W+9xng8999mXPPXxmnmujJJNXYY3HCAfXoLvRJJgI
KUkosPkVOSuzBhuAYo5DvVs8yU5rYzpHSPIhVQZ5PbUnshXVAEBWmaqwlO4W
nsADkBRR03IMFXjqGGbDpUURdUn1q13JCnP6dnHgybs9khQkqD+EgFq/IbjC
BBA8NrXIbQrHjBjNNvbSZJPCnM3QTfJw673DvL05tPkyPs22+O2MQEoahHga
U8EL8LQADr2pOOCVbD0qSCvToVWsulkCAkEbBurtmKoc675BXUrTdUbC/RIr
/Oj9xdVf8Bk7zx7vjrXHm5UIB8wTUtrcxnAD1tzjns/2+y/cB+l0GDwJngbP
gm+C58EL97Oenzyc3PJ/Pb8hW+M7oKz7XqQjvf+i53hH3gAhJ0BJ79gbpPd7
ojdibuSRQhKZ8HAF2OtyooJyDJ2+yjVnwpmAZD7bM3CQo/YPJqTqW/yuvSCG
mCImofH48+NX+M+x/+qx9/bJPvzz9BD/OcB/6NtjsRnsE+1uCE4u377GKC92
oSWub7Agj7S9cVqrSDmenrx5I+kUUSIuXbEWZt6pWRTEl8uKCFGANNETZy3F
w/no3or2BSkOPAL74D/+Pnnx7GcAbdzJCfZuElYb9mDNGm4roeDlSAsn1Vsd
rml+IWjZDcAkBd3Ytp39P/zDlHuDXqfUuRxxFqHfng3rlwupETNuL6FxtmE/
4bZwku4ZUvmpXatso36ckVufWCZpLV0v/IomW+po2uFMW9iYobGfTtFUA/0f
UJzer4mz7Qwh0WPuQA24jyA1Lr59djVuWTNwK1bkMGHSrK0uBwhZg2NynVFb
sCPWRn85nz4J/gUEyw7+etd8+Aw+PKAPn+1iBZp836KICrpesdbz2UHPZ4ej
24TdbZ+NbhVJt4osFnxEI0cQklvAfd8Sj44g/Wpj6PubKpTSVej9+xXH8MqD
bVtG8ZXHIBO/QOBsn9EzKPeKX3ct7vb30+gfg9+5eHX4Dv/4CmP45XTwVPn5
dIKWnqvJz6e9cgHVusiMZz0yg9L41IJHuUYCyxFuKs+pfSLgKnzG2DnUPqTz
3tm2jhI5NchPAFKkJljSM9HYJNjjx1Ih8P7B8wkY1jZ7iNAztcO3mw9Fa2sn
oP5db4L9Z/CqRiCOqTh4XOdazp9x7MaeIaDUPtTf7vXpF6MjHQuhHUC1oNao
6tJmV/r3a7XJ4RiuKl5S/7dg2v8hov6XbKu+rY1xhDO2VR62AUz777extX9N
ERe4XDf49/8DHYgxXh1fHW+55LdBh7aox2CRL+qdnFOR8W9sI8Zxj7DZ0lrR
FTkk6VnKth0/NpuTW8QHTc51Arado03scJ3iTndyrWp9Yzsn3j7YUB0EmboV
nMTO20er7j5zyFEn6YUsxXUqfSKrGzwAK7b08CbGiTV2Smwv4JTUBQWPCjmv
G+wccZG0p2jOQrYmKjVpxVR0TzftBWfFTULFyjY1vsi7xUlOv2TvBn0OVdsw
p7o9BdfNHbpjvm6rrVtwVSBdyuI68Xt2aj5EtBFDE5sgh9o+kP0QvqbuHjYq
KyO+KVlhh9TKKk43jQ9TGq+bBExdM0zLZB6FadjXMw7zeP8xMgwxhG/txdNu
5CFrot1J+23es24Jgd8TMrZJNdr1dajfEifV3K93aRSundMUe8JuLetWjVsY
978A6vifhFysjbrVSO2zUr+6ljjrGgQdBtLO82f9wnbIL3c/jHt2C8Y924Zx
PddiWDv7WX9jDA+Sl72GB/mN4ZdmGCbYoC1t+3fWhzt7k7jIySQjemfMeHo4
7YYvhlIFnCQ4OsGaE78wZ6AnoZKCcqZtkp+k6JZZekVrNvzsqd97jtHVB3dO
WZBzA7anct5lSiLjulMakDofUOo86ayv5Tj2lGI+BjzHzbFg1qJtkNOZt5a3
rHd1r49z7mon3gNxWQyDQloQCjXf5nC6k/HbIV6fV3M4A3J3eGd/2Lqz8ev/
1xv7sn9jX3Y3dqvUq9UExpY4qucXD9e2vt/LYd+vi3yMI1hPARyzm8O+pWb2
jT2XqdriHb4k7/BT3zt8Sd7hZ8Y7LB+ew4ffBDt4a22V7Ce6mODaX/Xef0Xu
0HfP/jqmBbxlv7Swlj1IwiHIm4sAC9dIaN11T91lwOd/HXsITH1MFWh7ySRw
0jgMCtfLO/LKjQW4DchNKpmkToXegu1y5LFLpwGGtxJmr4838ZLh5t//5K35
6Ozr7k6ndK6zTc2K/yr9vDX648g5Lwcu6xO7Q/AHixGZAOJNtOaIpZ4XX+up
Q3RabxftM9NZaXgtvdk6oi4HuJ5YlOjfgVJPDp8f4JF6srRUnGgKGjuVj6bo
hpjKK33sFkmG1KW93dXbrKaTTHW1NLtASNFzoWNPe15NkBUPaXIP7RjY0fE/
ym74BX+DHi5umm8IKP7Pnr/fhofrV/T0tThn6LLfBh08G+70/OT4ouPsc/dP
x+t3Jw+Y6FnDIuIsMQcPmtqyOMlSPcLH7P07eojckPkb94HIjvzEsQt2OQMP
BED8nw35JBI9XYyzB/yMM00noNyop/gX7Lg1JwJbbV4v5tgba6JzNzpDjfre
NGm1NFPsnlRgKxOd9FxbB9eXWkYNYCLum9+fc6WfSJ7TX1sJTn+lk3KWCZ5a
QjVBlGciF+N5aezN6yRmbsuruS0xjJ1cTpIPBerMlLbeGnNKqV1RzLWVoK6w
jAlJhIek8UkrrYG2U1BEB/iPZUu1PzEElnohzRbqpZfHD0Pzc/uA/WUZtXAq
rKpmlUgiYmv1qPVHVgLDYjUUMIV7Amt/+ko3ScXlkG4gcbHt2Bzuy8O9Q0yL
c7cnh2PC9OCarsXXdryrdwJzV/1W8nRwGDdN74yKWqDf3ia+24q61YHbJO5v
CQngyPy65m0js7WzrnPkPmMwPvzWUvV2d7YekZ4jqLa0c+6pmmh3Z+mgWKfy
4NbOnG5Jgknzp1ka7O6fdQTG4nWRqo32ugwXJnUWoVg/+E0+S7sb+O7d1UdZ
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
zwOD+/xr3w2w7helH+gjumT0Xz4Wj6XK9QAA

-->

</rfc>

