OLSR路由协议,全称为Optimized Link State Routing,中文名为优化链路状态路由协议,是主要用于MANET网络(Mobile Ad hoc network)的路由协议。

下面可能会用到的概念:

  • 邻居节点:如果节点可以监听到节点 X,则节点 X 是节点的邻居节点。
  • 2 跳邻居:通过邻居节点监听到的节点是 2 跳邻居节点,可以包含节点自身以及某些 1 跳邻居节点。
  • 严格 2 跳邻居:即不是节点自身或其邻居节点,而是严格通过邻居节点监听到的节点。
  • 孤立两跳邻节点:指仅通过一个邻节点同目标节点相连的两跳邻节点。
  • 主要地址:在OLSR中,被定义为 OLSR 接口地址。
  • 链路:两个不同 OLSR 节点接口之间相互监听形成链路。
  • 对称链路:两个 OLSR 接口之间已经认证的双向链路。

核心机制---MPR机制

在OLSR路由协议中,比较核心的思想就是MPR机制。基于MPR机制,在路由表构建过程中,所有节点都可以接收信息,但是只有很少的被选定的节点才有权利传播接收到的信息,而被选定的节点称为 MPR节点。MPR节点关系到链路状态信息的广播,同时也是优化网络资源的一步,所以如何选定合适的MPR节点很重要。

MPR节点选定过程如下:

  1. 首先选择能够覆盖孤立两跳邻节点的一跳邻节点;
  2. 在剩下的一跳邻节点中,将节点根据覆盖二跳邻节点的数量从高到低排序,依序选择节点,直到覆盖所有的两跳邻节点。

数据包格式以及重要报文介绍

OLSR中任何数据包的基本布局如下(省略了IP和UDP的headers):

       0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|         Packet Length         |    Packet Sequence Number     |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Message Type |     Vtime     |         Message Size          |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Originator Address                       |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Time To Live |   Hop Count   |    Message Sequence Number    |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                                                               |:                            MESSAGE                            :|                                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Message Type |     Vtime     |         Message Size          |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Originator Address                       |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Time To Live |   Hop Count   |    Message Sequence Number    |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                                                               |:                            MESSAGE                            :|                                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+:                                                               :

其中,数据包的header主要包括:

  • Packet length :数据包的字节长度。
  • Packet sequence number :数据包的序列号。为每个接口维护一个单独的数据包序列号,以便顺序枚举通过接口传输的数据包。

消息的header主要包括:

  • Message type :消息类型,比如Hello、 topology control(TC)之类。
  • Vtime :节点收到消息后消息的有效时间。
  • Message size :消息的字节大小。从本消息的Message type字段到下一个消息的Message type字段计算大小。
  • Originator address :包含最初生成此消息的节点的主要地址。该字段不会在消息传播中发生改变。
  • Time To Live :消息将被传播的最大跳数。
  • Hop count :消息已达到的跳数。在重传消息之前,该跳数必须加 1。
  • Message sequence number :消息的序列号。用于确保给定的消息不会被任何节点多次重传。

接下来就是Message,消息的主体。消息主体主要有Hello、TC报文。

Hello报文

hello报文在数据包的消息header设置如下:

  • Message type :设为“HELLO_MESSAGE”
  • Time To Live :设为“1”
  • Vtime :设为“NEIGHB_HOLD_TIME”

Message主要格式如下:

       0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|          Reserved             |     Htime     |  Willingness  |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   Link Code   |   Reserved    |       Link Message Size       |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                  Neighbor Interface Address                   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                  Neighbor Interface Address                   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+:                             .  .  .                           ::                                                               :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   Link Code   |   Reserved    |       Link Message Size       |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                  Neighbor Interface Address                   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                  Neighbor Interface Address                   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中,各个字段的含义以及设置规则如下:

  • Reserved :设为0000000000000
  • HTime :节点接口 HELLO 消息的发送间隔
  • Willingness :节点为其他节点携带和转发流量的意愿,主要有为 WILL_NEVER,WILL_ALWAYS 和 WILL_DEFAULT
  • Link code :有关发送方接口与以下邻居接口列表之间的链路的信息。主要包括Link Type和Neighbor Type,如果Link code小于16比特,则必包含两个字段,每个字段2比特,格式如下:
          7       6       5       4       3       2       1       0+-------+-------+-------+-------+-------+-------+-------+-------+|   0   |   0   |   0   |   0   | Neighbor Type |   Link Type   |+-------+-------+-------+-------+-------+-------+-------+-------+

其中, Link Type主要包含四种:UNSPEC_LINK(无具体信息)、ASYM_LINK(不对称链接)、SYM_LINK(对称链接)、LOST_LINK(链接丢失)。 
           Neighbor Types主要包含三种: 
           SYM_NEIGH   表示邻居至少有一个与此节点对称链接。
           MPR_NEIGH   表明邻居至少有一条对称链路并且已被发送方选为 MPR。
           NOT_NEIGH   表示节点不再或尚未成为对称邻居。

  • Link message size :从当前 的Link Code 到下一个 Link Code 的字节长度
  • Neighbor interface address :一个邻节点的接口地址

TC报文

TC报文的全称为Topology Control ,与hello同理,在数据包的消息header设置如下:

  • Message type :设为“TC_MESSAGE”
  • Time To Live :设为“255”
  • Vtime :设为“TOP_HOLD_TIME”

