Crazyflie 2.0学习周报2103-01:OLSR路由协议基本原理
1. 协议简介
最优链路状态路由协议 协议特点:
-
多中继节点(Multi Point Relay)机制:降低协议开销 先应式路由计算:查找路由时延小 最短路径:选择最短路径作为最优路径
2. 协议内容
2.1 OLSR协议核心思想——MPR机制
2.2 OLSR协议的分组
OLSR中有两种分组——HELLO分组和TC分组,下面将一一介绍这两种分组格式.
2.2.1 HELLO控制分组
HELLO分组的主要作用用于链路检测,发现邻居。OLSR协议通过周期性的广播HELLO分组消息来发现邻居,建立邻居表。下图是HELLO消息数据包头部格式及个各个字段的含义:
定义代码如下:cpp//olsrPacket.h 两个节点互发HELLO消息后,会更新自己的邻居表。如图,A收到B发送的HELLO消息后,会将B节点加入到自己的邻居表中。
2.2.2 TC(Topology Control)控制分组
TC分组的作用是声明MPR信息。TC分组包含拓扑信息,节点通过该信息计算路由。 注:节点的TC分组需要扩散至整个网络的每个节点,而HELLO分组只在产生HELLO分组的节点的一跳范围内传播
2.3邻居表
2.3.1 一跳邻居表
网络中每个节点根据接收和发送HELLO分组获得其两跳以内的邻居的信息,维护着一个一跳邻居表,表项格式如图: 实际Crazyflie中一跳邻居表代码定义:
2.3.2 两跳邻居表
节点储存一个两跳邻居表,描述邻居节点与对称两跳邻接点间的对称链路。
实际Crazyflie中两跳邻居表代码定义:
2.4 MPR Selector表
2.5 拓扑表
网络中每一个节点都维护一张拓扑表,记录从TC分组中得到的拓扑信息,并由此信息计算路由。节点将网络中其他节点的MPR信息作为拓扑条目记录在拓扑表中。 此条目说明了T_dest_addr已经选择了T_last_addr作为MPR,而且T_last_addr已经发布了序列号为T_seq的MPR Selector集信息。T_time作为保持时间,过期就删除该条目。
实际Crazyflie中拓扑表代码定义:
2.6 路由表
网络中每个节点维护一个路由表,表中保存了节点到网络中所有可达目的节点的路由,对于路由已知的网络中的每一个目的地,表项被存储在路由表中,所有路由为到达或者部分已知的表项不被记录。 实际Crazyflie中路由表代码定义: