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 BoundaryRouter)所在区域的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区域或TotallyNSSA区域内部。
1、基本配置
R1:
sys
sysname R1
int loop 0
ip add 10.0.1.1 32
int loop 1
ip add 192.168.1.1 24
int g0/0/0
ip add 10.0.12.1 24
q
ospf 1
area 0.0.0.1
network 10.0.12.0 0.0.0.255
network 10.0.1.1 0.0.0.0
R2:
sys
sysname R2
int loop 0
ip add 10.0.2.2 32
int g0/0/1
ip add 10.0.12.2 24
int g0/0/0
ip add 10.0.235.2 24
q
ospf 1
area 0.0.0.0
network 10.0.235.0 0.0.0.255
area 0.0.0.1
network 10.0.12.0 0.0.0.255
network 10.0.2.2 0.0.0.0
R3:
sys
sysname R3
int loop 0
ip add 10.0.3.3 32
int g0/0/1
ip add 10.0.34.3 24
int g0/0/0
ip add 10.0.235.3 24
q
ospf 1
area 0.0.0.0
network 10.0.235.0 0.0.0.255
area 0.0.0.2
network 10.0.34.0 0.0.0.255
network 10.0.3.3 0.0.0.0
nssa
R4:
sys
sysname R4
int loop 0
ip add 10.0.4.4 32
int loop 1
ip add 172.16.1.1 24
int g0/0/0
ip add 10.0.34.4 24
q
ospf 1
area 0.0.0.2
network 10.0.34.0 0.0.0.255
network 10.0.4.4 0.0.0.0
nssa
R5:
sys
sysname R5
int loop 0
ip add 10.0.5.5 32
int g0/0/0
ip add 10.0.235.5 24
q
ospf 1
area 0.0.0.0
network 10.0.235.0 0.0.0.255
network 10.0.5.5 0.0.0.0
区域1是普通区域,区域2是NSSA区域,区域1的R1和区域2的R4都需要引入Loopback 1接口所连接的外部网络路由。在Rl和R4上使用 Route-Policy精确匹配Loopback 1接口的直连路由并引入OSPF进程。
r1
acl number 2000
rule 5 permit source 192.168.1.0 0.0.0.255
route-policy 10 permit node 1
if-match acl 2000
ospf 1
import-route direct route-policy 10
r4
acl number 2000
rule 5 permit source 172.16.1.0 0.0.0.255
route-policy 10 permit node 1
if-match acl 2000
ospf 1
import-route direct route-policy 10
可以看到,在R5的路由表中,这两条路由都显示为O_ASE,且优先级与开销也都相同。不同之处是这两条路由的下一跳,因为它们是由不同的路由器发送给R5的。
可以看到,R5的LSDB中共有5种LSA,它们分别是Router LSA(或称Type-1 LSA)、Network LSA(或称Type-2 LSA)、Sum-Net LSA(或称Type-3 LSA,Network SummaryLSA)、Sum-Asbr LSA(或称Type-4 LSA,ASBR Summary LSA)和External LSA(或称Type-5 LSA,AS External 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。
Ls age: Ls age是指LSA的老化时间,用来表示LSA已经存活了多长时间,最大值为3600s。当一台路由器产生一条LSA 的时候,路由器会将LSA的老化时间设置为0。LSA在产生之后,无论是停留在路由器的LSDB内,还是在传递过程之中,老化时间都会不断增加。为了防止因LSA 的过期而造成路由回馈,路由器会每隔30min泛洪自己产生的LSA。若序列号与校验和的比较都不能确定出最新的LSA时,则会比较老化时间。Seq#:每一条LSA都会维护一个Seq#(序列号),产生这条LSA 的路由器默认会以30s 的周期泛洪这条LSA,每次泛洪时,序列号就加1。LSA 的序列号越大,表明这条LSA越新。
Chksum: chksum(校验和)用来校验LSA的完整性。所有的LSA 都保存在路由器的LSDB 中,每5min会计算一次。如果路由器收到了同一条LSA,且序列号相同,则会比较它们的校验和,校验和越大就被认为相应的LSA越新。在上面的显示信息中,Link count 以上的参数信息通常被称为LSA 头部信息,Linkcount及以下部分为具体的链路描述信息。Link count标识了这条LSA描述的链路信息的数量。对于P-2-P链路类型,Link ID是指链路上邻居接口的P地址;对于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的重复。
可以看到,这条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 LS是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。
区域间的路由是根据Sum-Net LSA并结合Router LSA及 Network-LSA计算出来的。对于某个区域的一台OSPF路由器来说,它无需了解其他区域的链路状态信息,但可以通过Sum-Net LSA并结合Router LSA 及 Network-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路由器Rl的路由及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-Net LSA和Sum-Asbr LSA 的相同点是它们都由ABR产生,并且其AdvRouter在泛洪过程中会作相应的改变,不同点在于Sum-Net LSA是用来计算区域间的路由的,而Sum-Asbr LSA是用来计算到达ASBR的路由的。如果网络中不存在ASBR,那就不会产生Sum-Asbr LSA,这也说明有External LSA存在时,才会有Sum-Asbr LSA。
NSSA区域是不允许External LSA存在的,但NSSA区域允许通过 import-route命令引入外部路由,那么如何来描述在 NSSA区域中的AS 外部路由呢?NSSA区域引入的外部路由不能以External LSA的形式出现,取而代之的是使用NSSA LSA来描述NSSA区域中的AS外部路由,且NSSA LSA只能出现在NSSA区域中。NSSA LSA由 NSSA区域的NSSA ASBR产生。
可以注意到,NSSA LSA的参数信息基本上和 External LSA相同。
NSSA LSA是特殊类型的LSA,只会出现在NSSA区域中,不能泛洪到其他任何区域,那么其他区域的路由器又是如何计算去往NSSALSA所表示的外部网络的路由呢?原来,NSSA区域的ABR会将NSSA LSA转换为External LSA,并泛洪到其他区域。
R3为NSSA区域的ABR路由器,在R3上查看LSDB信息。
可以看到,由10.0.4.4产生的NSSA LSA 被R3转换成了External LSA,并泛洪到其他区域。