0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

丢包问题如何解决?方法在这里

亿佰特物联网应用专家 2022-10-14 10:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

关于丢包的问题

无线通信最常见的问题就是丢包,无论是简单原始的433MHz通信,还是高精尖的5G信号,都会有丢包问题。解决丢包问题也是无线工程师的必要工作,丢包不可避免,但是遇到丢包了应该怎么办才是本文要谈的。无线通信最重要的就是设计一套能够解决应用需求的通信协议,而通信协议包含这些要素:无线信号使用什么频段、什么调制方式不被干扰、无线信号发给谁、如何保证无线信号送达目标、多个相同的设备同时使用该怎么办、接收端如何判断收到的信号是否重复收或漏收……其实这些都是围绕解决一个问题——丢包。

所以任何一种普遍使用的无线通信协议,都要分成若干逻辑层,每一个逻辑层。例如常见的Wi-FiZigBee蓝牙,它们都具备两个共同的逻辑层——PHY物理层,MAC链路层。其中PHY层定义了频段、调制方式以及传输方式。MAC层则定义了谁来发信号,谁来收信号,什么时候发信号。基本的PHY层和MAC层解决了常见的物理丢包问题,但是无线设备的应用场景十分复杂,因此各种通信协议之上还增加了诸如网络层这些逻辑层用于保证通信的稳定性,如Wi-Fi协议上 的TCP协议就是为了保证传输稳定而设计的。例如ZigBee的PHY层和MAC层就为了减少丢包做了一些处理机制。

减少丢包处理机制

①PHY层的减少丢包机制:
物理层的丢包,就是发送端发送了信号,但是接收端没有接收到信号。这也是最简单也是最常见的原因,通常就是发射端的功率低了,发射端距离接收端太远。遇到这种情况,通常会想到的办法就是提高发射功率,信号能发射得更远。但是根据香农定律,在相同信道带宽下,信号携带的信息量越少,对信噪比的需求越低,对信噪比需求越低就意味着对功率的需求越低。这时除了提高功率,还有一种方式就是扩频。比如典型的ZigBee上使用的DSSS扩频,原本ZigBee的信道带宽有2MHz,也就是能在1秒钟内输出2M个0或1的信号。通常我们使用8个0或1的信号表示一个字节,但是DSSS的作用下,需要64个0或1的信号来表示一个字节。这样使用无线信号传输一个字节需要64个0或1,即使信号在传输过程中发生了失真,接收端也能对信号进行纠错。这也就是为什么ZigBee的传输稳定性优于433MHz通信。正常情况下,ZigBee在20dBm发射功率的情况下,传输距离可达1公里。40390aa2-4b31-11ed-b116-dac502259ad0.png还有一种情况,就是天线的问题。任何一种天线都有天线增益系数以及方向性。通常外置天线的增益就优于PCB天线,在设备空间充足的情况下尽量选择外置天线。而天线的方向性也是要考虑的因素,例如棒状天线的信号覆盖范围就是一个扁球体,平行天线的位置信号非常好,而天线轴线延长线位置信号差得多。
②MAC层减少丢包的机制:以ZigBee的IEEE802.15.4系列协议为例,该协议的MAC层具有一下几个重要的功能。载波侦听和CSMA机制:IEEE802.15.4具备基于载波侦听的CSMA机制。设备在每次发射信号前,会侦听当前信道是否繁忙,并在信道空闲的时候发射信号。很多sub-G芯片也带有载波侦听功能的,但是缺少类似CSMA这样的协议机制。CSMA则规定了信道侦听的方法:发射前在一个随机时间内持续侦听信道,这样就能适当避免两个相同的设备同时发射信号;随机时间到达后尝试发送信号,如果发送失败就再侦听一次,并且下一次随机时间范围继续扩大(2倍),这样就能避免更多的设备同时发射信号;如果多次尝试都失败,而且达到了最大次数限制,那么这个信号就算丢包了。自动应答机制:IEEE802.15.4-MAC层有两种主要通信方式:广播和点播。点播到目标时,目标节点会返回ACK帧。发送端没有收到ACK帧,会尝试重传信号,如果多次重传都没收到ACK就算丢包。另外接收端回复MAC-ACK的时候是不受CSMA机制可以强行发送的,发送端在CSMA机制下成功将点播信号送出去后,只需要0.2~0.5毫秒就能收到ACK。

因此,导致MAC层丢包常见的现象就是CSMA失败丢包和MAC-ACK失败丢包,和物理层的丢包不同的是这两种丢包都可以被发送端自己检测到。通常遇到这种丢包,应用上的处理就是重传。但是重传也是要讲究科学性的,比如恶意信号干扰导致CSMA失败重传就没法解决;接收目标不存在导致的 MAC-ACK失败重传也是没法解决的。PHY层和MAC层的一系列处理机制都是为了减少丢包而设计的,但是无法保证绝对没有丢包,因此无线应用设计中,最关键的就是遇到丢包了该怎么办。

