TCP流有啥特点?沾包问题又是啥?如何解决粘包问题?

目录

1、TCP流的特点

2、沾包现象产生的两个原因

3、沾包现象的解决办法


1、TCP流的特点

       如下图所示,发送方执行 TCP 发送函数,需要发送的消息会先保存在 TCP 发送缓冲区中,之后由系统择机发送 TCP 报文,注意系统发送的报文数量与 send 函数没有一对一的数量关系。这是因为 TCP 是一个面向流的协议,TCP缓冲区就像一个蓄水池,上层需要发送的数据像流水一样暂存在蓄水池中,待时机成熟时将应用数据打包发送。TCP流的特性会造成 “粘包” 现象的产生,具体可见第二张图。

2、沾包现象产生的两个原因

        粘包现象分为两方面,首先TCP是面向流的协议,应用层的数据会缓存在一起(及时多次调用send函数,数据在发送缓冲区中也会粘在一起),没有消息边界之分,所以难免会发生粘包现象。其次因为 TCP 高频率传输负载较小的数据时,会降低网络利用率(网络头部从二层到四层占至少56个字节,负载数据越大,网络利用率越高),为了提高网络利用率,目前操作系统默认开启 Nagle 算法,Nagle 算法如下流程图所示,其可以避免 TCP 发送大量的小包。

3、沾包现象的解决办法

        粘包依据两个不同的产生原因分为存在不同的解决办法。首先,应用程序可以自定义应用层消息格式,设置特定的消息头并记录消息长度以确定边界;其次可以关闭默认的Nagle选项(若应用程序需要高频率发送小包,并且对时延有严格的要求,可以考虑禁用 Nagle,即开启 TCP_NODELAY 选项)。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值