TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧 接着前一包数据的尾。
1.由TCP连接复用造成的粘包问题。
2.因为TCP默认会使用Nagle算法,此算法会导致粘包问题。
只有上一个分组得到确认,才会发送下一个分组;
收集多个小分组,在一个确认到来时一起发送。
3.数据包过大造成的粘包问题。
4.流量控制,拥塞控制也可能导致粘包。
5.接收方不及时接收缓冲区的包,造成多个包接收
解决:
1. Nagle算法问题导致的,需要结合应用场景适当关闭该算法
2. 尾部标记序列。通过特殊标识符表示数据包的边界,例如 , ,或者一些隐藏字符。
3. 头部标记分步接收。在TCP报文的头部加上表示数据长度。
4. 应用层发送数据时定长发送。