HCIA-动态路由OSPF
前言
开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议
由于RIP是一种基于距离矢量算法的路由协议,存在着收敛慢(30s触发一次更新)、容易产生环路(若没有水平分割、毒性逆转、触发更新机制,极其容易产生环路)、可扩展性差(只适合小规模网络)等问题,目前已逐渐被OSPF取代
OSPF
- OSPF是大中型网络上使用最广泛的IGP协议
- OSPF是基于链路状态的路由协议
- 无类
- 使用组播(224.0.0.5和224.0.0.6)
- 收敛快
- 以开销(链路的带宽)作为度量值
- 采用自身的SPF算法可以有效避免环路
- 触发式更新(也会以较低的频率[每30分钟]发送定期更新,被称为链路状态泛红)
- 区域(area)的设计使得OSPF能够支持更大规模的网络
- 通过LSA(路况)的形式发布路由
- 不支持自动汇总,支持手动汇总
- 例如:172.16.0.0、172.16.1.0、172.16.2.0、172.16.3.0这四个子网,将他写成172.16.0.0/22即可包含前面四个子网 这就叫做汇总
OSPF区域
为了适应大型网络,OSPF在AS内划分多个区域;区域是以接口为单位来划分的(也因此:一个接口只能属于一个区域);每个OSPF路由器只维护所在区域的完整链路状态信息
划分区域的目的:尽量减少路由条目表,减少了路由条目也就减少了CPU与内存消耗、使拓扑变化仅影响本区域内部

区域类型
- 骨干区域
- Area 0 核心区域
- 也叫传输区域(负责在不同的非骨干区域之间分发路由信息)
- 例如:R1去往R3路由所在网络区域,必须经过R2 则R2就是核心区域
- 非骨干区域
- 非Area 0
- 也称为常规区域
⚠注意:所有其他非骨干区域必须和骨干区域直接相连;因此使用OSPF协议的路由拓扑大概应该是这样的:


从上面几张图可以发现,所有区域都会连接到Area 0区域(除特殊情况,有另外的方法解决此问题)
OSPF的路由器类型
- IR(Internal Router,内部路由器)
- 所有的接口都属于同一个区域
- BR(Backbone Router,骨干路由器)
- 至少有一个接口属于骨干区域
- ABR(Area Border Router,区域边界路由器)
- 连接一个或多个区域到骨干区域,至少有一个接口属于骨干区域
- ASBR(Autonomouse System Border Router,自治系统边界路由器)
- 把从其他路由协议学习到的路由以引入的方式到OSPF进程中
⚠注意:一台路由器可以同时属于多种类型
OSPF核心工作流程
1、发现并建立邻居关系
可以使用这条命令查看邻居
<>display ospf peer #查看邻居
发现与建立邻居关系的过程:
路由器R1开启OSPF功能后,会周期性地以组播(224.0.0.5)形式发送一个"Hello Packet"包
同样开启了OSFP功能的路由器在收到来自R1的打招呼后,便会交换信息确定邻居关系

2、传播LSA(区别于距离矢量的路由表更新)
a.Link State Advertisement 链路状态宣告(路况信息)
b.链路:路由器接口
c.状态:描述接口信息(地址、掩码、开销、网络类型、邻居关系等)
在路由器互相传播LSA时,它们会沟通自己知道哪些路,自己不知道哪些路,将自己不知道的记录下来

3、将LSA泛红到区域中的所有OSPF路由器,而不仅是直连的路由器
4、收集LSA创建LSDB(链路状态数据库、地图)
可以使用这条命令查看LSDB
<>display ospf lsdb #查看链路状态表
<>display ospf lsdb router #查看链路状态表
5、使用SPF算法计算到每个目标网络的最短距离,并将其置于路由表中

