TCP粘包的原因及解决办法

TCP粘包是指发送方发送的多个数据包到接收方后粘连在一起,导致数据包不能完整的提现发送的数据。问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

1. 粘包出现原因

硬核图解|tcp为什么会粘包?背后的原因让人暖心

出现粘包现象的原因有很多方面,它既可能由发送方造成的,也可能是由接收方造成的。

1.1 发送方原因

发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,默认采用Nagle算法,发送方往往要收集到足够多的数据后合并相连的小数据包,才发送一包数据,这样接收方就收到了粘包数据。但接收方并不知晓发送方合并数据包,并数据包的合并在TCP协议中是没有分界线的,就会导致接收方不能还原其本来的数据包。

1.2 接收方原因

TCP是基于“流”的。网络传输数据的速度可能会快过接收方处理数据的速度,这时候就会导致,接收方在读取缓冲区时,缓冲区存在多个数据包。在TCP协议中接收方是一次读取缓冲区中的所有内容,就不能反映原本的数据信息。

1.3 粘包情况有两种:

一种是粘在一起的包都是完整的数据包;一种是粘在一起的包有不完整的包;

不是所有的粘包现象都需要处理,如果传输的数据为不带结构的连续流数据(如文件传输),就不必把粘连的包分开(简称分包)。但实际工程应用中一般为带结构的数据,这时就需要做分包处理。

特别是粘在一起的包有不

猜你喜欢

转载自blog.csdn.net/weixin_40209493/article/details/129310100