丢包重传是数据通信应用里面一项非常重要的功能,特别是在无线通信中是一项决定通信协议先进程度的指标。今天主要着重介绍如何检测丢包,之后再介绍重传机制。
如何检测丢包?
要想丢包重传,首先必须得检测到丢包,没有丢包就没有重传。在无线通信中,对于丢包的检测通常有两种方式:载波监听和应答机制。
01
载波侦听
载波侦听是一种常见的丢包检测方法,而在载波侦听基础之上又发展出CSMA/CA。CSMA/CA也可以看做一种重传机制,我们经常使用的Wi-Fi和ZigBee就采用了这种机制。通信设备在发送消息前,会打开接收并维持一段很短的时间。在这个很短的时间内,无线单元会检测同频段是否有其它的干扰信号,例如ZigBee设备在做载波侦听时,既要检测是否有Wi-Fi、蓝牙在发射信号,又会检测是否有其它的ZigBee在发射信号。如果干扰信号来自Wi-Fi或者蓝牙,ZigBee设备会测量它的功率有没有自己大,功率没自己大就压过去,功率比自己大就果断丢包;而ZigBee设备在载波侦听时如果遇到其它的ZigBee设备,不管对方功率是否比自己大,都会主动丢包,即让别人先走。
02
应答机制
判断丢包的另一个方法是增加应答机制,通常通信协议都会有OSI七层模型。七层协议中从链路层开始,每一层都可以添加应答机制。层级越低越接近硬件,应答机制的响应就越快。
OSI七层模型
我们还是以ZigBee的应答机制为例。ZigBee的OSI模型,具有应答机制的目前仅限MAC层(数据链路层)和APS层(传输层)。但是在实际应用中,很多时候还会为应用层添加应答机制。MAC层的应答是响应最快的,也叫做MAC-ACK,通常都在ZigBee的无线收发单元中硬件自动产生。接收端设备收到ZigBee数据帧后120微秒以广播的方式发出来。同时MAC-ACK也是ZigBee中最短的帧,帧长只有5字节,加上帧前导码和同步帧累计11字节。按照ZigBee的250kbps传输速率每个字节需要32微秒,一个MAC-ACK帧的占空时间352微秒。也就意味着发送端在发送一个MAC帧后,会在120+352=472微秒后收到该MAC帧对应的MAC-ACK。同样ZigBee的MAC层也规定发送端如果在540微秒内没有收到对应的MAC-ACK则认为是丢包。
MAC-ACK采用广播发送,首先可以减少MAC-ACK帧中表示地址的字段,减少帧长度,让ACK帧占空时间更短,发送端可以根据MAC-ACK帧中的帧序号来判断是否自己的MAC-ACK;其次MAC-ACK采用广播的方式,也可以提醒其它的ZigBee设备自己正在通信,其它的ZigBee设备如果这个时候也在进行载波侦听,就能主动避让正在通信的设备。在ZigBee的MAC层,载波侦听和MAC-ACK是双管齐下,这样能保证丢包检测的准确性。另外ZigBee的广播消息是不会产生MAC-ACK的。
ZigBee参考模型
多元化的丢包检测机制
ZigBee除了MAC层有应答机制,传输层和应用层也有应答机制。ZigBee是一个多跳的Mesh网络,而MAC层的传输只能满足单跳传输,因此ZigBee在传输层也做了应答,也叫做APS-ACK。ZigBee发送端把一个消息传输给ZigBee接收端,中间会经过多个ZigBee路由器节点的转发。接收端收到消息后,会通过相同的路由路径,把APS-ACK发给发送端,发送端收到APS-ACK就认为发送消息到达了接收端。如果发送端在6秒(默认值)后没有收到APS-ACK则会认为数据丢包。
ZigBee的系统中通常都只对应用层开放接口,在应用层开放的接口中最常见的就是一个叫做“AF Data Confirm”的检测接口,它综合了MAC层丢包(含MAC-ACK丢包和载波侦听丢包)、网络层丢包及传输层丢包等底层丢包信息。ZigBee的顶层应用中可以知道当前发送的消息是否丢包。
应用层的应答
MAC层和传输层的丢包检测,都属于系统层的丢包。还有一种丢包就是应用层的丢包,比如一个调光开关给一个空调设备发了一条“把亮度调到50%”的指令。这条指令如果不丢包,会有什么结果?肯定是空调会去执行“把亮度调到50%”,但是空调只有温度没有亮度,也就是说这条指令发给了不该发的目标。这个时候就需要应用层的应答来解决这个问题。比如空调收到了“把亮度调到50%”后,可以向发送端回复应用层应答“看清楚我不是灯泡”。
-
无线
+关注
关注
31文章
5340浏览量
171931 -
检测
+关注
关注
5文章
4220浏览量
90931 -
数据通信
+关注
关注
2文章
418浏览量
33592 -
CSMA
+关注
关注
0文章
28浏览量
12960
发布评论请先 登录
相关推荐
PCBA加工中常见的两种焊接方式详解
异或门两种常见的实现方式
![异或门<b class='flag-5'>两种</b>常见的实现<b class='flag-5'>方式</b>](https://file1.elecfans.com/web2/M00/C0/AC/wKgaomW_WTOAREdlAAFIjMubNzg453.png)
网络丢包率正常范围及其影响因素
常见的网络丢包故障定位⽅法
![常见的网络<b class='flag-5'>丢</b><b class='flag-5'>包</b>故障定位⽅法](https://file1.elecfans.com/web2/M00/B3/03/wKgaomVxJQCAf2CtAAANVyH82-o090.jpg)
redis两种持久化方式的区别
三相交流负载常见的两种连接方式
malloc 申请内存的两种方式
![malloc 申请内存的<b class='flag-5'>两种</b><b class='flag-5'>方式</b>](https://file1.elecfans.com/web2/M00/AD/E8/wKgaomVRmxiAV5cpAAFrpb1Fxtg145.jpg)
串口接收数据的两种方式是什么
![串口接收数据的<b class='flag-5'>两种</b><b class='flag-5'>方式</b>是什么](https://file1.elecfans.com/web2/M00/AF/4E/wKgZomVN5qGAZCR6AAE8DpMlf5c186.jpg)
网络丢包故障如何定位
![网络<b class='flag-5'>丢</b><b class='flag-5'>包</b>故障如何定位](https://file1.elecfans.com/web2/M00/AF/0A/wKgZomVMhP2ARbBnAAA6mPhXKvM937.jpg)
基于V682-SONiC交换机的实现网络丢包检测的可视化
![基于V682-SONiC交换机的实现网络<b class='flag-5'>丢</b><b class='flag-5'>包</b><b class='flag-5'>检测</b>的可视化](https://file1.elecfans.com/web2/M00/AD/25/wKgaomVMNryAOzB3AAAoP-uUS8s674.png)
常见的ARM架构分为两种一种是M系列另外一种是A系列,这两种有什么区别啊?
异步感应和永磁同步电机这两种有什么优缺点呢?
![异步感应和永磁同步电机<b class='flag-5'>这两种</b>有什么优缺点呢?](https://file1.elecfans.com/web2/M00/8C/A8/wKgZomSvp4CACOSaAABCU3net-A275.jpg)
评论