TCP粘包

粘包是什么?

TCP协议在网络编程中应用极为广泛。实现了端对端面向连接的可靠的数据通信。UDP协议同样应用广泛,实现了一对多的无连接的不可靠数据传输。

根据TCP的应用场景,我们把TCP连接分为长连接和短连接:

1.短连接:Client和Server每发送一次报文建立一次连接,在发送报文之后立即关闭该连接。

2.长连接:Client和Server建立通讯连接后不断开,进行多组报文的传输,TCP协议为了提高传输效率,经常会采用优化算法(Nagle算法),对多组间隔时间短,数据量小的报文进行合并发送,这样每条报文之间就失去了消息边界,在接收端难以分辨原来的报文,造成粘包发生。

如何解决粘包问题?

对于发送方使用优化算法造成的粘包,我们可以系通过设置关闭优化算法,但这种方法会降低TCP传输效率,同时也无法避免接受方法再次产生粘包,所以并不是完美的解决方案。

对于接收方,如果接受的速度大于应用处理数据的速度,则在接受方的缓存区里就会形成首尾相接的TCP报文,形成沾包。面对这种情况,可以通过优化接收端处理数据的效率来解决。但这同样不能避免发送方引起的沾包,而且优化接收端处理数据的效率也是有限的,所以这也不是一个完美的办法。

一种相较之下更为妥当的方法是格式化数据的结构,接收端采用一定的规则来解析TCP报文,从而可以较好的解决沾包问题。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值