[TOC]
定义
TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾。
原因
原因可能是发送方也可能是接收方造成的。
发送方原因:TCP默认使用Nagle算法,将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。
接收方原因:TCP将接收到的数据包保存在接收缓存里,然后应用程序主动从缓存读取收到的分组。这样一来,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。
如果多个分组毫不相干,甚至是并列关系,那么这个时候就一定要处理粘包现象了。
处理方法:
1.发送方关闭Nagle算法。
2.接收方:接收方没有办法来处理粘包现象,只能将问题交给应用层来处理。应用层循环读取所有的数据,根据报文的长度判断每个包开始和结束的位置。
分包机制一般有两个通用的解决方法:
特殊字符控制;
在包头首都添加数据包的长度