OSPF LSA
LSA(Link-State Advertisement,链路状态广播)是链接状态协议使用的一个分组,它包括有关邻居和通道成本的信息。 LSAs 被路由器接收用于维护它们的 RIB(路由表)。
OSPF 路由协议是链路状态型路由协议,这里的链路即设备上的接口。链路状态型路由协议基于连接源和目标设备的链路状态作出路由的决定。链路状态是接口及其与邻接网络设备的的关系的描述,接口的信息即链路的信息,也就是链路的状态(信息)。这些信息包括接口的 IPv6 前缀(prefix)、网络掩码、接口连接的网络(链路)类型、与该接口在同一网络(链路)上的路由器等信息。这些链路状态信息由不同类型的 LSA 携带,在网络上传播。
路由器把收集到的 LSA 存储在链路状态数据库中,然后运行 SPF 算法计算出路由表。链路状态数据库和路由表的本质不同在于:数据库中包含的是完整的链路状态原始数据,而路由表中列出的是到达所有已知目标网络的最短路径的列表。
OSPF 协议是为 IP 协议提供路由功能的路由协议。OSPFv2(OSPF 版本 2)是支持 IPv4 的路由协议,为了让 OSPF 协议支持 IPv6,技术人员开发了 OSPFv3(OSPF 版本 3),OSPFv3 由 RFC2740 定义。
LSA 类型
1、OSPFv2 LSA 类型:
LSA 类型 | LSA 类型编号 |
Router LSA | 1 |
Network LSA | 2 |
Network summary LSA | 3 |
ASBR summary LSA | 4 |
Autonomous system external LSA | 5 |
Group membership LSA | 6 |
NSSA External LSA | 7 |
External attributes LSA for BGP | 8 |
Opaque LSA(链路本地范围) | 9 |
Opaque LSA(本地区域范围) | 10 |
Opaque LSA(AS 范围) | 11 |
注意:下面的文字描述还是比较详细的,如果文字描述确实是太多了,您可以只看字体加粗的部分。再往下还有 LSA 1 / 2 / 3 / 4 / 5 / 7 的类型总结。
(1)路由器 LSA(Router LSA):每一台路由器都会产生 1 类 LSA 通告。这个最基本的 LSA 通告列出了路由器所有的链路或接口,并指明了它们的状态和沿每条链路方向出站的代价,以及该链路上所有已知的 OSPF 邻居;另外,1 类 LSA 同时也指出了路由器是不是 ABR 或 ASBR。这些 LSA 通告只会在始发它们的区域内部进行泛洪扩散(如下图所示)。通过命令 show ip ospf database router 可以查看数据库中列出的所有路由器 LSA 通告。
![1 类 LSA:路由器 LSA](https://i-blog.csdnimg.cn/blog_migrate/4e3aadfef3a77f225c0c693eb7fbcc59.jpeg)
在链路状态 ID 字段中,使用通告路由器的路由器 ID 来标识 1 类 LSA。路由器的每条链路(接口)都被定义为 4 种类型之一:1、2、3 或 4 类。LSA 包含一个链路 ID 字段,用于标识链路的另一端;链路 ID 字段的含义随链路类型而异,下表描述了 1 类 LSA 链路类型及其链路 ID 字段的含义:
链路类型 | 描述 | 链路 ID 字段的内容 |
1 | 到另一台路由器的点到点连接 | 邻居路由器的 ID |
2 | 到中转网络的连接 | DR 的接口地址 |
3 | 到末节网络的连接 | IP 网络 / 子网号 |
4 | 虚链路 | 邻居路由器的 ID |
还有一个链路数据字段,它提供了 32 位的额外信息。对于大多数链路类型来说,这是相关路由器接口的 IP 地址;对于连接到末节网络的链路来说,这是该末节网络的子网掩码。
(2)网络 LSA(Network LSA):2 类 LSA 是 DR 为区域中每个中转的广播网络或 NBMA 网络生成的。中转网络至少与两台 OSPF 路由器直接相连,诸如以太网等多路访问网络就属于中转网络。2 类 LSA 列出了构成中转网络的所有路由器(包括 DR 本身)和链路的子网掩码。中转链路的 DR 负责通告 2 类 LSA,2 类 LSA 随后被扩散到区域内所有的路由器,2 类 LSA 不会跨越区域边界进行传播(如下图所示)。其链路状态 ID 为通告它的 DR 的 IP 接口地址。使用命令 show ip ospf database network 可以查看网络 LSA 通告的信息。请注意,和路由器 LSA 不同,网络 LSA 中没有度量字段。
关于网络 LSA 的其他解释: DR 路由器可以看作一个“伪”节点,或是一个虚拟路由器,用来描绘一个多路访问网络和与之相连的所有路由器。从这个角度来看,一条网络 LSA 通告也可以描绘一个逻辑上的“伪”节点,就像一条路由器 LSA 通告描绘一个物理上的单台路由器一样。网络 LSA 通告列出了所有与之相连的路由器,包括 DR 路由器本身。就像路由器 LSA 一样,网络 LSA 也仅仅在产生这条网络 LSA 的区域内部进行泛洪扩散。 |
![2 类 LSA:网络 LSA](https://i-blog.csdnimg.cn/blog_migrate/4d5b51aa3332ba5cba407cf769852090.jpeg)
(3)网络汇总 LSA(Network summary LSA):3 类 LSA 由 ABR 生成,它将一个区域内的网络通告给 OSPF 自治系统中的其他区域(1 类和 2 类 LSA 是被限制在区域内的)。如下图所示,ABR 从区域内的其他路由器那里收到 1 类 LSA 后,向外发送 3 类 LSA,以便将通过 1 类 LSA 获悉的网络通告给其他区域。3 类 LSA 只在一个区域内扩散,但 ABR 重新生成 3 类 LSA 以便将其扩散到其他区域。使用命令 show ip ospf database summary 可以显示链路状态数据库中的网络汇总 LSA 信息。
![3 类 LSA:网络汇总 LSA](https://i-blog.csdnimg.cn/blog_migrate/39094a0b969fe14a42d528c6ddb5ed81.jpeg)
当一台 ABR 始发一条网络汇总 LSA 时,将包括从它本身到正在通告的这条 LSA 的目的地所耗费的代价。ABR 即使知道它有多条路由可以到达目的地,它也只会为这个目的地始发单条网络汇总 LSA 通告,因此:
- 如果一台 ABR 在与它本身相连的区域内有多条路由可以到达目的地,那么它将只会始发单一的一条网络汇总 LSA 到骨干区域,而且这条网络汇总 LSA 是上述多条路由中代价最低的;
- 同样地,如果一台 ABR 经过骨干区域从其他的 ABR 收到多条网络汇总 LSA,那么这台始发的 ABR 将会选择这些 LSA 通告中代价最低的 LSA,并且将把这个 LSA 的最低代价通告给与它相连的非骨干区域。
默认情况下:
- OSPF 不会自动对一组连续的子网进行汇总,更不会将网络汇总成分类网络;
- ABR 总是将汇总 LSA 扩散到其他区域,而不管其中的路由是否是汇总路由;
- ABR 网络管理员必须使用配置命令来指定如何进行汇总;
- 对于区域中的每个子网,都将一个 3 类 LSA 扩散到骨干区域;
- 汇总 LSA 并不包含汇总路由,因此默认情况下,将通告区域内的所有子网,这可能导致严重的扩散问题,所以应考虑在 ABR 上手工配置路由汇总。
注意:收到 3 类 LSA 时,并不会导致路由器运行 SPF 算法。路由器将 3 类 LSA 通告的路由加入路由表或将其从路由表中删除时,并不一定执行完整的 SPF 计算。调试输出表明,这将导致执行部分 SPF 计算,但表示 SPF 算法执行次数的计数器并不会加 1。有些 Cisco 文档暗示 3 类 LSA 被注入区域时将运行 SPF 算法,但情况并非如此。
扩展: 当其他的路由器从一台 ABR 收到一条网络汇总 LSA 通告时,它并不运行 SPF 算法。相反地,它只是简单地加上从它到那台 ABR 之间路由的代价,并将这个代价包含在这个 LSA 通告当中。通过 ABR 路由器,到达所通告的目的地的路由连同所计算的代价一起被记录进了路由表。这个行为 ―― 依赖中间路由器代替确定到达目的地的全程路由(Full route)的做法 ―― 其实是距离矢量协议的行为。因此,虽然在一个区域内部 OSPF 协议是一个链路状态协议,但是它却使用了距离矢量的算法来查找域间路由。 |
(4)ASBR 汇总 LSA(ASBR summary LSA):仅当区域中有 ASBR 时,ABR 才会生成 4 类 LSA。4 类 LSA 标识 ASBR,并提供一条前往该 ASBR 的路由。前往外部自治系统的数据流要求路由表包含有关通告外部路由的 ASBR 的信息。链路状态 ID 被设置为 ASBR 的路由器 ID。使用命令 show ip ospf database asbr-summary 可以查看 ASBR 汇总 LSA 的信息。这里要注意的是,其中目的地是一个主机地址,并且掩码是 0(通过 ASBR 汇总 LSA 通告的目的地将总是一个主机地址,因为它是一条到达一台路由器的路由)。
如下图所示,ASBR 发送一个 1 类 LSA,并设置 E 位(外部位),指出发送方为 ASBR。1 类 LSA 被限定在区域内。然而,当 ABR(在路由器 LSA 中用边界[B]位标识)收到该 LSA 后,它会创建一个 4 类 LSA,并将其扩散到骨干区域(Area 0)。其他 ABR 将重新生成一个 4 类 LSA,并将其扩散到自己的区域中。
![4 类:ASBR 汇总 LSA](https://i-blog.csdnimg.cn/blog_migrate/366602c3acc491843baae43212667060.jpeg)
(5)自治系统外部 LSA (Autonomous system external LSA):5 类 LSA 描述了前往 OSPF 自治系统外的网络的路由(也包括 OSPF 自治系统外部的缺省路由),它由 ASBR 发送并被扩散到整个 AS(如下图所示)。5 类 LSA 是链路状态数据库中唯一不与具体的区域相关联的 LSA 通告(即 O E1 和 O E2 路由不属于某个 Area,是独立的)。5 类 LSA 通告将在整个自治系统中进行泛洪扩散。其链路状态 ID 为外部网络的网络号。使用命令 show ip ospf database external 可以查看 5 类 LSA 的信息。
![5 类:自治系统外部 LSA](https://i-blog.csdnimg.cn/blog_migrate/56fed9e3b15b33f29dad35e7d107074d.jpeg)
鉴于其扩散范围,如果采用默认设置,即不进行路由汇总,外部 LSA 也可能导致问题,这取决于外部网络数。网络管理员应在 ASBR 上对外部网络块进行汇总,以缓解扩散问题。
关于 E1 和 E2 外部路由:
- E1:对于 O E1 外部路由,开销为外部开销加上分组经过的每条链路的内部开销。多个 ASBR 将同一条外部路由通告到同一个自治系统中时,应使用这种类型,以避免次优路由;
- E2(默认):O E2 路由的开销总是只包含外部开销。只有一台 ASBR 将外部路由通告到自治系统中时,使用这种类型。
如下图所示,前往外部自治系统 AS1 的路由的 E2 开销总是 1785。而 E1 开销每经过一条链路,就加了这条链路的 metric(图中链路的 metric 都是 10)。如果有多条前往外部 AS 的路径,且使用 E2 开销,则这些路径之间将没有差别。
![计算 E1 和 E2 路由的开销](https://i-blog.csdnimg.cn/blog_migrate/da45a628fd381ebc1f021a4fe0e3b051.jpeg)
(6)组成员 LSA(Group membership LSA):是用在 OSPF 协议的一个增强版本――组播 OSPF 协议(MOSPF协议)中的。MOSPF 协议将数据包从一个单一的源地址转发到多个目的地,或者是一组共享 D 类组播地址的成员。
(7)NSSA 外部 LSA(NSSA External LSA):是指在非纯末梢区域(Not-So-Stubby Area, NSSA)内始发于 ASBR 路由器的 LSA 通告。NSSA 外部 LSA 通告几乎和 5 类 LSA 通告是相同的。只是不像 5 类 LSA 通告那样在整个 OSPF 自治系统内进行泛洪扩散,NSSA 外部 LSA 通告仅仅在始发这个 NSSA 外部 LSA 通告的非纯末梢区域内部进行泛洪扩散。可以通过命令 show ip ospf database nssa-external 来显示 NSSA 外部 LSA 通告的信息。
(8) BGP 的外部属性 LSA(External attributes LSA for BGP):是被提议作为运行内部 BGP 协议(iBGP 协议)的另一种选择,以便用来传送 BGP 协议的信息穿过一个 OSPF 域。这个 LSA 从来没有在大范围部署过,IOS 也不支持该 LSA。
(9 ~ 11)不透明 LSA(Opaque LSA):是由标准的 LSA 头部后面跟随专用信息组成的一类 LSA。这个信息字段可以直接由 OSPF 协议使用,或者由其他应用分发信息到整个 OSPF 域间接使用。Opaque LSA 类型用于对 OSPF 增加可变的扩展特性,例如在 MPLS 网络中应用流量工程参数。
- (9)Opaque LSA(链路本地范围):只在链路间泛洪
- (10)Opaque LSA(本地区域范围):只在本区域内泛洪
- (11)Opaque LSA(AS 范围):在整个 OSPF 域内泛洪
其他相关文章:
- 不透明 LSA(Opaque LSA)主要应用在基于 MPLS 的流量工程中,详情请看:《什么是基于 MPLS 的流量工程(What is Traffic Engineering base on MPLS / What is MPLS TE)?》
2、OSPFv2 LSA 类型总结:
![OSPFv2 LSA 类型总结](https://i-blog.csdnimg.cn/blog_migrate/831cda5f5432dfc4b3405181191cd15a.jpeg)
标注:图中 ADV 是通告路由器;ABR 是区域边界路由器;ASBR 是自治系统边界路由器。
① LSA 1 路由器 LSA(Router LSA)
描述路由器的直连链路状态信息。由每个发起路由器通告,只在本区域内传递,不会超过 ABR。
② LSA 2 网络 LSA(Network LSA)
描述本区域内 BMA / NBMA(串行连接信息不会在此出现)的网络信息以及连接到此网络的路由器。由本 BMA / NBMA 网络的 DR 或 BDR 通告,只在本区域传递。
③ LSA 3 网络汇总 LSA(Network summary LSA)
描述 OSPF 的区域间路由(在路由表中以 O IA 标识)。原 LSA 1 所描述的路由信息会由所在区域的 ABR 将其转换为 LSA 3。由 ABR 通告,3 类 LSA 只在一个区域内扩散,但 ABR 可以重新生成 3 类 LSA 以便将其扩散到其他区域(但是有的特殊区域会不让 LSA 3 进)。
注意:LSA 3 每穿越一个 ABR,其 ADV Router(通告路由器)都会发生改变,ADV Router 转变为最后一次穿越的 ABR 路由器。
④ LSA 5 自治系统外部 LSA (Autonomous system external LSA)
没有看错,这里是 LSA 5,我们先讲 LSA 5 再反过来看 LSA 4。
LSA 5 描述的是 OSPF 区域以外的路由(RIP、EIGRP、BGP 等,在路由表中以 O E1 / O E2 标识)。由 ASBR 通告,LSA 5 可以传播到整个 OSPF 的所有区域(特殊区域除外)。
注意:LSA 5 的 ADV Router 在穿越 ABR 的时候是不会改变的。
⑤ LSA 4 ASBR 汇总 LSA(ASBR summary LSA)
LSA 4 所承载的内容是:ASBR 的 Router-ID。LSA 4 其实就是图中 R4(通告路由器)将 Area 3 中 R11 的 Router-ID 信息转换为 LSA 4,在整个 OSPF 域中泛洪传播(特殊区域除外)。LSA 4 由 ABR 通告。
为什么需要 LSA 4?由于 LSA 5 的通告路由器在穿越 ABR 的时候不会改变,如图中 Area 3 的 LSA 5 在穿越 R4 到达 Area 0 时,通告路由器不改变仍然是 R11,因此除了 Area 3,Area 0 和其他区域都不知道 R11 的信息。此时就需要 LSA 4 为 Area 0 和其他区域提供 R11 的信息,可以这么说,LSA 4 是为 LSA 5 所服务的。
⑥ LSA 7 NSSA 外部 LSA(NSSA External LSA):
LSA 7 通告几乎和 LSA 5 通告是相同的,由 ASBR 通告,只是不像 LSA 5 那样在整个 OSPF 自治系统内进行泛洪扩散,LSA 7 仅仅在始发这个 LSA 7 的 NSSA Area 和 Total NSSA Area 内部进行泛洪扩散。
其他相关文章:
- 如果您想了解 OSPF 的特殊区域,请看:《OSPF 的 Area 类型汇总(包括特殊区域:Stub Area、Total Stub Area、NSSA Area、Total NSSA Area)》
3、OSPFv3 LSA 类型:
在 IPv6 环境下生成和再次生成 LSA 的过程与 IPv4 环境下的过程是相同的。再次生成的 LSA 的序列码(LS sequence number)递增,LSA 的生存时间(LS age)被设置为 0,LSA 被写入链路状态数据库中,并从适当的接口扩散出去。在 IPv4 环境下能够触发再次生成 LSA 的事件,同样能够触发 IPv6 环境下的路由器再次生成 LSA,除此之外,下列事件或行为也能够触发 IPv6 路由器再次生成 LSA:
- 任意一个路由器接口状态的改变;
- DR 路由器身份的改变;
- 邻居路由器从 full 状态转变到其它状态,或者从其它状态转变到 full 状态;
- 邻居接口 ID 的改变;
- 为链路增加了新的地址前缀,或者删除了某个地址前缀;
- 收到了新的链路 LSA(link-LSA),并引起了链路前缀的变化。
OSPFv3 继承了 OSPFv2 的大多数 LSA 类型,只是名称上有所改变,并增加了新的 LSA 类型。下表列出了 OSPFv3 使用的 LSA。
表 LSA 类型一览表
LSA 名称 | LSA 类型编号 | LSA 类型编码 |
Router-LSA | 1 | 0x2001 |
Network-LSA | 2 | 0x2002 |
Inter-Area-Prefix-LSA | 3 | 0x2003 |
Inter-Area-Router-LSA | 4 | 0x2004 |
AS-External-LSA | 5 | 0x2005 |
Group-membership-LSA | 6 | 0x2006 |
Type-7-LSA | 7 | 0x2007 |
Link-LSA | 8 | 0x2008 |
Intra-Area-Prefix-LSA | 9 | 0x2009 |
(1)路由器 LSA(Router-LSA):描述在特定区域内的路由器接口的链路状态及链路开销。该类型 LSA 仅在接口所在的区域内传播。该类型 LSA 还指示出产生该类型 LSA 的路由器是否是一台 ABR 或 ASBR,以及路由器是否是虚链路的一端。类型 1 LSA 也被用来通告末端(stub)网络。
(2)网络 LSA(Network-LSA):由 DR 产生,用来描述 DR 所代表的网络的链路状态信息和链路开销信息。该 LSA 是 BMA 网络上的所有链路信息和链路开销信息的集合信息。
(3)区域间前缀 LSA(Inter-Area-Prefix-LSA):这种类型 LSA 在 OSPFv2 中叫做概括的网络链路状态条目(summary net link states)。该类型 LSA 由 ABR 产生,用来把一个区域内的路由信息通告到另外一个区域。这种类型的 LSA 既可以描述一条具体的路由信息,也可以描述总结的路由信息。在 OSPFv3 中,地址是用前缀和前缀长度表达的,而不再使用地址和掩码的表达形式。缺省路由的前缀长度用 0 代表。
(4)区域间路由器 LSA(Inter-Area-Router-LSA):由 ASBR 产生,用以通告 ASBR 的位置。试图把数据送达外网的路由器使用该 LSA 确定通往下一跳的最佳路径。
(5)自治系统外 LSA(AS-External-LSA):用来携带自治系统外路由信息的 LSA。例如,把其它 AS 的路由再发布到 OSPF 中的路由信息。在该类型的 LSA 中,地址用前缀和前缀长度表达,缺省路由的前缀长度用 0 表达。
(6)类型 6 LSA(Group-membership-LSA):用于组播,不做讨论。
(7)类型 7 LSA(Type-7 LSA):由 NSSA 中的 ASBR 产生,只在 NSSA 中传播。在 ABR 上它被转换成类型 5 并且被扩散到骨干区域。
(8)链路 LSA(Link-LSA):该类型 LSA 仅在本链路上传播,具有以下 3 种目的:向本链路上的其它路由器提供路由器的本链路地址;向本链路上的其它路由器通告 IPv6 地址前缀,使其与本链路相关联;允许路由器在该类型 LSA 中插入一些选项比特,与为本链路产生的网络 LSA 相关联。
(9)区域内前缀 LSA(Intra-Area-Prefix-LSA):该类型 LSA 在本区域内传播,具有以下两种功能之一:通过参考网络 LSA 把 IPv6 地址前缀与转递网络(transit network)相关联;或者通过参考路由器 LSA 把 IPv6 地址前缀与路由器相关联。一台路由器可以为给定的区域产生多个该类型的 LSA,这些 LSA 使用链路状态 ID 字段(Link State ID)区分。DR 为它所代表的链路产生一个或多个该类型的 LSA,向整个区域内通告该链路的地址前缀。