连接到同一个OSPF区域的所有路由器都会获悉完全相同的拓扑数据。每台路由器在链路状态数据库中存储这些由链路状态通告(LSA)组成的的数据。然后,路由器对LSDB运行SPF(最短路径优先)算法,以确定前往每个子网的最佳路由。
下面就介绍下OSPF中所有类型的LSA。
总体上来说,有以下几种:
1.类型1:Router LSA
2.类型2:Network LSA
3.类型3:Network Summary LSA
4.类型4:ASBR Summary LSA
5.类型5:AS External LSA
6.类型6:Group Membership LSA
7.类型7:NSSA External LSA
8.类型8:External Attributes LSA
9.类型9:Opaque LSA(link-local scope)
10.类型10:Opaque LSA(area-local scope)
11.类型11:Opaque LSA(AS scope)
下面来进行详细的解释。
1.Router LSA
每台路由器都创建1类LSA,用于向它连接的每个区域描述自己。在每台路由器中,每个区域的LSDB都包含一个1类的LSA,它指出了当前路由器的RID和所有接口的IP地址,1类LSA还用于描述末梢网路。
1类LSA使用OSPF路由器ID标示OSPF路由器。每台路由器都创建一个1类的LSA并泛洪到整个区域。为了泛洪LSA,始发路由器将1类LSA发 送给当前区域内的邻居,然后邻居再将其发送给当前区域的其他邻居,以此类推,知道区域内的所有路由器都有该LSA的拷贝。
1类LSA包含信息:对于没有选举DR的每个接口,指出接口的子网号/掩码和OSPF开销
对于选举了DR的每个接口,指出DR的IP地址以及连接到中转网络的链路。
对于没有选举DR但是通过它可以到达一个邻居的接口,指出该邻居的RID。
每台内部路由器都创建一个1类的LSA,但是ABR创建多个1类LSA,每个区域都有一个。
此种LSA 可以通过show ip ospf database router 查看router LSA
2:Network LSA
每个多路访问网络中,子网中的DR都会创建Network LSA,描述了子网及连接到该子网的路由器借口。它只在产生这条Network LSA 的区域泛洪描述了所有和它相连的路由器(包括DR 本身)。
Show ip ospf database network 可以看到Network LSA
3:Network Summary LSA
由ABR创建,描述了一个区域的1类和2类LSA中包含的子网,被通告到另一个区域。它指出了始发区域的链路(子网)和开销,但是没有拓扑数据。
如果ABR 知道有多条路径可以到达目标地址,但是它仍然只发送单个的Network Summary LSA,并且是开销最低的那条;同样,如果ABR 从其他的ABR那里收到多条Network Summary LSA 的话,它会只选择开销最低的,并把这条Network Summary LSA 宣告给其他区域
当其他的路由器收到来自ABR 的NetworkSummary LSA 以后,它不会运行SPF 算法,它只简单的 加上到达那个ABR 的开销和Network Summary LSA中包含的开销,通过ABR,到达目标地址的路由和开销一起被加进路由表里,这种依赖中间路由器来确定到达目标地址的完全路由(full route)实际上是距离矢量路由协议的行为
可以使用show ip ospf database summary 查看Network Summary LSA
4:ASBR Summary LSA
类似于3类LSA,只是通告一条用于前往ASBR的主机路由,而不是一个网络。
使用show ip ospf database asbr-summary 可以看到ASBR Summary LSA
5:AS External LSA
AS外部LSA,由ASBR创建,用于描述被注入到OSPF中的外部路由。这种LSA 将在全AS 内泛洪。
可以使用show ip ospf database external看AS External LSA
6:Group Membership LSA
组成员关系LSA,这是为MOSPF定义的,思科的IOS不支持。
7:NSSA External LSA
NSSA外部LSA,来自非完全Stub 区域(not-so-stubby area)内,类似于5类LSA,只不过是由NSSA区域中的ASBR创建,只在NSSA 区域内泛洪。
使用命令Show ip ospf database nssa-external可以看NSSA External LSA
8:External Attributes LSA
外部属性LSA,思科路由器不能实现。
9--11:Opaque LSA
不透明LSA,用作通用LSA,以方便扩展OSPF。(如:为了支持MPLS流量工程而修改了类型10的LSA。)
最后,再说下OSPF中各种区域会产生的LSA:
骨干:12345
STUB:1234
NSSA :1237
LSA类型
LSA 1:Router LSA,始发于Area内的任何路由器。
LSA 1列出了路由器的链路和接口,链路的出站Cost以及接口状态。LSA 1只在本Area内Flooding,本Area内其它路由器收到LSA1形成的路由条目以“O” 表示。简单来讲,LSA1描述自身的直连信息。
LSA 2:Network LSA,本Area内DR始发。
LSA2通告的对象:
该LAN 内所有的DRother和Area内的其他路由器(一个Area里面可能还有其他链路,比如点到点,或者另一个LAN,他们作为Area成员需要知道该LAN 的信息)。
LSA 2通告的内容:
该LAN 内所有和DR形成Full 邻接关系的路由器的Router-id 以及DR本身的Router-id,再就是该LAN的网络掩码(LAN中的各接口掩码肯定是一样的,否则无法形成OSPF邻居)。LSA2只在本Area内Flooding。
Attention:就字段分析,LSA1的重点在于链路ID和链路数据,针对不同的链路类型有不同的内容,而LSA2本身是广播型链路的产物,重点在于和DR相连的路由器ID以及该广播型链路的网络掩码。
路由器在SPF运算时,使用LSA1确定如何到达此LAN内的各个接口,使用LSA2确定此LAN的网络掩码。这就是LSA2要求被泛洪到整个Area的原因,也是LSA2最大的一个作用。
LSA1通告的链路类型 链路ID 链路数据
1 我连着点到点链路 邻居路由器的ID 与其直连所用的本端接口IP地址
2 我连着传送网络 这个网络DR的地址 我和DR相连的那个接口的IP地址
3 我连着末节网络 这个网段的地址 这个网段的子网掩码
4 我连着一条虚链路 虚链路对端的路由器ID 我的虚链路接口的MIB-II ifIndex
这里所说的传送网络在实际中就是广播型链路,而末节网络可能是所连的点到点链路,一个环回口代表的网段,或者一个实际连接的主机子网段。而MIB-II ifindex 就是虚链路所依托的实际链路的入口IP地址,虚链路的建立是在两台ABR之间选择一条Cost最低的路径。
Eg: (Lo0:1.1.1.1)R1-.1----12.1.1.0----.2-R2(Lo0:2,2.2.2)
R1会向R2通告一个LSA1,其中包含3条自己有关的链路:
1.A Stub Network , Link ID = 1.1.1.1 & Link Data = 255.255.255.255
R1认为学到一个末节网络(实际是通过Lo0模拟的主机地址)
2.Another Router(Point-to-Point),Link ID = 2.2.2.2 & Link Data = 12.1.1.1
R1认为自己通过点到点链路连着另一个Router,它的ID是2.2.2.2,R1通过12.1.1.1这个接口和它相连。
3.A Stub Network , Link ID = 12.1.1.0 & Link Data = 255.255.255.0
R1认为自己学到一个末节网络(实际是一条点到点的链路)
LSA 3:Network Summary LSA,ABR始发。
LSA 3通告的是ABR相连Area的链路信息,具体来讲就是将自己Area内的链路告诉Area 0,也将其他Area(包括Area 0)的信息传到自己的Area。其通告的链路是所有链路中Cost最小的,在路由表中以“O IA” 表示。如果LSA3通告的是一条缺省路由,那么链路状态ID和网络掩码字段中都将设为0.0.0.0。
Attention:如果在OSPF中执行了Area间汇总,那么LSA 3中通告的就是汇总路由而不是明细的,其实这里就应该说成是“路由”而不是“链路”,因为LSA 3本身通告的就是各网络如何可达,接收路由器并不明了该Area的拓扑结构,只是以DV的思想,将LSA 3中通告的链路加上自己到ABR(即ADV Router)的开销就放进路由表了。
LSA 4:ASBR Summary LSA,ABR始发。
LSA 4通告了ASBR的具体位置,是一条到达ASBR的主机路由。
LSA3和LSA4都由ABR始发,报文格式是相同的,只不过有几处字段内容不一样。在“链路状态ID” 这个字段中,LSA3通告的是网络或子网的IP地址,而LSA4通告的是ASBR的路由器ID;而“网络掩码字段”对LSA4没什么意义,设置为0.0.0.0。
一台Router成为ABR的前提是必须有运行OSPF进程的接口与Area 0直连,否则不会产生LSA 3 和LSA 4,也就无法完成ABR的任务,解决办法一般是通过虚链路。
Attention:LSA3和LSA4都只能在单Area内泛洪。具体来看,LSA4就是在Area 0内泛洪让ABR都知道ASBR在哪;而LSA3这里要注意,比如Area 1的ABR将Area 1的路由信息通告进Area 0,该LSA3仅在Area 0内泛洪,Area 2会收到这个LSA3,但不是将其直接发送到Area 2,而是新生成一个LSA3,因为不仅要加上自己到那个ABR的链路开销,而且ADV Router也要改为自己,新的LSA3会进入到Area 2并泛洪开来,所以还是遵守了LSA 3的泛洪原则。从一个侧面也可以看出,OSPF进行Area间路由是典型的距离矢量的行为。
LSA 5:AS External LSA,ASBR始发。
LSA 5通告了与ASBR直连的其它AS的路由信息,不同于BGP中AS的概念,这里指IGP区域。LSA 5被Flooding 至除Stub,Total Stub,,NSSA以外的所有Area,是唯一的一个不与任何Area相关联的LSA通告。
LSA 5形成的路由条目以E1或E2表示(默认为E2),可以通过命令改为E1类型 redistribute igp subnets metric-type 1 。
E2 Cost = ASBR到AS外部目的网络的Cost
E1 Cost = 本地到ASBR的Cost + ASBR到AS外部目的网络的Cost。
Attention:当OSPF路由器获得一条LSA 5,在装进路由表之前会检查“转发地址”是否可以通过Area内或Area间路由到达,若不可达,不会装进路由表。
LSA 7:NSSA External LSA,由NSSA区域的ASBR始发。
该LSA内容和LSA5基本一样(只有转发地址字段不同),关键是LSA7只在始发该LSA的NSSA区域内Flooding,并在ABR转换成LSA5,LSA 7形成的路由条目以N1或N2表示。
事实上LSA7和LSA5内容一样,只不过泛洪区域有限制所以要标记一下,而且是可以相互转换的。在NSSA区域中,ASBR将外部路由信息封装进LSA ,设置其P-Bit 位为1,使其在NSSA区域里泛洪。在ABR那里会将P-Bit 位改为0,由LSA 7转换为LSA 5,再传到OSPF其他的Area。同样的,如果有别的Area通告进来的外部路由要注入到这个NSSA区域中,在该NSSA区域的ABR那里会将LSA 5转换为LSA 7。
OSPF区域
OSPF 特殊区域类型有四种:Stub ,Total Stub ,NSSA 和 Total NSSA 。其本质都是“LSA精简的Area ”。当一个Area 被定义为Stub区域时,该Area 内的路由器所发送的hello数据包都会将E-Bit位设为0,而普通区域的应该是1,所以区域内的所有路由器都敲入area 1 stub 这样的命令才能正常形成邻接关系。
LSA的精简决定了Stub区域在接收LSA时会有所取舍,但对本Area信息的向外通告不会有任何影响,因此别的Area对Stub区域的信息是完全了解的。像是要成为Total Stub区域只需要在ABR上加上关键字no-summary,因为阻止的是ABR向Stub区域内发送LSA3。
Stub区域中不通告AS外部路由,也无法实现重发布,但是有OSPF Area内和Area间的完整信息,并通过一条默认路由O*IA 保持和AS外部的联系,该默认路由通过LSA 3学到。Stub 区域设计是出于对该区域路由器性能及路由条目需求的考虑而进行的LSA精简,但不可避免的引起信息不对称,进而出现次优选路。
Total Stub 比 Stub “末节”得更为彻底,连OSPF Area间的路由也不要,只有本Area 的信息。ABR将默认路由注入Total Stub 区域,不仅外部路由要通过它走,Area间的路由也要通过它走,同时ABR会阻止LSA3 & 5 & 7 在Total Stub 区域内泛洪 -- 除了通告默认路由的那一条LSA3。
普通区域的Router 进行Area 间的选路原则为:
路由总Cost = 本Router到ABR的Cost + ABR到目的网络的开销 Cost最小的路由放进路由表
而设置为Total Stub 的区域的Router 选路原则为:
路由总Cost = 本Router到达ABR的Cost Cost最小的路由放进路由表
NSSA是当Stub区域中存在ASBR时形成的区域,本身Stub不能有AS外部路由,也不能进行重发布,但无奈自己成为了OSPF和其它IGP通信的边界,变得 Not So Stubby ,于是形成NSSA 区域,在NSSA区域内注入的外部路由以LSA 7传递,并在ABR处还原为LSA 5。
简单来讲: NSSA = Stub + ASBR Total NSSA = Total Stub + ASBR
在Stub ,Total Stub ,NSSA 和Total NSSA 中只有NSSA不会自动注入默认路由,不过可以用命令实现: area 1 nssa default-information-originate ,这样即使是其他Area注入的外部路由也可达,基本上就是can go anywhere。
如果NSSA区域的ABR同时也是一个ASBR,会将外部路由以LSA 7 的形式注入到NSSA区域当中,那么针对这种特殊情况可以用命令 area 1 nssa no-redistribution 来阻止外部路由的注入。
外部路由在NSSA中以LSA 7存在,在ABR那里会转换为LSA 5向Area 0通告,我们可以用命令 summary-address prefix mask not-advertise 针对具体的条目控制LSA转换的过程,如果不用关键字 not-advertise 这条命令是用来外部路由汇总的,在ASBR上进行。
stub中有类型1、2、3的lsa,那么此区域是如何知道自治系统外部路由的呢,实际上类型5的lsa被封装在类型3的lsa中,所以仍可同另一自治系统或外部路由通信。nssa中有类型1、2、3、7的lsa。
4类的LSA是由ASBR即 自制系统边界的路由器通告的产生的LSA通告自治区与系统的出口。所以在末节区域中也就是stub和so stub 区域中不存在第四类的LSA而在NSSA中 第四类的LSA会被转换成7类LSA,用于通告NSSA的到自制系统外的出口。也就是说第四类LSA在经过NSSA区域的边界的时候会被捕获并转换成第7类的LSA。
总结:NSSA区域和末节区域均不接收4类LSA,区别在于NSSA接收7类LSA,7类LSA是由4类LSA转换而来。
对xukairen兄的回答分析一下(应该是对LSA的描述有误):
1.第四类(Type 4)LSA是由ABR产生的,而不是ASBR,第四类LSA叫ASBR-SUMMARY-LSA,是通告给除ASBR所在区别的其它相关区别的。是通告第五类LSA的。
2.第五类LSA才(Type 5)是由ASBR产生,AS-external-LSA,这个才是描述到AS外部路由的,通告给所有区别(除stub和nssa)
下面再看一下stub和NSSA的区别:
Stub Area:允许发布Type3的缺省路由和区别间路由
NSSA Area:与Stub相比是请允许我有外部路由的,即允许有ASBR存在,但在这里使用type7-LSA来通告外部路由。经过ABR到非NSSA区别会转成Type5 LSA
这样比较应该就比较好理解了,如果还想再研究可以随时hi我^_^,共同学习