引言:TCP协议是网络通信协议中十分重要的协议,相比于UDP协议来说,它是一个可靠的传输协议,并且是一个面向数据流的协议;所谓面向数据流,其实是指数据传输是以流式的方式传输,这些传输的数据就像一条河里的水,他们之间是没有缝隙的,也就是说TCP协议传输的数据是无边界的;(其实TCP粘包概念个人感觉不恰当,毕竟TCP传输是以流式的方式)
而UDP是面向数据包的,收发数据包要么全收要么不收,数据包与数据包之间是有明显的边界的;
一、TCP粘包是什么?
粘包发生在发送或接收缓冲区中;应用程序从缓冲区中取数据是整个缓冲区中有多少取多少;那么就有可能第一个数据的尾部和第二个数据的头部同时存在缓冲区,而TCP是流式的,数据无边界,这时发生粘包。
二、TCP粘包的产生
1.发送方产生粘包
采用TCP协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据;但当发送的数据包过于的小时,那么TCP协议默认的会启用Nagle算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个