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