博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通信协议中的转义字符【转】
阅读量:7119 次
发布时间:2019-06-28

本文共 987 字,大约阅读时间需要 3 分钟。

转自:

通信协议中的转义符

作用:在通信协议中用在协议中使得通信的内容更加安全可靠。

举例说明:假设现在需要定制一个通信协议,需要的最基本的就是一个帧头和帧尾的标志,因为通信的接收方才知道什么时候是通信的开始和结束。

那么假设帧头(通信的开始)为0x02(也可以是其他),帧尾为0x03(也可以是其他),粗略的一看是没有问题的,

但是试想如果在帧头和帧尾的中间数据出现0x02或者0x03的时候整个通信过程将会被破坏掉,因为本来一帧数据还没有传输完成,接收方误以为接收到帧头或者帧尾就会重新开始接收数据(导致前面已经接收的数据丢失)或者结束接收数据(导致后面的数据无法接收)。理论上来讲帧头和帧尾无论定义为什么字符都会可能出在通信数据中,因为我们不应该对用户传输的通信数据做出任何的假设。那么如何解决这个问题呢?

 

转义字符就是用来解决这个问题的,先看下面的这张图片:

STX is short for "start of text"

ETX is short for "end of text"

ESC is short for "escape character"

图片解释:

如果包体中出现0x02就转换成 0x1B 0xE7

如果包体中出现0x03就转换成 0x1B 0xE8

如果包体中出现0x1B就转换成 0x1B 0x00

 

这张图片中再加入了一个字符即0x1B,这个字符被定义为转义字符(也可以设置为别的),加入这个字符后的传输过程变为,0x02+用户数据+0x03,

但是在用户数据中如果出现0x02即被替换为0x1B+0xE7,如果出现0x03即被替换为0x1B+0xE8,这样用户数据中就绝不会再出现0x02和0x03。

但是万一用户要传输的数据就是0x1B+0xE7呢?这也没有关系,因为如果用户要传输的0x1B也会被转义为0x1B+0x00,

所以假设用户真的需要传输0x1B+0xE7的话也被0x1B+0x00+0xE7所替代,也不会造成干扰。

 

 

这样做的结果是在接收端如果接收到转义字符,就必须要判断下一个字符是否为特定的三个值,如果是特定的三个值就需要做特殊处理,这就是转义字符解决通信中防止通信错误的原理。

 

作者:卢俊涛(ChuckLu)

转载于:https://www.cnblogs.com/sky-heaven/p/9810002.html

你可能感兴趣的文章
Linux下清空回收站
查看>>
XenMotion 与HA的区别
查看>>
修改Sql Server 2000数据库名称
查看>>
PHP问题 —— Notice: Undefined index:
查看>>
专业的优化服务,就是为你争取时间!
查看>>
solr安装配置
查看>>
SAS接口互连完全指南
查看>>
Word 2003中打开最近操作过的文档的两种推荐的方法
查看>>
LAMP+LNMP视频教程
查看>>
Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
查看>>
《微服务》九大特性重读笔记
查看>>
肯定赚钱的炒股软件
查看>>
基于嵌入式操作系统VxWorks的多任务并发程序设计(4)――任务间通信A
查看>>
MariaDB 10.0.X中,动态列支持 JSON 格式来获取数据
查看>>
Don’t Worry.Be Scruffy.
查看>>
针对敲诈病毒(WanaCrypt0r2.0)的应对方案
查看>>
tornado和subprocess实现程序的非堵塞异步处理
查看>>
性能压测诡异的Requests/second 响应刺尖问题
查看>>
ACT的摘要可以告诉我们的内容
查看>>
一款开源Office软件---Lotus Symphony在Linux系统下的应用
查看>>