什么是粘包和半包?
为什么 TCP 应用中会出现粘包和半包现象?
粘包的主要原因:
• 发送方每次写入数据 < 套接字缓冲区大小
• 接收方读取套接字缓冲区数据不够及时
半包的主要原因:
• 发送方写入数据 > 套接字缓冲区大小
• 发送的数据大于协议的 MTU(Maximum Transmission Unit,最大传输单元),必须拆包
换个角度看:
• 收发
一个发送可能被多次接收,多个发送可能被一次接收
• 传输
一个发送可能占用多个传输包,多个发送可能公用一个传输包
根本原因:TCP 是流式协议,消息无边界。
解决问题的根本手段:
解码核心