欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

网络传输粘包的处理 博客分类: java

程序员文章站 2024-02-18 22:40:10
...

粘包产生的原因

1.发送端数据由于nagle算法,将多个业务数据包压成一个TCP包发送

2.接收端数据缓冲区读数据一次读入了多个包的数据

 

拆包产生原因:

1.发送端由于消息超过了MSS(最大报文段长度)限制大小被拆成多个TCP报文发送

2.接收端数据缓冲区一次读入了非整数个包的数据

 

处理粘包或者分包的策略基本就两种:

1.每个数据前后加特殊字符,比如ftp方式,这样方式容易出错,如果数据本身含有特殊字符就会发生分隔错误

2.业务数据加业务协议头标识业务数据的长度,在读取的时候能够确定向后读取数据的长度作为一个业务数据的边界

 

业务消息的可靠性

TCP协议保证了传输层的可靠性,如何保证业务处理层的可靠性?request-respone方式或者类似fix协议一样的业务层协议