document protocol header
This commit is contained in:
parent
8647b0435a
commit
bae3a6a397
45
docs/protocol.md
Normal file
45
docs/protocol.md
Normal file
@ -0,0 +1,45 @@
|
||||
# sdlan交互协议
|
||||
sdlan协议的总体格式如下:
|
||||
|
||||
```
|
||||
+---------+-------------------+----------+
|
||||
| 消息头 | 四字节的消息体长度 | 消息体 |
|
||||
+---------+-------------------+----------+
|
||||
```
|
||||
|
||||
## 消息头
|
||||
在sdlan中,有一个common头使用二进制协议,消息头主要包含了协议版本,消息来源id(从哪个节点发出的节点标识),消息ttl,以及一些协议的flag(flag标志以后可以扩充)
|
||||
|
||||
消息头二进制格式如下:
|
||||
|
||||
```
|
||||
+---------+---------+----+-----+------+
|
||||
| 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化之后的具体的消息结构体。
|
||||
Loading…
x
Reference in New Issue
Block a user