0
点赞
收藏
分享

微信扫一扫

TCP粘包问题

您好 2022-04-05 阅读 37
网络协议

TCP粘包

在默认情况下,TCP连接会启用延时传送算法,在数据发送之前缓存他们,如果短时间内有多个数据发送,会缓冲到一起一次发送,这样可以减少IO消耗提高性能。如果是发送文件的话,不用处理粘包问题;如果发送的是数据的话,就需要处理粘包问题

粘包有以下几种情况:如果连续调用两次sand分别发送两端数据data1、data2,那么:

  1. 先接收到data1,再接收到data2
  2. 先接收到data1的部分数据,然后接收到data1的剩余部分和data2
  3. 先接收到data1和data2的部分数据、然后接收到data2的剩余部分
  4. 一次性接收到了data1和data2

如何解决粘包问题

  • 多次发送之前间隔一个等待时间:只需要等上一段间隔时间结束再进行下一次send,适用于交互频率较低的场景;如果交互频率频繁,传输效率较低
  • 不使用延迟传送算法(Nagle):适用于每次发送的数据比较大,但文件不是很大的情况
  • 进行封包/拆包:给每个数据包的之前或之后放一些有特征的数据,就收到数据后按特征进行分割

为什么UDP不会粘包

  • TCP是面向流的协议,UDP是面向消息的协议。UDP段是一条消息,必须以消息为单位接收数据,不能以字节为单位接收数据。
  • 每个UDP包中都有消息头,这样对于接收端来说就很容易区别UDP包了。
举报

相关推荐

0 条评论