OSPF三张表
- 邻居表
- 记录所有邻居关系
- 链路状态数据库
- 记录所有链路状态信息
- 路由表
- 记录最佳路由
Router ID
在路由器运行OSPF协议前,必须选取一个RID;这个RID用来唯一标识一台OSPF路由器;若有两台路由器的Router ID一致,那么将无法建立邻居关系
RID可以手动配置,也会自动生成
RID生成规则:
- 手动配置(推荐)
- 在活动回环口上选取IP地址最高的
- 在活动物理接口上选取IP地址最高的
注意:回环口的选取优先级高于物理口
在创建OSPF进程时,使用这条命令可以手动指定RID
[]ospf 1 router-id 1.1.1.1 #创建进程号为1的OSPF 且RID为1.1.1.1
RID一旦选举后,就不会随意变动,若需要更改RID,需要重启OSPF进程
[]ospf 1 router-id 2.2.2.2 <>reset ospf process #重启ospf进程 []display ospf brief #查看ospf信息
OSPF数据包类型
- Hello
- 向邻居打招呼,建立并维护邻居关系
- Database Description
- 数据库描述,LSDB的摘要(仅包含LSA头部)
- 路由器邻居双方对自己所认识的路以及自己不认识的路做对比,若R1知道的路,R2不知道,则R2会将这条路添加到链路数据库中
- Link-State Request
- 链路状态请求,请求LSA
- R1不知道的路,向R2请求,R2不知道的路,向R1请求
- Link-State Update
- 链路状态更新,发送LSA
- R2收到R1的请求后,发送相应路给R1,R1收到R2的请求后,发送相应的路给R2
- Link-State Acknowledgment
- 链路状态确认,若对方收到了源发来的LSA 就会进行确认
- R1收到R2的路时,就会向R2告知,R2收到R1的路时,就会向R1告知
OSPF状态
OSPF的状态信息是启用OSPF进程的路由器自身的状态,不代表对方和自己之间的状态
OSPF有7种主要状态:
- 失效状态(Down)
- 没有收到Hello包
- 初始状态(Init)
- 收到Hello包,但没有看到自己
- 例:R1发送了一个Hello包,R2收到了,此时虽然R2认识了R1,但发现R1貌似还不认识R2 因此R2目前处于Init状态
- 双向通讯状态(Two-Way)
- 收到Hello包,且看到了自己,形成了邻居关系
- 例:R1发送了一个Hello包,R2收到了,于是R2认识了R1 后续R2也会发送一个Hello包 表明自己认识R1;R1收到后,与R2就会处于Two-Way状态
- 交换初始状态(Exstart)
- 决定信息交换时路由器的主从关系
- 交换状态(ExChange)
- 向邻居发送 Database Description 数据包
- R1发送DD数据包时会说:我是主人,R2发送DD数据包时也同样会说:我是主人;但双方通过查看对方的RID后,发现R2的RID比较高,因此R2成为真正的主人
- 加载状态(Loading)
- Link-State Request和Link-State Update交换
- 完全邻接状态(Full)
- LSDB同步,形成邻接关系
注意:只有Two-Way和Full是稳定状态

如下图:双方路由器从Down状态到Two-Way状态
从图中可也可以看出,OSPF是存在跳状态的情况

OSPF邻居关系的建立条件
双方必须是三层直连关系才能建立邻居关系 例:R1与R2直连,这种情况才有建立邻居关系的资格
有了资格后还需要确保这些内容方可建立邻居关系:
- RID不能一致
- 若R1的Rid是:1.1.1.1,R2的Rid也是1.1.1.1 这种情况将无法建立邻居关系
- Hello/Dead时间间隔一致
- 若R1的Hello包与R2的包发送时间间隔不一致,就无法建立邻居关系
- 区域ID一致
- 若R1与R2处于不同区域,那么就无法建立邻居关系
- 认证(如果启用了认证)一致
- 链路MTU大小一致(华为默认不开启检测,思科默认开启)
- 子网掩码一致(以太网环境)
- 若接口配置的ip地址子网掩码不一致,就无法建立另据关系
- 网络地址一致
- 末梢区域设置一致(Option)
DR与BDR
在使用OSPF协议的网络环境中,一旦多加入一台同样使用OSPF协议的路由器,那么邻接数量就会呈指数级增长,这会对网络产生负担;
因此,只要是多路访问(以太网就是多路访问)BMA和NBMA网络中,为了减少邻接关系的数量,从而减少数据包交换次数,最终节省带宽,降低对路由器处理能力的压力,需要选举DR和BDR
DR与BDR的职责就是:存储最完整的关系列表

