Nett学习笔记——TCP的粘包、半包问题

1、什么是粘包、半包?

  • 粘包:一次性把多条消息发过来
  • 半包:发过来的消息不完整

一句话概括粘包和半包问题

  • 收发:

一个发送可以被多次发送,多个发送可以被一次接收

  • 传输:

一个发送可以占用多个传输包、多个发送可以公用一个传输包

2、粘包与半包的原因

根本原因:
TCP 是流式协议,数据无比边界

tips:
UDP 有边界、类似包裹(想象寄快递、快递必然不会混)

粘包:

  • a、发送数据<stock缓冲区大小
  • b、接收方读取套接字缓冲区不够及时

半包:

  • a、发送的数据>套接字缓冲区
  • b、发送的数据大于协议各层的限制,必须拆包(半包问题)

3、解决粘包、半包问题的根本手段: 解决消息的边界问题

Nett学习笔记——TCP的粘包、半包问题

4、netty中常用的三种封帧方式

  • 固定长度 (FixedLengthFrameDecoder)
  • 分隔符 (DelimiterBasedFrameDecoder)
  • 固定长度的字段存内容长度的信息 (LengthFiledBasedFrameDecoder)