Message Protocol
This section describes the messaging design between nodes, including message exchange formats and message protocols.
Message exchange format
protobuf is used as the message exchange format between nodes. protobuf is a flexible and efficient data serialization method for structured data. It has the advantage of high speed efficiency and spatial efficiency, e.g., smaller encode volume, faster encoding and decoding speed.
Message protocol
A general message is the information that must be carried in all node communication. The general message includes the following information of a peer node: version number, timestamp, message ID, whether to gossip this message to neighboring nodes or not, node ID, node public key, and node data signature. The main function of a general message is to verify the node's identity and data signature. The general message protocol design is as follows:
Write data message protocol
The write data message protocol describes how a node writes its own data to another node, including request and response message formats. The write data message protocol is defined as follows:
WritefileResponse
defines the data offset of writing, which enables breakpoint and continuation setup in the writing process. As long as the peer informs the writer about the offset in WritefileResponse
message, the writer can start writing from the position specified by the offset, without having to start writing from the starting position every time.
Read data message protocol
The read data message protocol describes how a node reads the desired data from another node, including request and response message formats. The read data message protocol is defined as follows:
ReadfileRequest
defines the data offset of reading, which enables breakpoint and continuation setup in the reading process. As long as the reader informs the peer about the offset in ReadfileResponse
message, the peer can start reading from the position specified by the offset.