View on GitHub

StateVectorSync

Spec and API description of the StateVectorSync (SVS) protocol (https://named-data.github.io/StateVectorSync/)

StateVectorSync Protocol Specification

This page describes the protocol specification of StateVectorSync.

Last update to specification: 2021-02-23

1. Basic Protocol Design

Node A       Node B      Node C
seq=10       seq=15      seq=24
   |            |           |          \
   |            |           |           \
                                        |
  <-------------------------->          |
     Periodic Sync Interest             | Steady
[/node-a/:10,/node-b/:15,/node-c/:24]   | State
                                        |
   |            |           |           |
   |            |           |           /
   |            |           |          /

Node A publishes Data                  \
seq=11                                  \
                                        |
  <-------------------------->          | Data Set State
           Sync Interest                | Reconciliation
[/node-a/:11,/node-b/:15,/node-c/:24]   |
                                        /
   |                        |          /
   |                        |          \
   |                        |           \
   |      Data Interest     |           |
   | <----------<---------- |           | Publication
   |       Publication      |           | Retrieval
   | ---------------------> |           |
   |                        |           /
   |                        |          /

2. Format and Naming

Sync Interest Format: /<group-prefix>/<version-vector>/<signature>

A state vector is appended to the name in TLV format:

Interest Lifetime: 1s

Data Interest Format: /<node-prefix>/<group-prefix>/<seq-num>

Note: Choosing alternative Data Interest formats may be decided on application-level.

3. State Vector TLV Specification

StateVector = VERSION-VECTOR-TYPE TLV-LENGTH
              *StateVectorComponent

StateVectorComponent = NodeID SeqNo
NodeID = VERSION-VECTOR-KEY-TYPE TLV-LENGTH *OCTET
SeqNo = VERSION-VECTOR-VALUE-TYPE TLV-LENGTH NonNegativeInteger
VERSION-VECTOR-TYPE = 201
VERSION-VECTOR-KEY-TYPE = 202
VERSION-VECTOR-VALUE-TYPE = 203

4. State Sync

4.1 Sync Interests are sent periodically

4.2 Send Sync Interests on new publication

4.3 Sync Ack Policy - Do not acknowledge Sync Interests

4.4 Handling incoming Sync Interests

Nodes can either be in Steady State, or in Suppression State

When a node is in Steady State:

When a node is in Supression State:

5 Examples

5.1 State Sync - Example without loss

Sync Group with 3 participants, node A, B, and C

5.2 State Sync - Example with packet loss

Sync Group with 3 participants, node A, B, and C

6 SVS State Machine

SVS State Machine

7 Interest Authentication

License

StateVectorSync is an open source project licensed under the CC-BY-SA 4.0. See LICENSE for more information.

CC-BY-SA

Different licenses for the implementations might apply.