开发网络应用,时常要自己去设计通讯的协议,原来自己被多种多样的协议的格式迷惑,理不清各种各样的协议的联系,查查资料,思考之后,还是理清了,如果,你也有类似的疑惑,你不妨看看
协议的区分的本质(或者说协议的区分的入口点)是在协议的编码的格式
- 文本流编码
- 二进制流编码
- 混合编码
仔细想想,这和文件类型区分的入口点,是一致的
文本流编码
常见的基于文本流编码的网络协议的编码有: XML JSON
这两种具体的语法的规范,不在累述,使用的场景还是非常多的,不只是在网络协议的,在应用的开发中,将文本文件,存储成这两种格式,还是极为普遍
文本流编码的一个不可忽视的的问题是:特殊字符的转义
二进制编码
其实这是网络协议的发展史上,先出现的编码的格式(考虑远古时代的 内存,网络带宽)
基于这种编码的格式,最常见的是 TLV编码(包括基于它的变体)
TLV:你可以理解成
TYPE + LENGTH + VALUE
TAG + LENGTH + VALUE
ID + LENGTH + VALUE
当ID唯一,length 字段就可以省略
成熟通用的二进制格式:
- Protobuf
- thrift
基于这种编码的网络协议的特点
- 解析效率高:主要是因为不需要转义字符
- 编码长度低:主要是因为元数据占用的空间很少
- 不易于实现:但是有很多开源的工具,根据IDL自动生成代码,提高开发效率
- 兼容性高:协议双方可以独立升级
- 可读性差:二进制协议,肉眼很难识别
混合型编码
没用过,不懂,先占坑,后续
参考链接: