OSPF(思科)

OSPF

OSPF 协议是一种链路状态路由协议,包括单区域OSPF和多区域OSPF。OSPFv2 是适用于 IPv4 网络的OSPF协议版本。OSPFv3 是适用于 IPv6 网络的OSPF协议版本。

OSPF 的组件

链路状态数据库 (LSDB)
路由器在构建拓扑表时,会使用 Dijkstra SPF(最短路径优先)算法计算出的结果。SPF 算法基于到达目的地的累计开销。路由变化会触发路由更新(非30秒更新)。在 IPv4 中,两台相邻的 OSPF 路由器之间会使用 MD5 进行认证。在 IPv6 中,OSPFv3 自身并不包含任何认证功能。它会完全依赖 IPsec 来保护邻居之间的通信。路由器可以分为多个区域,以支持分层结构。
SPF 算法将每个路由器置于树的根部并计算到达每个节点的最短路径,从而创建 SPF 树。然后使用 SPF 树计算最佳路由。OSPF 将最佳路由放入转发数据库,用于创建路由表。

单区域和多区域 OSPF

OSPF 区域是在 链路状态数据库LSDB 中共享相同链路状态信息的一组路由器。我们可以按照以下两种方式来实施OSPF:

  • 单区域 OSPF -所有路由器都属于同一个区域。最佳实践是使用区域 0。
  • 多区域 OSPF - 以多区域、层级式的方式来实施OSPF。所有区域必须连接到骨干区域(区域 0)。互联各个区域的路由器称为区域边界路由器 (ABR)。

多区域 OSPF

OSPF数据包类型

OSPF会借助链路状态数据包的帮助,来确定转发数据包的最快可用路由。OSPF会使用链路状态数据包 (LSP) 来建立和维护与邻居的邻接关系,并交换路由更新。每种数据包都在 OSPF 路由进程中发挥着各自的作用:
第 4 类 LSU 数据包用于回复 LSR 数据包。一个 LSU 数据包中可以包含 11 种不同类型的 OSPFv2 LSA。

OSPF使用第一类Hello数据包完成以下工作:(Hello 数据包不断进行交换以维护路由器信息。)

  • 发现 OSPF 邻居并建立相邻关系。
  • 通告两台路由器建立相邻关系所必需统一的参数。
  • 在多接入网络(如以太网)上选举出指定路由器(DR)和备用指定路由器(BDR)。点对点链路不需要 DR 或 BDR。

Hello数据包中长度为8位的路由器ID字段用来标识使发路由器。

链路状态工作原理

为了维护路由信息,OSPF 路由器需要完成一个通用的链路状态路由过程,并达到收敛状态:图中展示了一个由5台路由器构成的拓扑。路由器之间的每条链路上都有一个开销值标签。在 OSPF 中,开销是用来确定去往目的地的最优路径的。 路由器会按照以下步骤完成链路状态路由过程:

  1. 建立邻居邻接关系(路由器交换Hello数据包)
  2. 交换链路状态通告(路由器交换LSA)

例题:

  1. 构建链路状态数据库(R1创建了自己的拓扑表LSDB)
  2. 执行 SPF 算法(创建一个SPF树)
  3. 选择最优路由

OSPF运行状态

当 OSPF 路由器初次连接到网络时,它会尝试以下操作:

  • 与邻居建立邻接关系
  • 交换路由信息
  • 计算最佳路由
  • 实现收敛

图中详述了为了达到收敛状态,OSPF会经历的几种状态:
1.4.2单元检测知识点
在思科路由器上,默认情况下 dead 间隔是 hello 间隔的 4 倍

单区域 OSPFv2 配置

全局配置命令 router ospf process-id 来启用 OSPFv2,之后路由器会进入路由器配置模式。
命令列表中只展示了本模块中使用的命令。
R1(config)# router ospf 10
R1(config-router)# ?
area OSPF area parameters
auto-cost Calculate OSPF interface cost according to bandwidth
default-information Control distribution of default information
distance Define an administrative distance
exit Exit from routing protocol configuration mode
log-adjacency-changes Log changes in adjacency state
neighbor Specify a neighbor router
network Enable routing on an IP network
no Negate a command or set its defaults
passive-interface Suppress routing updates on an interface
redistribute Redistribute information from another routing protocol
router-id router-id for this OSPF process
R1(config-router)#
process-id 值的取值范围是1到 65,535,由网络管理员选定。
process-id 值仅在本地有效,也就是说,不需要与其他 OSPF 路由器使用相同的值,也可以与邻居建立邻接关系。
最佳实践建议为所有 OSPF 路由器都是用相同的 process-id 值。
ospf参考拓扑
该示例展示了如何在 R1 上配置环回接口。假设管理员没有明确配置路由器 ID,R1也还没有学到路由器ID,那么它会使用 IPv4 地址 1.1.1.1 作为路由器 ID。假设R1还没有学到路由器ID。
R1(config-if)# interface Loopback 1
R1(config-if)# ip address 1.1.1.1 255.255.255.255
R1(config-if)# end
R1# show ip protocols | include Router ID
Router ID 1.1.1.1
我们可以使用路由器配置模式的命令 router-id rid 来手动分配路由器 ID。在本例中,管理员为R1分配了路由器ID 1.1.1.1。
R1(config)# router ospf 10
R1(config-router)# router-id 1.1.1.1
R1(config-router)# end
*May 23 19:33:42.689: %SYS-5-CONFIG_I: Configured from console by console
R1# show ip protocols | include Router ID
Router ID 1.1.1.1
注意router-id 命令是首选的方法。但有些早期的IOS版本不支持 router-id 命令;因此在这些路由器上设置路由器ID的最好办法是使用环回接口。
我们可以使用 clear ip ospf process 命令来重置邻接关系。

点对点OSPF网络

网络命令语法

其中一种OSPF网络类型是点对点网络。当一个接口属于点对点网络时,我们可以使用 network 命令来设置这个接口。我们也可以使用 ip ospf 命令直接在接口上配置OSPF,这两条命令都可以确定有哪些接口参与了OSPFv2路由进程,并确定其所属的OSPF区域。
network 命令的基本语法如下所示:
Router(config-router)# network network-address wildcard-mask(通配符掩码) area area-id
The network-address wildcard-mask 语法用于在路由器上匹配的接口运行OSPF。被 network 命令的掩码匹配中的接口能够发送和接收 OSPF 数据包。
在配置OSPF区域时,管理员要在所有路由器的 area-id 上指定OSPF区域。 配置单区域 OSPFv2 时,我们必须在所有路由器的 network 命令中配置相同的 area-id 值。尽管可使用任何区域 ID,但比较好的做法是在单区域 OSPFv2 中使用区域 ID 0。如果网络以后修改为支持多区域 OSPFv2,此约定会使其变得更加容易。

使用network命令来配置 OSPF

在路由配置模式中,我们可以使用两种方法来指定哪些接口会参与OSPFv2路由进程。图中显示了我们要使用的拓扑。
基于网络地址
R1(config)# router ospf 10
R1(config-router)# network 10.10.1.0 0.0.0.255 area 0
R1(config-router)# network 10.1.1.4 0.0.0.3 area 0
R1(config-router)# network 10.1.1.12 0.0.0.3 area 0
R1(config-router)#
基于接口地址,例如:在R1上输入命令network 10.1.1.5 0.0.0.0 area 0,告知路由器在GE 0/0/0接口上启用OSPF路由进程。配置完成后,OSPFv2进程中会通告这个接口上的网络 (10.1.1.4/30)。
R1(config)# router ospf 10
R1(config-router)# network 10.10.1.1 0.0.0.0 area 0
R1(config-router)# network 10.1.1.5 0.0.0.0 area 0
R1(config-router)# network 10.1.1.14 0.0.0.0 area 0
R1(config-router)#

使用 ip ospf 命令来配置 OSPF

基于进入接口的方法,要想直接在接口上配置OSPF,可以使用接口配置命令 ip ospf。语法如下:
Router(config-if)# ip ospf process-id area area-id
在R1上,使用 no 的 network 命令来删除network命令的配置。然后进入每个接口并配置 ip ospf 命令,详见命令窗口所示。
R1(config)# router ospf 10
R1(config-router)# no network 10.10.1.1 0.0.0.0 area 0
R1(config-router)# no network 10.1.1.5 0.0.0.0 area 0
R1(config-router)# no network 10.1.1.14 0.0.0.0 area 0
R1(config-router)# interface GigabitEthernet 0/0/0
R1(config-if)# ip ospf 10 area 0
R1(config-if)# interface GigabitEthernet 0/0/1
R1(config-if)# ip ospf 10 area 0
R1(config-if)# interface Loopback 0
R1(config-if)# ip ospf 10 area 0
R1(config-if)#

配置被动接口

R1(config)# router ospf 10
R1(config-router)# passive-interface loopback 0
R1(config-router)# end

点对点网络

路由器的网络类型指定为BROADCAST。要想把它更改为点对点网络(POINT_TO_POINT),我们可以在所有希望禁用DR/BDR选举进程的接口上,使用接口配置命令 ip ospf network point-to-point。以下示例展示了R1上的配置。OSPF邻居的邻接状态会中断几毫秒。
R1(config)# interface GigabitEthernet 0/0/0
R1(config-if)# ip ospf network point-to-point
*Jun 6 00:44:05.208: %OSPF-5-ADJCHG: Process 10, Nbr 2.2.2.2 on GigabitEthernet0/0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
*Jun 6 00:44:05.211: %OSPF-5-ADJCHG: Process 10, Nbr 2.2.2.2 on GigabitEthernet0/0/0 from LOADING to FULL, Loading Done
R1(config-if)# interface GigabitEthernet 0/0/1
R1(config-if)# ip ospf network point-to-point
*Jun 6 00:44:45.532: %OSPF-5-ADJCHG: Process 10, Nbr 3.3.3.3 on GigabitEthernet0/0/1 from FULL to DOWN, Neighbor Down: Interface down or detached
*Jun 6 00:44:45.535: %OSPF-5-ADJCHG: Process 10, Nbr 3.3.3.3 on GigabitEthernet0/0/1 from LOADING to FULL, Loading Done
R1(config-if)# end

环回接口和点对点网络

默认情况下,环回接口会被通告为一条掩码为 /32 的主机路由。例如,R1在向R2和R3进行通告时,会把10.10.1.0/24网络通告为10.10.1.1/32。为了模拟出真实的LAN环境,我们把环回接口0配置为点对点网络,这样R1就会向R2和R3通告完整的10.10.1.0/24网络了。
R1(config-if)# interface Loopback 0
R1(config-if)# ip ospf network point-to-point

9.7 多接入OSPF网络

ip ospf priority命令

设置接口优先级,我们可以使用命令 ip ospf priority value,其中值的取值范围为 0 到 255。优先级值为 0 的路由器不会成为 DR 或 BDR。接口上的优先级值为 1 到 255 的路由器会有机会成为 DR 或 BDR。

OSPF指定路由器

DR 会使用组播IPv4地址 224.0.0.5,这个地址代表所有 OSPF 路由器。DROTHER(既不是 DR 也不是 BDR 的路由器)。DROTHER 会使用组播地址 224.0.0.6(这个地址代表所有指定路由器)向 DR 和 BDR 发送OSPF数据包。只有DR和BDR会监听发往 224.0.0.6 的流量。

思科 OSPF 开销度量