DR:Designed Router;指定路由器 类似于班长
BDR:Backup DR;备用DR 类似于副班长
DRothers:既不是DR也不是BDR;类似普通学生
它们之间的关系为:DR、BDR、DRothers之间都保持邻接关系(Full);DRothers之间保持邻居关系(Two-Way)
任何路由器在DR与BDR进行通讯时,使用的组播地址为:224.0.0.6;DR与BDR在与任何路由器通讯时,使用的组播地址为:224.0.0.5


⚠注意:假设R1是DR(或BDR),这并不代表R1路由器本身就是DR(或BDR),而是某个接口它属于DR;例如:R1的G0/0/0接口是DR,但R1的G0/0/1接口就不是DR
OSPF度量值
度量值即Cost(开销)
每一个运行了OSPF协议的接口上,都维护着一个接口Cost
这个Cost数值的计算规则为:Cost=10^8/BW(bps)=100Mbps/BW=接口带宽参考值/接口带宽
到一个目标网络的度量值=从源到目标所有出站接口的Cost值累加(数据方向);或者说:到一个目标网络的度量值=从源到本路由器沿途所有入站接口的Cost值累加(路由方向) 如图所示

❓思考:

答案:C-B-A开销为:129、C-A开销为:65
OSPF配置
OSPF的配置可参照如下方案:
[]ospf 1 router-id 1.1.1.1 #开启OSPF进程,并指定routerid为:1.1.1.1
[ospf 1]area 0 #设置区域为0
[ospf 1]network 192.168.0.0 0.0.0.255 #宣告接口的网络,注意使用反掩码来匹配(反掩码计算规则:255.255.255.255-正常掩码)
[]display ospf peer brief #查看OSPF邻居信息
[]display ospf interface g0/0/0 #查看OSPF已宣告的接口信息
下列为额外配置参数:
[g0/0/0]ospf timer hello 10 #更改hello包发送间隔(秒为单位)
[g0/0/0]ospf timer dead 40 #更改hello包超时间隔(秒为单位)
[g0/0/0]ospf dr-priority 100 #更改接口优先级(若值为0 则代表不参与选举)
[g0/0/0]ospf cost 10 #修改接口开销
[]reset ospf process #重启OSPF进程(网络稳定时,尽量别使用)
[ospf-1]import-route direct #引入直连路由(用于宣告路由器本身所有的直连路由)
[ospf-1]default-route-advertise #宣告路由器自身的缺省路由
OSPF安全配置
OSPF可以使用MD5认证,这样可以在通讯中保证安全性
安全配置可以在接口上配置,也可以在区域中配置;需要注意:若接口上与区域中同时配置了认证,那么接口认证优先生效
在接口上配置安全验证时,仅仅针对于某个接口;而在区域中配置时,针对于全部接口
⚠注意:在配置过程中,需要保障通讯双方的ID号与口令一致
在接口上配置MD5认证:
[g0/0/0]ospf authentication-mode md5 1 cipher 123123 #在接口上配置MD5口令,口令为123123;ID号为1
在区域中配置MD5认证:
[ospf-1-area-0]authentication-mode md5 1 cipher 123123 #在area0中配置MD5口令,口令为123123;ID号为1
🌏 记录时间:2023年10月26日 22点08分

浙公网安备 33010602011771号