欢迎光临
我们一直在努力

【趣解】粘包和半包:TCP通信的“奇葩“问题

【趣解】粘包和半包:TCP通信的\”奇葩\”问题

开篇:TCP为什么会有粘包?

HTTP请求是完整的,TCP发送的数据为什么会\”粘\”在一起?

这其实是TCP的\”原罪\”——它只保证可靠传输,不保证\”消息边界\”。

什么是粘包?

粘包 = 多个小数据包粘在一起发送

你发送:数据包A、数据包B、数据包C
实际收到:数据包AB数据包C

就像快递:

  • 你寄了3个包裹
  • 快递公司把3个包粘在一起了
  • 收货方收到1个大包

什么是半包?

半包 = 一个数据包被拆成多次发送

你发送:数据包A
实际收到:数据包A的前半段、数据包A的后半段

就像锯木头:

  • 你锯了一段木头
  • 实际被锯成两段运送
  • 收货方要拼起来

为什么会粘包/半包?

根本原因

TCP是流式协议,不保留消息边界:

  • 发送方:write() 100字节
  • TCP:可能分成10次发送
赞(0)
未经允许不得转载:171主机测评 » 【趣解】粘包和半包:TCP通信的“奇葩“问题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址