栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

OLSR路由协议详解 一

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OLSR路由协议详解 一

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                   3
       0 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                   3
       0 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                   3
       0 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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号