为什么OSPF建邻卡了40秒?14台设备实操,带你彻底吃透OSPF状态机

回顾我之前的历史推文,零零总总一共将近2000次推文,单账号原创内容数量超过1500篇。而内容深度却参差不齐,从最基础的认识网络设备(网络之路第二章:认识企业设备)、到复杂的数据中心网络架构(从M-LAG到ESI:打造不用心跳线的神交式双活智算中心架构)、甚至是更复杂的SRv6网络(HCIE硬核进阶:用华为NE40E部署EVPN VPLS over SRv6超级大二层)。

尤其是SRv6网络,真应了那句曲高和寡,可能很多网络工程师一辈子都接触不到这玩意儿,也有很多工程师学了很久依旧是云里雾里。对于这种高冷的技术,简直是拉远了我跟读者之间的距离。

反观数据中心网络常用的技术,最起码像OSPF、BGP这些基础协议,以及VXLAN、EVPN等架构,大家耳熟能详,上手也没什么难度。但这些最核心、最接地气的内容,反而成了灯下黑,恰恰是我以往推文里面覆盖最少的。

正所谓基础不牢、地动山摇。为了弥补对这些基础路由协议的缺失,接下来我打算系统复盘一下这些基础协议。首先,我们拿OSPF来开第一刀。

在大型网络中,静态路由需要手动维护,无法自动感知拓扑变化;老旧的RIP协议基于跳数度量,最大仅支持15跳,收敛速度简直比蜗牛漫步还慢。这些局限在大规模企业与数据中心网络中是致命的。

OSPF(Open Shortest Path First,开放最短路径优先)作为链路状态协议的代表,彻底解决了这些痛点:

1、真正的链路状态。每台路由器像拥有上帝视角一样,维护完整的全网拓扑图,独立运行Dijkstra SPF算法计算绝对最短路径,天然防环。

2、极速收敛。拓扑变化时,依靠LSU报文触发式泛洪,实现毫秒级全网同步。

3、层次化扩展。通过区域机制,将LSA泛洪限制在局部,支撑超大规模网络。

俗话说,工欲善其事,必先利其器。要深入学习OSPF,咱们先搭一个稍微正式一点的实验拓扑。

这里,我们基于大家熟悉的EVE-NG实验环境(手把手带你部署EVE-NG 7.0.1最新版(附全套云盘镜像下载)),拉起了14台V9850-256H交换机设备用来配置OSPF。此外,我们还单独拉起了一台Ubuntu系统来部署我们的ZTP管理系统(彻底告别配置丢失焦虑!让可视化ZTP系统赋能快照读档神技)。

得益于V9850-256H的低资源占用,整个实验15台设备全部运行时的内存占用只有不到19 GB,这就允许咱们哪怕是在个人轻薄笔记本电脑上,也能完美复现这个系列实验,跑得飞起。

按照惯例,下面给出整个实验的完整接口互联表,方便大家按图索骥。

一切高级架构,都始于基础建邻。

本次实验,我们从零开始,特意选取了网络的最核心层,自治系统边界路由器ASBR作为首发。在工程实践中,OSPF的部署遵循先骨干、后边缘的法则。ASBR1和ASBR2处于纯净的背靠背直连环境,没有其他多余设备的干扰。

我们在核心节点ASBR1和ASBR2之间构建OSPF邻接关系时,首先要明确全局Router ID。OSPF协议需要一个唯一的32位标识符作为Router ID,若未手工指定,设备将按以下顺序自动选举抢占:

1、首选激活Loopback接口中IP最大的。

2、其次选激活物理接口中IP最大的。

但在实际应用中,一般严禁依赖自动选举!正所谓牵一发而动全身,接口的Down/Up会引发Router ID震荡,导致OSPF进程崩溃重建,因此,我们必须在全局视图下手工指定!例如,我们在ASBR1上锁定Router ID为环回口地址。

#
interface LoopBack0
ip address 10.0.2.1 255.255.255.255
#
router id 10.0.2.1
在ASBR2上锁定Router ID为环回口地址。

#
interface LoopBack0
ip address 10.0.2.2 255.255.255.255
#
router id 10.0.2.2
接下来,我们就可以拉起OSPF进程了,我们将配置Area 0,并使用network命令使用反掩码进行宣告。ASBR1的核心配置如下:

#
ospf 1 router-id 10.0.2.1
description AS-Border-Router-1
area 0.0.0.0
description Backbone-Area
network 10.0.2.1 0.0.0.0
network 10.21.22.0 0.0.0.255
如果你要抓包,记得在配置对端设备之间先开启抓包,这样才能抓到完整的报文交互过程。ASBR2的核心配置如下:

#
ospf 1 router-id 10.0.2.2
description AS-Border-Router-2
area 0.0.0.0
description Backbone-Area
network 10.0.2.2 0.0.0.0
network 10.21.22.0 0.0.0.255
在ASBR1设备的HGE1/0/2接口下抓到的完整报文交互过程如下:

这里的OSPF状态变迁时间线,堪称教科书级别,咱们逐一拆解。

1、ASBR1率先启动,发出首个组播Hello报文,此时它的状态从Down跃升为Init。

2、ASBR2刷入配置之后,过了几秒,也发出了Hello报文。在随后的Hello报文中,双方互相看到了自己的Router ID,正式跨入2-Way状态,双向通信建立!

3、接下来,就是漫长而关键的等待,让子弹飞一会儿。从ASBR2发出Hello报文之后,一直到ASBR1发出Hello报文之后满40秒期间,整个链路上静悄悄的,只有10秒一次的Hello报文心跳,长达近40秒没有任何实质性数据交互!

为什么会这样?这就引出了广播网络最核心的机制Wait Timer,即默认40秒的等待定时器。设备在这个阶段按兵不动,默默等待所有潜在邻居上线,以确保能通过民主选举,选出全局最优的DR与BDR,防止DR角色频繁颠簸。

4、等这40秒定时器一结束,DR和BDR选举落定,双方立刻向对方发送单播的空DD报文,进入ExStart状态。这两个包的目的是拼刺刀选出主备,Router ID大的ASBR2(10.0.2.2)胜出,选举为Master设备,即DR(Designated Router),主导后续报文的序列号。

5、在接下来的Hello报文中,我们可以看到选举结果:ASBR2选举为DR设备,ASBR1选举为BDR设备。

6、接下来,两台设备进入交换名片阶段,并按需同步更新。例如第14个报文,就是携带LSA头部摘要的DB Description报文。说明双方在确认主备后,开始发送真正带有自己LSDB摘要的DD报文,对应Exchange状态。

第15个报文,ASBR2发现ASBR1的摘要中有自己没有的LSA,于是发送LS Request报文索要。

第17个报文,ASBR1立刻回复包含完整LSA数据的LS Update报文,这两步对应Loading状态。

第22个报文,ASBR1收到完整的LSU后,回复LS Acknowledge报文确认收到。至此,LSDB彻底同步,邻接关系达到最终形态Full状态!

回过头来看,2-Way状态因为机制要求,枯燥地等待了40秒。而从ExStart开始,到LSDB完全同步达到Full状态,仅仅用了约1.7 秒!OSPF收敛之神速,可见一斑。当然,要是ABSR2跟ASBR1之间的第一个Hello报文间隔更短,这个时间还能做到更快。

看完了底层的报文交互,我们再回到设备上,看看设备相关状态都是啥样的。

首先,我们要确认邻居宏观状态。

display ospf 1 peer

可以看到,State为Full,标志着双方LSDB已绝对同步,邻居关系成功建立。DR则表明对端的ASBR2在这条以太网链路上赢得了DR选举。因为默认优先级均为1,此时ASBR2的Router ID(10.0.2.2)大于ASBR1(10.0.2.1)。

当然,我们还可以查看邻居微观细节。

display ospf 1 peer verbose

注意看,这里的Mode为Nbr is master,说明在DD报文交换的ExStart阶段,Router ID大的ASBR2抢到了主导权,主导后续的LSA序列号。Options为0x42,包含O和E,这里的E位标志着这是一个支持外部路由引入的常规区域,区别于Stub/NSSA区域。

如果我们遇到诡异的建邻失败,比如卡在ExStart状态,就可以祭出此命令进行深度排查。

然后,我们看看接口层面的OSPF运作机制。

display ospf 1 interface

可以看到,物理接口默认识别为Broadcast广播网络,且本端ASBR1在选举中沦为BDR角色。注意,Loopback接口被特殊对待,被自动识别为PTP点到点网络,且Cost极小,为0。

我们再揭开上帝视角的面纱,看看LSDB信息。

display ospf 1 lsdb

LSDB是OSPF的灵魂。这里的Router类型就是1类LSA,由每台设备各自产生,描述自身的直连链路。Network类型就是2类LSA,仅由DR产生,用于描述这个网络中连接了哪些设备,极大地优化了多路访问网络的拓扑描述。

最后,所有这些心血,最终都要体现在OSPF路由表里面。

display ospf 1 routing

注意看,这里的Transit传输网络指的就是互联网络,在OSPF看来,这个网络上连接了多个路由器,并且选举了DR,数据包可以途经这个网络前往其他地方。而Stub末梢网络指的就是Loopback接口,它们就像是一个死胡同,没有连接其他OSPF路由器,流量到达这里就是终点,不能再往下转发。

ASBR1成功学到了对端ASBR2的Loopback路由10.0.2.2/32,下一跳指向直连IP,且由于处于同一区域Area 0,全部归类为Intra area域内路由。

至此,我们从一台空配置的ASBR,一步步走完了OSPF建邻的完整生命周期。从宏观的状态机跃迁,到微观的每一个报文字节,相信大家对OSPF的底层逻辑有了更加立体的感知。

声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/8712.html

铁军哥的头像铁军哥

相关推荐

添加微信
添加微信
Ai学习群
返回顶部