2026-01-11
其他
00

相关信息

TCP粘包和拆包理解

  • tcp粘包的原因
    • tcp本身是面向流的协议,是没有消息边界的
    • TCP 为了效率,会把多个小的数据包合并成一个大的发出去(Nagle 算法);
    • 接收方处理不够快,多个包积压在接收缓冲区里,一次性读出来了
  • 拆包
    • 数据包太大,超过了 MSS(最大报文段长度),
    • IP 层进行了分片,导致一个完整的消息被切断成两半发送。
    • 解决方案
      • 包设置固定长度
      • 增加分隔符
      • 消息头带长度(Length Field Based)(把包分成“头”和“体”)
      • 自定义序列化协议
        • 使用 Protobuf、JSON 等。虽然它们本身不解决粘包,但通常配合方案 C 使用

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!