思科定义的接口开销与接口的带宽成反比。因此带宽越高,开销就越低。计算 OSPF 开销的公式为:
Cost = reference bandwidth / interface bandwidth
默认的参考带宽为10的8次方 (100,000,000);因此计算公式如下所示:
Cost = 100,000,000 bps / interface bandwidth in bps
详细的开销计算方法见表格所示。由于 OSPF 的开销值必须是一个整数,因此FE(快速以太网)接口、GE(千兆以太网)接口和 10GE(万兆以太网)接口的开销值相同都是1。要想实现更精细的控制,您可以:

  • 在每台 OSPF 路由器上使用 auto-cost reference-bandwidth 命令调整参考带宽。
  • 需要时,在接口上使用 ip ospf cost 命令手动设置 OSPF 开销值。

Hello 数据包间隔

OSPFv2路由器会每10秒向组播地址224.0.0.5(代表所有OSPF路由器)发送Hello数据包。这是多接入网络和点对点网络上的默认计时器值。
Dead 间隔是路由器在宣告邻居进入 down(不可用)状态之前等待接收 Hello 数据包的时长。如果一个邻居的 Dead 间隔已超时,而路由器尚未收到这个邻居发来的 Hello 数据包,则它会从本地链路状态数据库 (LSDB) 中删除这个邻居。路由器会将该邻居连接断开的 LSDB 信息通过所有启用了 OSPF 的接口以泛洪的方式发送出去。思科设置的Dead间隔默认是Hello间隔的4倍。也就是说在多接入网络和点对点网络上,Dead间隔默认是40秒。
注意: 在非广播多接入(NBMA)网络上,Hello间隔默认是30秒,Dead间隔默认是120秒。NBMA 网络超出了这个模块的知识范围。
修改间隔
注意: 默认的Hello间隔和Dead间隔是根据最佳实践设置的,只有在极少数的情况下需要更改默认值。
使用下列接口配置模式命令可以手动修改 OSPFv2 Hello 间隔和 Dead 间隔:
Router(config-if)# ip ospf hello-interval seconds
Router(config-if)# ip ospf dead-interval seconds
我们可以使用 no ip ospf hello-interval 和 no ip ospf dead-interval 命令把间隔时间重置为它们的默认值。Hello间隔必须总配置为相同的值

在 OSPFv2 中传播默认静态路由


Ospf命令总结

  1. R1(config)# router ospf process-id 1-65535(启用 OSPFv2)
  2. R1(config)#router-id rid32位(明确配置路由器ID)
  3. R1(config)#interface Loopback 1(配置环回接口地址作为路由器ID)

R1(config-if)# ip address 1.1.1.1 255.255.255.255

  1. R1# clear ip ospf process(重置邻接关系)
  2. R1(config-router)#** network network-address wildcard-mask(通配符掩码) area area-id(network 命令的基本语法)**
  3. R1(config-if)#** ip ospf process-id area area-id(接口配置命令 ip ospf)**
  4. R1(config-router)# passive-interface 某个接口(配置被动接口,阻止路由器通过某个接口传输路由消息)
  5. R1(config)# interface GigabitEthernet 0/0/0

R1(config-if)# ip ospf network point-to-point(把路由器的网络类型指定更改为点对点网络)

  1. R1(config)# interface 某接口(配置接口优先级)

R1(config-if)# **ip ospf priority **value0-255 (value越高优先级越高)
R1(config-if)# end

  1. Router(config-router)# auto-cost reference-bandwidth(默认100) Mbps(调整参考带宽)
  2. R1(config)# interface 某接口

R1(config-if)# ip ospf cost value

  1. Router(config-if)# ip ospf hello-interval seconds(手动修改 OSPFv2 Hello 间隔)
  2. Router(config-if)# ip ospf dead-interval seconds(手动修改 OSPFv2 Dead 间隔)
  3. R2(config)# router ospf 10

R2(config-router)# default-information originate(表示 R2 是默认路由信息来源,并且在 OSPF 更新中传播默认静态路由)

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐锦嵩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值