关于TCP粘包问题

在TCP的socket编程中,发送端为了更加高效的把数据发给接收端,将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么接收端就必须使用高效科学的拆包机制来分辨这些数据。否则就会造成粘包问题。

1.什么是TCP粘包问题?

TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾。

3.什么时候需要处理粘包现象?

如果多个分组毫不相干,或者发送的多组数据本来就是同一块数据的不同部分,就一定要处理粘包现象

3.造成TCP粘包的原因

发送方原因:TCP发送机制可能会造成粘包

  1. 只有上一个分组得到确认,才会发送下一个分组
  2. 收集多个小分组,在一个确认到来时一起发送

接收方原因:TCP将接收到的数据包保存在接收缓存里,然后由应用程序主动从缓存读取。如果TCP接收数据包的缓存速度 大于 应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。

4.如何处理粘包现象?

发送每条数据时,将数据的长度一并发送,例如规定数据的前4位是数据的长度,应用层在处理时可以根据长度来判断每个分组的开始和结束位置。应用程序从接收缓存中读取分组时,读完一条数据,就应该循环读取下一条数据,直到所有数据都被处理完成

5.UDP会产生粘包问题吗?

TCP基于流的传输,而UDP面向消息传输,是有保护消息边界的,接收方一次只接受一条独立的信息,所以不存在粘包问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值