本节书摘来自异步社区《CCNP ROUTE 300-101认证考试指南》一书中的第8章,第8.2节 LSA和OSPF链路状态数据库,作者 【美】Kevin Wallace(凯文 华莱士),更多章节内容可以访问云栖社区“异步社区”公众号查看
8.2 LSA和OSPF链路状态数据库
CCNP ROUTE 300-101认证考试指南
8.2 LSA和OSPF链路状态数据库
每台连接到特定OSPF区域的路由器都应该学习到完全相同的拓扑数据。每台路由器在自己的LSDB(链路状态数据库)中储存独立的LSA(链路状态通告)数据。之后,路由器对LSDB使用SPF(最短路径优先)算法,确定每个可达子网(前缀/长度)的最优(最低开销)路由。
在路由器使用SPF分析LSDB时,SPF进程与拼图游戏有一些相似——只是路由器并不知道拼图的具体图像。当人们面对这样的挑战时,可能会首先寻找最明显的碎块,比如在边角位置的碎块,因为它们最容易分辨。接着,人们可能会将碎块进行分类,比如按照碎片的颜色相同或者有跨越多个碎块的直线分类。当然,人们也会查看碎块的形状以判断哪些碎块能拼在一起。
类似地,路由器的SPF进程必须讨论独立的LSA,并基于它们的特征来判断LSA如何匹配。为了更好地体会SPF进程,本节会介绍OSPF用来描述OSPF区域拓扑的3种LSA类型。通过学习LSA类型,读者可以更好地理解路由器查看LSA(网络拓扑的碎块)的方式,以及构建网络图示的方法。
表8-2列出了多种类型的OSPF LSA类型。本章并不会讨论所有的LSA类型,但将所有类型的LSA均列在表中可以方便读者学习。
关键
8.2.1 LSA类型1:路由器LSA
LSA类型1也称为路由器LSA,基于OSPF路由器ID(RID)标识OSPF路由器。每台路由器为自己创建一个类型1的LSA,并将此LSA在同一个区域内泛洪。泛洪LSA时,初始路由器会将类型1的LSA发给同一个区域内的邻居,邻居进而再向自己在同一个区域内的邻居发送,直至区域内的所有路由器都拥有一个LSA的副本。
除路由器的RID外,LSA也包含所连接的链路信息。具体地说,在类型1的LSA中:
对于未选举指定路由器(DR)的每个接口,列出路由器接口的子网地址/掩码和接口OSPF开销(OSPF将这些子网称为末节网络);
对于选举了DR的每个接口,列出DR的IP地址和链路连接到传输网络的标记(表示此网络有类型2 LSA);
对于没有DR但有可达邻居的接口,列出邻居的RID。
对于所有的OSPF LSA,OSPF都会使用一个32比特的LSID(链路状态标识符)来标识类型1的LSA。在创建自己的类型1的LSA时,每台路由器会以自己的OSPF RID作为LSID。
每台内部路由器都会为自己创建一个类型1的LSA, ABR(区域边界路由器)会为自己创建多个类型1的LSA:每个区域一个。一个区域内的LSA中,只包含区域内的接口和区域内的邻居。然而,路由器只有一个RID,所以一台路由器的所有类型1 LSA,都会使用相同的RID。ABR随后会将自己的每个类型1 LSA泛洪到相应的区域中。
为了给即将展开的LSA讨论提供更好的理论背景,图8-1展示了一个示例网络,本章在大部分示例中都会使用这个网络。
注释:
除非特别标注,图8-1中的所有网络都以10.10开始,为增强可读性不在图中显示。
在一个区域中的所有路由器,无论是内部路由器还是ABR,都会创建并在区域内泛洪类型1 LSA。以图8-1为例,区域5中有1台内部路由器(R5,RID 5.5.5.5)和2台ABR:R1的RID为1.1.1.1,R2的RID为2.2.2.2。3台路由器都在区域5内创建并泛洪自己的类型1 LSA,所以3台路由器都知道相同的3个类型1 LSA。
接着,为了更好地理解类型1 LSA的具体内容,我们首先来考虑R5的OSPF配置示例。R5有3个启用了IP的接口:Fa0/0、S0/0.1和S0/0.2。R5使用的是点到点子接口,所以它应该与R1和R2建立邻居关系,而且管理员除了需要在区域5中对所有3个接口都启用OSPF外,并不需要进行额外的配置。例8-1显示了R5上的基本配置。
在R5的OSPF配置中,管理员为进程ID5配置了启用OSPF,将3个接口放在区域5中。因此,R5的类型1 LSA至少会以这3个接口作为链路,加上2个工作邻居。例8-2展示了R5区域5 LSDB的内容,包括R5类型1 LSA中的具体信息,如下所示:
R5类型1 LSA的LSID(5.5.5.5);
连接到末节网络的3条链路,LSA列出了各自的子网/掩码;
2条连接到其他路由器的链路,一个是R1(RID 1.1.1.1),另一个是R2(RID 2.2.2.2)。
第一条命令show ip ospf database显示出了R5已知的LSA汇总。输出内容主要由每行一条LSA组成,同时列出了它们的LSA ID。例8-2输出信息中的阴影部分标出了3台路由器(类型1)LSA的RID,即1.1.1.1(R1)、2.2.2.2(R2)和5.5.5.5(R5)。
show ip ospf database router 5.5.5.5命令的输出信息中显示了R5路由器LSA的具体信息。从阴影部分可以看到3个末节网络——没有选举DR的三个接口——和它们对应的子网地址。LSA也列出了2个邻居的邻居ID(1.1.1.1和2.2.2.2),以及到达这些邻居的接口。
R1和R2的类型1 LSA中也有相同种类的信息,路由器因而有足够的信息可以判断通过哪条末节链路来连接哪台路由器,然后使用接口配置的IP地址来判断连接到其他路由器的接口。图8-2显示了区域5的图示,这是基于R1、R2和R5路由器LSA中所包含的详细信息构建出来的。
注意图8-2中只显示了从区域5中的类型1路由器LSA学习到的信息。每个类型1路由器LSA中会列出一个路由器的信息,但其具体内容只与特定区域相关。因此,图8-2中只显示了R1在区域5中的接口,但没有区域3、4或区域0中的接口。为完成对图8-2的解释,例8-3中列出了R1为区域5创建的类型1路由器LSA。
例8-3 R1区域5的类型1 LSA
注释:
因为OSPF在不同的LSA中使用RID的目的不同——例如,类型1 LSA的LSID——Cisco建议将RID设置为一个稳定、可预测的值。为此,管理员可以使用OSPF router-id value命令自定义RID或定义一个有IP地址的环回接口。
8.2.2 LSA类型2:网络LSA
SPF要求LSDB使用节点(路由器)和节点之间的连接(链路)来构件拓扑模型。具体地说,每条链路必须在一对节点之间。当存在多路访问数据链路(例如LAN)时,OSPF必须对LAN进行抽象描绘,使拓扑能够只表示一对节点之间的节点和链路。为此,OSPF使用了类型2网络LSA的概念。
OSPF实际是基于接口是否选举了指定路由器(DR),来选择是否为多路访问网络使用类型2 LSA的。因此,在讨论类型2网络LSA之前,需要讨论几个与DR相关的概念。
1.指定路由器的背景知识
正如我们在7.4.1节中所讨论的那样,分配给一个路由器接口的OSPF网络类型是为了告诉路由器是否尝试在接口上选举DR。接着,当路由器从至少一台路由器接收到Hello消息后,就会选举DR和BDR。
关键
OSPF在特定的子网中使用DR主要有两个目的:
为该子网创建并泛洪类型2网络LSA;
协助完成子网上的数据库交换的具体过程。
路由器基于OSPF Hello消息中的信息来选择DR和BDR(备份DR)。Hello消息中会列出每台路由器的RID和优先级值。在既不存在DR也不存在BDR时,路由器会使用以下选举规则:
选择拥有最高优先级的路由器(默认为1,最大为255,通过ip ospfpriorityvalue接口子命令设置);
如果优先级相同,选择拥有最高RID的路由器;
在选BDR时,选择拥有次高优先级的路由器,如果优先级相同,选择拥有次高RID的路由器。
之前描述的过程是子网中当前没有DR时的选举过程。然而,当DR和BDR存在时,规则有些不同。在DR和BDR选举之后,若DR或BDR未出现故障就不会再进行选举。如果DR故障,BDR将成为DR——不管是否有更高优先级的路由器加入子网——新的选举过程会选举新的BDR。如果BDR故障,OSPF路由器为BDR进行新选举,DR保持不变。
在LAN上,选择DR从设计的角度看关系不大,但从操作的角度看却很重要。本章中,注意show命令的输出中有DR和它的角色。现在,回到类型2 LSA的话题。
2.类型2网络LSA概念
OSPF使用类型2 LSA的概念来构建多路访问网络的模型——有2台以上的路由器连接到同一个子网——这种模型仍遵循拓扑“一个链路只连接两个节点”的原则。例如,图8-3的网络(与图7-4所示相同)。在第7章中,区域0中的所有4台路由器相互建立了邻居关系,DR和BDR则与其他路由器建立了完全邻接的邻居关系。
OSPF不能使用一条连接了所有4台路由器的链路,来代表通过一个子网连接4台路由器的网络环境。于是,OSPF定义了类型2网络LSA,作为伪节点使用。每台路由器的类型1 LSA中都会列出一条到达这个伪节点的连接,这常被称为传输网络,随后被类型2网络LSA进行抽象化。类型2网络LSA中会列出每个与自己相连的类型1路由器LSA——如图8-4所示,此例中有4个类型1 LSA。
子网中选举出的DR负责为子网创建类型2 LSA。DR将其在子网中的接口IP地址作为LSA的LSID。路由器通告的类型2 LSA中也会列出DR的RID。
3.类型2LSA的show命令
为了通过OSPF show命令理解这些概念,接下来看看图8-1中的区域34。在这个设计方案中,R3和R4连接到了相同的LAN,这意味着它们要选举DR(OSPF在有至少2台路由器满足邻居要求,并可以成为邻居的LAN上选举DR)。如果R3和R4默认使用的优先级为1,R4就会赢得选举,因为它的RID为4.4.4.4(而R3的RID则为3.3.3.3)。所以,R4负责为这个子网创建了类型2的LSA并泛洪。图8-5描绘了区域34的拓扑,例8-4展示了相关的LSDB条目。
例8-4 R3的区域34 LSA,网络10.10.34.0/24
在show ip ospf database命令的输出信息中,每个LSA列为一行。注意Network LSA标题下有一个条目,LSID为10.10.34.4,这是R4Fa0/0接口的IP地址。类型2网络LSA的LSID是创建此DR的接口IP地址。
show ip ospf database router 4.4.4.4命令显示了指向一个传输网络的新条目类型,它指明了一条去往类型2 LSA的连接。输出内容中列出的LSID为10.10.34.4,这是类型2 LSA的LSID。
最后,show ip ospf database network 10.10.34.4命令显示了类型2 LSA的详情,LSID是10.10.34.4。在接近末尾的位置,输出内容根据RID列出了相连的路由器。SPF进程可以使用图8-5中的交叉调用信息,来确定是哪台路由器连接到了这个传输网络(伪节点)。SPF进程既有类型1 LSA的信息(将类型2 LSA的传输网络),也有类型2 LSA的信息(列出了连接类型2 LSA的所有类型1 LSA的RID),这就使设备能够对网络进行建模。
OSPF可以使用类型1和2的LSA对一个区域中的所有拓扑进行建模。当路由器使用自己的SPF进程来构建拓扑模型时,它可以计算区域中每个子网的最优(最低开销)路由。在下一个主题中,我们会通过讨论类型3 LSA来完成内部OSPF路由LSA的讨论,这种类型的作用是为区域间路由建立拓扑模型。
8.2.3 LSA类型3:汇总LSA
OSPF区域的设计在一定程度上可以减少路由器内存和计算资源的消耗。OSPF不是让网络中不管哪个区域的所有路由器,都知道OSPF网络内所有的类型1和类型2 LSA,而是让ABR不将一个区域的类型1和类型2 LSA转发到另一个区域,反之亦然。这样的规则使每个区域的LSDB更小,节省了每次运行SPF算法占用的内存,也减少了复杂性,同时节省了CPU资源,缩短了收敛时间。
然而,虽然ABR不会把类型1和类型2 LSA泛洪到其他区域,路由器还是需要学习其他区域的子网信息。OSPF使用类型3汇总LSA来通告这些区域间的路由。ABR为一个区域中的每个子网生成一个类型3 LSA,并将每个类型3 LSA通告到其他区域。
例如,如果子网A在区域3中,区域3中的路由器会从类型1和类型2 LSA中学习到这个子网的信息。然而,连接到区域3的ABR不会将这些类型1和类型2的LSA转发到其他区域,而会为每个子网创建一个类型3 LSA(包括子网A)。其他区域的路由器可以为存在于另一个区域内的子网(如子网A)计算路由。
类型3汇总LSA不包含拓扑的明细信息,与类型1和2相比,汇总LSA负责汇总这些信息——这也就是汇总LSA的得名。从概念上讲,类型3的LSA看起来是连接到ABR的另一个子网,因此也应当由ABR负责创建并通告类型3的LSA。该区域内的路由器可以计算到达ABR的最优路由,这使路由器能够拥有去往类型3 LSA所列子网的良好无环路由。
下面我们来举例说明。首先,请对比图8-6顶部和底部所示的网络。如果使用一个区域,顶部描绘的拓扑与图8-1中的设计相同。这时,每台路由器上都有类型1 LSA(如图中的路由器名所示)和类型2 LSA(汇总为图中的T2)的副本。图8-6底部的网络显示了区域5的拓扑,并保持了图8-1所示的三区域设计。
ABR会创建类型3的LSA,并将其泛洪到下一个区域。ABR为被通告的子网地址分配LSID。它也会将自己的RID添加到LSA中,让路由器知道是哪个ABR通告的这条路由,其中还包含子网掩码。通告路由器的RID和LSID(子网地址)之间的关联,使OSPF进程能够利用类型3 LSA来创建图8-6底部所示的拓扑。
例8-5的重点在于图8-1中区域34的类型3 LSA。区域34外部有10个子网。作为ABR,R1和R2为这10个子网分别创建了一个类型3 LSA,并泛洪这些LSA,使得在区域34的show ip ospf database命令输出中,可以看到20个类型3 LSA。之后,示例用阴影标记出了子网10.10.99.0/24的类型3 LSA。
注释:
类型3汇总LSA不是用来进行路由汇总的。OSPF支持路由汇总,类型3 LSA可能会通告这样的汇总,但类型3 LSA实质上并不代表一条汇总路由。汇总这个术语反映出的理念是:这个LSA中的信息与类型1和类型2 LSA中的详细信息相比较少。
在之后的内容“计算区域间路由的开销”中,我们将讨论路由器如何确定类型3 LSA中子网的可用路由,以及路由器如何选择最优路由。
8.2.4 限制LSA的数量
默认情况下,Cisco IOS不限制路由器可以学到的LSA数量。然而,保护路由器不会学习到过多LSA,从而节省路由器的内存,有时是很有必要的。在LSA过多时,路由器可能无法很好地使用SPF来处理LSDB,并在合理的时间内达到收敛。
工程师可以使用max-lsa number OSPF命令,来限制路由器从其他路由器学到LSA的最大数量。在配置时,如果路由器从其他路由器学到了比配置数量更多的LSA(忽略该路由器本身创建的LSA),路由器就会作出响应。第一个响应是发出日志消息。路由器忽略该事件一段时间后,会重复警告消息。忽略等待策略可以反复进行几次,而这一过程会在路由器关闭所有邻居关系、丢弃LSDB,并再次增加邻居时结束(忽略时间、忽略事件的次数可以通过max-lsa命令进行配置)。
8.2.5 内部LSA类型总结
OSPF使用类型1、2和3的LSA,来为OSPF路由网络中的所有路由计算最优路由。在之后的章节中,我们会介绍类型4、5和7类型的LSA,OSPF会用它们来计算外部路由,即重分布到OSPF的路由。
表8-3总结了关于OSPF类型1、2和3中的一些关键内容。对于ROUTE考试来说,考生要有能力分析不同show ipospf database命令的输出内容。知道OSPF LSID所代表的内容可以帮助读者解读输出内容,掌握show ip ospfdatabase lsa-type lsid命令的关键字也很有用。表8-3总结了上述信息。