先介绍一下网络通信的过程:通过 HTTP 发出请求,HTTP 的报文被打包在 TCP 的报文段中,然后又被放到 IP 层的数据报中,最后形成链路层的帧,通过网卡发出去。这个过程就是比 OSI 七层模型更符合实际情况的 TCP/IP 五层模型:应用层 <- 传输层 <- 网络层 <- 链路层 <- 物理层。分层的好处是能够隔离变化,在接口不变的情况下,某一层的变化只局限于本层次内。
以下是一个基本的设计思路:
(A)消息头:
协议版本:标识通信双方所使用的协议版本;
消息类型:标识消息的类型,如请求、响应、心跳等;
消息长度:整个消息的长度,包括消息头和消息体;
校验和:防止消息被篡改或损坏,并非加密技术,一般是对整个消息进行一些算法处理后得到,比如 IP/TCP/UDP 生成校验和的规则为:基于反码求和,接收方用相同规则生成后与发送方提供的对比,若不一致,则消息可能已损坏;
时间戳:记录时间。
(B)消息体:
根据消息类型,消息体包含不同的字段,例如:
请求消息:设备 ID、请求的操作码、参数等;
响应消息:操作结果、状态码、数据等。
(C)消息尾(可选):
包含一些额外信息,如签名。