OSPF -- 开放式最短路径优先协议【链路状态协议】( 二 )


死亡时间 -- 4倍的hello时间
为了区分和标定OSPF网络中每台路由器,我们引入了RID【route id】 -- 1,全网【OSPF网络】唯一;2、格式统一 -- RID要求按照IP地址的格式来进行标定【由32位二进制构成,用点分十进制来表达】
RID的生成方法:
1、手工配置 -- 满足以上两点要求即可
2、自动生成 -- 如果路由器存在环回接口,则将取环回接口的IP地址中最大的作为RID;如果路由器不存在环回接口,则将在路由器的物理接口中取最大的IP地址作为RID 。
hello包中将携带RID
DBD包 -- 数据库描述报文 -- 携带的是路径信息的摘要 -- 相当于是本地存放LSA数据库(LSDB - 链路状态数据库)的目录
LSR包 -- 链路状态请求报文 -- 给予DBD包请求未知LSA信息
LSU包 -- 链路状态更新报文 -- 携带LSA信息的数据包
LSACK包 -- 链路状态确认报文
OSPF也存在周期更新,每30min一次
2、OSPF的状态机
Down State 陌生人 -》hello-》Init State 初始化-》回hello-》Two-Way State 双向通讯状态 标志着邻居关系的建立 【邻居关系并不是终点】
(条件匹配)-- 条件匹配成功,则将进入下一个状态;如果条件匹配失败,只能维持邻居关系,通过10s/30s一次的hello包进行周期保活
Two-Way -》DBD 谁的id大谁就先进入 State -》进入状态开始后才正式进行数据交换
主从关系选举 -- 通过比较RID,RID大的为主,可以优先进入下一个状态,主从关系选举还可以完成隐形确认【回ack是显性确认】
这里使用DBD包来进行主从关系选举,主要是为了和之前的邻居状态进行区分
FULL状态,-- 标志着邻接关系的建立 -- 邻接关系主要为了和之前的邻居关系进行区分,邻居关系只能发送hello包进行周期保活,而邻接关系才能真正交互LSA信息
Down状态 -- 启动OSPF,发送hello包之后进入下一个状态
(初始化)状态 -- 收到hello包中包含本地的RID,则进入下一个状态
2-Way(双向通讯)状态 -- 标志着邻居关系的建立
(条件匹配)
(预启动)状态 -- 使用未携带数据的DBD包进行主从关系的选举,为主的可以优先进入下一个状态 。
(准交换)状态 -- 使用携带摘要信息的DBD包进行目录共享
(加载)状态 -- 基于DBD包比对自己本地数据库,使用LSR包请求未知的LSA信息,对端通过LSU包回复LSA信息,需要ACK确认
FULL状态 -- 标志着邻接关系的建立
3、OSPF的工作过程
启动配置完成后,OSPF向本地所有运行协议的接口以组播224.0.0.5的形式发送hello包:hello包中会携带本地的RID以及本地一致的邻居的RID 。之后,将收集到的邻居关系记录在一张表中 -- 邻居表
邻居表建立后进行条件匹配,失败则停留在邻居状态,仅通过hello包进行周期保活 。
如果匹配成功,则开始建立邻接关系 。首先,先使用未携带数据的DBD包进行主从关系选举 。之后,使用携带数据的DBD包来共享本地目录信息 。之后本地使用LSR/LSU/LSACK获取未知的LSA信息,完成本地数据库的建立 -- LSDB --生成数据库表 。
最后,基于本地LSDB去通过SPF算法计算到达未知网段的路由信息,将路由信息加载到路由表中 。
收敛完成后,OSPF需要通过Hello包进行周期保活,每30min进行一次周期更新 。
结构突变的场景:
1、突然断开一个网段 -- 触发更新 LSU发出
2、突然增加一个网段 -- 触发更新 LSU发出
3、无法沟通 -- dead time
4、OSPF的基本配置
1、启动OSPF进程
[r1]ospf -id 1.1.1.1
[r1-ospf-1]
2、创建区域
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]
3、宣告 -- 作用1,激活接口;2,发布路由