zoukankan      html  css  js  c++  java
  • 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包实现将源节点广播至全网,以及对链路质量进行评估的目标。将不需要其它节点中继就能交互数据的两个节点,称其互为邻居节点

    仅这篇博客,为了方便描述,进行一些约束,这些约束未必真实但是将方便理解:

    1. abc等小写字母表示节点名称,其中o节点为主要讨论对象。
    2. 如无特殊说明,只有作为主要讨论对象的o节点会主动产生,其它节点将转发o节点的OGM包。
    3. 所有节点都会转发收到的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计算得到的至bTQ。假如o还有多个邻居节点cd等,则会有TQ<o,c>TQ<o,d>,这些数值不一定相同。

    你以为这就完了吗?不,还有一些惩罚系数来调整TQ。

    为了尽量避免不对称双向路径的出现,协议中加入了不对称链路惩罚:TQ×(1-(1-RQ)3)。(下面这句话不好理解,需要结合后面OGM包中的TQ值来看)这一做时希望使得接收路径与发送路径尽量相同。

    为了减少数据包的转发次数,协议中加入了一跳惩罚(hop_penalty):TQ×hop_penaltyhop_penalty的具体值可配置。

    综合以上,TQpath=TQ×(1-(1-RQ)3)×hop_penalty。而TQpath才是程序计算中实际使用的TQ。TQpath<o,b>表示o计算得到的至bTQpath

    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的例子,图中节点将对比来自节点d和节点e的OGM包中TQOGM大小,当需要发送数据至节点o时,节点选取TQOGM较大的方向作为最佳下一跳。

     

    图3 OGM包泛洪示意图

     
  • 相关阅读:
    Android开发与Sequoyah的安装问题
    Discuz 数据库各表的作用
    jQuery-File-Upload $(...).fileupload is not a function $.widget is not a function
    phpstorm xdebug 无法断点调试问题
    Android Service 启动流程
    Discuz! 全局变量说明
    Discuz! X3 数据表、数据字段说明
    Spring Boot 搭建
    Android组件化开发(注意事项)
    NestedScrollView嵌套RecycleView发生的小问题
  • 原文地址:https://www.cnblogs.com/zornlink/p/14818473.html
Copyright © 2011-2022 走看看