LSR 为基于链路状态的路由算法。如何判断链路状态呢?在无线通信的环境下,只需要节点能够收到另一节点的包,就说明链路有效。另一方面,为了建立端到端的路径,路由算法需要发现并检查一跳由多个单跳链接组成的多条链路的可用性,这就需要不断的洪泛广播(flooding)来进行。这种洪泛的方式是非常浪费的。

为了在网络中同步节点状态,需要各个节点进行洪泛广播,产生大量冗余的通信,在能源受限的移动网络中是非常不经济的。OLSR 通过有选择的洪泛转发(MPR: Multi-Point Relay)来解决这个问题。
OLSR(Optimized Link State Routing: RFC 3626, October 2003)是一种基于连接状态的表驱动无线路由协议,它在 Ad Hoc 路由协议中的位置如下图所示。

OLSR 包使用 IP 地址作为其在网络中的唯一标识,兼容 IPv4 和 IPv6 两种格式,下面以 IPv4 为例说明其包格式:

OLSR 包由以下几部分组成:
OLSR 的节点中存储了大量的数据表,主要有以下三种:
由于发送消息至一跳邻节点、两跳邻节点和定义 MPR 都需要用到 HELLO 消息,所以首先介绍一下 HELLO 消息。下图是 HELLO 消息的格式,它位于 OLSR 包的 data 域,传播 HELLO 消息的 OLSR 包的 Message Type 和 TTL 域都为1。

HELLO 消息由以下几个部分组成:
OLSR 通过周期性地广播 HELLO 消息来进行邻节点探测,建立邻居表,一般检测两个节点之间链路状态的流程如下:

以 A 和 B 两个节点举例,想要检测它们之间链路的状态,需要进行以下几步:
基于这个机制,OLSR 中的节点可以进行邻节点的探测,如果与某个邻节点的连接状态变为双向对称连接,则记录在 neighbor set 中,并开放接口连接邻节点;如果连接状态建立失败,则删除记录。
通过 HELLO 消息广播过程,可以让网络中所有节点都能知晓距离自己两跳及以内的邻居的信息。
基于上述过程建立的邻居信息表,节点可以选择出邻居 MPR 节点集合。一个节点选定的 MPR 是负责转发此节点的广播消息的节点,通过控制 MPR 集合的大小可以减少洪泛的开销。
如下图所示情况为例,左侧为经典的洪泛技术,每个中心节点需要传播信息到其所有邻节点;右侧为引入 MPR 技术的 OLSR 协议,每个节点只需将信息传送到其 MPR 节点集合,并由它们广播消息。

MPR 的选择主要分为两步:
为了方便理解,以下图中的情况为例,找出“1”节点的最小 MPR 集合。

首先定义其所有的两跳邻节点(不包括一跳邻节点)。

然后找到其孤立两跳邻节点 2 和 24,然后将连接它们的一跳邻节点 4 和 22 加入 MPR 集合。

最后按照覆盖二跳邻节点的数量从高到低依次选择,其中15覆盖4个,18、5、10覆盖三个,因为选择5和10都可以满足覆盖所有两跳邻节点,所以选择它们两个中任意一个即可。

在本地节点被选作 MPR 后,它会向其邻节点发送初始化为 MPR_NEIGH 的 HELLO 消息,邻节点收到消息后更新其 MPR selector set,此表表明节点应该转发来自哪些节点广播消息。
邻节点探测使用了 HELLO 消息,拓扑管理则是用另一种格式的消息:Topology Control 消息。MPR 会定期发送 TC 消息,其中包含了选择这个节点作为 MPR 的节点的集合。

基于 TC 消息的交换,各个节点可以维护一个 Topology Table(拓扑表),拓扑表的结构如下:
| Destination address | Destination’s MPR | MPR SelectorSequence Number | Holding Time |
|---|---|---|---|
上面提到 TC 消息中包含的是发送节点的 MPR Selector 列表。那么当另一节点收到 TC 消息时,将 TC 条目中的 MPR Selector 作为目标地址,则发送节点即为其 MPR 节点,然后填入 TC 消息中的 Sequence Number,已经预定义的 Holding Time。
下面举一个例子说明拓扑管理的过程,这个例子中 A、B、C 三个节点均将 M 作为自己的 MPR 节点,那么 M 会建立如下的 MPR Selector 列表:
| TC Originator | MPR Selector | MPR Selector Sequence |
|---|---|---|
| M | A | 1 |
| M | B | 1 |
| M | C | 1 |
作为 MPR,M 会将其 MPR Selector 列表通过 TC 消息广播出去。当 Y 收到 M 发出的 TC 消息时,将 TC 消息中包含的 MPR Selector 信息转化成拓扑表 (Holding Time 省略):
| Destination address | Destination’s MPR | MPR SelectorSequence Number |
|---|---|---|
| A | M | 1 |
| B | M | 1 |
| C | M | 1 |
| … | … | … |
网络中周期性的通过 TC 消息保持拓扑表更新,通过拓扑表可以计算出全局路由表。
基于拓扑表和邻节点信息,网络中的每个节点都维护一张路由表(Routing Table),路由表格式如下图所示:

每次更新拓扑信息,路由表都需要重新计算,计算步骤如下:
OLSR 协议相对 AODV 复杂,RFC 页数就是其2倍,以上内容是我根据相关材料进行的总结。
此外,我们组研读了 OLSR 协议的 RFC,整理的完整版 PDF 在这里。
参考
- Ad Hoc Networks: Routing, QoS and Optimization
- RFC 3626 Optimized Link State Routing
- Optimized Link State Routing Protocol for Ad Hoc Networks
- OLSR: Optimized Link State Routing
- OLSR routing protocol in NS2
- OLSR 路由算法原理
到此这篇关于自组织网络Ad Hoc之AODV协议详解的文章就介绍到这了,更多相关AODV协议内容请搜索脚本之家以前的文章或继续浏览下面的相关文章
版权声明: 本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!联系QQ:76900276
转载请注明: 自组织网络Ad Hoc之OLSR 协议详解