定义
目的
在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。
由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。
OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点:
OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
OSPF支持无类型域间选路(CIDR)。
OSPF支持对等价路由进行负载分担。
OSPF支持报文加密。
定义
双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。
目的
为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要能够尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务继续进行。在现有网络中,有些链路通常通过硬件检测信号,如SDH告警,检测链路故障,但并不是所有的介质都能够提供硬件检测。此时,应用就要依靠上层协议自身的Hello报文机制来进行故障检测。上层协议的检测时间都在1秒以上,这样的故障检测时间对某些应用来说是不能容忍的。在三层网络中,Hello报文检测机制无法针对所有路由来检测故障,如:静态路由。这对系统间互联互通定位故障造成困难。
BFD协议就是在这种背景下产生的,BFD提供了一个通用的标准化的介质无关和协议无关的快速故障检测机制。具有以下优点:
对相邻转发引擎之间的通道提供轻负荷、快速故障检测。这些故障包括接口、数据链路,甚至有可能是转发引擎本身。
用单一的机制对任何介质、任何协议层进行实时检测。
如下图所示,SwitchA、SwitchB和SwitchC之间运行OSPF,SwitchA和SwitchB之间的交换机仅作透传功能。现在需要SwitchA和SwitchB能快速感应它们之间的链路状态,当链路SwitchA-SwitchB发生故障时,业务能快速切换到备份链路SwitchA-SwitchC-SwitchB上。
注意:请确保该场景下互联接口的STP处于未使能状态。因为在使能STP的环形网络中,如果用交换机的VLANIF接口构建三层网络,会导致某个端口被阻塞,从而导致三层业务不能正常运行。
采用如下思路配置OSPF与BFD联动:
在各交换机上配置OSPF基本功能,实现整个OSPF网络的互通。
在各交换机上配置OSPF与BFD联动功能,实现当SwitchA和SwitchB之间的链路出现故障时快速的切换到备份链路。
[SwitchA]undo stp enable
system-view
[Huawei]sysname LSW4
[LSW4]vlan 30
[LSW4-vlan30]quit
[LSW4]interface GigabitEthernet 0/0/1
[LSW4-GigabitEthernet0/0/1]port link-type trunk
[LSW4-GigabitEthernet0/0/1]port trunk allow-pass vlan 30
[LSW4-GigabitEthernet0/0/1]quit
[LSW4]interface GigabitEthernet 0/0/2
[LSW4-GigabitEthernet0/0/2]port link-type trunk
[LSW4-GigabitEthernet0/0/2]port trunk allow-pass vlan 30
[LSW4-GigabitEthernet0/0/2]quit
# 配置SwitchA。SwitchB和SwitchC的配置与SwitchA类似(略)。
system-view
[Huawei]sysname SwitchA
[SwitchA]vlan batch 10 30
[SwitchA]interface GigabitEthernet 0/0/1
[SwitchA-GigabitEthernet0/0/1]port link-type trunk
[SwitchA-GigabitEthernet0/0/1]port trunk allow-pass vlan 10
[SwitchA-GigabitEthernet0/0/1]quit
[SwitchA]interface GigabitEthernet 0/0/2
[SwitchA-GigabitEthernet0/0/2]port link-type trunk
[SwitchA-GigabitEthernet0/0/2]port trunk allow-pass vlan 30
[SwitchA-GigabitEthernet0/0/2]quit
# 配置SwitchA。SwitchB和SwitchC的配置与SwitchA类似(略)。
[SwitchA]interface Vlanif 10
[SwitchA-Vlanif10]ip address 10.1.1.1 24
[SwitchA-Vlanif10]quit
[SwitchA]interface Vlanif 30
[SwitchA-Vlanif30]ip address 10.3.3.1 24
[SwitchA-Vlanif30]quit
# 配置SwitchA。
[SwitchA]ospf 1 router-id 10.10.10.1
[SwitchA-ospf-1]area 0
[SwitchA-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0]network 10.3.3.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0]quit
[SwitchA-ospf-1]quit
# 配置SwitchB。
[SwitchB]ospf 1 router-id 10.10.10.2
[SwitchB-ospf-1]area 0
[SwitchB-ospf-1-area-0.0.0.0]network 10.2.2.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0]network 10.3.3.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0]quit
[SwitchB-ospf-1]quit
# 配置SwitchC。
[SwitchC]ospf 1 router-id 10.10.10.3
[SwitchC-ospf-1]area 0
[SwitchC-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0]network 10.2.2.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0]quit
[SwitchC-ospf-1]quit
# 配置完成后,执行命令display ospf peer,可以看到SwitchA,SwitchB和SwitchC之间互相建立了邻接关系。以SwitchA的显示结果为例。
[SwitchA]display ospf peer
OSPF Process 1 with Router ID 10.10.10.1
Neighbors
Area 0.0.0.0 interface 10.1.1.1(Vlanif10)'s neighbors
Router ID: 10.10.10.3 Address: 10.1.1.2
State: Full Mode:Nbr is Master Priority: 1
DR: 10.1.1.1 BDR: 10.1.1.2 MTU: 0
Dead timer due in 32 sec
Retrans timer interval: 5
Neighbor is up for 00:00:11
Authentication Sequence: [ 0 ]
Neighbors
Area 0.0.0.0 interface 10.3.3.1(Vlanif30)'s neighbors
Router ID: 10.10.10.2 Address: 10.3.3.2
State: Full Mode:Nbr is Master Priority: 1
DR: 10.3.3.1 BDR: 10.3.3.2 MTU: 0
Dead timer due in 32 sec
Retrans timer interval: 5
Neighbor is up for 00:00:01
Authentication Sequence: [ 0 ]
# 查看SwitchA的OSPF路由表的信息,可以看到去往SwitchB和SwitchC的路由表项。而去往目的网段172.16.1.0/24的路由下一跳地址为10.3.3.2,说明流量在链路SwitchA→SwitchB上传输。
[SwitchA]display ospf routing
OSPF Process 1 with Router ID 10.10.10.1
Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
10.1.1.0/24 1 Transit 10.1.1.1 10.10.10.1 0.0.0.0
10.3.3.0/24 1 Transit 10.3.3.1 10.10.10.1 0.0.0.0
10.2.2.0/24 2 Transit 10.1.1.2 10.10.10.2 0.0.0.0
10.2.2.0/24 2 Transit 10.3.3.2 10.10.10.2 0.0.0.0
172.16.1.0/24 2 Stub 10.3.3.2 10.10.10.2 0.0.0.0
Total Nets: 5
Intra Area: 5 Inter Area: 0 ASE: 0 NSSA: 0
# 在SwitchA上配置OSPF与BFD联动功能。
[SwitchA]bfd
[SwitchA-bfd]quit
[SwitchA]ospf 1
[SwitchA-ospf-1]bfd all-interfaces enable
[SwitchA-ospf-1]quit
# 在SwitchB上配置OSPF与BFD联动功能。
[SwitchB]bfd
[SwitchB-bfd]quit
[SwitchB]ospf 1
[SwitchB-ospf-1]bfd all-interfaces enable
[SwitchB-ospf-1]quit
# 在SwitchC上配置OSPF与BFD联动功能。
[SwitchC]bfd
[SwitchC-bfd]quit
[SwitchC]ospf 1
[SwitchC-ospf-1]bfd all-interfaces enable
[SwitchC-ospf-1]quit
# 配置完成后,在SwitchA或SwitchB、SwitchC上执行display ospf bfd session all命令,可以看到BFD会话的状态为Up。以SwitchA的显示为例。
[SwitchA]display ospf bfd session all
OSPF Process 1 with Router ID 10.10.10.1
Area 0.0.0.0 interface 10.1.1.1(Vlanif10)'s BFD Sessions
NeighborId:10.10.10.3 AreaId:0.0.0.0 Interface:Vlanif10
BFDState:up rx :1000 tx :1000
Multiplier:3 BFD Local Dis:8192 LocalIpAdd:10.1.1.1
RemoteIpAdd:10.1.1.2 Diagnostic Info:No diagnostic information
Area 0.0.0.0 interface 10.3.3.1(Vlanif30)'s BFD Sessions
NeighborId:10.10.10.2 AreaId:0.0.0.0 Interface:Vlanif30
BFDState:up rx :1000 tx :1000
Multiplier:3 BFD Local Dis:8193 LocalIpAdd:10.3.3.1
RemoteIpAdd:10.3.3.2 Diagnostic Info:No diagnostic information
# 对SwitchB的GE0/0/1接口执行shutdown命令,模拟链路故障。
[SwitchB]interface GigabitEthernet 0/0/1
[SwitchB-GigabitEthernet0/0/1]shutdown
# 在SwitchA上查看OSPF路由表。
[SwitchA]display ospf routing
OSPF Process 1 with Router ID 10.10.10.1
Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
10.1.1.0/24 1 Transit 10.1.1.1 10.10.10.1 0.0.0.0
10.3.3.0/24 1 Stub 10.3.3.1 10.10.10.1 0.0.0.0
10.2.2.0/24 2 Transit 10.1.1.2 10.10.10.2 0.0.0.0
172.16.1.0/24 3 Stub 10.1.1.2 10.10.10.2 0.0.0.0
Total Nets: 4
Intra Area: 4 Inter Area: 0 ASE: 0 NSSA: 0
可以看出在链路SwitchA-SwitchB出现故障后,备份链路SwitchA-SwitchC-SwitchB开始生效,即去往目的网段172.16.1.0/24的路由下一跳地址变成了10.1.1.2。
SwitchA的配置文件
#
sysname SwitchA
#
vlan batch 10 30
#
stp disable
#
bfd
#
interface Vlanif10
ip address 10.1.1.1 255.255.255.0
#
interface Vlanif30
ip address 10.3.3.1 255.255.255.0
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 30
#
ospf 1 router-id 10.10.10.1
bfd all-interfaces enable
area 0.0.0.0
network 10.1.1.0 0.0.0.255
network 10.3.3.0 0.0.0.255
#
return
SwitchB的配置文件
#
sysname SwitchB
#
vlan batch 20 30 40
#
stp disable
#
bfd
#
interface Vlanif20
ip address 10.2.2.2 255.255.255.0
#
interface Vlanif30
ip address 10.3.3.2 255.255.255.0
#
interface Vlanif40
ip address 172.16.1.1 255.255.255.0
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 30
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 20
#
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 40
#
ospf 1 router-id 10.10.10.2
bfd all-interfaces enable
area 0.0.0.0
network 10.2.2.0 0.0.0.255
network 10.3.3.0 0.0.0.255
network 172.16.1.0 0.0.0.255
#
return
SwitchC的配置文件
#
sysname SwitchC
#
vlan batch 10 20
#
stp disable
#
bfd
#
interface Vlanif10
ip address 10.1.1.2 255.255.255.0
#
interface Vlanif20
ip address 10.2.2.1 255.255.255.0
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 20
#
ospf 1 router-id 10.10.10.3
bfd all-interfaces enable
area 0.0.0.0
network 10.1.1.0 0.0.0.255
network 10.2.2.0 0.0.0.255
#
return
#
sysname LSW4
#
vlan batch 30
#
stp disable
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 20
#
return