batman-adv链路传输质量计算方法

来源:互联网 发布:windows查看进程端口 编辑:程序博客网 时间:2024/05/21 21:43

单跳传输质量计算

传输质量(Transmission Quality, TQ)的计算需要先计算两个值:接受质量(Receive Quality,RQ)以及回传质量(Echo Quality,EQ),图1展示了计算单跳TQ值的过程。

单跳传输质量(TQ)计算示意图 A.RQ计算 B.EQ计算 C.TQ计算
图1 单跳传输质量(TQ)计算示意图 A.RQ计算 B.EQ计算 C.TQ计算

如图所示,A节点与B节点互为一跳邻居节点,以A节点来说,接受质量(RQ)指的是从B过来的一跳链路质量,而回传质量(EQ)则是指A发出的包经一跳到B节点后又被B节点一跳转发回来的这两跳链路的质量。这两者的计算方式相同,都是通过一个64位的滑动窗口来实现。

OGM学习包在这里被用于计算RQ以及EQ,通过滑动窗口记录的接收到的OGM包的多寡,即可以判断链路质量。如前所述,OGM包是带有递增的序列号的,每收到一个OGM包,节点便会根据OGM的序列号来更新RQ和EQ的滑动窗口。根据新收到的OGM序列号,滑动窗口会不断向前滑动,永远只保留对应最新的64个序列号的位置(空位初始化置0),并且在接收到对应序列号的OGM包时,就在对应的位上做上记号(置1),这样通过滑动窗口中1的个数即可以计算出RQ和EQ。虽然计算 RQ和EQ的方法一样,但它们计算所需要的OGM包却不同,计算RQ时需要的是B节点经过一跳发来的由B节点产生的OGM包,而计算EQ时需要的是A节点自身产生的经过一跳发给B节点又被B节点一跳转发回来的OGM包。

获得RQ和EQ以后,便可以计算单跳的TQ,在这里即是指A节点到B节点的TQ,如前所述,RQ指B节点到A节点的链路质量,而EQ指A节点到B节点再回到A节点的两跳链路质量。而链路质量也可以说是传输的成功率,链路质量越好,传输的成功率越高,用滑动窗口来计算RQ和EQ也是用传输成功率来衡量链路质量。那么既然EQ涉及的传输需要经过这两跳,则这两跳都必须成功才能保证这一传输的成功。若设A节点到B节点的传输成功率为 , 而B节点到A节点的传输成功率为 ,则EQ所对应的传输成功率应为
(1) SEQ=Sab×Sba
而TQ正好是A节点到B节点的链路质量,其对应的传输成功率即 ,而RQ对应的传输成功率则是 ,故由式(1)可得
(2) EQ=TQ×RQ
在已经知道EQ以及RQ的情况下,可以得到单跳TQ为
(3) TQ=EQ/RQ

路径传输质量计算

上一小节阐述了如何计算得到单跳的TQ值,但要判断到目的节点的路由下一跳需要知道到目的节点这整一条路径的TQ值才能够判断,如前所述,OGM包中还记录了一个TQ值,而这个TQ正是所需要的路径TQ值。当OGM包由源节点广播发出并在被之后的节点广播转发时,节点并不会广播每一个收到的OGM包,它们只会广播来自最优路由下一跳的OGM包,故能被节点广播转发的OGM包中所带的TQ必定是从该节点到目的节点的最好TQ值,该OGM包也必定来自去往目的节点的最优路由下一跳。而其余OGM包虽然不能被转发,但也会用于计算从该节点经过该OGM上一跳到目的节点的TQ值,若其高于目前的最优路由下一跳的TQ值,则更新最优路由下一跳。经过这一广播转发规则的过滤,不仅避免了带宽的浪费,也保证了路由下一跳总是最优的,OGM包中包含的路径TQ值计算过程如图2所示

路径传输质量计算示意图
图2 路径传输质量计算示意图

若A节点为产生OGM包的源节点,刚生成的OGM包中的TQ为100%(实际代码中TQ值由一个8比特的数值表示,取值范围为0到255),再对外广播后若传到了B节点,此时OGM包会通过与这一跳的TQ值相乘来更新它所包含的路径TQ值,如下所示
(4) PathTQ=localTQ×PathTQ
这样,若B节点到A节点之间的单跳TQ为90%,则B节点转发的OGM包中的TQ值已经更新为 了,这一90%的TQ值指的是从B节点到A节点的这一条路径的TQ值。同样的,当B节点发出的OGM包被C节点所收到时,又会被乘以C节点到B节点这一跳的TQ,得到从C节点经过B节点最终到A节点的这一条路径的TQ值为90%*80%=72%。

原创粉丝点击