BATMAN.adv系列01:BATMAN.adv IV 概述
原创文章,转发请注明链接和作者。(而且作者很懒,没有检查错别字)
BATMAN.adv,不同地方写得不太一样,有的是BATMAN-adv、Batman-adv、batman-adv等,其英文全称为:better approach to mobile ad-hoc networking。本文将介绍的是BATMAN.adv IV 协议。
BATMAN.adv涉及一个链路传输质量(TQ)的概念,但是各种计算中使用的变量通常也会被记为TQ,这相当混乱。在下文将会用不形式表示,详见下表。对于的符号在文中第一次出现的时候我也会标红。
符号 | 意义 |
TQ | “链路传输质量”的缩写。注:这个没有斜体 |
TQ | 根据接收质量和回环质量计算得到的TQ(详见下文),是一个0~1.0的定点数。注:这个有斜体 |
TQpath | 加入了不对称链路惩罚和一跳惩罚的TQ |
TQOGM | OGM包中的TQ |
▢<x,y> | 表示节点x到节点y的某个特征(包括上面的各种“TQ”) |
OGM包
BATMAN.adv协议通过周期地广播、接收和转发节点OGM包,实现路由发现并确定拓扑结构。产生并首次发送OGM包的节点称为该OGM包的源节点。其他节点根据协议转发该OGM包实现将源节点广播至全网,以及对链路质量进行评估的目标。将不需要其它节点中继就能交互数据的两个节点,称其互为邻居节点。
仅这篇博客,为了方便描述,进行一些约束,这些约束未必真实但是将方便理解:
- 用a、b、c等小写字母表示节点名称,其中o节点为主要讨论对象。
- 如无特殊说明,只有作为主要讨论对象的o节点会主动产生,其它节点将转发o节点的OGM包。
- 所有节点都会转发收到的OGM包。(对于可能会引起桥循环,信道资源过度消耗等都别管,假装都不存在,看完这篇再说)
OGM包的帧格式,大致看看就好了,对本文可能有点用的会加粗,下面会介绍。
字节 | |||
1 | 2 | 3 | 4 |
Packet Type | Version | TTL | Flags |
Sequence Number | |||
Originator Address(前个4字节) | |||
Originator Address(后2个字节) | Previous Address (前2个字节) | ||
Previous Address(后个2字节) | |||
Reserved | TQ | TVLV Lenght | |
后面可能还有其他的…… |
Originator Address:产生这个OGM包的节点
Previous Address :转发这个OGM包的节点。刚产生这个OGM包,Originator Address和Previous Address是一样的
TQ
基于OGM包的发送与转发,可以确定邻近的两个节点间的链路传输质量。以下图为例,讲解o节点如何计算链路传输质量,这表示自己将包成功发送至b节点的概率,记为TQ。
图1 RQ、EQ、TQ示意图
RQ:链路接收质量,节点o估计收到节点b数据包的可能性
计算RQ时,我们需要考虑一下b节点产生的OGM包。根据b节点产生的OGM包编号,节点o可知节点b近期产生的OGM包总数,计算实际接收数量与应接收数量之比可得RQ。
EQ:链路回环质量,节点o估计自己的包发送给节点b后,b再传回给o的成功概率
当节点o产生的OGM包被节点b所接收时,节点b会主动转发这一OGM包,此时节点o有一定概率接收到这一回环的OGM包。节点o通过统计回环接收的OGM包数量与自己实际产生的OGM包数量之比可计算EQ。
TQ:链路传输质量,节点o估计发送数据包至节点b并被成功接收的概率
易知:EQ=RQ×TQ,所以有:TQ=EQ÷RQ
由于这个TQ与收发对象有关,所有为了方便表述我给个下标,TQ<o,b>表示o计算得到的至b的TQ。假如o还有多个邻居节点c、d等,则会有TQ<o,c>、TQ<o,d>,这些数值不一定相同。
你以为这就完了吗?不,还有一些惩罚系数来调整TQ。
为了尽量避免不对称双向路径的出现,协议中加入了不对称链路惩罚:TQ×(1-(1-RQ)3)。(下面这句话不好理解,需要结合后面OGM包中的TQ值来看)这一做时希望使得接收路径与发送路径尽量相同。
为了减少数据包的转发次数,协议中加入了一跳惩罚(hop_penalty):TQ×hop_penalty,hop_penalty的具体值可配置。
综合以上,TQpath=TQ×(1-(1-RQ)3)×hop_penalty。而TQpath才是程序计算中实际使用的TQ。TQpath<o,b>表示o计算得到的至b的TQpath。
OGM包与路由路径
注意:下面TQ的关系发生了一些反转,下文将以o作为数据包的接收节点,其它节点考虑将数据包成功传输到o的概率,如图2中,标注的时TQpath<b,o>,而不是上文的TQpath<o,b>!!!!!!!注意力理解!!!
源节点o定期产生OGM包(默认为1s)。OGM包中存在一TQ值字段,记为TQOGM,节点o产生OMG包时TQOGM=1.0。转发后的OGM包中TQOGM累乘所经链路的TQpath。
图2 OGM包记录链路TQpath值
当网络毕竟复杂的时候,OGM包会泛洪到全网。如图3的例子,图中节点f 将对比来自节点d和节点e的OGM包中TQOGM大小,当需要发送数据至节点o时,节点f 选取TQOGM较大的方向作为最佳下一跳。
图3 OGM包泛洪示意图