Message主要格式如下:

       0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|              ANSN             |           Reserved            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|               Advertised Neighbor Main Address                |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|               Advertised Neighbor Main Address                |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                              ...                              |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中,各个字段的含义以及设置规则如下:

  • Advertised Neighbor Sequence Number(ANSN):给节点提供信息,以便接收到一个 TC 消息时,可以根据ANSN来判断接收到的邻居信息是否比它已有的信息更新。
  • Reserved :设为0000000000000000
  • Advertised Neighbor Main Address :包含被传播邻居节点的主要地址。是选择这个节点作为 MPR 的节点的集合,也称为 MPR Selector。

OLSR路由协议详解 一相关推荐

  1. 帧中继和路由协议详解-在帧中继多点子接口上运行EIGRP

    上一篇我们介绍了<帧中继和路由协议详解-在帧中继点到点子接口上运行EIGRP>,本篇我们开始介绍<在帧中继多点子接口上运行EIGRP>的配 置.相关概念,如子接口.IARP.D ...

  2. 帧中继和路由协议详解-在帧中继点到点子接口上运行EIGRP

    上一篇我们介绍了在帧中继物理里接口点对点上运行EIGRP的配置,本篇我们开始介绍在帧中继点到点子接口上运行EIGRP的配置. 背景 当有多个分部的局域网通过帧中继和总部进行连接时,为了减少对总部路由器 ...

  3. OSPF路由协议详解

    OSPF路由协议详解 一.OSPF路由协议详概述 AS自治系统分类 二.OSPF工作过程及原理 1.OSPF工作过程 2.OSPF工作原理 五种报文 三个阶段 三张表 三.OSPF区域 OSPF区域类 ...

  4. OLSR协议详解(1)

    基本原理 数据结构 链路感知 邻居侦听 MPR选择 基本原理: 网络中每个节点只选择自己邻居节点的一个子集,作为多点中继集MPR.根据MPR的节点产生链路状态信息.通过节点不断的选择自己的MPR或该节 ...

  5. 计算机网络之路由协议详解

    在谈路由协议之前,我们先来看一下路由器的结构: 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组. 路由选择部分的核心是路由处理机,路由处理机可以根据选定的路由协议构造出路由表 ...

  6. ISIS路由协议详解(特征、与OSPF对比、拓扑结构、专业术语、路由器分类、网络类型、DIS、报文类型及抓包、邻居关系、路由渗透、路由过载OL位、ISIS认证分类、ISIS管理标签以及各种实验等)

    IS-IS特征: Isis:中间系统到中间系统 链路状态路由协议 IGP协议 SPF算法 ISIS采用TLV结构,因此扩展性很好(为支持新的协议和特性,只需要扩展新的TLV或子TLV:可以轻松扩展支持 ...

  7. 14-EIGRP路由协议详解

    1. EIGRP路由协议原理   EIGRP ( Enhanced Interior Gateway Routing Protocol )增强型内部网关路由协议,是思科公司开发的一个平衡混合型路由选择 ...

  8. OSPF路由协议详解及配置

    文章目录 一.OSPFv2基本概念 1.1 OSPF的基本概念 1.2 层次划分模型 1.3 OSPF区域划分优势 1.4 OSPF路由器类型 1.5 OSPF路由类型 1.6 OSPF支持的网络 1 ...

  9. OSPF路由协议详解与实战演练

    文章目录 基础学习 OSFP工作原理 基础配置 启动OSPF 配置OSPF路由器ID 接口启用OSPF 被动接口 实战 代码段: 静态ospf 代码段 后记 基础学习 OSFP工作原理 基础配置 启动 ...

最新文章

  1. C6678-SRIO和FPGA的通信
  2. 作用域和闭包的通俗理解
  3. 020_MySQL运算符
  4. Python(Windows)下安装各种库的多种方法总结--灵活使用pip
  5. 技术MBA打造中国未来CTO
  6. 基于springboot+shiro一套可落地实施安全认证框架整合
  7. AcWing 1055. 股票买卖 II
  8. matlab中rgb转hsv,matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转
  9. hive学习2(Navicat连接hive)
  10. [图示]做人36字诀:四)人际互动——教你赢得朋友
  11. 力扣Java编译器_力扣(LeetCode)位1的个数 个人题解
  12. WPF分享一个登录界面设计
  13. python的基本语法规则
  14. qq空间留言板php,qq留言板留言关心的话 qq空间留言板签名档图片
  15. redis 应用场景
  16. 云开发—扫码点餐系统实战
  17. 樊登读书会终身成长读后感_樊登读书会听书《终身成长》学习感悟
  18. 连接中控指纹考勤机 zkemkeeper zksoftware ZKTeco
  19. 《汇编语言程序设计》(双语)上机指导
  20. java技术栈是什么意思?一次认全9大主流技术栈!

热门文章

  1. C. Strange Test(位运算或)
  2. 用vuex对token/refresh_token 进行管理以及处理token过期问题
  3. Proteus:单片机LED灯一秒钟的亮灭模拟
  4. 【火灾检测】基于matlab实现图像特征火灾检测
  5. Android Glide 升级4.8 后, 原方法 animate() 无法使用
  6. PID里的PI调节器
  7. System Verilog学习笔记—随机化约束种类
  8. ceph设置副本的数目-2019014补
  9. 通过NFS挂载主机硬盘给另一台主机
  10. 基础知识贴----用好用活N97