无线应用中丢包解决方法

以ZigBee传输为例,PHY层、MAC层、NWK层做了很多处理机制,丢包率几乎达到0.1%~0.01%。但是如果应用设计没考虑到仅剩的0.1%~0.01%丢包问题,对应用自身的影响就是致命的。在应用中常见的对丢包的容错,有如下解决办法。4050ae0a-4b31-11ed-b116-dac502259ad0.jpg①合理重传:重传是大家都能想到的方法,ZigBee就提供了CSMA失败检测和ACK失败检测。通常遇到以上两种情况大家的常见做法就是数据重传。但是重传也要讲究合理性,例如CSMA失败,这个时候有可能是很多个节点同时在发射信号;例如设备上电的时候会把上电时的信息上报给网关,多个设备一起上电肯定会有很大的冲突率,CSMA失败是很常见的事。因此,这时候遇到CSMA失败不要立即重传,可以随机延时100毫秒~1秒再重传,如果再次失败说明同时传输的设备确实太多,再随机延时2~4秒,失败再随机延时4~8秒……。如果是ACK失败则可以根据该次发射数据的实时性,延迟一个固定时间再重传,一般在1秒以上5秒以下,因为有可能上次传输失败是目标节点“不在状态”,下次传输可能就自动好了。②设计时序规则:应用数据传输时需要考虑出现丢包时该如何处理,例如OTA升级,文件传输。每一帧数据都是必不可少的,而且顺序还要正确。所以这类无线传输应用中,应该对每一帧数据包都标注上序号。发送端一旦检测到丢包,可能会重传数据帧。而接收端有可能是因为ACK没有发送到发送端导致发送端误判。如果接收端收到多一帧或少一帧数据,都可以从每一帧的序号判断出来。③该放弃时要放弃:类似接收端不存在,或者信道遇到干扰的问题,通过MAC层都可以侦测到。例如出现连续长时间的ACK失败,可能就是接收端不存在;连续长时间的CSMA失败,可能就是遇到了干扰。接收端不存在的情况下完全可以放弃对这个接收端发送消息。信道被干扰的情况下可以做整体信道切换,也可以暂停全网络的运行,保存当前状态,等待干扰消失后再恢复全部的传输。

不算丢包的“丢包”

无线通信上除了无线信号导致的丢包,还有软件逻辑上的丢包。典型的就是通信的数据量超过了发送端或接收端的处理能力。比如ZigBee的传输速率只有250kbps,加上CSMA延迟,路由转发,实际数据传输速率能够达到5kbps~10kbps就很不错了。发射端的应用程序如果向发射端写入数据的速度超过了发射端的传输速度,也会导致软件丢包。通常各家芯片厂商的IEEE802.15.4的协议栈都会提供一个Send Confirm的回调接口,应用程序向传输接口写入需要传输的消息后,约在几毫秒到几十毫秒内收到Send Confirm回调触发。同时一般射频芯片SoC也会提供缓存来存储写入的数据帧,有可能应用程序一次向射频芯片写入多个数据帧都被芯片SOC缓存起来,再慢慢的一帧一帧发射出去,然后Send Confirm回调被陆陆续续地触发。如果应用程序在发送消息的时候,每次向射频SoC写入传输消息,待Send Confirm触发后再写入下一条消息,就可以很好地规避软件丢包的问题。4081abae-4b31-11ed-b116-dac502259ad0.png

对于接收端也是如此,多个发送端向同一个接收端发送消息,CSMA很好的规避了冲突,发送端收到了各自的ACK,但是发送端发送的消息在接收端没有得到正确的响应。那么就有可能是接收端的处理能力有限,各个发送端累计发送的消息全部堆在接收端正在处理,这种情况就要考虑系统设计问题,减少接收端的处理压力。

总结

