BATMAN.adv系列07 过度泛洪的遏制策略与网络重组
原创文章,转发请注明链接和作者。(而且作者很懒,没有检查错别字)
在BATMAN.adv系列01中介绍了BATMAN的OGM包转发机制,但是单纯遵从01中的机制进行转发会导致大量无效转发引起信道资源浪费,为此协议存在过度泛洪的遏制策略
过度泛洪的遏制策略
系列01提及OGM包数据帧中存在Sequence Number部分,其为OGM包的滑窗计数值,最大128。若所收到的OGM包序列号小于滑窗左侧,则该OGM包将被丢弃;若所收到的OGM包处于滑窗范围内,OGM序列号加一;若收到的OGM包序列号大于滑窗右侧,则窗口右侧值更新为该序列号值。图1为滑窗机制示意图。
图1 滑动窗口示意图
节点在接收到OGM包后将进行相应的检查,满足以下条件的OGM包将不会被转发:
- 所收到的OGM包中,协议版本号与程序正在运行的协议版本不同,丢弃该OGM包。
- 所收到的OGM包中,发送方MAC地址为以太网多播地址,或者OGM包的目的地址为MAC单播地址,丢弃该OGM包。
- 所收到的OGM包中,原节点MAC地址为自身,表明其为回环OGM包,不转发但用于计算EQ。
- OGM包发送者的MAC地址已存在于节点路由表中,且OGM包序列号小于滑窗序列号,则此OGM包已过时,丢弃该OGM包。
- OGM包转发自非最佳下一跳节点:设产生OGM包的源节点为o,OGM包经由b发往c,c转发并最终被d收到。若c需要发送数据给o时不选择b作为最佳下一跳,则d会丢弃所收到的这一OGM包。
网络重组
BATMAN.adv协议基于OGM的泛洪对整个链路的传输质量进行评估,但TQpath计算需要的统计平均值以及OGM包转发中存在的泛洪抑制,导致网络重组较为迟缓。
(1)节点加入时的网络重组
协议中存在位宽为BATADV_TQ_LOCAL_WINDOW_SIZE(默认:64)的计数器,这些计数器用于记录最近64个数据包是否成功接收,据此计算EQ与RQ。这一计数器使得EQ与RQ的变化较为平稳。因此,当一个节点b加入网络后,周边节点统计关于节点b的链路TQpath将平稳上升,来自节点b的OMG包中TQOGM也将平稳上升,直至新链路的TQOGM值高于其它链路时,数据包的转发路径才发生变化。因此新节点加入后网络重组需要一定时间。
(2)节点断开时的网络重组
统计EQ与RQ的计数器默认长达64位,统计最近64个OGM包的情况,如果节点断开与加入采用相同的网络重组方式,将导致某一关键节点断开后网络长时间中断。
BATMAN.adv协议中,由同一节点产生的一个OGM包会被不同节点复制并且转发,这意味着其它节点将反复收到周边节点对这一OGM包的复制。如图2节点o发出一个OGM包后,e节点收到b、c和d转发的OGM包副本。e的邻居节点b、c和d对于OGM包的转发呈竞争关系。当一个邻居节点连续n次(默认为5)转发过慢,则该节点的相关信息会被释放。如果所释放的节点为最佳下一跳节点,则节点e会迅速更换其它节点作为最佳下一跳。当从邻居节点接收到一OGM包后,会将TQOGM值记录于队列,并在同列写入0作为标记。图2的例子中,e从邻居节点b、c和d中成功接收节点o产生的OGM包,而后记录TQOGM于一长度为5的队列中。图中,邻居节点d连续5次没能在b和c节点之前将OGM包转发至节点e,其原因可能是d节点网络质量欠佳或是d节点丢失。此时邻居节点d的相关信息被释放,源节点列表也随之更改。
图2 节点断开时的网络重组示意图
(3)复杂网络重组
OGM包过度泛洪抑制中的OGM包,导致网络在需要进行复杂拓扑结构变化时将依次进行。图3中,扰动发生前后,节点h向节点o传输数据的最佳路径有重大区别。在扰动发生前,节点d的最佳下一跳为b,所以节点d接受来自节点c的OGM包。但是d所转发来自c的OGM包会被其它节点丢弃。在扰动发生后dc路径上的TQpath增加引起来自节点c的OGM包中TQOMG缓慢增加。直到节点d以节点c为最佳下一跳,此时节点d转发来自节点c的OGM包才会被其它节点接受,而后节点f和节点h依次重复上述步骤。换而言之,在复杂的网络重组中,最佳下一跳的变化随着OGM包的传播路线依次缓慢进行。
图3 扰动后最佳下一跳随着OGM包传播路径