前言:这是最为常见和常用的路由,也是动态路由的一种,它在前面的路由上再次优化
背景
rip是动态路由不错,但是却是存在大的缺陷,那就是不适用于大型网络,并且防止环路的机制会造成一定的后果
相关名词
- ospf:开放式最短路径优先协议,是基于IP的,协议号是89
- area:区域,可以分为骨干区域和非骨干区域,其中非骨干区域又可以分为特殊区域和非特殊区域。骨干区域固定为0,取值范围为0-4294967295,特殊区域又分为stub区域、完全stub区域、nass区域、完全nass区域
- router-ID:是运行了ospf协议的路由器的唯一标识,可以手工指定、如果没有手工指定,那么就是时看loopback地址,如果没有配置loopback接口,那么就是设备最大的IP地址,ps:华为设备的特性是route-ID冲突会自己修改
- process:进程号,范围是1-65535,不同进程号就是相当于不同的路由协议,不会互相影响
- DR:指定路由器,会和所有路由建立邻居角色。广播网络和NBMA网络中必须要选举DR
- BDR:是DR的备份
- IR:区域内路由器,在ospf中只要在区域内都是该路由器角色
- BR:骨干路由器,就是有一个接口属于骨干区域
- ABR:区域边界路由器,同时连接两个或者两个以上的路由器,其中一个区域要是骨干区域
- ASBR:自治系统边界路由器,只要引入外部路由,那么就是该路由器角色
- LSA:链路状态通告,是ospf用于交互的信息
- LSDB:数据库,里面存放着LSA信息
原理报文
hello报文
- 发现、维护ospf邻居,同时里面有一个字段(Rtr Pri)用来选举DR,发送方式是广播,目的地址是224.0.0.5
- DR选举规则:先比较优先级,范围为0-255,默认为1,优先级大的为DR;当优先级相同时,比较router-ID,大的优先。但是在实际中,那台设备先启动,那么就是DR
- 如果优先级为0,那么就不参与选举,但是如果都为0 ,那么在广播网络中会出现错误,同时DR和BDR不具备抢占性
- DR和BDR是针对接口来说的,就是说一个广播网段,就要选举一个BR
DD报文
- 协商主从、确定主从关系、同步LSDB
- 重要的字段:I(当发送连续多个DD报文时,如果这是第一个DD报文,则置为1, 否则置为0)、M(当发送连续多个DD报文时,如果这是最后一个DD报文,则置为 0,否则置为1,表示后面还有其他的DD报文)、MS(确定主从关系,置位为1表示为主)
- router-id大的会成为主设备
LSR报文
- 如果当LSDB同步过程,发现自己缺少的LSA信息,那么就会使用该报文,请求缺少的LSA信息
LSU报文
- 收到LSR报文,会发送该报文,把所有的LSA全部发送给对方
LSACK报文
- 确认是否收到LSU数据包,有两种确认方式,分别是显示确认和隐式确认
- 显式确认:就是直接回复LSACK报文,进行确认
- 隐式确认:不回复LSACK,而是将LSA进行二次封装,向目的地址224.0.0.5发送,DRother收到后,会看做为隐式确认
- 条件是必须是DR other,且网络类型是广播型网络
LAS类型
|----------------------------|-----------------|------------|-------------|-------|
| 名称 | 作用 | 产生者 | 泛洪区域 | 携带信息 |
| router LSA(路由器LSA) | 计算区域内路由 | 所有路由器 | 本区域内 | 拓扑+路由 |
| network LSA(网络LSA) | 计算区域内路由,对一类进行补充 | DR | 本区域内 | 路由信息 |
| network summary LSA(网络LSA) | 计算域间路由 | ABR | 区域间 | 路由信息 |
| ASBR summary LSA(网络汇总LSA) | 告知ASBR所在的位置 | ABR | 除了ASBR所在的位置 | 拓扑信息 |
| external LSA(外部LSA) | 计算外部路由 | ASBR | 整个区域 | 路由信息 |
| NSSA LSA(NSSA外部LSA) | 计算特殊区域外部路由 | NSSA中的ASBR | 在NSSA区域 | 路由信息 |
状态机
down:是最开始的状态,没有收到任何的报文
attempt:是只在NBMA 环境中存在,没有收到邻居发的任何包,但是自己已经周期性发送hello报文了
init:开始收到hello报文,但是此时的hello报文中只是携带自己的router-ID,没有对方的
2-way:邻居双方都收到了hello报文,此时的DR和BDR也已经选举完成,是邻居建立成功的标志
EX-start:开始进行LSDB同步过程,这里还会进行主从选举
EX-change:会发送自己的LSA摘要信息
loading:等待对方发送缺少的LSA信息
full:表明邻接起来,ospf完全建立成功
过程
- 首先是发送hello报文,里面携带自己的router-ID,向组播地址224.0.0.5发送,此时的状态是init
- 当对端设备收到hello报文后,解析获得对端的router-ID,并且加入自己的邻居列表,此时的状态是2-way(可能存在单向的2-way状态)
- 此时邻居关系已经建立完成,只有邻居关系建立好,才能建立邻接
- 发送第一份DD报文,开始选举主从,此时的DD报文中没有携带摘要的LSA信息,状态是EXstart,注意当主从选举完成后,序列号以主设备的序列号为起点
- 会发送第二份DD报文,开始进行LSDB同步,状态是EXchange
- 如果发现LSA缺少的话,那么就会发送LSR报文进行请求,此时的状态是loading
- 当收到LSR报文时,那么就会发送LSU,发送完整的LSA信息给请求的设备,此时的状态还是loading
- 后面设备会回复一个LSACK,表示对LSU进行回复,此时的状态是full
定时器
- hello time:是hello周期发送的时间,为10秒
- 超时时间:在规定时间没有收到来自邻居设备的hello报文,会认为邻居出现故障,就会断开邻居关系,时间是hello时间的4倍
- 可以修改这两个定时器:ospf time hello 时间/ospf time dead 时间(都是在接口视图下修改)
邻居关系建立失败原因
- 直连设备的区域ID不一样
- router-ID一致
- hello time时间和dead时间不一致
- 如果配置了认证,那么用户名和密码需要不一致
- 掩码不一致
防环机制
区域外防环
- 就是非骨干区域一定要和骨干区域相连
- 从骨干区域发出的三类LSA不能再次发回到骨干区域
- ABR设备从非骨干区域收到的三类LSA不能用作路由计算
区域内防环
- 本身的算法保证区域内无环
特殊区域
stub区域
- 隔离4类LSA以及5类LSA的进入
- stub区域访问外部路由的方法是通过,stub区域的ABR设备产生一条缺省的三类LSA
totally stub区域
- 隔离3类、4类、5类LSA的进入
- totally stub区域访问外部路由的方法是,通过totally stub区域的ABR设备产生一条缺省的三类LSA
NSSA区域
- 隔离4类LSA以及5类LSA的进入
- 可以存在ASBR设备,在这个区域引入的外部路由,都是以七类LSA的方式泛洪
- 访问外部路由的方式是,通过下发一条缺省的七类LSA
- 其他区域想要访问NSSA区域,需要进行七转五的操作,条件是角色必须是ABR设备,同时N/P字段必须置位
totally NSSA区域
- 隔离3类、4类、5类LSA的进入
- 可以存在ASBR设备,也可以正常引入外部路由
- 访问外部路由的方式是,通过下发一条缺省的七类LSA和缺省的三类LSA
实验实验拓扑
抓包实例
第一个DD报文
DD报文(可以看出谁是主设备)
最后一个DD报文
hello报文和头部
代码ospf 1 router-ID 1.1.1.1//进入OSPF视图并且配置router-ID
area 0.0.0.1 //配置区域ID
network 10.0.24.0 0.0.0.255 //宣告网段进入OSPF
network 192.168.1.0 0.0.0.255
ospf enable area 1//在接口视图下启用OSPF,两种宣告2选1
reset ospf process //这是重置进程号,如果需要修改router-ID,那么就要先重新配置,在重启进程
ps:这上面是OSPF的常用命令,但是并不是说OSPF就这些命令