Linux C/C++ or 嵌入式面试之《网络编程系列》(8) tcp粘包、拆包问题(数据无边界性)及其解决办法

TCP粘包和拆包是网络编程中的常见问题,影响数据的正确接收。粘包主要是由于TCP协议的无边界数据流特性,而拆包可能由数据量过大或MTU限制导致。解决办法包括设置TCP推送、添加消息边界、预设消息长度等。本文详细介绍了粘包、拆包的原因和解决方案。
摘要由CSDN通过智能技术生成

tcp粘包问题是实际开发时会遇到的问题,面试官可以用该问题测试应聘者是否真的动手做过网络开发,如果没有实际开发经验,可能不知道这个问题。

一、tcp粘包问题

1、什么是tcp粘包

TCP粘包是指发送方发送的多个数据包被当做一个数据包接收,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

  • 粘包可能由发送方造成,也可能由接收方造成。
  • 只有TCP有粘包现象,UDP永远不会粘包
  • 粘包不一定会发生

也称数据的无边界性,read()/recv() 函数不知道数据包的开始或结束标志(实际上也没有任何开始或结束标志),只把它们当做连续的数据流来处理。

2、粘包原因

出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

  • TCP为提高传输效率,一次发送的数据量太少时,发送端需要等缓冲区满才发送出去,造成粘包(Nagle算法)。
  • 接收方不及时接收缓冲区的包,造成多个包接收。
  • 拆包也会引起粘包(关于拆包见下面
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值