网络技术:配置 OSPF 协议
OSPF 协议
开放最短路径优先(OSPF)是一个开放标准的路由选择协议,也就是说无论是什么厂商的路由器都可以使用 OSPF 协议配置动态路由。OSPF 基于 Dijkstra 算法进行工作的,OSPF 要构建一个最短路径树,然后使用最佳路径的计算结果来组建路由选择表。OSPF 也支持对相同目标的等价多路径路由,也支持 IP 和 IPv6 被路由协议。
OSPF 运行在某个自治系统内部,同时通过 OSPF 协议也可以将多个自治系统连接起来,用于连接 AS 的路由器被称为自治系统边界路由器(ASBR)。可以创建网络的多个不同的区域来保持路由更新的最小化,并阻止故障在整个网络中传播,基本思路就是要将更新限定在单一区域内。
OSPF 组件
数据库和表
OSPF 使用路由协议消息来交换路由信息,OSPF 路由协议的 3 个主要组件包括数据结构、路由协议消息、算法。数据结构是 OSPF 为了运作而建立的表或数据库,包括以下 3 种:
数据库 | 表 | 说明 |
---|---|---|
邻接数据库 | 邻居表 | 路由器已建立双向通信的所有邻居路由器的列表 |
链路状态数据库 | 拓扑表 | 列出网络中所有其他路由器的相关信息,显示网络拓扑 |
转发数据库 | 路由表 | 在链路状态数据库上运行算法时生成的路由列表 |
分组类型
OSPF 使用路由协议消息来传递路由信息,这些数据包用于发现相邻路由器,并交换路由信息以保持相关网络的准确信息。
- Hello:发现、维持邻居路由器的可达性;
- 数据库描述:向邻居给出自己的链路状态数据库中,所有链路状态项目的摘要信息;
- 链路状态请求:向邻居请求发送某些链路状态的详细信息;
- 链路状态更新:使用洪泛法对全网更新链路状态;
- ASK:对更新分组的确认。
SPF 树
在一个区域的内部,每个路由器都要为同一区域中的每个网络计算最佳/最短路径。这个计算是基于拓扑数据库中收集的信息,并且还需要使用最短路径优先(SPF)算法。在 SPF 树中进行计算的路由器就是树根,而所有其他的网络则会被编排为树枝和树叶,运算出 OSPF 最佳路由插入到路由选择表中。如果某个路由器的接口存在于多个区域中,那么就需要为每个区域都构建一棵单独的树。
OSPF 使用开销作为度量,完整路径开销是沿这条路径的所有输出接口开销的总和,也被称之为累计开销,开销越低表示路径越好。接口的开销与接口的带宽成反比。因此带宽越高,开销就越低。负载和延时越多,开销越高。计算 OSPF 开销的公式为:
开销 = 参考带宽 / 接口带宽
默认的参考带宽为 10^8(100 000 000),因此公式为:
开销 = 100000000 bit/s / 接口带宽
利用这个规则,100Mbit/s 的快速以太网接口将有一个默认为 1 的 OSPF 开销,而 10Mbit/s 的以太网接口将有一个取值为 10 的开销。
IPv4 网络配置 OSPF
实验拓扑
设备 | 接口 | IP 地址 | 子网掩码 | 默认网关 |
---|---|---|---|---|
R1 | G0/0 | 172.16.1.1 | 255.255.255.0 | 不适用 |
S0/0/0 | 172.16.3.1 | 255.255.255.252 | 不适用 | |
S0/0/1 | 192.168.10.5 | 255.255.255.252 | 不适用 | |
R2 | G0/0 | 172.16.2.1 | 255.255.255.0 | 不适用 |
R2 | G0/1 | 209.165.200.225 | 255.255.255.224 | 不适用 |
S0/0/0 | 172.16.3.2 | 255.255.255.252 | 不适用 | |
S0/0/1 | 192.168.10.9 | 255.255.255.252 | 不适用 | |
R3 | G0/0 | 192.168.1.1 | 255.255.255.0 | 不适用 |
S0/0/0 | 192.168.10.6 | 255.255.255.252 | 不适用 | |
S0/0/1 | 192.168.10.10 | 255.255.255.252 | 不适用 | |
PC0 | NIC | 209.165.200.225 | 255.255.255.224 | 209.165.200.225 |
PC1 | NIC | 172.16.1.2 | 255.255.255.0 | 172.16.1.1 |
PC2 | NIC | 172.16.2.2 | 255.255.255.0 | 172.16.2.1 |
PC3 | NIC | 192.168.1.2 | 255.255.255.0 | 192.168.1.1 |
配置 OSPFv2 路由
使用进程 ID 10,每台路由器的路由器 ID:R1 = 1.1.1.1、R2 = 2.2.2.2、R3 = 3.3.3.3,LAN 接口设置为被动接口在所有三台路由器上配置 OSPF 路由。
R1(config)#router ospf 10
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 172.16.1.0 0.0.0.255 area 0
R1(config-router)#network 172.16.3.0 0.0.0.3 area 0
R1(config-router)#network 192.168.10.4 0.0.0.3 area 0
R1(config-router)#passive-interface GigabitEthernet0/0
R2(config)#router ospf 10
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 172.16.2.0 0.0.0.255 area 0
R2(config-router)#network 172.16.3.0 0.0.0.3 area 0
R2(config-router)#network 192.168.10.8 0.0.0.3 area 0
R2(config-router)#passive-interface GigabitEthernet0/0
R3(config)#router ospf 10
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 192.168.1.0 0.0.0.255 area 0
R3(config-router)#network 192.168.10.4 0.0.0.3 area 0
R3(config-router)#network 192.168.10.8 0.0.0.3 area 0
R3(config-router)#passive-interface GigabitEthernet0/0
验证 OSPF 路由
在每台路由器上,路由表应具有至拓扑中每个网络的路由。
R1#show ip route
R2#show ip route
R3#show ip route
每台 PC 都应能 ping 通其他两台 PC。
修改 OSPF 默认设置
调整 R1 和 R2 之间的 Hello 计时器和 Dead 计时器。
R1(config)# interface s0/0/0
R1(config-if)# ip ospf hello-interval 15
R1(config-if)# ip ospf dead-interval 60
在一小段时间后,与 R2 的 OSPF 连接将失败,连接的双方需要有相同的计时器才能保持邻接关系。
R2(config)# interface s0/0/0
R2(config-if)# ip ospf hello-interval 15
R2(config-if)# ip ospf dead-interval 60
调整 R1 上的带宽设置,首先配置下 R2 的 G0/1 所在的网络加入 OSPF 协议。
R2(config)#router ospf 10
R2(config-router)#network 209.165.200.224 0.0.0.31 area 0
此时从 R1 到 209.165.200.225 的路径通过 R2 路由。
在 R1 S0/0/0 接口上将带宽设置为 64 Kb/s,这不会改变实际端口速度,只是 OSPF 在 R1 上的处理的度量将用于计算最佳路由。
R1(config)# int s0/0/0
R1(config-if)# bandwidth 64
此时从 R1 到 209.165.200.225 的路径通过 R3 路由,这是因为 OSPF 首选开销较低的路径。
IPv6 网络配置 OSPF
实验拓扑
设备 | 接口 | IPv6 地址/前缀 | 默认网关 |
---|---|---|---|
R1 | G0/0 | 2001:db8:cafe:1::1/64 | 不适用 |
S0/0/0 | 2001:db8:cafe:a001::1/64 | 不适用 | |
S0/0/1 | 2001:db8:cafe:a003::1/64 | 不适用 | |
R2 | G0/0 | 2001:db8:cafe:2::1/64 | 不适用 |
S0/0/0 | 2001:db8:cafe:a001::2/64 | 不适用 | |
S0/0/1 | 2001:db8:cafe:a002::1/64 | 不适用 | |
R3 | G0/0 | 2001:db8:cafe:3::1/64 | 不适用 |
S0/0/0 | 2001:db8:cafe:a003::264 | 不适用 | |
S0/0/1 | 2001:db8:cafe:a002::2/64 | 不适用 | |
PC1 | NIC | 2001:db8:cafe:1::10/64 | fe80::1 |
PC2 | NIC | 2001:db8:cafe:2::10/64 | fe80::2 |
PC3 | NIC | 2001:db8:cafe:3::10/64 | fe80::3 |
这里给出配置的命令。
R1(config)#int g0/0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2001:db8:cafe:1::1/64
R1(config-if)#no shutdown
R1(config-if)#int s0/0/0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2001:db8:cafe:a001::1/64
R1(config-if)#no shutdown
R1(config-if)#int s0/0/1
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2001:db8:cafe:a003::1/64
R1(config-if)#no shutdown
R2(config)#int g0/0
R2(config-if)#ipv6 enable
R2(config-if)#ipv6 address 2001:db8:cafe:2::1/64
R2(config-if)#no shutdown
R2(config-if)#int s0/0/0
R2(config-if)#ipv6 enable
R2(config-if)#ipv6 address 2001:db8:cafe:a001::2/64
R2(config-if)#no shutdown
R2(config-if)#int s0/0/1
R2(config-if)#ipv6 enable
R2(config-if)#ipv6 address 2001:db8:cafe:a002::1/64
R2(config-if)#no shutdown
R3(config)#int g0/0
R3(config-if)#ipv6 enable
R3(config-if)#ipv6 address 2001:db8:cafe:3::1/64
R3(config-if)#no shutdown
R3(config-if)#int s0/0/0
R3(config-if)#ipv6 enable
R3(config-if)#ipv6 address 2001:db8:cafe:a003::2/64
R3(config-if)#no shutdown
配置 OSPFv3 路由
使用进程 ID 10,每台路由器的路由器 ID:R1 = 1.1.1.1、R2 = 2.2.2.2、R3 = 3.3.3.3,-在每个接口上启用 OSPFv3。
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 router ospf 10
R1(config-rtr)#router-id 1.1.1.1
R1(config-rtr)#passive-interface GigabitEthernet 0/0
R1(config)#interface GigabitEthernet 0/0
R1(config-if)#ipv6 ospf 10 area 0
R1(config-if)#interface Serial0/0/0
R1(config-if)#ipv6 ospf 10 area 0
R1(config-if)#interface Serial0/0/1
R1(config-if)#ipv6 ospf 10 area 0
R2(config)#ipv6 unicast-routing
R2(config)#ipv6 router ospf 10
R2(config-rtr)#router-id 2.2.2.2
R2(config-rtr)#passive-interface GigabitEthernet 0/0
R2(config)#interface GigabitEthernet 0/0
R2(config-if)#ipv6 ospf 10 area 0
R2(config-if)#interface Serial0/0/0
R2(config-if)#ipv6 ospf 10 area 0
R2(config-if)#interface Serial0/0/1
R2(config-if)#ipv6 ospf 10 area 0
R3(config)#ipv6 unicast-routing
R3(config)#ipv6 router ospf 10
R3(config-rtr)#router-id 3.3.3.3
R3(config-rtr)#passive-interface GigabitEthernet 0/0
R3(config)#interface GigabitEthernet 0/0
R3(config-if)#ipv6 ospf 10 area 0
R3(config-if)#interface Serial0/0/0
R3(config-if)#ipv6 ospf 10 area 0
R3(config-if)#interface Serial0/0/1
R3(config-if)#ipv6 ospf 10 area 0
验证连接
每台 PC 都应能 ping 通其他两台 PC。
R1#show ipv6 route
R2#show ipv6 route
R3#show ipv6 route
参考资料
《思科网络技术学院教程(第6版):扩展网络》,[加] Bob Vachon,[美] Allan Johnson 著,思科系统公司 译,人民邮电出版社
《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社