通知:欢迎光临,有建议或发现bug,点此留言
首页> VIP文章> 云平台开发架构分析系列5:数据包的处理逻辑分析2(数据包拆包实现思路)

云平台开发架构分析系列5:数据包的处理逻辑分析2(数据包拆包实现思路)

2017-06-21 08:56:15 阅读:199 会员文章,禁止转载
简介本篇继续深入数据包的处理逻辑分析,主要分析了几种常见的数据包拆包方式,满足粘包数据包拆包、截断数据包的处理,最大化降低数据包的丢弃处理。
    C++性能强大,而Python开发高效。C++与Python强强联合,一起征战世界!
    Python技术网
Python技术网
是C++技术网的官方兄弟网站,安全可靠,一起学习C++和Python吧。告诉你一个好消息:打开支付宝,搜索【514124385】可领红包哦,最高99元!!!,每天都可领。
    在文章《云平台开发架构分析系列4:数据包的处理逻辑分析1》中,我已经将数据包处理的整体思路分析了。现在开始对数据包处理的关键细节实现思路进行分析。
    对于数据包处理最复杂的地方就是对数据包的拆包处理。我们要将粘包的多个包(连续完整的多个或者有被截断的包)正确的拆分出来,是一项稍微麻烦的事情。我们要准确拆分出来,还要将截断的数据包前后拼成完整的包。否则处理不好,就会出现数据包丢失的问题。
    至于验证数据包的合法性,也就是针对数据包对应的业务协议格式进行各个字段的检测而已。所以这里就没有什么好说的,每一个协议不一样,检验方法也不相同。不过有一点需要说的是,协议数据是一段字节流,解析协议也就是将一段字节流按照协议定义的格式,挨个的划分出各字段,然后再确定各字段的值和所代表的意义是否是有效的。比如一个字段的标志固定为0xFF,如果此字段的值不是这个,那么这个数据包就无效。如果一个字段表示数据包整个长度为100字节,而数据包却只有50字节或者120字节,那么这就需要进行额外的处理,缓存或丢弃。
    而我们的数据包的拆包,也是要基于协议的标志进行的。具体如何拆,不同的协议有所不同,我们也没有办法用实例的说明。我就说个思路,仅供参考。
    如果说要正确拆包,那么我们就需要正确识别包的开始和结束。所以我们至少要知道数据包的开始标志。这也是各种协议需要的开始标志字节序列的原因。如果不是这样,那么就是其他各种手段确保能够识别包头的。因为我们使用的是TCP协议传输字节流。我们很难字节包装每次接受的都是我们自己定义的一个完整的业务协议数据包,所以我们不能用某种办法控制数据包的发送,或者很难控制。而我们用起始字节序列作为开始,显然也就方便多了。
    那么我们识别包头,也就是从这个开始标志字节序列开始的。我们假设这个开头是0xAA0xFF,那么我们在接受到客户端发送过来的一段原始数据的时候,从头开始搜索开头字节序列,如果搜索到了,自然也就找到了开头,定位到了一个数据包的开始。
    那么向后我们如何确定数据包的结尾呢?这里我们要说到协议的第二个非常重要的字段,那就是数据包的长度。我们知道数据包的长度我们才更好的确定数据包的结束。如果没有数据包长度的字段,将会让解析数据包和校验数据包以及拆分数据包带来极大的困难。当然,如果使用结束标志呢?那就和数据包长度的功能差不多了。因为这两个都是来确定数据包的结尾的和长度的。不过很多时候,我们使用数据包长度显得更加方便。
    那么确定数据包结尾的方法大致有几种:
1.结尾标志
2.数据包长度
3.下一个开始标志
    对于前两种,我们很好理解。然而第三种,我们也是可以用到的。我们来分别说说这三种方式对应的拆包思路吧。
登陆系统,查看更多
会员文章,禁止转载

阅读排行

  • C++获取硬盘序列号、主板序列号、CPU序列号、BIOS序列号和MAC地址

    我们可以获取硬盘序列号、主板序列号、CPU序列号、BIOS序列号和MAC地址。通过这些信息,我们基本可以唯一确定一个计算机。本文使用C++获取硬盘序列号、主板序列号、CPU序列号、BIOS序列号和MAC地址。

  • VS插件VisualGDB破解版下载、安装和使用说明

    VS插件VisualGDB支持直接在VS编译调试Linux代码,本文提供VisualGDB破解方法、安装和使用说明。让Windows程序员顺利开始写Linux代码。

  • 图解说明什么是路由表,分分钟明白路由表是什么

    本文深入详细图文并茂的全面介绍了路由表的本质,让你深刻认识路由表,并且是站在编程的角度来解释路由表的,这样能够让你更加准确的了解,对于程序员学习是大大有益的,不会出现读死书的弊病。同时介绍了重启路由器加快上网速度的原理,也就是清空路由表提高上网速度。

  • Win32实现在窗口贴图,Win32设置窗口背景

    使用MFC我们设置窗口背景的方法其实和Win32差不多,不过,虽然你会MFC设置窗口背景,然而切换到Win32环境,不一定会哦。然而你会Win32环境下的实现,MFC也是分分钟的事情。美女背景图片设置就这么实现了哦。

  • VS工程项目相关文件讲解8:vcxproj.filters文件分析

    详细了解vcxproj.filters文件后,你可以在你的解决方案管理器中按照你自己的分类习惯对文件进行分类。每种类别都以文件夹的形式存放,当然只是在解决方案管理器中显示而已。虽然可以在VS中直接操作,但是了解内部实现机制有时候会给我们直接操作带来很多好处,比如批量操作。

猜您感兴趣