无线通信最主要的便是设计一套能够办理运用需求的通信协议,而通信协议包含这些要素:无线旗子暗记利用什么频段、什么调制办法不被滋扰、无线旗子暗记发给谁、如何担保无线旗子暗记投递目标、多个相同的设备同时利用该怎么办、吸收端如何判断收到的旗子暗记是否重复收或漏收……实在这些都是环绕办理一个问题——丢包。
以是任何一种普遍利用的无线通信协议,都要分成多少逻辑层,每一个逻辑层。例如常见的Wi-Fi、ZigBee、蓝牙,它们都具备两个共同的逻辑层——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公里。
还有一种情形,便是天线的问题。任何一种天线都有天线增益系数以及方向性。常日外置天线的增益就优于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%丢包问题,对运用自身的影响便是致命的。在运用中常见的对丢包的容错,有如下办理办法。
①合理重传:
重传是大家都能想到的方法,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触发后再写入下一条,就可以很好地规避软件丢包的问题。
对付吸收端也是如此,多个发送端向同一个吸收端发送,CSMA很好地规避了冲突,发送端收到了各自的ACK,但是发送端发送的在吸收端没有得到精确的相应。那么就有可能是吸收真个处理能力有限,各个发送端累计发送的全部堆在吸收端正在处理,这种情形就要考虑系统设计问题,减少吸收真个处理压力。
总结对付丢包的容错处理是无线通信设计的关键,现有成熟的通信协议虽然做了很多方法来降落丢包率,如果丢包一旦发生一定要有容错机制来应对,否则就算是千分之一或万分之一的丢包,都会为全体无线系统带来灾害性的后果。