天天看点

TCP粘包、拆包

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、消息头+消息体

继续阅读