原理概述
OSPF是一种基于链路状态的动态路由协议,每台OSPF路由器都会生成相关的LSA,并将这些LSA通告出去。路由器收到LSA后,会将它们存放在链路状态数据库LSDB中。
LSA有多种不同的类型,不同类型的LSA的功能和作用是不同的,下面介绍几种常见的LSA。
Type-1 LSA(Router LSA):每台路由器都会产生,用来描述路由器的直连链路状态和开销值。Type-1 LSA 只能在所属区域内部泛洪,不能泛洪到其他区域。
Type-2 LSA(Network LSA):它是由DR产生的,主要用来描述该DR所在网段的网络掩码以及该网段内有哪些路由器。Type-2 LSA只能在所属区域内部泛洪,不能泛洪到其他区域。
Type -3 LSA ( Network Summary LSA ):它是由 ABR ( Area Boundary Router )产生的, ABR 路由器将所连区域的 Type-1和 Type-2 LSA 转换为 Type-3 LSA ,用来描述区域间的路由信息。 Type-3 LSA 可以泛洪到整个 AS ( Autonomous System ,自治域)内部,但不能泛洪到 Totally Stub 区域和 Totally NSSA ( Not-So-Stubby Area )区域。
Type -4 LSA ( ASBR Summary LSA ):它是由 ASBR ( Autonomous System Boundary Router )所在区域的 ABR 产生的,用来描述到 ASBR 的路由。 Type -4 LSA 可以泛洪到整个 AS 内部,但不能泛洪到 Stub 区域、 Totally Stub 区域、 NSSA 区域和 Totally NSSA 区域中。
Type -5 LSA ( AS External LSA ):它是由 ASBR 产生的,用来描述到 AS 外部网络的路由。 Type -5 LSA 可以泛洪到整个 AS 内部,但不能泛洪到 Stub区域、 Totally Stub 区域、 NSSA 区域和 Totally NSSA 区域中。
Type-6 LSA :用于 OSPF 组播。
Type-7 LSA ( NSSA LSA ):它是由 NSSA 区域或 Totally NSSA 区域的 NSSA ASBR 产生的,用来描述到 AS 外部的路由。 Type-7 LSA 只能出现在所属 NSSA 区域或 Totally NSSA 区域内部。
实验目的
理解 OSPF 中不同类型的 LSA 的作用
熟悉 OSPF 中不同类型的 LSA 的泛洪范围
熟悉 LSA 中重要字段的含义
实验内容
实验拓扑如图所示。本实验模拟了一个企业总部与两个分支机构的网络场景,R2、R3、R5之间的链路属于区域0,R1与R2之间的链路属于区域1,R3与R4之间的链路属于区域2,R1和R4的 Loopback 1接口用来表示以后有合作伙伴加入时的网络。区域1为普通区域,区域2为 NSSA 区域。在区域0中,R5为 DR ,R2为 BDR ,R3为 DRother 。实验过程中会大量地展示和分析链路状态数据库,以加深对不同类型 LSA 的认识和理解。
实验拓扑
1.基本配置
根据拓扑图进行相应的基本配置,并使用ping命令检测R1与R2之间的连通性。
其余直连网段的连通性测试过程在此省略。
2.配置OSPF路由协议
在每台路由器上配置OSPF路由协议,R1与R2之间的链路属于区域1,R3与R4之间的链路属于区域2,R2、R3、R5之间的链路属于区域0,区域2是NSSA区域。
[R1]router id 10.0.1.1
[R1]ospf 10
[R1-ospf-10]area 1
[R1-ospf-10-area-0.0.0.1]net 10.0.12.0 0.0.0.255
[R1-ospf-10-area-0.0.0.1]net 10.0.1.1 0.0.0.0
[R2]router id 10.0.2.2
[R2]ospf 10
[R2-ospf-10]area 1
[R2-ospf-10-area-0.0.0.1]net 10.0.12.0 0.0.0.255
[R2-ospf-10-area-0.0.0.1]net 10.0.2.2 0.0.0.0
[R2-ospf-10-area-0.0.0.1]area 0
[R2-ospf-10-area-0.0.0.0]net 10.0.235.0 0.0.0.255
[R3]router id 10.0.3.3
[R3]ospf 10
[R3-ospf-10]area 2
[R3-ospf-10-area-0.0.0.2]nssa
[R3-ospf-10-area-0.0.0.2]net 10.0.34.0 0.0.0.255
[R3-ospf-10-area-0.0.0.2]net 10.0.3.3 0.0.0.0
[R3-ospf-10-area-0.0.0.2]area 0
[R3-ospf-10-area-0.0.0.0]net 10.0.235.0 0.0.0.255
[R4]router id 10.0.4.4
[R4]ospf 10
[R4-ospf-10]area 2
[R4-ospf-10-area-0.0.0.2]nssa
[R4-ospf-10-area-0.0.0.2]net 10.0.34.0 0.0.0.255
[R4-ospf-10-area-0.0.0.2]net 10.0.4.4 0.0.0.0
[R5]router id 10.0.5.5
[R5]ospf 10[R5-ospf-10]area 0
[R5-ospf-10-area-0.0.0.0]net 10.0.235.0 0.0.0.255
[R5-ospf-10-area-0.0.0.0]net 10.0.5.5 0.0.0.0
配置完成后,在R2、R5的G0/0/0接口上修改接口优先级的值,使R5成为DR,R2成为BDR。
[R2-ospf-10]int g0/0/0
[R2-GigabitEthernet0/0/0]ospf dr-priority 50[R5]int g0/0/0
[R5-GigabitEthernet0/0/0]ospf dr-priority 100
在R2、R3、R5上重启OSPF进程,下面仅示意了R5的重启方法。
<R5>reset ospf process
Warning: The OSPF process will be reset. Continue? [Y/N]:y
在R3上查看DR与BDR的选举情况。
可以看到,在R1、R3、R5组成的广播网络中,目前R5是DR,R2是BDR。接下来查看每台路由器上的路由表。
可以看到,每台路由器都已获得了非直连网络的路由条目。接下来使用ping命令检测连通性 。
可以看到,各个网段之间的通信是正常的。
区域1是普通区域,区域2是NSSA区域,区域1的R1和区域2的R4都需要引入Loopback1接口所连接的外部网络路由。在R1和R4上使用Route-Policy精确匹配Loopback1接口的直连路由并引入OSPF进程。
[R1]acl 2000
[R1-acl-basic-2000]rule permit source 192.168.1.0 0.0.0.255
[R1-acl-basic-2000]route-policy 10 permit node 1
[R1-route-policy]if-match acl 2000
[R1-route-policy]ospf 10
[R1-ospf-10]import-route direct route-policy 10
[R4]acl 2000
[R4-acl-basic-2000]rule permit source 172.16.1.0 0.0.0.255
[R4-acl-basic-2000]route-policy 10 permit node 1
[R4-route-policy]if-match acl 2000
[R4-route-policy]ospf 10
[R4-ospf-10]import-route direct route-policy 10
配置完成后,在R5上查看由R1和R4引入的两条路由。
可以看到,在R5的路由表中,这两条路由都显示为O_ASE,且优先级与开销也都相同,不同之处是这两条路由的下一跳,因为它们是由不同的路由器发送给R5的。
3.查看Type-1 LSA, Type-2 LSA,Type-3 LSA
在区域0的R5上查看LSDB
可以看到,R5的 LSDB 中共有5种 LSA ,它们分别是 Router LSA (或称 Type-1 LSA )、 Network LSA (或称 Type-2 LSA )、Sum-Net LSA (或称 Type-3 LSA , Network Summary LSA )、 Sum- Asbr LSA (或称 Type-4 LSA , ASBR Summary LSA )和 External LSA (或称 Type-5 LSA , AS External LSA )。
在R5上查看 Router-ID 为10.0.2.2产生的 Router LSA 的详细信息。
下面解释一下显示信息中的部分参数的含义。
①Type :显示信息中, Type 表示了 LSA 的类型,这里表示的是 Router LSA 。不同类型的 LSA 的作用和泛洪范围是不相同的。 Router LSA 描述了路由器的直连链路或接口,泛洪范围为所在区域的内部,以使本区域的其他路由器了解其直连链路或接口的状态信息。
②Ls id :对于 Router LSA , Ls id 就是产生该 Router LSA 的路由器的 Router-ID 。
③Adv rtr : Adv rtr 描述了 LSA 是由哪台路由器产生的。对于 Router LSA 来讲, Adv rtr 就是产生该 Router LSA 的路由器的 Router-ID 。
④Seq #:每一条 LSA 都会维护一个 Seq #(序列号),产生这条 LSA 的路由器默认会以30s的周期泛洪这条 LSA ,每次泛洪时,序列号就加1。 LSA 的序列号越大,表明这条 LSA 越新。
⑤Chksum : chksum (校验和)用来校验 LSA 的完整性。所有的 LSA 都保存在路由器的 LSDB 中,每5min会计算一次。如果路由器收到了同一条 LSA ,且序列号相同,则会比较它们的校验和,校验和越大就被认为相应的 LSA 越新。
⑥Ls age : Ls age 是指 LSA 的老化时间,用来表示 LSA 已经存活了多长时间,最大值为3600s。当一台路由器产生一条 LSA 的时候,路由器会将 LSA 的老化时间设置为0。 LSA 在产生之后,无论是停留在路由器的 LSDB 内,还是在传递过程之中,老化时间都会不断增加。为了防止因 LSA 的过期而造成路由回馈,路由器会每隔30min泛洪自己产生的 LSA 。若序列号与校验和的比较都不能确定出最新的 LSA 时,则会比较老化时间。在 LSDB 中,如果老化时间相差大于15min以上,则 Ls age 的值越小,说明 LSA 越新;如果相差在15min内,则认为两条 LSA 是一样的。
在上面的显示信息中, Link count 以上的参数信息通常被称为 LSA 头部信息, Link count 及以下部分为具体的链路描述信息。 Link count 标识了这条 LSA 描述的链路信息的数量,对于 P-2-P 链路类型, Link ID 是指链路上邻居接口的 IP 地址;对于 TransNet 链路类型, Link ID 是指 DR 接口的 IP 地址。 Data 是指自身接口的 IP 地址, Link Type 是指接口的链路类型, Metric 是指路由器自己到达这条链路的 Cost 值。需要说明的是, OSPF 协议会把 Broadcast 和 NBMA 这两种具有多路访问能力的网络都认为是 TransNet 网络。
从上得知,R2的 Router LSA 描述了自己连接到了某个 TransNet 网络,网络的 DR 接口的 IP 地址为10.0.235.5(R5),自己使用10.0.235.2连接到该网络中,且到达这个网络的 Cost 值为1。
Network LSA 是由 DR 产生的,它的主要作用是描述 TransNet 网络的掩码信息和连接到 TransNet 网络的路由器的信息。在多路访问网络中,每台路由器都产生 Network LSA 是没有必要的,因为这会导致 Network LSA 的重复。
R5是 TransNet 网络的 DR ,在R5上查看它产生和发送的 Network LSA 的详细信息。
可以看到,这条 Network LSA 说明了 TransNet 网络的掩码为255.255.255.0,连接到这个 TransNet 网络的路由器有10.0.5.5(R5)、10.0.2.2(R2)、10.0.3.3(R3)。 Network LSA 中没有携带路径的开销,原因是 Router LSA 已经描述了自己到 TransNet 网络的 Cost 值。
在R2、R3、R5上查看区域0的 LSDB 。
可以发现,R2、R3、R5的 LSDB 中区域0的 Router LSA 和 Network LSA 是完全一样的。
Router LSA 和 Network LSA 可以完全描述本区域的网络拓扑,但这些 LSA 不能泛洪到其他区域。当 OSPF 网络包含多个区域时,通过 Router LSA 和 Network LSA 就无法进行区域间路由的计算了。区域间路由的计算需要利用 Sum-Net LSA 来实现, ABR 路由器会将自己相连区域的 Router LSA 和 Network LSA 转换为 Sum-Net LSA ,然后泛洪到其他区域。
R2同时连接了区域0和区域1,所以是一台 ABR 路由器。查看R2的 LSDB 。
可以看到,R2的区域0中有一条 LinkState ID 为10.0.12.0的 Sum-Net LSA ,它的 AdvRouter 为10.0.2.2。网段10.0.12.0/24本是属于区域1的网络,现在被 ABR 路由器R2转换为 Sum-Net LSA 并泛洪到了区域0中。10.0.235.0/24本是属于区域0的网络,现在被 ABR 路由器R2转换为 Sum- Net LSA 并泛洪到了区域1中。实际上, Sum-Net LSA 是 ABR 利用自己相连区域的 Router-LSA 和 Network-LSA 来计算得到的路由信息的。
在R2上查看 LinkState ID 为10.0.12.0的这条 Sum-Net LSA 的详细信息。
可以看到,这条 LSA 的 Type 为 Sum-Net , Ls id 表明了目的网络地址为10.0.12.0,Net mask 表明了目的网络的掩码为255.255.255.0, Metric 表明了 ABR 路由器R2去往目的网络的 Cost 值为1。
在R5上查看 LSDB ,并查看路由表中关于10.0.12.0/24的路由信息。
可以看到, R5 的 LSDB 中存在10.0.12.0这条 Sum-Net LSA ,R5的路由表中关于10.0.12.0/24的这条路由信息表明R5去往10.0.12.0/24的 Cost 为2。R5通过这条 Sum-Net LSA 得知网络中存在10.0.12.0/24网段,这个网段的 AdvRouter 为10.0.2.2(R2),R2自已到达10.0.12.0/24的 Cost 为1。R5和R2同属于区域0,所以R5可以通过 Router LSA 和 Nerwork LSA 计算出自己到R2的 Cost 为1,因此,R5可以计算出自己到10.0.12.0/24的 Cost 值为1+1=2。
区域间的路由是根据 Sum-Net LSA 并结合 Router LSA 及 Network-LSA 计算出来的。对于某个区域的一台 OSPF 路由器来说,它无需了解其他区域的链路状态信息,但可以通过 Sum-Net LSA 并结合 Router LSA 及 Network-LSA 计算出区域间路由;计算区域间路由时,采用的不再是链路状态算法,而是距离矢量算法。
在R2上查看 LinkStateID 为10.0.34.0/24这条 LSA 的信息。
可以看到,10.0.34.0/24是属于区域2的网络, ABR 路由器R3将关于10.0.34.0/24的路由信息以 Sum-Net LSA 的方式通告进了区域0, Cost 为1。然后, ABR 路由器R2又继续将此信息以 Sum- Net LSA 的方式通告进了区域0。
对于 ABR 来说,如果在自己相连的某个区域的 LSDB 中存在某条 Sum-Net LSA ,并且该 Sum-Net LSA 的 AdvRouter 不是自己的 Router-ID 时,就会将这条 Sum-Net LSA 的 AdvRouter 修改为自己的 Router-ID ,并重新计算自己到达这条 Sum-Net LSA 的 Cost 值,然后将之泛洪到与自己相连的其他区域中。
4.查看 Type-4 LSA 和 Type-5 LSA
路由器可以通过 Router LSA 和 Network LSA 计算区域内的路由,可以通过 Sum-Net LSA 并结合 Router LSA 和 Network LSA 计算区域间的路由,可以通过 Sum-Asbr LSA 和 External LSA 计算 AS 外部的路由。
R1的 Loopback 1是外部路由,被 ASBR 路由器R1引入到了 OSPF 网络中。查看R1的 LSDB 。
可以看到,R1的 LSDB 中存在一条 Type 为 External , LinkState ID 为192.168.1.0,
AdvRouter 为10.0.1.1的 LSA 。在R1上查看这条 LSA 的具体信息。
可以看到,这条 LSA 的 Type 是 External , AdvRouter 为10.0.1.1(R1),这条 LSA 实际上是一条目的网络为192.168.1.0/24的 AS 外部路由,显示信息中的 E Type ( External Type )的值为2。
External LSA 可以在整个 AS 内部泛洪(但不能泛洪到 Stub 区域、 Totally Stub 区域、 NSSA 区域和 Totally NSSA 区域中),在泛洪过程中其各个参数不会被改变。
查看R2、R3、R4、R5的 LSDB 中是否也存在这条 LSA 。
从上面的显示信息可以看到,R2、R3、R5的 LSDB 中都存在这条 External LSA ,而且 AdvRouter (10.0.1.1)等参数信息没有任何变化。需要注意的是,R4的 LSDB 中没有这条 External LSA ,这是因为R4处于 NSSA 区域中,而 External LSA 是不允许进入 NSSA 区域的。
R5通过 Link id 为192.168.1.0的 External LSA 得知,从自己去往192.168.1.0/24是可以通过10.0.1.1(R1)到达的,并且知道从R1去往192.168.1.0/24的 Cost 为1。然而,R5并不知道从自己去往 ASBR 路由器R1的路由及 Cost ,所以R5还无法计算出从自己到达外部网络192.168.1.0/24的路由及 Cost 。在 OSPF 协议中, Sum - Asbr LSA 是用来描述去往 ASBR 的路由信息的。
查看R5的 LSDB 中 LinkState ID 为10.0.1.1的 Sum- Asbr LSA 的具体信息。
可以看到,这条 Sum - Asbr LSA 的 AdvRouter 是 ABR 路由器R2(10.0.2.2),并且表明了从 ABR 路由器R2到 ASBR 路由器R1(10.0.1.1)的 Cost 值为1。
在R5上使用 display ospf abr-asbr 命令查看到达 ABR 和 ASBR 的 Cost 值。
可以看到,从R5到达 ABR 路由器R2的 Cost 值为1,从R5到达 ASBR 路由器R1的 Cost 值为2。由此可见,R5其实是通过 Router LSA 和 Network LSA 先计算出到达 ABR 路由器R2的 Cost 值,然后加上 Sum-Asbr LSA 所表示的从 ABR 路由器R2到达 ASBR 路由器 RI 的 Cost 值,最终得出从自己到达 ASBR 路由器R1的 Cost 值。
Sum-Net LSA 和 Sum-Asbr LSA 的相同点是它们都由 ABR 产生,并且其 AdvRouter 在泛洪过程中会作相应的改变,不同点在于 Sum-Net LSA 是用来计算区域间的路由的,而 Sum-Asbr LSA 是用来计算到达 ASBR 的路由的。如果网络中不存在 ASBR ,那就不会产生 Sum- Asbr LSA ,这也说明有 External LSA 存在时,才会有 Sum- Asbr LSA 。
在 RI 上使用 undo import-route 取消路由的引入。
[R1]ospf 10
[R1-ospf-10]undo import-route direct
在R5上查看 LSDB 。
可以看到, LinkStateID 为192.168.1.0的 External LSA 消失了, LinkState ID 为10.0.1.1的 Sum- Asbr LSA 也随之消失了。
5.查看Type-7 LSA
NSSA 区域是不允许 External LSA 存在的,但 NSSA 区域允许通过 import - route 命令引入外部路由,那么如何来描述在 NSSA 区域中的 AS 外部路由呢? NSSA 区域引入的外部路由不能以 External LSA 的形式出现,取而代之的是使用 NSSA LSA 来描述 NSSA 区域中的 AS 外部路由,且 NSSA LSA 只能出现在 NSSA 区域中。 NSSA LSA 由 NSSA 区域的 NSSA ASBR 产生。
R4为 NSSA 区域的 ASBR ,查看R4的 LSDB 。
可以看到,R4为外部路由172.16.1.0产生了相应的 NSSA LSA 。
在R4上查看这条LSA 的详细信息。
可以注意到, NSSA LSA 的参数信息基本上和 External LSA 相同。
NSSA LSA是特殊类型的 LSA ,只会出现在 NSSA 区域中,不能泛洪到其他任何区域,那么其他区域的路由器又是如何计算去往 NSSA LSA 所表示的外部网络的路由呢?原来, NSSA 区域的 ABR 会将 NSSA LSA 转换为 External LSA ,并泛洪到其他区域。
R3为 NSSA 区域的 ABR 路由器,在R3上查看 LSDB 信息。
可以看到,由10.0.4.4产生的 NSSA LSA 被R3转换成了 External LSA ,并泛洪到其他区域。