网络传输层的粘包/拆包-组包/分包

举报
黄生 发表于 2022/11/02 00:04:51 2022/11/02
【摘要】 总之是一个意思,就是对应用层要发送的数据的,可能的拆分发送、或合并发送。这是传输层及以下层负责的事情,应用层并不知道。传输层及以下层也不理解应用层的业务数据。看一个图:这个问题呢,是通过上层的应用设计来解决的。比如约定消息定长、约定包尾分隔符(如FTP协议用回车换行符)消息头中包含消息总长度,等等。一个最简单的例子,换行分割的数据怎么处理?LineBasedFrameDecoder:遍历By...

总之是一个意思,就是对应用层要发送的数据的,可能的拆分发送、或合并发送。
这是传输层及以下层负责的事情,应用层并不知道。传输层及以下层也不理解应用层的业务数据。
看一个图:
image.png

这个问题呢,是通过上层的应用设计来解决的。
比如约定消息定长、约定包尾分隔符(如FTP协议用回车换行符)
消息头中包含消息总长度,等等。

一个最简单的例子,换行分割的数据怎么处理?
LineBasedFrameDecoder:遍历ByteBuf里的可读字节,看是否有回车、或回车换行,有,则以此为结束位置。从可读索引到这里,就组成了一行。
如果读到配置的最大长度,还没有发现换行,就抛出异常,忽略已读到的码流。

StringDecoder:将接受到的对象转换为字符串。以什么编码呢?

除了这简单的,netty还支持很多种TCP粘包/拆包的解码器。注意,是解码器。没有编码器提供。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。