何为 TCP 拆包粘包问题,Netty又是如何帮我们解决它

本文详细探讨了TCP协议中的拆包和粘包现象,分析了其产生的原因,包括滑动窗口和TCP包大小限制,并介绍了Netty如何通过不同解码器策略解决这些问题。内容涵盖定长报文、特殊分隔符和报文头+报文体等协议设计。最后,文章提及自定义解码类和Netty对多种协议的内置支持。

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

粘包和拆包现象

在网络通信中,客户端向服务端发送两个数据包,C1 和 C2 如下图:

站在客户端的角度,它是发送了两个不同的数据包。但是从服务端接受数据的角度来看就不一定了。可能出现的情况有三种。

第一种也是最符合直觉的,服务端按照客户端发送的顺序收到了数据包:D1 和 D2。

第二种,服务端第一次读取数据时读到了 D1 的一部分,再次读取时读取到了 D1 的剩余部分,第三次读取,读取完毕了D2。

用图来表达就是:

第三种,服务端读取一次数据,就完全读取到了 D1 和 D2。就如下图:

以上的第二种现象被称之为拆包,也就是一个完整的业务数据包被拆分到多次 Socket 读取的结果中。而第三种先想想被称之为粘包,也就是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值