document protocol header

This commit is contained in:
asxalex 2024-02-17 11:01:32 +08:00
parent 8647b0435a
commit bae3a6a397
2 changed files with 46 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# sdlan rust版本

45
docs/protocol.md Normal file
View File

@ -0,0 +1,45 @@
# sdlan交互协议
sdlan协议的总体格式如下
```
+---------+-------------------+----------+
| 消息头 | 四字节的消息体长度 | 消息体 |
+---------+-------------------+----------+
```
## 消息头
在sdlan中有一个common头使用二进制协议消息头主要包含了协议版本消息来源id从哪个节点发出的节点标识消息ttl以及一些协议的flagflag标志以后可以扩充
消息头二进制格式如下:
```
+---------+---------+----+-----+------+
| version | id的长度 | id | ttl | flag |
+---------+---------+----+-----+------+
```
其中version占用一个字节用于标识协议版本id长度占用一个字节用于表示后面id的长度后面的id用于唯一标识某个客户端长度在256以内这里不固定长度而使用一个字节的id长度标识方便以后兼容长度不同的情况之后的ttl占用一个字节当ttl为0则直接丢弃该数据包。最后的flag占用2字节这两个字节分布如下
```
+----------------+------------+
| 9 bit | 5 bit |
+----------------+------------+
```
前面9bit用于标识数据包目前拥有的标识如下
* `from_sn`: `0xffe0 & 0x0020`,表示这个数据包是从服务端发送过来的。
* `socket`: `0xffe0 & 0x0040`表示这个数据包里面包含了socket信息待定因为后面实际的数据包使用了json这个标识应该没用了
后面5bit表示数据包类型至多可以表示32种不同的数据包类型。
## 消息体
在消息头之后,消息体格式如下:
```
+------------------+--------------------+
| 四字节的消息体长度 | json化后的消息体 |
+------------------+--------------------+
```
紧接着消息头是四字节的消息体所以json化之后的消息体最大长度为$2^32$之后是json化之后的具体的消息结构体。