TCP 粘包/拆包的原因及解决方法?

Johngo学长 Netty 34

TCP 是以流的方式来处理数据,一个完整的包可能会被 TCP 拆分成多个包进 行发送,也可能把小的封装成一个大的数据包发送。

TCP 粘包/分包的原因:

应用程序写入的字节大小大于套接字发送缓冲区的大小,会发生拆包现象,而 应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到 网络上,这将会发生粘包现象;
进行 MSS 大小的 TCP 分段,当 TCP 报文长度-TCP 头部长度>MSS 的时 候将发生拆包以太网帧的 payload(净荷)大于 MTU(1500 字节)进行 ip 分片。

解决方法

消息定长

FixedLengthFrameDecoder 类

包尾增加特殊字符分割:

行分隔符类:LineBasedFrameDecoder 或自定义分隔符类

DelimiterBasedFrameDecoder:

将消息分为消息头和消息体: LengthFieldBasedFrameDecoder 类。分为有头部的拆包与粘包、长度字段在前且有头部的拆包与粘包、多扩展头部的拆包与粘包。

回复

我来回复
  • 暂无回复内容

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部