计算机网络:TCP粘包拆包以及通信协议

目录

前言

一、粘包和拆包是什么?

二、粘包拆包的解决方案

Netty对于粘包拆包的解决方案

编解码

解码器

编码器

总结



前言

在学习Java网络编程的过程中,除了TCP/IP的传输协议外,在TCP的传输过程中会遇到粘包和拆包的问题,而一般我们会使用特定的通信协议去解决粘包与拆包问题,所有在这里就对这两方面的知识进行学习和讲解。


一、粘包和拆包是什么?

由于TPC是面向连接以字节流的形式进行传输的。并且它没有设定保护边界,并且在字节流传输的过程中,操作系统会设置一个缓冲区来进行优化。

那么,当我们发送的数据大小较小,没有达到缓冲区设置的大小的时候,TCP就会将多个请求合并成一个请求进行发送,这就是粘包现象。

而当我们发送的数据大小较大,超过了缓冲区设置的大小,那么就会将这个数据分成多个请求进行发送,这就是拆包现象。

这里借用知乎用户@程序新视界的图片

上面途中分别发生了以下几种情况。

理想状态下,packet1 和packet2的大小恰好满足满足缓冲区的大小,或者packet1和packet2的发送间隔时长满足TCP的等待时长,所有就是正常的两个请求数据包发送。 

粘包状态,packet1和packet2由于大小较小,发送间隔时间又短,所以合并成一个包发送

拆包状态下,一个packet1包大小过大,拆分成了三个数据包发送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值