Nett学习笔记——TCP的粘包、半包问题
1、什么是粘包、半包?
- 粘包:一次性把多条消息发过来
- 半包:发过来的消息不完整
一句话概括粘包和半包问题
- 收发:
一个发送可以被多次发送,多个发送可以被一次接收
- 传输:
一个发送可以占用多个传输包、多个发送可以公用一个传输包
2、粘包与半包的原因
根本原因:
TCP 是流式协议,数据无比边界
tips:
UDP 有边界、类似包裹(想象寄快递、快递必然不会混)
粘包:
- a、发送数据<stock缓冲区大小
- b、接收方读取套接字缓冲区不够及时
半包:
- a、发送的数据>套接字缓冲区
- b、发送的数据大于协议各层的限制,必须拆包(半包问题)
3、解决粘包、半包问题的根本手段: 解决消息的边界问题
4、netty中常用的三种封帧方式
- 固定长度 (FixedLengthFrameDecoder)
- 分隔符 (DelimiterBasedFrameDecoder)
- 固定长度的字段存内容长度的信息 (LengthFiledBasedFrameDecoder)