当前位置: 首页 >应用方案 >技术应用 >

无线通信模块是如何检测数据丢包重传

丢包重传是数据通信应用里面一项非常重要的功能,特别是在无线通信中是一项决定通信协议先进程度的指标。前文小编介绍了什么是无线通信网络丢包及网络丢包的解决办法,本文接着详细的讲解数据通信中是如何检测丢包的。

如何检测丢包

要想丢包重传,首先必须得检测到丢包,没有丢包就没有重传。在无线通信中,对于丢包的检测通常有载波侦听应答机制两种方式。

载波侦听丢包检测

载波侦听是一种常见的丢包检测方法,而在载波侦听基础之上又发展出CSMA/CACSMA/CA也可以看做一种重传机制,我们经常使用的WIFI模块zigbee模块就采用了这种机制。通信设备在发送消息前,会打开接收并维持一段很短的时间。在这个很短的时间内,无线单元会检测同频段是否有其它的干扰信号,例如zigbee设备在做载波侦听时,既要检测是否有WIFI,蓝牙模块在发射信号,又会检测是否有其它的zigbee在发射信号。如果干扰信号来自WIFI或者蓝牙,zigbee设备会测量它的功率有没有自己大,功率没自己大就压过去,功率比自己大就果断丢包;而zigbee设备在载波侦听时遇到其它的zigbee设备,不管对方功率是否比自己大,都会主动丢包,让别人先走。

应答机制丢包检测

判断丢包的另一个方法是增加应答机制,通常通信协议都会有OSI七层模型。七层协议中从链路层开始,每一层都可以添加应答机制。层级越低越接近硬件,应答机制的响应就越快。

OSI七层模型
OSI七层模型

我们还是以ZigBee的应答机制为例。Zigbee协议OSI模型,具有应答机制的目前仅限MAC层(数据链路层)和APS层(传输层)。但是在实际应用中,很多时候还会为应用层添加应答机制。MAC层的应答是响应最快的,也叫做MAC-ACK,通常都在zigbee的无线收发单元中硬件自动产生。接收端设备收到zigbee数据帧后120微秒以广播的方式发出来。同时MAC-ACK也是zigbee中最短的帧,帧长只有5字节,加上帧前导码和同步帧累计11字节。按照zigbee250kbps传输速率每个字节需要32微秒,一个MAC-ACK帧的占空时间352微秒。也就意味着发送端在发送一个MAC帧后,会在120+352=472微秒后收到该MAC帧对应的MAC-ACK。同样zigbeeMAC层也规定了,发送端如果在540微秒内没有收到对应的MAC-ACK则认为是丢包了。

MAC-ACK采用广播发送,首先可以减少MAC-ACK帧中表示地址的字段,减少帧长度,让ACK帧占空时间更短,发送端可以根据MAC-ACK帧中的帧序号来判断是否自己的MAC-ACK;其次MAC-ACK采用广播的方式,也可以提醒其它的zigbee设备自己正在通信,其它的zigbee设备如果这个时候也在进行载波侦听,就能主动避让正在通信的设备。在zigbeeMAC层,载波侦听和MAC-ACK是双管齐下,这样能保证丢包检测的准确性。另外zigbee的广播消息是不会产生MAC-ACK的。

多元化的丢包检测机制

zigbee协议除了MAC层有应答机制,传输层和应用层也有应答机制。Zigbee模块是一个多跳的Mesh网络,而MAC层的传输只能满足单跳传输,因此zigbee在传输层也做了应答,也叫做APS-ACKZigbee发送端把一个消息传输给zigbee接收端,中间会经过多个zigbee路由器节点的转发。接收端收到消息后,会通过相同的路由路径,把APS-ACK发给发送端,发送端收到APS-ACK就认为发送消息到达了接收端。如果发送端在6秒(默认值)后没有收到APS-ACK则会认为数据丢包。

ZigBee的系统中通常都只对应用层开放接口,在应用层开放的接口中最常见的就是一个叫做“AF Data Confirm”的检测接口,它综合了MAC层丢包(含MAC-ACK丢包和载波侦听丢包),网络层丢包,传输层丢包等底层丢包信息。Zigbee的顶层应用中可以知道当前发送的消息是否丢包。

应用层的应答

MAC层和传输层的丢包检测,都属于系统层的丢包。还有一种丢包就是应用层的丢包,比如一个调光开关给一个空调设备发了一条“把亮度调到50%”的指令。这条指令如果不丢包,会有什么结果?肯定是空调会去执行“把亮度调到50%”,但是空调只有温度没有亮度,也就是说这条指令发给了不该发的目标。这个时候就需要应用层的应答来解决这个问题。比如空调收到了“把亮度调到50%”后,可以向发送端回复应用层应答“看清楚老子不是灯泡”。

今天的分享就到这里啦,EBYTE人每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多产品更多资料,感兴趣的小伙伴可以登录我们的亿佰特官网进行了解,还有客服小姐姐在线答疑哦!



4000-330-990

https://www.wjx.cn/jq/84863372.aspx