高飞狗:

“高飞的白鹭浮水的鹅,唐诗里有画…”

布鲁托:

“高飞狗,又在做你的高飞梦哪!”

高飞狗:

“哈罗,布鲁托,这几天好郁闷呐!”

布鲁托:

“遇到什么烦心事了?”

高飞狗:

“最近在做几个物联小项目,遇到了一个共同的问题。”

布鲁托:

“有项目做,就离发财不远了,你啃完骨头,别忘了把肉留给我!”

高飞狗:

“没事做着急,有事做不出来,哪有心思又啃又吃!”

布鲁托:

“到底遇到什么问题了?”

高飞狗:

“是酱紫的,我的一台主机设备管理并存储着1000台从机设备的各种数据,也就是有1000套数据存储在主机设备中,我的上位机狗狗要从主机设备中读取这1000套数据。我就为这事郁闷呐!”

布鲁托:

“这有什么难的,上位机狗狗发1条命令,主机设备上传1套数据;上位机狗狗发1000条命令,就能得到全部数据。”

高飞狗:

“你脑残哪!那不得把我的上位机狗狗活活累死,等到猴年马月才能把数据传送完毕!”

布鲁托:

“要么上位机狗狗只发1条命令,主机设备就一口气把1000套数据全部上传过来?”

高飞狗:

“你是鳄鱼脑啊!如果传送途中受一点点干扰,整个1000套数据就得重传。”

布鲁托:

“那你有什么好法呢?”

高飞狗:

“我的方法比你聪明些,就是上位机狗狗只发1条命令,主机设备就一口气把1000套数据全部上传过来,但是1套数据是一个独立的数据包,数据包带有CRC校验和。传送途中哪个数据包受到干扰,就只需重传哪个数据包。”

布鲁托:

“高飞,你真是聪明绝顶!那你还郁闷啥呢?”

高飞狗:

现在遇到一个头疼了好些天的问题,就是当主机设备连续发送1000个包时,或者说上位机狗狗连续接收多个数据包时,上位机狗狗经常晕头转向,搞不清哪一堆数据属于同一个包,还经常把一堆分属于2个包的连续数据误以为一个包。如此,后果不堪设想,我都快崩溃了!

布鲁托:

“瞧你这模样,是够痛苦的! 对了,咱们不妨找找你的黛丝姐姐,她是这方面的行家里手。”

高飞狗:

“我也不是没打过这个念头,可你也知道,我跟她之间的那点事…,如今人家是博士了,哪瞧得上我呀!”

布鲁托:

“常言道,不耻下问,以前你是荒淫无度,如今改邪归正,没准你们俩的事还会因此转机呢!”

高飞狗:

“到如今,也只好硬着头皮、厚着脸皮了,要么你陪我走一趟,顺便敲敲锣边,给我打打气,灭灭她的威风?”

高飞狗和布鲁托来到了黛丝的家门口。“叮铃铃…叮铃铃…”

黛丝:

“谁呀? 哎呀!稀客稀客,布鲁托,好久不见,什么风把你吹我这来了?快请进”。

高飞狗夹着尾巴想趁势溜进去。

黛丝:

“哎哎哎,你是谁呀?谁让你进来啦!”

布鲁托:

“黛丝姐姐,今天我有要事请您帮忙和指教,我自己一个人上你家显然不合适,就要高飞陪我过来啦。”

黛丝冲着高飞:“哼!”

高飞垂头无语。

黛丝:

“布鲁托,您别这么客气,咱们是发小,有事只管直说,什么指教不指教的。我先给您沏杯咖啡。”

布鲁托把事情经过说了一遍。

黛丝:

“原来是这事,虽说我是个博士,也就昨天才学的,今天在你这就用上了,真的成了现学现用现卖了!”

布鲁托:

“您太谦虚了!”

黛丝:

“当连续发送和接收多个数据包时,通常每个数据包都有明确的包头和包尾标识,上位机狗狗一眼就能认出来。如此,无论连发多少个包,上位机狗狗都不会晕头转向。”

布鲁托:

“包头和包尾标识用什么表达?”

黛丝:

“比较经典的做法是,包头和包尾均用1字节0x7E表达。我画个图您就明白了。”

高飞狗伸长了脖子看黛丝画图。

黛丝:

“看什么看!小心你的狗头!”

高飞狗:

“那如果包内数据有0x7E的话,接收时就会被当做包尾标识,从而错误地识别包了。”

黛丝:

“布鲁托,你这个问题提得好!”

布鲁托

“啊哦!这是高飞提的问题。”

黛丝:

“啊哦!是这样,如果包内数据有0x7E的话:

在发送时就替换为0x7D 0x5E,这叫做stuffing。

在接收时,如果发现0x7D,就丢弃0x7D并将其后的0x5E替换为0x7E,这叫做destuffing。

经过stuffing处理,0x7E只会出现在数据包头和包尾。

经过destuffing处理后,数据及其包长就恢复为原始数据了。”

高飞狗:

“那如果包内原始数据就有0x7D,接收时岂不就会错误地进行destuffing了?”

黛丝:

“这个问题提得非常好!”

“如果包内原始数据就有0x7D:

在发送时就替换为0x7D 0x5D,这也叫做stuffing。

在接收时,如果发现0x7D,就丢弃0x7D并将其后的0x5D替换为0x7D,这也叫做destuffing。

经过stuffing处理,原始数据0x7D变为0x7D 0x5D后发送。

经过destuffing处理后,数据及其包长就恢复为原始数据了。”

高飞狗:

“发送时数据7E变7D 5E,数据7D变7D 5D,接收时要做逆向处理,脑子都乱了,有没有简单的方法进行变换?”

黛丝:

“这个问题提得非常好!有个简单的招!”

“在发送时,包内数据遇到7D/7E,就插入7D,然后将7D/7E与0x20异或,就成了5D/5E。”

“在接收时,遇到7D,就将其丢弃,然后将其后面的5D/5E与0x20异或,就恢复为数据7D/7E”。

高飞狗:

“嗯,这个算法简单多了! 亲爱的,这是你的原创吗?”

黛丝:

“谁是你的亲爱的!我哪有你能耐!”

“今天我说的方法其实在网络通信中早已普遍应用,是国际标准,称为HDLC。更具体的相关内容你们可以在网上搜搜。”

布鲁托

“高飞,你听明白了吗?”

高飞狗:

“明白了,我回去后马上修改上位机狗狗程序。”

黛丝:

“布鲁托,你 你 你们俩…”

童话故事 --- 通信协议之 HDLC 浅析的更多相关文章

  1. http协议和web应用有状态和无状态浅析

    http协议和web应用有状态和无状态浅析 (2013-10-14 10:38:06) 转载▼ 标签: it   我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的 ...

  2. 简述移动端IM开发的那些坑:架构设计、通信协议和客户端

    1.前言 有过移动端开发经历的开发者都深有体会:移动端IM的开发,与传统PC端IM有很大的不同,尤其无线网络的不可靠性.移动端硬件设备资源的有限性等问题,导致一个完整的移动端IM架构设计和实现都充满着 ...

  3. 多平台下Modbus通信协议库的设计(一)

    1.背景 1.1.范围 MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议, 它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信. 自从 1979 年出现工业串行链路的事实标准以 ...

  4. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  5. 浅析ARM公司在物联网领域的战略布局

    From: http://www.cnblogs.com/yefanqiu/p/3447769.html 浅析ARM公司在物联网领域的战略布局 随着ARM芯片的出货量越来越多,自信满满的ARM公司统一 ...

  6. protobuf 协议浅析

    目录 Protobuf 协议浅析 1. Protobuf 介绍 1.1 Protobuf 基本概念 1.2 Protobuf 的优点 1.3 Protobuf, JSON, XML 的区别 2. Pr ...

  7. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  8. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

随机推荐

  1. 慕课网视频破解付费分享-前端开发-Python等

    微信小程序 慕课网   BAT大牛经验总结全面深入解读Android面试   前端JS基础面试技巧   vue2.0+node.js+mongodb全栈打造商城   Vue.js高级实战-开发移动端音 ...

  2. Linux_window与linux之间文件互传,上传下载

    window与linux之间文件互传 运行环境:Centos os7 + win8.1 +putty putty:是一个Telnet,ssh,rlogin,纯tcp以及串行接口连接软件,由于linux ...

  3. 手机设备访问PC页面如果跳转到手机页面?

    //例如:iphone访问www.baidu.com自动跳转到wap.baidu.com,只需在pc端模版页面引入以下js代码//pc zhuan mobile var mobileAgent = n ...

  4. 团队作业10——复审与事后分析(Beta版本)

    Deadline: 2017-6-13 22:00PM,以博客发表日期为准 评分基准: 按时交 - 有分,检查的项目内容为后文的两个方面 Beta阶段项目复审(单独一篇博客) 事后诸葛亮分析报告(单独 ...

  5. 【1414软工助教】团队作业5——测试与发布(Alpha版本) 得分榜

    题目 团队作业5--测试与发布(Alpha版本) 作业提交情况情况 所有团队按时提交. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 团队作业1 ...

  6. 团队作业8——第二次项目冲刺(Beta阶段)(冲刺计划)

    Beta阶段冲刺计划 Alpha冲刺暂时告一段落,项目现在也有个了大体框架,当然还是有很多漏洞,在接下来的Beta冲刺中尽量完善,希望最后能有一个好的结果. 新成员介绍 何跃斌:掌握java.c的基本 ...

  7. 201521123095《java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结上课内容. 对于一个系统中,对于名词大多为类或属性,对于动词大多为方法. 1.3 注释的应用 使用类的注释与 ...

  8. Spring security csrf实现前端纯html+ajax

    spring security集成csrf进行post等请求时,为了防止csrf攻击,需要获取token才能访问 因此需要添加 <input type="hidden" na ...

  9. SpringMVC第二篇【过滤编码器、注解开发、requestMapping、业务方法与传统参数】

    SpringMVC过滤编码器 在SpringMVC的控制器中,如果没有对编码进行任何的操作,那么获取到的中文数据是乱码! 即使我们在handle()方法中,使用request对象设置编码也不行!原因也 ...

  10. JSP获取Cookie对象

    cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器的.通过使用cookie可以标识用户身份,记录用户和密码,跟踪重复用户等.浏览器将cookie以key/value的形式保存到客户机的某 ...