对于丢包的容错处理是无线通信设计的关键,现有成熟的通信协议虽然做了很多措施来降低丢包率,如果丢包一旦发生一定要有容错机制来应对,否则就算是千分之一或万分之一的丢包,都会为整个无线系统带来灾难性的后果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    6318

    浏览量

    139570
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32L052在串口数据传输中怎么解决?

    CW32L052在串口数据传输中
    发表于 11-24 07:35

    以太网设备高温流量测试问题案例(晶振篇)

    测试人员发现一个奇怪的现象,设备在白天的测试中,均无现象,夜间设备继续运行,但是第二天一早就会发现已发生。该设备的用户接口是百兆以太网接口,利用5类非屏蔽双绞线与SmartBi
    的头像 发表于 11-21 15:37 3478次阅读
    以太网设备高温流量测试<b class='flag-5'>丢</b><b class='flag-5'>包</b>问题案例(晶振篇)

    电源噪声导致的数据,如何确认是电容ESR升高引起的?

    电源噪声导致的数据,如何确认是电容ESR升高引起的?
    发表于 11-15 09:34

    国产传感器产业发展破局点或在这里

        “十四五”期间中国传感器产业发展中存在的最严峻问题,“十五五”传感器产业政策破局方向或在这里!     进入10月份,踏入2025年的第四季度,2025年是我国经济发展中的“节点”年
    的头像 发表于 10-29 18:13 694次阅读
    国产传感器产业发展破局点或<b class='flag-5'>在这里</b>

    GD32F470+LWIP TCP偶尔怎么解决?

    modustcp通信,查询间隔约10ms,对发约半小时后板子会出现一次数丢失。 排查过程: 之前查过说是芯片使用硬件校验和会遇到0xFFFF时的问题,用软件检验和能解决,但是驱动内看了并没有开启
    发表于 09-29 06:43

    STM32+DP83848跑10M可以,100M很严重,请问有人遇到过吗?

    大佬们,stm32驱动dp83848,跑10M可以,100M很严重,请问有人遇到过吗
    发表于 08-20 10:04

    RK3568自制底板狂?教你5分钟用Delayline一键复活网口

    在使用飞凌嵌入式RK3568核心板搭配自制底板时,由于PCB走线与参考设计存在差异,常导致RGMII接口时序异常,进而出现网口不通或频繁的情况。本文将为大家提供一套简单高效的调试方案,通过三步操作即可解决此类问题。
    的头像 发表于 07-25 17:15 1343次阅读
    RK3568自制底板狂<b class='flag-5'>丢</b><b class='flag-5'>包</b>?教你5分钟用Delayline一键复活网口

    用RK3568自制底板狂?5分钟教你用Delayline一键复活网口

    在使用飞凌嵌入式RK3568核心板搭配自制底板时,由于PCB走线与参考设计存在差异,常导致RGMII接口时序异常,进而出现网口不通或频繁的情况。本文将为大家提供一套简单高效的调试方案,通过三步操作即可解决此类问题。
    的头像 发表于 07-25 08:04 290次阅读
    用RK3568自制底板狂<b class='flag-5'>丢</b><b class='flag-5'>包</b>?5分钟教你用Delayline一键复活网口

    SMT贴片加工中这些品质问题太常见,解决方法在这里

    一站式PCBA加工厂家今天为大家讲讲SMT贴片加工的常见品质问题有哪些?SMT贴片加工常见品质问题解析及解决方案。 一、SMT贴片加工的基本概念 表面贴装技术(SMT)是目前电子制造行业广泛采用的一种高效电路板组装技术,通过将表面贴装器件(SMD)精准地贴装到PCB的指定焊盘上,经过回流焊接等工艺,实现电子产品的组装。SMT贴片加工以高密度、高可靠性、高自动化为特点,但也面临一些常见的品质问题。以下将解析这些问题的成因及解决方案。 二、SMT贴
    的头像 发表于 06-06 09:22 724次阅读

    CY7C68013A客户配置成slavefifo模式,FPGA发送数据到PC则会或者收到的数据对不上,什么原因?

    我们这边有个客户使用CY7C68013A,客户配置成slavefifo模式,PC端发送数据到FPGA时数据正常,FPGA发送数据到PC则会或者收到的数据对不上。能否帮忙看下客户的配置是否正确。
    发表于 05-30 08:21

    为何 MCX 插头会呈现大小不同?答案在这里

    同时,设备制造商在产品设计阶段,会根据整体结构和接口规划,审慎选择合适大小的 MCX 插头。这一决策不仅关乎插头与内部组件的适配,还影响着设备的外部接口兼容性和可扩展性,确保产品在复杂的电子生态系统中能够无缝对接、协同工作。
    的头像 发表于 04-11 08:40 436次阅读
    为何 MCX 插头会呈现大小不同?答案<b class='flag-5'>在这里</b>

    腾讯会议免费40分钟不够用?你要的秘诀在这里

    影响效率。更令人担忧的是,未来免费时长可能进一步缩短。那么,有没有一种经济实惠又功能强大的解决方案呢?答案就在这里:结合树莓派和3CXPBX,你就能打造一个无时间限制
    的头像 发表于 03-25 09:24 1619次阅读
    腾讯会议免费40分钟不够用?你要的秘诀<b class='flag-5'>在这里</b>!

    STM32H743+USB3300传输采集的数据前几次会怎么解决?

    的,只会出现在USB断开重连后,要多发几次才会不,有知道的佬吗。使用官方的USB库移植,和Cubemx配置也一样有此问题。使用的是CDC虚拟串口的USB高速HS模式,在其他论坛
    发表于 03-10 06:26

    用CPLD来控制TLK1221有情况,怎么解决?

    用CPLD来控制TLK1221有情况。所传输的视频信号在显示器上面有条纹出现。请问是不是在8B/10B转换时,没写好程序。AD和DA转换我感觉没有问题。
    发表于 02-13 06:08

    华纳云如何解读WinMTR的率数据?

    是如何解读WinMTR的率数据: 1. 率的定义
    的头像 发表于 12-30 16:51 981次阅读