OLSR是一种用于移动自组网[1]、[2]的主动路由协议。它非常适合大型和密集的移动网络,因为使用MPRs实现的优化在这种情况下工作得很好。与经典的链路状态算法相比,网络越大、越密集,就可以实现越多的优化。
OLSR使用逐跳路由,即,每个节点使用其本地信息来路由包。OLSR非常适合于网络,在网络中,较大的节点集之间的流量是随机的、零星的,而不是几乎完全只在较小的特定节点集之间。作为一种主动协议,OLSR也适用于通信对随时间变化的场景:在这种情况下不会生成额外的控制流量,因为所有已知目的地都始终维护路由。
概述
OLSR是一种用于移动自组织网络的主动路由协议。该协议继承了链路状态算法的稳定性,并且由于其主动性,在需要的时候可以立即使用路由。OLSR是对经典链路状态协议的优化,为移动自组织网络量身定制。
OLSR只使用选定的节点(称为MPRs)来重新传输控制消息,从而最小化控制流量泛滥带来的开销。这种技术大大减少了将消息发送到网络中所有节点所需的重发次数。其次,OLSR只需要淹没部分链路状态即可提供最短路径路径。所需的链路状态信息的最小集合是,所有选择为MPRs的节点必须将链路声明到它们的MPR选择器。额外的拓扑信息,如果存在,可以利用,例如,为冗余的目的
通过减少周期性控制消息传输的最大时间间隔,OLSR可以优化对拓扑变化的响应性。此外,由于OLSR持续维护到网络中所有目的地的路由,所以该协议对于流量模式非常有利,在这种模式中,一个大的节点子集与另一个大的节点子集通信,并且[源、目的]对随着时间而变化。该协议特别适用于大型和密集的网络,因为使用MPRs进行的优化在这种情况下工作得很好。与经典的链路状态算法相比,网络越大、越密集,就可以实现越多的优化。
OLSR被设计成以完全分布式的方式工作,不依赖于任何中心实体。该协议不需要可靠的控制消息传输:每个节点定期发送控制消息,因此可以承受一些此类消息的合理丢失。这种损失经常发生在无线电网络中,由于碰撞或其他传输问题。
而且,OLSR不需要按顺序传递消息。每个控制消息包含一个序列号,序列号为每个消息递增。因此,如果需要,控制消息的接收者可以很容易地识别哪些信息是最近的—即使消息在传输过程中被重新排序。
此外,OLSR还支持协议扩展,如睡眠模式操作、多路路由等。这些扩展可以作为协议的补充而引入,而不会破坏与早期版本的向后兼容性
OLSR不需要对IP包的格式进行任何更改。因此,任何现有的IP堆栈都可以这样使用:协议仅与路由表管理交互。
MPR
多点中继的思想是通过减少同一区域的冗余重传来最小化网络中泛滥消息的开销。网络中的每个节点在其对称的1跳邻居中选择一组节点,这些节点可以重新传输其消息。这组选定的邻居节点称为该节点的“多点中继”(MPR)集。节点N的邻居(不在其MPR集中)接收和处理广播消息,但不转发从节点N接收到的广播消息。
每个节点从它的1跳对称邻居中选择它的MPR集。选择这个集合时,它覆盖(在无线电范围方面)所有对称的严格2跳节点。N的MPR集合,记作MPR(N),是N的对称1跳邻域的任意子集,满足以下条件:N的对称严格2跳邻域内的每个节点必须有一个指向MPR(N)的对称链接。MPR集越小,路由协议导致的控制流量开销越小。[2]给出了MPR选择算法的分析和实例。
每个节点维护选择它作为MPR的邻居集的信息。这个集合称为节点的“多点中继选择集合”(MPR选择集合)。节点从邻居定期接收的HELLO消息中获取此信息。
从节点N的MPR选择器中发出的广播消息,打算在整个网络中传播,如果节点N还没有接收到广播消息,则假定该广播消息由节点N重新发送。这个集合可以随时间改变(即,当节点选择另一个MPR-set时),并由其HELLO消息中的选择器节点指示。
协议功能
本节概述总体协议的功能。OLSR被模块化为功能的“核心”和一组辅助功能,这些功能是协议操作所必需的。
核心本身指定了能够在独立的MANET中提供路由的协议。每个辅助功能提供额外的功能,这些功能可能适用于特定的场景,例如,当一个节点提供MANET和另一个路由域之间的连接时。所有辅助功能都是兼容的,只要辅助功能的任何(子)集可以用核心实现即可。此外,该协议允许异构节点,即,实现辅助功能的不同子集的节点在网络中共存。将OLSR的功能划分为核心功能和一组辅助功能的目的是提供一个简单且易于理解的协议,并提供一种只在需要特定附加功能时增加复杂性的方法。
核心功能
OLSR的核心功能指定了节点的行为,配备了参与MANET的OLSR接口,并运行OLSR作为路由协议。这包括OLSR协议消息的通用规范及其通过网络的传输,以及链路感知、拓扑扩散和路由计算。
具体来说,核心是由以下组件组成的:
分组格式和转发:
包格式的通用规范和优化的洪泛机制是所有OLSR控制流量的传输机制
链路感知
链接感知是通过在接口上定期发送HELLO消息来实现的,通过这些接口检查连接性。为每个接口生成一个单独的HELLO消息,并根据第7节中的规定发出相应的HELLO消息。
由链路感应产生的是一个本地链路集,描述“本地接口”和“远程接口”之间的链路。,邻居节点上的接口。
如果链路层提供了足够的信息,则可以利用这些信息来填充本地链路集,而不是进行HELLO消息交换。
邻居检测
对于只有单个接口节点的网络,节点可以直接从作为链路感知的一部分交换的信息中扣除邻居集:根据定义,单个接口节点的“主地址”是该节点上唯一接口的地址。在具有多个接口节点的网络中,需要额外的信息才能将接口地址映射到主地址(从而映射到节点)。这些附加信息是通过第5节中描述的多个接口声明(MID)消息获得的。
MPR选择和MPR信号
MPR选择的目的是让一个节点选择它的邻居的一个子集,这样一个广播消息,由这些被选择的邻居重新传输,将被所有节点接收2跳。计算节点的MPR集时,对于每个接口,它都满足这个条件。执行此计算所需的信息是通过定期交换HELLO消息获得的,如第6节所述。MPR选择程序详见第8.3节。MPR信号是根据第6节的规定提供的。
拓扑控制消息扩散
拓扑控制消息是分散的,其目的是为网络中的每个节点提供足够的链路状态信息,以允许路由计算。拓扑控制消息在与第9节的规定相对应的情况下被扩散。
路由计算
OLSR协议术语
node:一种MANET路由器
OLSR接口(OLSR interface):参与运行OLSR的MANET的网络设备。一个节点可以有多个OLSR接口,每个接口分配一个惟一的IP地址。
非OLSR接口(non OLSR interface):网络设备,不参与运行OLSR的MANET。一个节点可能有几个非OLSR接口(无线和/或有线)。来自这些接口的路由信息可以注入到OLSR路由域。
单个OLSR接口节点(single OLSR interface node):具有单个OLSR接口的节点,参与一个OLSR路由域。
多个OLSR接口节点(multiple OLSR interface node)
主地址(main address):一个节点的主地址,将在OLSR中用于控制流量,作为该节点发出的所有消息的“始发者地址”。它是节点的一个OLSR接口的地址。单个OLSR接口节点必须使用其唯一OLSR接口的地址作为主地址。多个OLSR接口节点必须选择一个OLSR接口地址作为“主地址”(相当于“路由器ID”或“节点标识符”)。选择哪个地址并不重要,但是节点应该始终使用与其主地址相同的地址。
邻居节点(neighbor node)
二跳邻居节点(2-hop neighbor)
严格2-hop邻居(strict 2-hop neighbor):一个2跳邻居,它不是节点本身,也不是节点的邻居,而且是邻居的邻居,其意愿不同于节点的WILL_NEVER。
multipoint relay (MPR)
multipoint relay selector (MPR selector, MS):选择其1跳邻居节点X作为其多点中继的节点将被称为节点X的多点中继选择器。
链路(link):一个链接是一对OLSR接口(来自两个不同的节点),它们可以相互监听对方的声音。,其中一个可以接收来自另一个的流量)。当一个节点的一个接口与另一个节点的一个接口有链接时,该节点被称为与另一个节点有链接
对称链路(symmetric link)
非对称链路(asymmetric link)
对称一跳邻居
对称二跳邻居
对称严格二跳邻居