sdlan-rs/docs/protocol.md
2024-02-17 11:01:32 +08:00

46 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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化之后的具体的消息结构体。