思维导图:网络通信协议标准化
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维导图:网络通信协议标准化相关的知识,希望对你有一定的参考价值。
网络通信协议标准化
为什么要协议标准化
不约定好协议彼此就不知道对方发送数据的意义
设计目标
- 解析效率:编码长度
- 易于实现
- 可读性
- 兼容性
- 跨平台跨语言
- 安全可靠
设计细节
- 帧完整性判断
- 序列化和反序列化
- 协议升级
- 协议安全
- 数据压缩
协议设计范例(可以学习参考的)
- nginx
- http
- 不适合后台
- 只是个协议框架没指定包体序列化方式要配合其他序列化方式才能传递业务逻辑数据
- 解析效率比较低而且复杂
- 适合的情况
- 对公网用户 api HTPTP 协议的穿透效果最好
- 效率要求没那么高的场景
- 希望提供更多人熟悉的接口
- redis
- 先发送一个字符串表示参数个数
- 然后逐个发送参数
- 先发送一个字符串表示参数的数据长度
- 在发送参数的内容
- 不适合后台
判断包完整性
- 固定大小字节数目来分界
- 特定符号分界,例如\\r\\n
- 固定包头+包体结构(header + body)
- 先接收固定字节数的头部,解出这个包完整长度,按次长度接收包体
- 序列化后的 buffer 前加一个字符流的头部,有个字段存储包总长度,根据特殊符号判断头部完整性
- HTTP、REDIS
- 先判断已收到数据是否包含结束符
- 收到结束符后解析包头,解出这个包完整长度,按此长度接收包体
序列化方法
- TLV 结构编码
- protobuf
- 独立、轻量级
- 二进制结构存储
- varint + zigzag 负数编码优化
- 文本流编码
- XML
- 通用、重量级
- 文本存储
- JSON
- 通用、轻量级的数据交换结构
- 以文本存储
- 方便调试
- XML
- protobuf
- 固定结构编码(协议约定字段类型和含义,TCP/IP)
- 内存 dump:内存直接输出不序列化,反序列化也直接还原内存
协议安全
- xxtea 固定 key
- AES 固定key
- openssl
- Signal protocol:端到端通讯加密协议
数据压缩
可以对文本进行压缩,缓解带宽问题
- deflate ngix
- gzip
- lzw
协议升级
- 支持协议头部可扩展:增加一个字段来指定头部长度
- 区分版本号:增加版本号字段
以上是关于思维导图:网络通信协议标准化的主要内容,如果未能解决你的问题,请参考以下文章