【粘包和拆包】数据帧粘包和拆包处理方式

本文介绍了TCP网络通信中的粘包和拆包现象,包括发生的原因、识别帧头帧尾的方法以及如何通过缓存解包、分包与拆包来处理。提到在单片机通信中,可以通过帧头+帧长度、时间间隔或特殊字符串来识别帧,并讨论了在二进制协议中防止粘包的策略。
摘要由CSDN通过智能技术生成

同事定义了一个二进制协议格式如下

帧头+帧长度+……

但是没有看到有数据内包含与帧头一样的数据时如何转译的说明,所以我就有疑问如何避免粘包或多帧合并发送时怎么拆包?
对方回答:
我们实际上会在缓存解包,分包与拆包,不会出现大量粘包现象的。
问题来了,我不太理解他说的:“在缓存解包,分包与拆包” 是什么意思? 是如何识别帧头帧尾,分包拆包的?

发帖咨询后得到了网友ba_wang_mao的热心回复,而且非常详细启发很大:

粘包和拆包发生的场合

 1、一般只有在TCP网络上通信时才会出现分包与折包,单片机串口通信时,只要两帧报文之间发送的时间间隔大于一定值(例如:100毫秒),就不会出现分包和折包。

什么是分包与拆包呢?
      假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。
       (1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;
       (2)服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包;
       (3)服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值