主地址与多接口
- 对于单OLSR接口节点,其主地址等于该OLSR接口地址
但是对于多OLSR接口节点,则通过交换MID消息来定义其各个OLSR接口地址和相应主地址之间的关系
下面描述如何交换和处理MID消息
- 每个具有多个接口的节点必须周期性地将其接口配置广播给网络中的其他节点
- 这不是通过MPR泛洪机制、而是通过将MID消息泛洪到网络中的所有节点来实现
.
- 网络中的每个节点维护网络中其他节点的接口信息
- 从MID消息中获取其他节点的接口信息,并用于路由表的计算
多接口声明MID将一个节点的多个接口的地址(而且也涉及到该节点的主地址)填写到每个节点的多接口关联库中
多接口声明(MID)消息格式
MID消息作为前面描述的通用分组格式中的数据组成部分来发送
- 其“消息类型”设为MID_ MESSAGE (MID消息类型)
- TTL应该设为最大值255,以便于将本条消息广播到整个网络中
- Vtime 相应地设为MID_HOLD_TIME (MID消息保持时间)
- 图中的“OLSR接口地址”域包含本节点的一个OLSR接口的地址,但是不包含本节点主地址(已经在消息源节点地址域中表示本节点的主地址)
- 除了消息源节点主地址以外,将所有的接口地址都放在MID消息中
假如已经达到所允许的消息长度的最大值,但是仍然还有接口地址不能放入到本MID消息中,则需要产生多条MID消息,直到将全部接口地址发送完毕为止
MID消息的产生
一个节点向网络中发送一条MID消息,用于声明其多个接口信息(假定该节点有多个接口)
- 例如,一条MID消息包含跟其主地址有关的一张接口地址列表
- 这个接口地址列表可以作为每条MID消息的一个组成部分(例如由于网络规定的消息长度限制)
- 但是必须在一定的刷新周期(MID_INTERVAL)内完成对描述一个节点的接口集合的全部MID消息的分析
- 通过MID消息发送到网络中的接口信息有助于每个节点计算其路由表
只有一个接口地址的MANET网络节点(即运行OLSR协议的MANET网络节点)不必产生任何MID消息
一个节点尽管有多个接口,但是其中只有一个接口参与MANET网络和运行OLSR协议(例如一个节点连接有线网络,同时又连接一个MANET网络),则不必产生任何MID消息
一个节点有多个接口,其中多个接口参与MANET网络和运行OLSR协议,则必须按照规定产生MID消息
MID消息的转发
MID消息被MPR广播和转发,以便于传播到整个网络中
-
MID消息的处理
采用通过MID消息交换的信息来记录多接口关联集合中的数组
接收到一条MID消息后,必须根据该消息头中接收信息有效时间域(Vtime)计算“有效时间”
按照如下步骤和规则更新多接口关联信息库
- 第一,假如本条消息的发送节点接口(注意:不是消息的源节点)不在本节点的对称一跳相邻区域内,则必须丢掉本条消息。
- 第二,对于本条MID消息中列出的每个接口地址:
- 假如接口关联集合中存在一个数组同时满足以下条件:
I_iface_addr = interface address (接口地址)
I_main_addr = originator address (本条消息的源节点地址)
那么,将本数组的保持时间设为:
I_time = current time + validity time
- 否则,则在接口关联集合中记录一个新的数组:
I_iface_addr = interface address ( 接口地址)
I_main_addr = originator address (本条消息的源节点地址)
I _time = current time + validity time
接口地址解析主地址
- 一般情况下, OLSR协议中要求使用“接口地址”的唯一组成部分是链路探测
- OLSR 协议的其余组成部分对节点起作用,由其“主地址”唯一确认 (一个节点的主地址就是其“节点识别码ID”为了方便起见,这个主地址等于其中一个接口的地址)
- 如果一个网络的每个节点只有一个接口, 那么根据定义,每个节点的主地址就等于该节点的那个接口的地址
假如一个网络的节点具有多个接口,并且在一个公共OLSR区域内工作,则要求能够将任意一个接口地址映射为相应的主地址
MID消息的交换提供一种方法, 用于网络节点获取接口信息
因此,假如已知一个节点的其中一个接口地址,则有可能识别出该节点的“主地址”
给定一个接口地址
- 假如接口关联集合中存在一个数组满足:
I_iface_addr = interface address (接口地址)
- 那么搜索主地址的结果就是该数组的源节点地址I_main_addr.
- 否则,搜索主地址的结果就是该接口地址本身