文本协议与二进制协议的选择

进行网络通讯时,咱们常常纠结于到底使用什么样的协议传输数据,下面我谈谈应该怎么选择一种合理的协议格式。安全

网络协议

标准定义是这样的:网络

为计算机网络中进行数据交换而创建的规则、标准或约定的集合。ide

网络协议至少包括三要素:ui

语法:语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。加密

语义:解释控制信息每一个部分的意义。它规定了须要发出何种控制信息,以及完成的动做与作出什么样的响应。spa

时序:时序是对事件发生顺序的详细说明。计算机网络

人们形象地把这三个要素描述为:语义表示要作什么,语法表示要怎么作,时序表示作的顺序。设计

通俗地说,协议就是通讯双方可以理解的一种数据格式。调试

在进行网络开发中,文本协议和二进制协议是咱们最经常使用的两种。每每要根据这两种协议的特色进行选择,那么咱们先来看下这两种协议分别具备什么特色。事件

文本协议

文本协议通常是由一串ACSII字符组成的数据,这些字符包括数字,大小写字母、百分号,还有回车(\r),换行(\n)以及空格等等。

文本协议设计的目的就是方便人们理解,读懂。因此,协议中一般会加入一些特殊字符用于分隔,好比以下数据:

!set chl 003#

其中,以!标识命令的开始,#标识命令结束,空格用来分隔命令字段,虽然咱们不知道这条命令具体干什么,但经过字面咱们大体知道多是设置(set)某一个参数(chl)值为003,这样在咱们进行调试的时候,能够快速准确地看到当时发生了什么,更好地解决问题。

但为了便于解析,文本协议不得不添加一些冗余的字符用于分隔命令,下降了其传输的效率;并且只适于传输文本,很难嵌入其余数据,好比一张图片。

二进制协议

二进制协议就是一串字节流,一般包括消息头(header)和消息体(body),消息头的长度固定,而且消息头包括了消息体的长度。这样就可以从数据流中解析出一个完整的二机制数据。以下是一个典型的二进制协议:

其中,Guide用于标识协议起始,Length是消息体Data的长度,为了数据完整性,还会加上相应的校验 (DataCRC,HeaderCRC);Data中又分为命令字(CMD),和命令内容。命令字是双方协议文档中规定好的,好比0x01表明登 录,0x02表明登出等,通常数据字段的长度也是固定的。又由于长度的固定,因此少了冗余数据,传输效率较高。

总结

综上,咱们大体总结文本协议和二进制协议的优缺点:

文本协议,直观、描述性强,容易理解,便于调试,缺点就是冗余数据较多,不适宜传输二进制文件(好比:图片等),解析复杂(须要进行字符串比较);

二进制协议,没有冗余字段,传输高效,方便解析(固定长度,而且能够直接比较字节),缺点就是定义的比较死,哪一个位置有哪些东西,是什么意义是定义死的,场景单一。

因此,

1. 若是想要高效传输,好比物联网中收集传感器数据,使用二进制协议

2. 若是想要便于调试,好比使用telnet就能当客户端用,可以使用文本协议

3. 若是命令较少,好比即时通信软件,可使用文本协议

4. 二进制数据的难理解性,天然加密,对数据安全有必定要求的可使用二进制协议

等等。

总的来讲,这是一个平衡的过程,要看具体项目的须要。

相关文章
相关标签/搜索