什么是 TCP 网络粘包

TCP 粘包问题

 TCP 粘包问题是指发送方多次发送的数据混合到了一起(具体体现为发送方多次 SEND 发送的数据,接收方一次 RECV 就能全部读取)。

造成 TCP 粘包问题的原因

 粘包问题的本质在于,TCP 本来就是面向字节流的协议,不会根据数据发送的次数保持数据的边界,导致接收方可能一下子读取到多个报文。

 从协议栈的实现来看,出现粘包的原因有:

  • 发送方:发送方会使用 Nagle 算法,Nagle 算法会收集多个小分组,将它们合并发送;

  • 接收方:TCP 收到数据报时,实现保存在接收缓冲区中的,并不能保证应用立即处理。只要 TCP 接收数据的速度大于应用层从缓冲区中读取数据的速度,则应用层可能读取到多个首尾相接的包。

处理粘包现象

  • 对于发送方造成的粘包现象,可以通过关闭 Nagle 算法来解决;

  • 可以在应用层定义数据传输协议:

    • 格式化数据:为每条数据设置固定的格式(开始符,结束符);

    • 发送长度:发送每条数据时,将数据的长度一并发送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值