Linux系列:TCP粘包、拆包

TCP作为字节流协议,可能发生粘包和拆包现象,导致接收端难以处理数据。粘包是指多个数据包合并成一个,拆包则是数据包被分割。原因包括发送缓存大小、MSS限制等。解决方案包括定长消息、特殊字符分隔、消息头携带长度信息。而UDP基于报文,不存在粘包拆包问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

TCP缓存

粘包、拆包表现形式

TCP粘包/分包的原因

解决方法

UDP是否会发生粘包或拆包的现象呢?


TCP是基于字节流的,虽然应用层和TCP传输层之间的数据交互是大小不等的数据块,但是TCP把这些数据块仅仅看成一连串无结构的字节流,没有边界。

TCP缓存

TCP为什么引入接受缓存这个数据结构?

如果没有接受缓存的话,或者说只有一个缓存的话,为了保证接受的数据是按顺序传输的,所以如果位于x序号之后的序号分组先到达目的主机的运输层的话必然丢弃,这样的话将在重传上花费很大的开销,所以一般如果有过大的序号达到接收端,那么会按照序号缓存起来等待之前的序号到达,然后一并交付到应用进程

当发送缓存溢出后,就出现了我上面提到的丢包,这个问题可以通过增大发送端缓存来缓解这个问题,socketChannel.socket().setSendBufferSize(102400);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NIO4444

如果对您有帮助,欢迎打赏支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值