TCP粘包问题

TCP粘包是指发送方发送的若干包数据到接收方,接收方应用程序看到一连串的字节数据,不知道从哪个部分到哪个部分是一个完整的应用层数据包。

发生粘包的原因:

  1. 发送方:TCP为了提高效率,如果发送的数据包太小,就会启动Nagle算法,对小的数据包进行合并,然后发送。这样的话,接收方接收到消息的时候就无法区分那些数据包,便产生了粘包现象。

  2. 接收方:接收方收到数据后,先放到接收缓冲区,如果不及时将接收缓冲区的数据拿走,下一次读取数据的时候可能会同时读到多个数据包,造成粘包现象。

 

 

如何避免粘包问题?

1.传输定长数据,这个方法不太可靠。

传输定长数据可以稍微解决tcp粘包问题,但是不能应对复杂情况,例如,一个通信连接当中,有多个定长的数据结构或者没有定长的数据结构 

 

2.定长包头+数据+分隔符,可以完美的解决数据粘包问题

确定一个定长的数据包头,

由于分隔符后面就是包头,所以当我们判断什么时候是包头的时候,只需判断,接收的数据里面有没有分隔符。

定长包头当中可以获取当前数据的长度,而分隔符可以找到下一条数据的起始位置(下一条数据的包头)

分隔符不一定是一个字节的字符,可以是一个字符串,通常下使用\r\n进行分隔。

分隔符就是起到了一个定义数据边界的作用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值