【二进制协议和文本协议的区别详解】

9 篇文章 0 订阅
7 篇文章 0 订阅

前言

各位小伙伴们 我一开始不能区分二进制协议和文本协议的区别,是因为我想电脑在传输的过程中,应该传输的就是二进制的数据啊,那文本协议是要传输abcd这类的字符吗?是我理解错了:其实无论是文本协议还是二进制协议,数据从a电脑传到b电脑的过程,传输的数据都是二进制的也就是0和1,那什么是文本协议什么是二进制协议呢

1.介绍协议前先了解一下浏览器请求消息的一般格式

在网络传输中HTTP协议非常重要,该协议规定了客户端和服务器端请求和应答的标准HTTP协议能保证计算机正确快速地传输超文本文档,并确定了传输文档中的哪部分,以及哪部分内容首先显示(如文本先于图形)等。

根据HTTP协议的规定,客户端发送一个HTTP请求到服务器的请求消息,由请求行,求头部、空行以及请求数据四部分组成。如下图所示所示为请求消息的一般格式
在这里插入图片描述

2.二进制协议和文本协议的区别详解

二进制协议
二进制协议就是一串字节流,使用的是BINARY模式(二进制传输)进行传输,通常包括消息头(header)和消息体(body),消息头的长度固定,并且消息头包括了消息体的长度。这样就能够从数据流中解析出一个完整的二进制数据
如下是一个典型的二进制协议结构图:
在这里插入图片描述

举例:

比如我们现在向服务端发送一条消息,内容是个人介绍:Name=“小明”,Age=22" Data=“我是人类”

**二进制协议的做法是:**客户端 告诉 服务端 定制的协议的结构:比如客户端说 我给你发上去结构是,先来字符串(多长)的名字,然后再来int类型的年龄,然后在发字符串(多长),你就按照这个结构从流解释得到的二进制数据就行

优点:

空间占用小(包括内存,带宽等)
运算规则简单(如加密就方便)(毕竟来来回回就0和1)
可靠性高(不是0就是1,还有校验和等技术实现验证。文本协议与之对应的就是数字签名)
部分技术场景实现方便(典型的底层硬件,如传感器。因为底层本就是0和1构成的数据,不需要转换)

缺点:

可读性差(由此延伸出记忆困难等问题,毕竟位数太多了,还全是0和1,就是机器码啊。所以协议的每条命令都要有对应的文档进行细致说明,包括二进制文件采用的是哪种编码方式等)
扩展性差(并不是不可以进行消息的扩展,而是已经确定的数据解析顺序,是不可以改变的)
无法跨处理器(据说是由于严格的内存到对象的转换。个人的理解是,由于不同处理器架构存在数据存储的大端小端问题而导致的。)

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

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

!set chl 003#

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

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

举例
比如我们现在向服务端发送一条消息,内容是个人介绍:Name=“小明”,Age=22" Data=“我是人类”
文本协议的做法是:客户端不需要和服务端定什么结构,比如json:{Name=“小明”,Age=22" Data=“我是人类"},客户端就把这个一串变成二进制发过去(0和1),哪有人就会问,那服务端要怎么知道解析这一串数据显示出来呢
那肯定是json被转化成二进制数据的时候,json自己根据拿到的文本数据做了结构,然后吧这个结构的信息也变成二进制的数据发给服务器,只要服务器那边用json解析就可以了

区别
二进制协议 BINARY模式(二进制传输):binary模式不对数据换行进行任何处理
同一个数据转化成,二进制协议的数据量相比文本协议的要小,因为不需要包含 定义数据的结构信息
文本协议 ASCII模式(文本传输: asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r,unix系统下行结束符是一个字节,即十六进制的0A,而ms的系统是两个字节,即十六进制的0D0A。所以二进制传输方式要比文本传输方式要快,不用去定义数据的传输结构,省下了开发时间
————————————————
版权声明:本文为CSDN博主「Bug智造机」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_55656404/article/details/125500117

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值