1、解决TCP粘包拆包问题,几种编解码器的应用

粘包拆包问题

粘包拆包问题是基于流的协议所特有的,因为基于流的协议不知道传输的内容是什么。TCP协议是一个基于流的协议,一个完整的数据包可能会被TCP拆分成多个包发送,也有可能多个小的数据包被封装成一个大包发送。

什么决定了拆包规则?粘包拆包的原因是什么?

 

粘包:服务端一次接收了多个包,这些包粘合在一起

拆包:服务端接收到某个包的一部分内容

 

很显然,粘包拆包是对业务处理端而言的,业务处理端知道自己获取的是不是一个完整的包。

 

如果服务端TCP接收滑窗非常小,而数据包比较大,可能要经过多次传输才能获得完整的包,期间发生多次拆包

接收滑窗是什么意思?

 TCP粘包拆包的原因

1、应用程序write写入的字节大小大于套接字发送缓冲区的大小

2、进行MSS大小的TCP分段

3、以太网帧的payload大于MTU进行IP分片

 

粘包问题的解决策略

1、消息定长

2、在包尾增加回车换行符进行分割,例如FTP协议

3、将消息分为消息头和消息体,消息头的第一个字段使用int32表示消息的总长度

4、更复杂的应用层协议

 

Netty提供的编解码器应用

LineBasedFrameDecoder

以换行符\n或者\r\n为标志的解码器,支持配置单行最大长度等。

LineBasedFrameDecoder+StringDecoder组合就是换行切换的文本解析器

 

分隔符解码器DelimiterFrameDecoder

定长解码器FixedLengthFrameDecoder

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值