上一篇 <<<Netty初识
下一篇 >>>粘包和拆包问题解决方案汇总
什么是粘包和拆包
粘包:多次发送的消息,客户端一次合并读取 Msg Msg=msgmsg
拆包:第一次完整消息+第二次部分消息组合 、第二次缺失的消息 Msg Msg=MsgM sg
粘包和拆包产生的原因
前提长连接、其次缓冲区
Tcp协议为了能够高性能的传输数据,发送和接受时候都会采用缓冲区,必须等待缓冲区满了以后才可以发送或者读取;
1.当我们的应用程序如果发送的数据大于了我们的套字节的缓冲区大小的话,就会造成了拆包。拆分成多条消息读取
2.当我们应用程序如果发送的写入的消息如果小于套字节缓冲区大小的时候,就会造成粘包。
3.接受端不够及时的获取缓冲区的数据,也会产生粘包的问题
4.进行mss(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>mss的时候将发生拆包。
推荐阅读:
<<<OSI七层模型与层上协议
<<<TCP的三次握手建立链接和四次挥手释放链接
<<<TCP、UDP及Socket代码示例
<<<Https的1.0、2.0协议及长短链接区别
<<<Linux系统的五种IO模型
<<<BIO和NIO区别
<<<BIO模型的缺陷
<<<NIO模式的IO多路复用底层原理
<<<select、poll、epoll的区别
<<<Redis为什么单线程能够支持高并发
<<<Netty初识
<<<粘包和拆包问题解决方案汇总
<<<序列化与反序列化知识点汇总
<<<MessagePack反序列化使用示例
<<<Marshalling在Netty中的使用