广州C/C++培训
达内广州岗顶中心

18087159764

热门课程

C语言培训揭晓云计算数据包拆包思路

  • 时间:2017-06-21
  • 发布:广州C++培训
  • 来源:博客园

广州c++培训小编:对于数据包处理最复杂的地方就是对数据包的拆包处理。我们要将粘包的多个包(连续完整的多个或者有被截断的包)正确的拆分出来,是一项稍微麻烦的事情。我们要准确拆分出来,还要将截断的数据包前后拼成完整的包。否则处理不好,就会出现数据包丢失的问题。

至于验证数据包的合法性,也就是针对数据包对应的业务协议格式进行各个字段的检测而已。所以这里就没有什么好说的,每一个协议不一样,检验方法也不相同。不过有一点需要说的是,协议数据是一段字节流,解析协议也就是将一段字节流按照协议定义的格式,挨个的划分出各字段。

然后再确定各字段的值和所代表的意义是否是有效的。就比如达内广州计算机培训中讲到的一个字段的标志固定为0xFF,如果此字段的值不是这个,那么这个数据包就无效。如果一个字段表示数据包整个长度为100字节,而数据包却只有50字节或者120字节,那么这就需要进行额外的处理,缓存或丢弃。

达内软件开发培训

而网络工程师培训小编说过数据包的拆包,也是要基于协议的标志进行的。具体如何拆,不同的协议有所不同,我们也没有办法用实例的说明。我就说个思路,仅供参考。

那么我们识别包头,也就是从这个开始标志字节序列开始的。我们假设这个开头是0xAA0xFF,那么我们在接受到客户端发送过来的一段原始数据的时候,从头开始搜索开头字节序列,如果搜索到了,自然也就找到了开头,定位到了一个数据包的开始。

如果说要正确拆包,那么我们就需要正确识别包的开始和结束。所以我们至少要知道数据包的开始标志。这也是各种协议需要的开始标志字节序列的原因。如果不是这样,那么就是其他各种手段确保能够识别包头的。

因为我们使用的是TCP协议传输字节流。我们很难字节包装每次接受的都是我们自己定义的一个完整的业务协议数据包,所以我们不能用某种办法控制数据包的发送,或者很难控制。而我们用起始字节序列作为开始,显然也就方便多了。

上一篇:中小学接入互联网率达90%
下一篇:三星研发视网膜屏VR一体化设备

达内网络工程师就业薪资

AI到来,那生命3.0时代还远吗?【达内培训】

共享雨伞测试能否成功?——广州达内

编程入门学什么?Facebook智能聊天设备可能明年5月发布

选择城市和中心
贵州省

广西省

海南省