• OLSR协议的链路探测和相邻节点探测基本上为每个节点提供了一张相邻节点列表、分组格式和分组转发、MPR优化泛洪机制
  • 使用这张相邻节点列表可以直接进行通信
  • 在此基础之上将拓扑信息传播到整个网络中
  • 下面描述链路探测和相邻节点探测得到的哪些信息需要被传播到整个网络中,以及如何被用来建立路由

    TC消息的格式

  • 拓扑控制(Topology Control, TC)消息

image.png

  • TC消息作为前面描述的通用分组格式中的数据组成部分来发送
  • 其“消息类型”被设为TC_MESSAGE (TC消息类型)
  • TTL 应该设为最大值255,以便于将本条消息传播到整个网络中
  • Vtime 相应地设为TOP_HOLD_TIME (TC消息保持时间)

  • 对各个组成域详细说明如下:

  • 广播相邻节点序列号(Advertised Neighbor Sequence Number, ANSN)
    • 本域表示与一个广播相邻节点集合有关的序列号
    • 一个节点每当检测出其广播相邻节点集合发生变化后,递增其序列号(对返转问题的处理(https://www.yuque.com/wangxi_chn/iku3gm/iaiicw))
    • 发送ANSN是为了保持跟踪最新的信息
    • 一个节点接收到一条TC消息后,就能够根据其ANSN决定本条TC消息源节点的广播相邻节点的有关信息是否比已有的新
  • 广播相邻节点主地址
    • 本域表示一个相邻节点的主地址
    • TC消息中包含其源节点的广播相邻节点的全部主地址
    • 假如根据网络规定的最大长度,一条TC消息不能容纳全部广播相邻节点的地址,则需要使用多条TC消息把全部广播相邻节点的地址传输完毕
    • 假如需要一定的冗余度,则在TC消息中还可以包含相邻节点的其他主地址
  • 保留(Reserved)

    • 保留今后使用,必须设为全0, 以便与本规范保持一致

      广播相邻节点集

  • 网络中的一个节点发送一条TC消息,用于向网络声明一个链路集合

  • 这个集合叫作广播链路集合(Advertised Link Set)
  • 其中必须至少包含到达该节点MPR选择器集合中的所有节点的链路
  • 其MPR选择器集合就是已经选择该节点作为MPR的相邻节点组成的集合
  • 假如由于某种原因需要分发TC冗余信息,则参考有关冗余拓扑信息的描述

  • 广播相邻节点集合的序列号ANSN随着该列表一起被发送

  • 当从广播相邻节点集合中删除链路的时候,或者当给广播相邻节点集合中添加链路的时候
  • 均必须递增其序列号ANSN

    TC消息的产生

  • 为了建立拓扑信息库,已经被选作MPR的每个节点广播TC消息

  • 利用各个MPR将TC消息泛洪到网络中的所有节点
  • 采用MPR具有更好的分发拓扑信息的可扩展性

  • 由于网络规定的消息长度有限,所以每条TC消息可能容纳部分地址列表

  • 但是必须在一定的刷新周期时间(TC_ _INTERVAL)内完成对描述一个节点的广播链路集合的全部TC消息的分析
  • 通过TC消息传播到整个网络中的信息有助于每个节点计算其路由表

  • 当一个节点的广播链路集合变成一个空集的时候

  • 该节点仍然应该以周期时间等于其已发送TC消息的“有效时间(Validity Time)”发送TC消息(消息为空)
  • 这个有效时间通常等于TOP_HOLD_TIME (TC消息保持时间),以便使已发送的TC消息无效
  • 直到某个节点被添加到这个广播链路集合后,然后该节点才应该停止发送TC消息

  • 一个节点可以发送额外的TC消息,以便加快对链路中断的反应

  • 当检测出MPR选择器集合发生了变化,而该变化可能是链路中断造成的
  • 则应该在经过一段小于TC _INTERVAL的时间后发送一条TC消息

    TC消息的转发

  • TC消息由MPR广播和转发,以便于传播到整个网络中

  • 必须按照“默认转发算法”转发TC消息

    TC消息的处理

  • 接收到一条TC消息后,必须根据本条消息头部的Vtime域计算其“有效时间”

  • 然后应该按照以下方法更新拓扑集合(进行ANSN比较)
  • 第一,若本条TC消息的发送节点(注意:不是本条消息的源节点)接口不在本节点的对称一跳相邻区域内
    • 则必须删除本条TC消息
  • 第二,若拓扑集合中存在一个拓扑数组,且有:
    • T_last_addr = originator address (本条TC消息的源节点地址)
    • T_seq> ANSN (本条TC消息的广播相邻节点序列号)
    • 则不必进一步处理本条 TC消息,而是将其丢掉(情形:所接收到的消息是乱序的)
  • 第三,将拓扑集合中同时满足以下条件的所有数组必须删除
    • T_last_addr = originator address (本条TC消息的源节点地址)
    • T_seq<ANSN(本条TC消息的广播相邻节点序列号)
  • 第四,对于从本条TC消息中接收到的每个广播相邻节点主地址
    • (1)若拓扑集合中存在某个数组同时满足:
      • T_dest_addr=广播相邻节点主地址
      • T_last_addr = originator address (本条TC消息的源节点地址)
      • 则必须将该数组的保持时间设为:
      • T_ time = current time + validity time
    • (2)否则,必须在拓扑集合中记录一个新的数组:
      • T_dest_addr= 广播相邻节点主地址
      • T_last_addr = originator address (本条TC消息的源节点地址)
      • T_seq = ANSN (本条TC消息的广播相邻节点序列号)
      • T_time = current time + validity time