本备忘录定义了五种不同类型的 LSA, 它们在第 4.3 节中说明. LSA 的集合构成链路状态数据库.
每一种独立的 LSA 类型都有独立功能. router-LSA 和 network-LSA 描述某个区域中的路由器和网络如何互连.
summary-LSA 提供一种压缩区域路由信息的方法. AS-external-LSA 提供一种方式, 用于在整个自治系统中透明地通告从外部获得的路由信息.
每个 LSA 都以一个标准的 20 字节头部开始. 下面讨论这个 LSA 头部.
Type Dest Area Path Type Cost Next Adv.
Hop(s) Router(s)
________________________________________________________________
N Ib 0 intra-area 16 RT3 *
N Ia 0 intra-area 21 RT3 *
R RT3 0 intra-area 1 * *
R RT10 0 intra-area 16 RT3 *
R RT11 0 intra-area 19 RT3 *
________________________________________________________________
N N9-N11,H1 0 inter-area 30 RT3 RT11
表 14: 增加一条虚链路所导致的变化.
12.1. LSA 头部
LSA 头部包含 LS type, Link State ID 和 Advertising Router 字段. 这三个字段的组合唯一标识一个 LSA.
自治系统中可能同时存在同一个 LSA 的多个实例. 这时必须判断哪个实例更新. 该判断通过检查 LS sequence, LS checksum 和 LS age 字段完成.
这些字段也包含在 20 字节 LSA 头部中.
多种 OSPF 报文类型都会列出 LSA. 当具体实例并不重要时, 可用 LS type, Link State ID 和 Advertising Router 来引用一个 LSA
(见 Link State Request Packets). 否则, 还必须引用 LS sequence number, LS age 和 LS checksum 字段.
下面详细说明 LSA 头部中的各个字段.
12.1.1. LS age
该字段表示 LSA 的年龄, 单位为秒. 它应作为无符号 16 位整数处理. LSA 产生时该字段被置为 0.
在泛洪过程的每一跳上, 该字段必须增加 InfTransDelay. LSA 保存在各路由器数据库中时也会继续老化.
LSA 的年龄绝不会增加到超过 MaxAge. 年龄为 MaxAge 的 LSA 不会用于路由表计算. 当某个 LSA 的年龄首次达到 MaxAge 时, 它会被重新泛洪.
年龄为 MaxAge 的 LSA 在不再需要用于保证数据库同步时, 最终会从数据库中清除. 关于 LSA 老化的更多信息见第 14 节.
当路由器收到同一 LSA 的两个实例, 且二者具有相同的 LS sequence number 和 LS checksum 时, 会检查 LS age 字段.
年龄为 MaxAge 的实例总是被接受为最新实例; 这使旧 LSA 能够快速从路由域中清除. 否则, 如果二者年龄相差超过 MaxAgeDiff,
年龄较小的实例会被接受为最新实例.[12] 更多细节见第 13.1 节.
12.1.2. Options
LSA 头部中的 Options 字段指出与该 LSA 关联的可选能力. OSPF 的可选能力在第 4.5 节中说明.
本规范定义了一个可选能力, 即 Options 字段中的 E-bit. Options 字段中无法识别的位应置为 0.
E-bit 表示 OSPF 的 ExternalRoutingCapability. 与骨干相关的所有 LSA 以及与非 stub 区域相关的所有 LSA 都应设置该位
(见第 3.6 节). 所有 AS-external-LSA 也应设置该位. 与 stub 区域相关的所有 router-LSA, network-LSA 和 summary-LSA
都应清除此位. 对所有 LSA 而言, E-bit 的设置仅用于提供信息; 它不影响路由表计算.
12.1.3. LS type
LS type 字段决定 LSA 的格式和功能. 不同类型的 LSA 具有不同名称, 例如 router-LSA 或 network-LSA.
本备忘录定义的所有 LSA 类型, 除 AS-external-LSA (LS type = 5) 外, 都只在单个区域内泛洪.
AS-external-LSA 会在整个自治系统内泛洪, 但 stub 区域除外 (见第 3.6 节). 表 15 简要说明了每种独立的 LSA 类型.
12.1.4. Link State ID
该字段标识 LSA 所描述的路由域部分. 根据 LSA 的 LS type, Link State ID 采用表 16 中列出的取值.
LS Type LSA description
________________________________________________
1 这些是 router-LSA.
它们描述路由器各接口状态的集合.
更多信息见第 12.4.1 节.
________________________________________________
2 这些是 network-LSA.
它们描述连接到该网络的路由器集合.
更多信息见第 12.4.2 节.
________________________________________________
3 or 4 这些是 summary-LSA.
它们描述区域间路由, 并使区域边界处的
路由信息压缩成为可能. 由区域边界路由器产生,
Type 3 summary-LSA 描述到网络的路由,
Type 4 summary-LSA 描述到 AS 边界路由器的路由.
________________________________________________
5 这些是 AS-external-LSA.
它们由 AS 边界路由器产生,
描述到自治系统外部目的地的路由.
自治系统的默认路由也可以由 AS-external-LSA 描述.
表 15: OSPF 链路状态通告 (LSA).
16.
实际上, 对于 Type 3 summary-LSA (LS type = 3) 和 AS-external-LSA (LS type = 5),
Link State ID 还可以额外设置目标网络的一个或多个 "host" 位.
LS Type Link State ID
_______________________________________________
1 发起路由器的 Router ID.
2 该网络 Designated Router 的 IP 接口地址.
3 目标网络的 IP 地址.
4 被描述的 AS 边界路由器的 Router ID.
5 目标网络的 IP 地址.
表 16: LSA 的 Link State ID.
例如, 当为掩码为 255.0.0.0 的网络 10.0.0.0 产生 AS-external-LSA 时, Link State ID 可以设置为从
10.0.0.0 到 10.255.255.255 的任意值 (尽可能应使用 10.0.0.0). 允许设置某些主机位, 使路由器能够为地址相同但掩码不同的两个网络产生独立 LSA.
详见附录 E.
当 LSA 描述网络 (LS type = 2, 3 或 5) 时, 用 LSA 主体中包含的网络/子网掩码对 Link State ID 做掩码,
即可轻易得到该网络的 IP 地址. 当 LSA 描述路由器 (LS type = 1 或 4) 时, Link State ID 始终是被描述路由器的 OSPF Router ID.
当 AS-external-LSA (LS Type = 5) 描述默认路由时, 其 Link State ID 被设置为 DefaultDestination (0.0.0.0).
12.1.5. Advertising Router
该字段指定 LSA 发起者的 OSPF Router ID. 对 router-LSA 而言, 该字段与 Link State ID 字段相同.
network-LSA 由该网络的 Designated Router 产生. summary-LSA 由区域边界路由器产生. AS-external-LSA 由 AS 边界路由器产生.
12.1.6. LS sequence number
sequence number 字段是一个有符号 32 位整数. 它用于检测旧 LSA 和重复 LSA. 序列号空间按线性顺序排列.
序列号越大 (按有符号 32 位整数比较), LSA 越新. 为了更精确地描述序列号空间, 在下面讨论中令 N 表示常量 2**31.
序列号 -N (0x80000000) 被保留且不使用. 因此 -N + 1 (0x80000001) 是最小的, 也就是最旧的序列号;
该序列号称为常量 InitialSequenceNumber. 路由器首次产生任何 LSA 时使用 InitialSequenceNumber.
此后, 路由器每次产生该 LSA 的新实例时都会递增该 LSA 的序列号. 当试图将序列号递增到超过最大值 N - 1
(0x7fffffff; 也称为 MaxSequenceNumber) 时, 必须先从路由域中清除当前 LSA 实例. 这通过提前老化该 LSA
(见第 14.1 节) 并重新泛洪完成. 一旦该泛洪被所有相邻邻居确认, 就可以用 InitialSequenceNumber 作为序列号产生新实例.
在泛洪过程中, 如果路由器意外收到自己某个 LSA 的更新实例, 可能被迫提升该 LSA 的序列号. 这应是少见事件.
它可能表明该路由器上一次重启/重载之前由自己产生的过期 LSA 仍存在于自治系统中. 更多信息见第 13.4 节.
12.1.7. LS checksum
该字段是除 LS age 字段之外整个 LSA 内容的校验和. 排除 LS age 字段, 是为了使 LSA 年龄能够递增而不必更新校验和.
所用校验和与 ISO 无连接数据报使用的校验和相同, 通常称为 Fletcher 校验和. 它记录在 [Ref6] 的附录 B 中.
LSA 头部还包含 LSA 的字节长度; 用该长度减去 LS age 字段大小 (两个字节), 即可得到需要计算校验和的数据量.
校验和用于检测 LSA 的数据损坏. 这种损坏可能发生在 LSA 泛洪过程中, 也可能发生在 LSA 保存在路由器内存中时.
LS checksum 字段不能取值为 0; 出现该值应视为校验和失败. 换言之, 计算校验和不是可选操作.
LSA 校验和会在两种情况下验证: a) 在 Link State Update Packet 中收到时; b) 链路状态数据库老化期间的某些时刻.
检测到校验和失败在两种情况下会导致不同动作. 更多细节见第 13 节和第 14 节.
只要 LS sequence number 字段表明两个 LSA 实例相同, 就会检查 LS checksum 字段. 如果二者不同, LS checksum 较大的实例被认为最新.[13]
更多细节见第 13.1 节.
12.2. 链路状态数据库
路由器为自己所属的每个区域维护一个独立的链路状态数据库. 属于同一区域的所有路由器针对该区域都有相同的链路状态数据库.
各个区域的数据库始终分别处理. 最短路径计算针对每个区域单独执行 (见第 16 节). 区域链路状态数据库的组成部分只在该区域内泛洪.
最后, 当属于区域 A 的邻接关系建立时, 两台路由器之间只同步区域 A 的数据库.
区域数据库由 router-LSA, network-LSA 和 summary-LSA 组成 (它们都列在区域数据结构中). 此外, 外部路由
(AS-external-LSA) 会包含在所有非 stub 区域数据库中 (见第 3.6 节).
OSPF 实现必须能够访问区域数据库中的单个条目. 该查找功能基于 LSA 的 LS type, Link State ID 和 Advertising Router.[14]
数据库中每个 LSA 只有一个实例 (最新实例). LSA 泛洪过程 (第 13 节) 和路由表计算 (第 16 节) 都会调用数据库查找功能.
此外, 路由器可使用该查找功能判断自己是否曾产生过某个特定 LSA, 如果产生过, 还可确定其 LS sequence number.
LSA 会在以下情况下加入路由器数据库: a) 在泛洪过程中收到 (第 13 节); 或 b) 由路由器自身产生 (第 12.4 节).
LSA 会在以下情况下从路由器数据库删除: a) 在泛洪过程中被更新实例覆盖 (第 13 节); b) 路由器为自己产生的某个 LSA 产生了更新实例
(第 12.4 节); 或 c) LSA 老化到期并从路由域中清除 (第 14 节). 每当 LSA 从数据库删除时, 也必须从所有邻居的
Link state retransmission list 中移除 (见第 10 节).
12.3. TOS 的表示
为了与 OSPF 规范早期版本 ([Ref9]) 向后兼容, router-LSA, summary-LSA 和 AS-external-LSA 中可以包含特定于 TOS 的信息.
OSPF LSA 中 TOS 的编码在表 17 中规定. 该表把 OSPF 编码与 IP 分组头部的 TOS 字段 ([Ref12] 中定义) 对应起来.
OSPF 编码以十进制整数表示, IP 分组头部的 TOS 字段则用 [Ref12] 中的二进制 TOS 值表示.
OSPF encoding RFC 1349 TOS values
___________________________________________
0 0000 normal service
2 0001 minimize monetary cost
4 0010 maximize reliability
6 0011
8 0100 maximize throughput
10 0101
12 0110
14 0111
16 1000 minimize delay
18 1001
20 1010
22 1011
24 1100
26 1101
28 1110
30 1111
表 17: 在 OSPF 中表示 TOS.
12.4. 产生 LSA
路由器会向任一给定 OSPF 区域产生若干 LSA. 每台路由器都会产生一个 router-LSA.
如果该路由器还是该区域中某些网络的 Designated Router, 它会为这些网络产生 network-LSA.
区域边界路由器为每个已知区域间目的地产生一个 summary-LSA. AS 边界路由器为每个已知 AS 外部目的地产生一个 AS-external-LSA.
目的地逐个通告, 这样单条路由的变化可以被泛洪, 而不必重新泛洪整个路由集合. 在泛洪过程中, 一个 Link State Update packet
可以携带多个 LSA.
例如, 考虑图 6 中的路由器 RT4. 它是一台区域边界路由器, 连接到区域 1 和骨干. 路由器 RT4 向骨干产生 5 个不同 LSA
(一个 router-LSA, 以及网络 N1-N4 各一个 summary-LSA). RT4 还会向区域 1 产生 8 个不同 LSA
(一个 router-LSA, 以及图 7 所示的七个 summary-LSA). 如果 RT4 被选为网络 N3 的 Designated Router,
它还会向区域 1 为 N3 产生一个 network-LSA.
在同一图中, 路由器 RT5 会产生 3 个不同 AS-external-LSA (网络 N12-N14 各一个). 假设没有任何区域配置为 stub,
它们会在整个 AS 中泛洪. 但是, 如果区域 3 被配置为 stub 区域, 网络 N12-N14 的 AS-external-LSA 不会被泛洪到区域 3
(见第 3.6 节). 相反, 路由器 RT11 会产生一个 default summary-LSA, 并在区域 3 内泛洪 (见第 12.4.3 节).
这指示区域 3 中所有内部路由器把其 AS 外部流量发送给 RT11.
每当产生 LSA 的新实例时, 其 LS sequence number 会递增, LS age 被置为 0, LS checksum 被计算,
并且该 LSA 被加入链路状态数据库, 然后从适当接口泛洪出去. 关于将 LSA 安装到链路状态数据库中的细节见第 13.2 节.
关于新产生 LSA 泛洪的细节见第 13.3 节.
以下十个事件可能导致产生一个 LSA 新实例:
(1) 路由器自己产生的某个 LSA 的 LS age 字段达到 LSRefreshTime. 在这种情况下, 即使该 LSA 的内容
(除 LSA 头部外) 相同, 也会产生新实例. 这保证所有 LSA 都被周期性地产生. LSA 的这种周期性更新提高了链路状态算法的健壮性.
只描述不可达目的地的 LSA 不应刷新, 而应从路由域中清除 (见第 14.1 节).
当 LSA 所描述的对象发生变化时, 会产生新的 LSA. 但是, 同一个 LSA 的两个实例不得在 MinLSInterval 时间内产生.
这可能要求下一实例的生成最多延迟 MinLSInterval. 以下事件可能导致 LSA 内容变化. 当且仅当新 LSA 的内容会不同时, 这些事件才应导致新的产生:
(2) 某个接口状态发生变化 (见第 9.1 节). 这可能意味着需要产生 router-LSA 的新实例.
(3) 某个直连网络的 Designated Router 发生变化. 应产生新的 router-LSA. 此外, 如果路由器自身现在成为 Designated Router,
应产生新的 network-LSA. 如果路由器自身不再是 Designated Router, 它先前可能为该网络产生过的任何 network-LSA
都应从路由域中清除 (见第 14.1 节).
(4) 某个相邻路由器进入或离开 FULL 状态. 这可能意味着需要产生 router-LSA 的新实例. 此外, 如果该路由器自身是直连网络的
Designated Router, 应产生新的 network-LSA.
接下来的四个事件只涉及区域边界路由器:
(5) 路由表中增加/删除/修改了一条区域内路由. 这可能导致在每个直连区域 (可能包括骨干) 中为该路由产生 summary-LSA 的新实例.
(6) 路由表中增加/删除/修改了一条区域间路由. 这可能导致在每个直连区域中为该路由产生 summary-LSA 的新实例
(但绝不为骨干产生).
(7) 路由器新连接到一个区域. 这时路由器必须把其路由表中所有相关区域内和区域间路由以 summary-LSA 形式产生到新连接区域中.
更多细节见第 12.4.3 节.
(8) 当路由器某条已配置虚链路的状态发生变化时, 可能需要向该虚链路的 Transit area 产生新的 router-LSA
(见第 12.4.1 节关于 router-LSA 的 bit V 的讨论), 同时也向骨干产生新的 router-LSA.
最后两个事件只涉及 AS 边界路由器 (以及曾经的 AS 边界路由器):
(9) 通过外部路由协议 (如 BGP) 直接获知的一条外部路由发生变化. 这会使 AS 边界路由器产生一个 AS-external-LSA 新实例.
(10)
路由器不再是 AS 边界路由器, 例如在重启之后. 在这种情况下, 路由器应清除其先前产生的所有 AS-external-LSA.
这些 LSA 可通过第 14.1 节规定的提前老化过程清除.
下面详细说明每种 LSA 的构造. 通常, 这些章节描述 LSA 主体的内容 (即 20 字节 LSA 头部之后的部分).
关于构建 LSA 头部的信息见第 12.1 节.
12.4.1. Router-LSA
路由器为自己所属的每个区域产生一个 router-LSA. 这样的 LSA 描述该路由器到该区域的链路状态集合.
该 LSA 只在相应区域内泛洪, 不再向外传播.
....................................
. 192.1.2 Area 1 .
. + .
. | .
. | 3+---+1 .
. N1 |--|RT1|-----+ .
. | +---+ \ .
. | \ _______N3 .
. + \/ \ . 1+---+
. * 192.1.1 *------|RT4|
. + /\_______/ . +---+
. | / | .
. | 3+---+1 / | .
. N2 |--|RT2|-----+ 1| .
. | +---+ +---+8 . 6+---+
. | |RT3|----------------|RT6|
. + +---+ . +---+
. 192.1.3 |2 . 18.10.0.6|7
. | . |
. +------------+ .
. 192.1.4 (N4) .
....................................
图 15: 显示 IP 地址的区域 1
router-LSA 的格式见附录 A (第 A.4.2 节). LSA 的前 20 字节由第 12.1 节讨论过的通用 LSA 头部组成.
router-LSA 的 LS type = 1.
路由器还通过在其 router-LSA 中设置适当的位 (分别为 bit B 和 bit E) 来指明自己是否为区域边界路由器或 AS 边界路由器.
这使到这些类型路由器的路径能够保存在路由表中, 供后续处理 summary-LSA 和 AS-external-LSA 使用.
只要路由器主动连接到两个或更多区域, bit B 就应设置, 即使该路由器当前未连接到 OSPF 骨干区域.
stub 区域的 router-LSA 中绝不应设置 bit E (stub 区域不能包含 AS 边界路由器).
此外, 当且仅当路由器是一条或多条完全邻接虚链路的端点, 且这些虚链路以区域 A 为 Transit area 时,
路由器才在其区域 A 的 router-LSA 中设置 bit V. 设置 bit V 使区域 A 中其他路由器能够发现该区域是否支持传输流量
(见第 6 节的 TransitCapability).
router-LSA 随后描述路由器到该区域的工作连接 (即接口或链路). 每条链路按直连网络类型标记类型.
每条链路还用 Link ID 标识. 该 Link ID 为链路另一端的实体命名. 表 18 总结了 Type 和 Link ID 字段使用的值.
Link type Description Link ID
__________________________________________________
1 Point-to-point Neighbor Router ID
link
2 Link to transit Interface address of
network Designated Router
3 Link to stub IP network number
network
4 Virtual link Neighbor Router ID
表 18: router-LSA 中的链路描述.
此外, 每条链路还指定 Link Data 字段. 该字段为链路提供 32 位额外信息. 对到传输网络的链路, 编号点到点链路和虚链路,
该字段指定相关路由器接口的 IP 接口地址 (路由表计算需要该信息, 见第 16.1.1 节). 对到 stub 网络的链路,
该字段指定 stub 网络的 IP 地址掩码. 对未编号点到点链路, Link Data 字段应设置为未编号接口的 MIB-II [Ref8] ifIndex 值.
最后指定使用该链路作为输出链路的开销. 链路的输出开销可配置. 除到 stub 网络的链路外, 输出开销必须始终非零.
为进一步说明构造链路描述列表的过程, 假设一台路由器希望为区域 A 构建 router-LSA. 路由器检查其接口数据结构集合.
对每个接口执行以下步骤:
o 如果直连网络不属于区域 A, 不向 LSA 添加链路, 并检查下一个接口.
o 如果接口状态为 Down, 不添加链路.
o 如果接口状态为 Loopback, 只要该接口不是到未编号点到点网络的接口, 就添加一条 Type 3 链路 (stub network).
Link ID 应设置为 IP 接口地址, Link Data 设置为掩码 0xffffffff (表示主机路由), 开销设置为 0.
o 否则, 添加到 router-LSA 的链路描述取决于 OSPF 接口类型. 点到点接口使用的链路描述在第 12.4.1.1 节规定,
虚链路在第 12.4.1.2 节规定, broadcast 和 NBMA 接口在第 12.4.1.3 节规定,
Point-to-MultiPoint 接口在第 12.4.1.4 节规定.
在考虑所有路由器接口后, 通过检查属于区域 A 的直连主机列表, 将主机链路加入 router-LSA.
主机路由表示为 Type 3 链路 (stub network), 其 Link ID 为主机 IP 地址, Link Data 为全 1 掩码
(0xffffffff), 开销为该主机配置的开销 (见第 C.7 节).
12.4.1.1. 描述点到点接口
对于点到点接口, 按如下方式向 router-LSA 添加一个或多个链路描述:
o 如果相邻路由器已完全邻接, 添加一条 Type 1 链路 (point-to-point). Link ID 应设置为相邻路由器的 Router ID.
对编号点到点网络, Link Data 应指定 IP 接口地址. 对未编号点到点网络, Link Data 字段应指定该接口的
MIB-II [Ref8] ifIndex 值. 开销应设置为点到点接口的输出开销.
o 此外, 只要接口状态为 "Point-to-Point" (不管相邻路由器状态如何), 就应添加一条 Type 3 链路 (stub network).
该 stub 链路有两种形式:
Option 1
假设相邻路由器的 IP 地址已知, 将 Type 3 链路的 Link ID 设置为邻居 IP 地址,
Link Data 设置为掩码 0xffffffff (表示主机路由), 开销设置为该接口配置的输出开销.[15]
Option 2
如果已经为点到点链路分配了子网, 将 Type 3 链路的 Link ID 设置为该子网的 IP 地址,
Link Data 设置为子网掩码, 开销设置为该接口配置的输出开销.[16]
12.4.1.2. 描述 broadcast 和 NBMA 接口
对可运行的 broadcast 和 NBMA 接口, 按如下方式向 router-LSA 添加单个链路描述:
o 如果接口状态为 Waiting, 添加一条 Type 3 链路 (stub network), Link ID 设置为直连网络的 IP 网络号,
Link Data 设置为直连网络的地址掩码, 开销等于接口配置的输出开销.
o 否则, 直连网络上已经选出了 Designated Router. 如果该路由器与 Designated Router 完全邻接,
或者该路由器自身是 Designated Router 且与至少另一台路由器完全邻接, 则添加一条 Type 2 链路 (transit network):
Link ID 设置为直连网络 Designated Router 的 IP 接口地址 (可能就是该路由器自身),
Link Data 设置为该路由器自己的 IP 接口地址, 开销等于接口配置的输出开销.
否则, 按接口状态为 Waiting 的情况添加链路 (见上文).
12.4.1.3. 描述虚链路
对于虚链路, 只有当虚邻居完全邻接时才向 router-LSA 添加链路描述. 在这种情况下, 添加一条 Type 4 链路 (virtual link):
Link ID 设置为虚邻居的 Router ID, Link Data 设置为与该虚链路关联的 IP 接口地址,
开销设置为路由表计算期间为该虚链路计算出的开销 (见第 15 节).
12.4.1.4. 描述 Point-to-MultiPoint 接口
对于可运行的 Point-to-MultiPoint 接口, 按如下方式向 router-LSA 添加一个或多个链路描述:
o 添加一条 Type 3 链路 (stub network), Link ID 设置为路由器自身的 IP 接口地址,
Link Data 设置为掩码 0xffffffff (表示主机路由), 开销设置为 0.
o 对该接口关联的每个完全邻接邻居, 额外添加一条 Type 1 链路 (point-to-point):
Link ID 设置为相邻路由器的 Router ID, Link Data 设置为 IP 接口地址, 开销等于该接口配置的输出开销.
12.4.1.5. router-LSA 示例
考虑图 6 中路由器 RT3 生成的 router-LSA. 包含 RT3 的区域 (区域 1) 已在图 15 中用实际网络地址重新绘制.
假设 RT3 所有接口地址的最后一个字节都是 3, 因而它的接口地址为 192.1.1.3 和 192.1.4.3,
并且其他路由器采用类似的地址分配方案. 此外, 假设所有链路都工作正常, 且 Router ID 被分配为最小的 IP 接口地址.
RT3 产生两个 router-LSA, 一个用于区域 1, 一个用于骨干. 假设路由器 RT4 已被选为网络 192.1.1.0 的 Designated router.
那么 RT3 用于区域 1 的 router-LSA 如下所示. 它表明 RT3 到区域 1 有两个连接, 第一个是到传输网络 192.1.1.0 的链路,
第二个是到 stub 网络 192.1.4.0 的链路. 注意, 传输网络由其 Designated Router 的 IP 接口标识
(即 Link ID = 192.1.1.4, 这是 Designated Router RT4 到 192.1.1.0 的 IP 接口).
还要注意, RT3 已指明自己是区域边界路由器.
; RT3's router-LSA for Area 1
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 1 ;indicates router-LSA
Link State ID = 192.1.1.3 ;RT3's Router ID
Advertising Router = 192.1.1.3 ;RT3's Router ID
bit E = 0 ;not an AS boundary router
bit B = 1 ;area border router
#links = 2
Link ID = 192.1.1.4 ;IP address of Desig. Rtr.
Link Data = 192.1.1.3 ;RT3's IP interface to net
Type = 2 ;connects to transit network
# TOS metrics = 0
metric = 1
Link ID = 192.1.4.0 ;IP Network number
Link Data = 0xffffff00 ;Network mask
Type = 3 ;connects to stub network
# TOS metrics = 0
metric = 2
接下来给出 RT3 用于骨干的 router-LSA. 它表明 RT3 到骨干只有一个连接.
该连接是通过一条到路由器 RT6 的未编号点到点链路. RT3 再次指明自己是区域边界路由器.
; RT3's router-LSA for the backbone
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 1 ;indicates router-LSA
Link State ID = 192.1.1.3 ;RT3's router ID
Advertising Router = 192.1.1.3 ;RT3's router ID
bit E = 0 ;not an AS boundary router
bit B = 1 ;area border router
#links = 1
Link ID = 18.10.0.6 ;Neighbor's Router ID
Link Data = 0.0.0.3 ;MIB-II ifIndex of P-P link
Type = 1 ;connects to router
# TOS metrics = 0
metric = 8
12.4.2. Network-LSA
每个传输 broadcast 或 NBMA 网络都会生成一个 network-LSA. (传输网络是指连接了两个或更多路由器的网络).
network-LSA 描述所有连接到该网络的路由器.
该网络的 Designated Router 产生该 LSA. 只有当 Designated Router 与该网络上至少另一台路由器完全邻接时, 它才产生 LSA.
network-LSA 只在包含该传输网络的区域内泛洪, 不再向外传播. network-LSA 列出与 Designated Router 完全邻接的路由器;
每个完全邻接路由器由其 OSPF Router ID 标识. Designated Router 将自身包含在该列表中.
network-LSA 的 Link State ID 是 Designated Router 的 IP 接口地址. 用网络的地址掩码 (也包含在 network-LSA 中)
对该值做掩码即可得到网络的 IP 地址.
曾经是某网络 Designated Router 但现在不再是的路由器, 应清除它先前产生的 network-LSA.
该 LSA 不再用于路由表计算. 清除方法是提前把 LSA 的年龄增加到 MaxAge 并重新泛洪 (见第 14.1 节).
此外, 在少见的路由器 Router ID 发生变化的情况中, 使用旧 Router ID 产生的任何 network-LSA 都必须清除.
由于路由器可能不知道其先前的 Router ID 是什么, 这些 network-LSA 通过如下方式识别:
Link State ID 等于该路由器某个 IP 接口地址, 而 Advertising Router 等于不同于该路由器当前 Router ID 的某个值
(更多细节见第 13.4 节).
12.4.2.1. network-LSA 示例
再次考虑图 6 中的区域配置. 区域 1 中的网络 N3, 区域 2 中的网络 N6 和 N8, 以及区域 3 中的网络 N9
都会产生 network-LSA. 假设路由器 RT4 已被选为网络 N3 的 Designated Router, RT4 会代表网络 N3 生成以下
network-LSA (地址分配见图 15):
; Network-LSA for Network N3
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 2 ;indicates network-LSA
Link State ID = 192.1.1.4 ;IP address of Desig. Rtr.
Advertising Router = 192.1.1.4 ;RT4's Router ID
Network Mask = 0xffffff00
Attached Router = 192.1.1.4 ;Router ID
Attached Router = 192.1.1.1 ;Router ID
Attached Router = 192.1.1.2 ;Router ID
Attached Router = 192.1.1.3 ;Router ID
12.4.3. Summary-LSA
summary-LSA 描述的目的地可以是一个 IP 网络, 一个 AS 边界路由器, 或一个 IP 地址范围.
summary-LSA 只在单个区域内泛洪. 被描述的目的地位于该区域之外, 但仍属于自治系统.
summary-LSA 由区域边界路由器产生. 要通告到某一区域的精确汇总路由, 通过检查路由表结构 (见第 11 节),
并按照下述算法确定. 注意, 只有区域内路由会通告到骨干, 而区域内和区域间路由都会通告到其他区域.
为确定要通告到直连区域 A 的路由, 对每个路由表条目按如下方式处理. 记住, 每个路由表条目描述到特定目的地的一组等价最佳路径:
o 只有 Destination Type 为 network 和 AS boundary router 的目的地会在 summary-LSA 中通告.
如果路由表条目的 Destination Type 是 area border router, 检查下一个路由表条目.
o AS 外部路由绝不会在 summary-LSA 中通告. 如果路由表条目的 Path-type 是 type 1 external 或 type 2 external,
检查下一个路由表条目.
o 否则, 如果与这组路径关联的区域就是区域 A 本身, 不为该路由生成 summary-LSA.[17]
o 否则, 如果与这组路径关联的下一跳属于区域 A 本身, 不为该路由生成 summary-LSA.[18]
这在逻辑上等价于距离向量协议的 split horizon 逻辑.
o 否则, 如果路由表开销等于或超过 LSInfinity, 不能为该路由生成 summary-LSA.
o 否则, 如果该路由的目的地是 AS 边界路由器, 当且仅当该路由表条目描述到该 AS 边界路由器的首选路径时
(见第 16.4 节步骤 3), 才应产生 summary-LSA. 若满足条件, 为该目的地产生 Type 4 summary-LSA,
Link State ID 等于该 AS 边界路由器的 Router ID, metric 等于路由表条目的开销.
注意: 如果区域 A 已配置为 stub 区域, 不应生成这些 LSA.
o 否则, Destination type 为 network. 如果这是一条区域间路由, 为该目的地产生 Type 3 summary-LSA,
Link State ID 等于该网络的地址 (必要时, Link State ID 也可以设置该网络的一个或多个主机位; 详见附录 E),
metric 等于路由表开销.
o 剩下的一种情况是到网络的区域内路由. 这表示该网络包含在路由器某个直连区域中.
一般而言, 这些信息在出现在 summary-LSA 之前必须被压缩. 记住, 一个区域配置有地址范围列表,
每个范围由一个 [address,mask] 对和一个状态指示组成, 状态为 Advertise 或 DoNotAdvertise.
每个范围最多产生一个 Type 3 summary-LSA. 当范围状态指示为 Advertise 时, 生成 Type 3 summary-LSA:
Link State ID 等于该范围的地址 (必要时, Link State ID 也可以设置该范围的一个或多个 "host" 位; 详见附录 E),
开销等于任一组成网络的最大开销. 当范围状态指示为 DoNotAdvertise 时, 抑制 Type 3 summary-LSA,
并使组成网络对其他区域保持隐藏.
默认情况下, 如果某个网络不包含在任何显式配置的地址范围内, 会生成 Type 3 summary-LSA:
Link State ID 等于该网络地址 (必要时, Link State ID 也可以设置该网络的一个或多个 "host" 位; 详见附录 E),
metric 等于该网络的路由表开销.
如果某个区域能够承载传输流量 (即其 TransitCapability 设置为 TRUE), 关于骨干网络的路由信息在汇总进入该区域前不应被压缩.
骨干网络到传输区域的通告也不应被抑制. 换言之, 在向传输区域产生 summary-LSA 时应忽略骨干配置的范围.
如果路由器为某个目的地通告了 summary-LSA, 而该目的地随后变为不可达, 路由器必须通过把该 LSA 的年龄设置为 MaxAge
并重新泛洪来从路由域中清除该 LSA (见第 14.1 节). 此外, 如果目的地仍然可达, 但按照上述过程已不能再通告
(例如, 它现在是一条区域间路由, 而过去是一条与某个非骨干区域关联的区域内路由; 因而不再能通告到骨干),
也应从路由域中清除该 LSA.
12.4.3.1. 向 stub 区域产生 summary-LSA
当区域 A 是 OSPF stub 区域时, 第 12.4.3 节中的算法是可选的. 连接到 stub 区域的区域边界路由器可以按第 12.4.3 节算法
向该区域产生 summary-LSA, 也可以选择只产生 summary-LSA 的一个子集, 可能受配置控制.
产生的 LSA 越少, stub 区域的链路状态数据库越小, 从而进一步降低其路由器资源需求.
但是, 省略 LSA 也可能导致次优的区域间路由, 尽管路由仍会继续工作.
如第 12.4.3 节所规定, Type 4 summary-LSA (ASBR-summary-LSA) 绝不会产生到 stub 区域中.
在 stub 区域中, 各区域边界路由器不导入外部路由, 而是向该区域产生一个 "default summary-LSA".
default summary-LSA 的 Link State ID 设置为 DefaultDestination, metric 设置为按区域配置的参数 StubDefaultCost.
注意, stub 区域中所有区域边界路由器的 StubDefaultCost 不必配置为相同值.
12.4.3.2. summary-LSA 示例
再次考虑图 6 中的区域配置. 路由器 RT3, RT4, RT7, RT10 和 RT11 都是区域边界路由器,
因而都会产生 summary-LSA. 特别考虑路由器 RT4. 其路由表按第 11.3 节示例计算.
RT4 向骨干和区域 1 都产生 summary-LSA. 向骨干, RT4 为网络 N1-N4 各自产生独立 LSA.
向区域 1, RT4 为网络 N6-N8 以及 AS 边界路由器 RT5, RT7 各自产生独立 LSA.
它还把主机路由 Ia 和 Ib 压缩为单个 summary-LSA. 最后, 到网络 N9,N10,N11 和主机 H1 的路由由单个
summary-LSA 通告. 这种压缩最初由路由器 RT11 执行.
图 7 和图 8 以图形方式展示了这些 LSA. 下面给出路由器 RT4 产生的两个 summary-LSA.
相关网络和路由器的实际 IP 地址已在图 15 中分配.
; Summary-LSA for Network N1,
; originated by Router RT4 into the backbone
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 3 ;Type 3 summary-LSA
Link State ID = 192.1.2.0 ;N1's IP network number
Advertising Router = 192.1.1.4 ;RT4's ID
metric = 4
; Summary-LSA for AS boundary router RT7
; originated by Router RT4 into Area 1
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 4 ;Type 4 summary-LSA
Link State ID = Router RT7's ID
Advertising Router = 192.1.1.4 ;RT4's ID
metric = 14
12.4.4. AS-external-LSA
AS-external-LSA 描述到自治系统外部目的地的路由. 大多数 AS-external-LSA 描述到特定外部目的地的路由;
在这些情况下, LSA 的 Link State ID 设置为目标网络的 IP 地址 (必要时, Link State ID 也可以设置该网络的一个或多个 "host" 位;
详见附录 E). 但是, 自治系统的默认路由可以通过把 LSA 的 Link State ID 设置为 DefaultDestination (0.0.0.0)
而在 AS-external-LSA 中描述. AS-external-LSA 由 AS 边界路由器产生. AS 边界路由器为它学到的每条外部路由产生一个
AS-external-LSA, 外部路由可以来自另一个路由协议 (如 BGP), 也可以来自配置信息.
AS-external-LSA 是唯一会在整个自治系统中泛洪的 LSA 类型; 所有其他 LSA 类型都只属于单个区域.
但是, AS-external-LSA 不会泛洪到/通过 stub 区域 (见第 3.6 节). 这能减少 stub 区域内部路由器的链路状态数据库大小.
为外部路由通告的 metric 可以是两种类型之一. Type 1 metric 可与链路状态 metric 比较.
Type 2 metric 被假定大于任何 AS 内路径的开销.
如果路由器为某个目的地通告了 AS-external-LSA, 而该目的地随后变为不可达, 路由器必须通过把该 LSA 的年龄设置为 MaxAge
并重新泛洪, 将该 LSA 从路由域中清除 (见第 14.1 节).
12.4.4.1. AS-external-LSA 示例
再次考虑图 6 所示 AS. 其中有两台 AS 边界路由器: RT5 和 RT7. 路由器 RT5 为网络 N12-N14 产生三个 AS-external-LSA.
路由器 RT7 为网络 N12 和 N15 产生两个 AS-external-LSA. 假设 RT7 通过 BGP 学到了到 N12 的路由,
并希望向 AS 通告 Type 2 metric. RT7 将为 N12 产生如下 LSA:
; AS-external-LSA for Network N12,
; originated by Router RT7
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 5 ;AS-external-LSA
Link State ID = N12's IP network number
Advertising Router = Router RT7's ID
bit E = 1 ;Type 2 metric
metric = 2
Forwarding address = 0.0.0.0
在上例中, forwarding address 字段被设置为 0.0.0.0, 表示发往该外部目的地的分组应转发给通告该路由的 OSPF 路由器 (RT7).
这并非总是理想的. 考虑图 16 中的示例. 三台 OSPF 路由器 (RTA, RTB 和 RTC) 连接到同一个公共网络.
只有其中一台路由器 RTA 与非 OSPF 路由器 RTX 交换 BGP 信息. 因而 RTA 必须为它从 RTX 学到的目的地产生 AS-external-LSA.
通过使用 AS-external-LSA 的 forwarding address 字段, RTA 可以指定发往这些目的地的分组直接转发给 RTX.
如果没有此功能, 路由器 RTB 和 RTC 到达这些目的地时将多走一跳.
注意, 当 forwarding address 字段非零时, 它应指向属于另一个自治系统的路由器.
也可以为默认路由指定 forwarding address. 例如, 在图 16 中, RTA 可能希望指定所有发往外部的分组默认转发给其 BGP 对等体 RTX.
得到的 AS-external-LSA 如下所示. 注意, Link State ID 设置为 DefaultDestination.
; Default route, originated by Router RTA
; Packets forwarded through RTX
LS age = 0 ;always true on origination
Options = (E-bit) ;
LS type = 5 ;AS-external-LSA
Link State ID = DefaultDestination ; default route
Advertising Router = Router RTA's ID
bit E = 1 ;Type 2 metric
metric = 1
Forwarding address = RTX's IP address
在图 16 中, 假设 RTA 和 RTB 都与 RTX 交换 BGP 信息. 在这种情况下, RTA 和 RTB 会产生同一组 AS-external-LSA.
如果这些 LSA 指定相同 metric, 它们在功能上等价, 因为它们指定相同目的地和 forwarding address (RTX).
这会导致明显的重复工作. 如果只有 RTA 或 RTB 中的一台产生这组 AS-external-LSA, 路由将保持不变,
链路状态数据库大小则会减少. 但是, 必须明确规定哪台路由器产生这些 LSA (否则二者都可能不产生, 或者发起者身份可能振荡).
因此建立如下规则: 如果两台彼此可达的路由器产生功能等价的 AS-external-LSA
(即相同目的地, 开销和非零 forwarding address), 则使用 OSPF Router ID 最高的路由器产生的 LSA.
OSPF Router ID 较低的路由器随后可以清除自己的 LSA. 清除 LSA 在第 14.1 节中讨论.
+
|
+---+.....|.BGP
|RTA|-----|.....+---+
+---+ |-----|RTX|
| +---+
+---+ |
|RTB|-----|
+---+ |
|
+---+ |
|RTC|-----|
+---+ |
|
+
图 16: Forwarding address 示例