• 技术文章 >常见问题

    tcp粘包是什么?

    coldplay.xixicoldplay.xixi2020-06-28 13:13:15原创1218

    tcp粘包是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。

    1、什么是TCP粘包问题?

    TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。

    相关学习推荐:PHP 编程从入门到精通

    2、造成TCP粘包的原因

    (1)发送方原因

    TCP默认使用Nagle算法(主要作用:减少网络中报文段的数量),而Nagle算法主要做两件事:

    a:只有上一个分组得到确认,才会发送下一个分组

    b:收集多个小分组,在一个确认到来时一起发送

    Nagle算法造成了发送方可能会出现粘包问题

    (2)接收方原因

    TCP接收到数据包时,并不会马上交到应用层进行处理,或者说应用层并不会立即处理。实际上,TCP将接收到的数据包保存在接收缓存里,然后应用程序主动从缓存读取收到的分组。这样一来,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。

    3、什么时候需要处理粘包现象?

    a:如果发送方发送的多组数据本来就是同一块数据的不同部分,比如说一个文件被分成多个部分发送,这时当然不需要处理粘包现象

    b:如果多个分组毫不相干,甚至是并列关系,那么这个时候就一定要处理粘包现象了

    以上就是tcp粘包是什么?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:tcp 粘包
    上一篇:tcp粘包问题怎么处理? 下一篇:tcp长连接分包有几种方法?
    大前端线上培训班

    相关文章推荐

    • C#中关于TCP粘包出现的问题解决的示例• python socket网络编程之粘包问题详解• php - tcp 粘包/拆包实例• tcp粘包问题怎么处理?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网