TCP粘包是指在传输过程中,多个数据包被连续存储在接收缓冲区中,接收方在读取数据时无法确定每个数据包的边界,从而导致数据包粘连在一起。粘包现象的产生有多种原因,既可能由发送方引起,也可能由接收方引起。
发送方引起的粘包
TCP协议为了提高传输效率,发送方通常会收集足够多的数据后再发送一个数据包。如果连续几次发送的数据量较小,TCP会根据优化算法将这些数据合并成一个数据包发送出去,从而导致接收方收到粘包数据。
接收方引起的粘包
接收方用户进程如果不及时读取接收缓冲区中的数据,也会导致粘包现象。接收方先将收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据。如果下一包数据到达时前一包数据尚未被用户进程取走,下一包数据就会接在前一包数据之后,从而导致粘包。