OLSR协议
一、OLSR协议
1、OLSR概述
对于传统链路状态路由算法来说,我们让网络拓扑中的每个节点(路由器)向其他所有节点广播自己的链路状态分组,这个过程被称为泛洪。其中每个链路状态分组均包含节点所连接的链路标识和开销。最终经过泛洪的网络拓扑中的每个节点都能得到一幅相同的网络拓扑图。而OLSR(最优化链路状态协议)对传统算法进行优化。其中每个节点选择自己的邻居节点中的一部分来作为MPR节点(多点中继),只允许MPR节点进行泛洪广播并传播控制消息,从而减少了传输信息量。对于网络中的任意节点A,若它被它的一条邻居对称节点选为MPR节点,则A在网络中周期性的广播其链路状态控制信息。
OLSR协议可以通过改变最大传输时间间隔从而改变对网络拓扑变化的反应,此外通过全分布方式工作,无中心节点,不要求可靠传输(节点周期发送控制信息,总有一个是对的对吧)
因此,OLSR协议适用于规模大、节点密度高的场合
2、OLSR术语
术语以及各种消息格式见RFC3626,懒得写了
注意一点,一个节点可以有多个OLSR接口,每个OLSR接口分配一个IP。主地址则是一个运行OLSR协议的接口的IP地址
3、多点中继(MPR)
网络拓扑中的任意节点S从其对称一跳相邻节点集合中选取一个集合(MPR集),只有位于MPR集合中的节点会广播从S点发送的消息,而其余节点只会处理该传播信息而并不会进行广播。MPR集也被写作MPR(S)。
选出的MPR集需要能够传输信息到S节点的所有对称严格二跳节点。计算MPR集所需要的信息通过节点之间周期性的交换HELLO信息获取。
来个图片,下图中带阴影的节点就是MPR节点
4、分组处理以及转发流程
对于网络中的每一个节点,维护一个“重复元组”(Duplicate Tuple)
(D_addr, D_seq_num, D_retransmitted, D_iface_list,D_time)
其中D_addr是本消息源节点地址,D_seq_num是本消息序列号,D_retransmitted是布尔值,用于判断本消息是否被转发过,D_iface_list是已经收到本消息的接口地址列表,D_time是本消息的生存剩余时间(TTL)
分组处理算法
分组处理以及转发流程
5、信息储存
5.1、多接口关联信息
用于将不同接口以及对应节点相联系起来,一般用于多OLSR接口节点
(I_iface_addr, I_main_addr, I_time),I_iface_addr, I_main_addr为节点接口地址以及对应节点地址,I_time是TTL
5.2、本地链路信息
储存本地节点链路信息
(L_local_iface_addr, L_neighbor_iface_addr, L_SYM_time, L_ASYM_time, L_time)
L_local_iface_addr是本地节点(即链路的一个端点)的接口地址,L_neighbor_iface_addr是邻居节点(即链路的另一个端点)的接口地址,L_SYM_time是链路被视为对称的时间,L_ASYM_time是邻居接口能够被侦听的时间,L_time指定此记录过期并必须删除的时间。 当L_SYM_time和L_ASYM_time过期时,该链路被视为丢失。
5.3、相邻节点信息
本信息库储存相邻节点集、二跳相邻节点集、MPR集、MPR选择器集,见RFC3626 P23 4.3
e.g. 如果节点A将他的邻居节点B选做MPR,则A是B的MPR选择器
5.4、拓扑信息
即网络拓扑信息,描述网络的物理或者逻辑布局。
网络中的每个节点都维护着网络的拓扑信息。这些信息是从TC信息中获取的&#x