在咱们TCP传输数据的时候,由于TCP底层并不了解上层业务数据的具体含义,它会根据缓冲区的实际状况进行包的划分,可能会把一个大的包拆成多个包进行发送,也有可能将不少小包封装成大的数据发送,这就是TCP的拆包和粘包。服务器
按照上图,因为服务器一次读取到的字节数是不肯定的。可能存在如下4中状况服务器端
一、服务器两次读取到两个独立的包D1和D2,不存在粘包和拆包的状况im
二、服务器一次接受到两个包,D2和D1两个粘在一块儿,这就是粘包数据
三、这里有个地方错了,第三个应该是D2_2,服务器第一次读取到了D1的完整包,和D2的部分。第二次读取D2剩下的部分img
四、服务器第一次读取到了D1的一部分,第二次读取到了D2和剩下的D1部分服务端
如上所述,若是服务端的TCP接受滑窗很是小,而D1和D2比较大,可能会形成服务器端要不少次才能将两个包彻底接受,期间发生屡次的拆包。底层