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分

posted @ 2023-10-26 22:08  犯愁の难瓜  阅读(76)  评论(0)    收藏  举报