在前两期实验中,我们先是研究了P2P网络类型下的OSPF配置(别再傻等40秒了!一键优化OSPF,体验秒级收敛的快感),又研究了NBMA和P2MP网络类型的OSPF配置(从120秒到1秒的性能狂飙!带你硬核抓包OSPF的P2MP魔法)。
而在咱们日常接触的企业网、数据中心以及园区网中,最常见的莫过于以太网这种广播多路访问网络了。回顾前面的几次实验,所有设备的互联口都是三层路由口,当在多台路由器共享同一二层广播域的环境下,OSPF的行为会发生显著变化。
今天,我们就从底层视角,进一步深入拆解DR和BDR的选举规则、非抢占特性,以及如何通过人工干预来控制选举结果。
本次实验,我们依旧是在EVE-NG实验环境中(手把手带你部署EVE-NG 7.0.1最新版(附全套云盘镜像下载)),使用14台V9850-256H交换机设备来配置OSPF,同时搭配一台部署了我们ZTP管理系统的Ubuntu系统来进行操作(彻底告别配置丢失焦虑!让可视化ZTP系统赋能快照读档神技)。
为了复现真实的多节点共享广播域,我们需要打破之前的纯粹点到点物理连线逻辑,从14台设备中,抽调ABR1、ABR2、A1A和A2A这4台设备,来一招偷天换日。
我们将ABR1设备连接ABR2、A1A和A2A的三个互联接口,直接降维改为二层交换口,并统一划入VLAN 50。通过创建一个Vlan虚接口,四台路由器就可以在物理直连的基础上,逻辑上处于同一个二层广播域中了。
ABR1设备的改造命令如下:
#
interface HundredGigE1/0/2
port link-mode bridge
port access vlan 50
#
interface HundredGigE1/0/4
port link-mode bridge
port access vlan 50
#
interface HundredGigE1/0/5
port link-mode bridge
port access vlan 50
#
interface Vlan-interface50
ip address 10.50.1.31 255.255.255.0
#
ospf 1 router-id 10.0.3.1
area 0.0.0.0
network 10.50.1.0 0.0.0.255
其余三台设备,只需要调整接口IP地址,并配置OSPF宣告路由即可。ABR2设备的改造命令如下:
#
interface HundredGigE1/0/2
port link-mode route
ip address 10.50.1.32 255.255.255.0
#
ospf 1 router-id 10.0.3.2
area 0.0.0.0
network 10.50.1.0 0.0.0.255
A1A设备的改造命令如下:
#
interface HundredGigE1/0/1
port link-mode route
ip address 10.50.1.41 255.255.255.0
#
ospf 1 router-id 10.0.4.1
area 0.0.0.0
network 10.50.1.0 0.0.0.255
A2A设备的改造命令如下:
#
interface HundredGigE1/0/1
port link-mode route
ip address 10.50.1.42 255.255.255.0
#
ospf 1 router-id 10.0.4.2
area 0.0.0.0
network 10.50.1.0 0.0.0.255
同时,我们在A1A设备的HGE 1/0/1接口开启抓包,因为它们都在VLAN 50广播域内,我们可以抓到所有节点的Hello交互报文。
注意看第32个报文,这是A2A设备发出的Hello报文,至此,所有设备的Hello报文均已发出。在接下来的第33个报文,ABR2设备的Hello报文中识别到了全部另外3个邻居。
之后,看第43个报文,在ABR1设备上,已经完成了第一轮DR/BDR选举,因为大家的优先级都是相同的,而A2A设备的Router ID最大,所谓山中无老虎、猴子称大王,它临时当选了BR和BDR两个角色。
不过,别急,好戏在后头。一直到第57个报文,OSPF才开始选举A2A设备为正式的DR设备,选举A1A设备为正式的BDR设备。
再往下看,直到第122个报文,所有设备的邻居状态才达到Full状态,整体耗时41秒。
现在,我们在ABR1设备上,检查一下当前的邻居选举状态。
display ospf 1 peer
display ospf 1 interface Vlan-interface 50
注意看,由于所有接口的优先级默认都是1,根据选举规则,当优先级相同时,比拼Router ID。此时Router ID最大的A2A脱颖而出,被选举成为DR;第二大的A1A设备被选举成为BDR。
而ABR1设备现在只能委屈做个小弟,变成了DROther。需要特别注意的是,两个DROther设备——ABR1设备和ABR2设备之间的状态停留在了2-Way状态。这正应了那句老话,杀鸡焉用牛刀,因为有DR统一协调,它们之间不再需要建立邻居关系去交换LSA,这极大节省了链路带宽。
目前,在自然状态下,A2A设备因为Router ID最大,成为了网络的核心设备DR。但如果A2A是一台性能很弱的边缘设备,我们希望性能最强的核心网关ABR1设备成为DR,该如何操作呢?
很简单,我们人工修改优先级,把ABR1设备的优先级拉到最高的255,同时将A2A设备的优先级配置为最低的0,直接剥夺它参与选举的资格。
ABR1
interface Vlan-interface50
ospf dr-priority 255
A2A
interface HundredGigE1/0/1
ospf dr-priority 0
配置下发后,如果我们立刻去查看OSPF邻居状态,我们会发现,A2A设备依然稳坐DR宝座。这就是OSPF中赫赫有名的DR非抢占机制陷阱。正所谓强龙不压地头蛇,只要现任DR没挂掉,即便你请来了优先级为255的如来佛祖,也只能先在旁边干瞪眼等着。
display ospf 1 peer
display ospf 1 interface Vlan-interface 50
但这个非抢占也不是一成不变,在我们将ABR1的优先级拉满之后,既然A2A设备已经稳坐在了DR的位子上,ABR1设备不能冲击DR王座,但没人限制它干掉现任BDR设备。所以,ABR1设备毫不客气地顺位做到了BDR的王后宝座上,而原本的BDR设备A1A则被无情地贬为DROther角色。
这就是OSPF的协议哲学,宁可牺牲所谓的最优化,也要保持网络拓扑的绝对稳定。
当然,为了让我们的修改彻底生效,完成新老交替,我们对所有参与设备执行进程重启,强制触发换届选举。
reset ospf 1 process
可以看到,在大家同时起跑重新选举时,优先级为255的绝对实力一锤定音,ABR1设备毫无悬念地抢占了DR的宝座,网络进入了符合我们设计预期的最终稳定状态。
我们再次检查ABR1设备的状态。
display ospf 1 peer
display ospf 1 interface Vlan-interface 50
可以看到,ABR1设备凭借顶级优先级强势接管,State变为DR。而A2A设备因为优先级为0,连备胎都做不成,彻底沦为了DROther。同时,A1A因为Router ID优势,继续保持BDR身份。
现在,网络的核心数据交互全部汇聚到了ABR1设备上。
在OSPF的广播型网络中,DR和BDR是维持庞大网络稳定运作的定海神针。如果没有它们,4台路由器之间将建立6条全互联的邻接关系;而引入DR/BDR之后,DROther之间仅保持2-Way状态,大幅降低了LSA的泛洪规模。
通过配置二层桥接技术,我们巧妙复原了共享以太网场景,并从中收获了三个极具价值的结论:
1、在默认优先级下,Router ID就是唯一的硬通货。
2、网络运行的核心诉求永远是稳定压倒一切,即便出现更优质的设备,也不能因为频繁抢占导致网络震荡,这就是非抢占的哲学。
3、虽然有非抢占机制,但优先级为0是一票否决权,现任DR如果被降级为0,一旦重新选举,依然会被瞬间褫夺桂冠,引发BDR的顺位晋升,这就是微妙的退位机制。
掌握这些底层状态机流转的细节,不仅能让我们在排查复杂网络故障时游刃有余,更是设计高可用数据中心网关冗余架构的必修课!
声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/8716.html