TCP粘包、拆包
客户端发服务端发送了两个数据包a和b
粘包:服务端一次性接收到了a和b
拆包:服务端第一次接收了a和b的一部分,第二次接收到了b的剩余部分
粘包、拆包原因:
1、应用程序写入的字节大小 >Socket发送缓冲区大小
2、TCP分段:TCP data部分的大小 >MSS (Max Segment Size)
3、IP分片:以太网帧的payload(数据段) >MUT(Maximum Transfer Unit)
其中 MUT 包括:ip头部、tcp头部、MSS
解决思路:
1、消息定长;不够补空格等
2、增加结尾分隔符
3、消息头+消息体