TCP通信粘包问题分析和解决(腾讯+360+百度)

本文详细分析了TCP通信中粘包产生的原因,探讨了粘包问题在定长和不定长结构数据传输时的不同处理方式,并列举了避免粘包现象的措施。特别指出,通过创建预处理线程进行数据包分离是一种高效可行的解决方案。
摘要由CSDN通过智能技术生成

TCP通信粘包问题分析和解决

一、 粘包出现原因

简单得说,在流传输中出现,UDP不会出现粘包,因为它有消息边界

1、	发送方需要等缓冲区满才发送出去,造成粘包
解释:发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送
方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少
,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就
收到了粘包数据。

2、接收方不及时接收缓冲区的包,造成多个包接收
解释:接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包
现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲
区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据
放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲
区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。

二、 粘包问题分类:

1、	一种是粘在一起的包都是完整的数据包,
2、	一种是粘在一起的包有不完整的包。

不是所有的粘包现象都需要处理,若传输的数据为不带结构的连续流数据(如文件传输),则不必把粘连的包分开(简称分包)。但在实际工程应用中,传输的数据一般为带结构的数据,这时就需要做分包处理。在处理定长结构数据的粘包问题时,分包算法比较简单;在处理不定长结构数据的粘包问题时,分包算法就比较复杂。特别是粘在一起的包有不完整的包的粘包情况,由于一包数据内容被分在了两个连续的接收包中,处理起来难度较大。实际工程应用中应尽量避免出现粘包现象。

三、 为了避免粘包现象&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值