11. 路由表结构
- 路由表结构(The Routing Table Structure)
路由表数据结构包含了将 IP 数据报转发到其目的地所需的全部信息。
每个路由表条目描述了到某个特定目的地的一组最佳路径。在转发 IP
数据报时,会定位到与该报文 IP 目的地最佳匹配的路由表条目。匹配的
路由表条目随后提供通向该报文目的地的 next hop(下一跳)。OSPF 还
支持默认路由的存在(Destination ID = DefaultDestination,Address
Mask = 0x00000000)。当默认路由存在时,它匹配所有 IP 目的地
(不过任何其他匹配的条目都是更优的匹配)。如何找到与某个 IP 目的地
最佳匹配的路由表条目,将在 11.1 节进一步说明。
每台路由器中只有一张路由表。11.2 节和 11.3 节描述了两个示例路由表。
路由表的构建过程在第 16 节讨论。
本节其余部分定义路由表条目中的各个字段。第一组字段描述路由表
条目的目的地。
Destination Type(目的地类型)
目的地类型为 "network"(网络)或 "router"(路由器)。在转发
IP 数据流量时,实际只使用 network 条目。router 类型的路由表
条目仅作为路由表构建过程中的中间步骤使用。
network 是一段 IP 地址范围,IP 数据流量可被转发至该范围。
它包括 IP 网络(A、B 或 C 类)、IP 子网、IP 超网以及单个 IP
主机。默认路由也属于这一类别。
router 条目为 area border router(区域边界路由器)和 AS
boundary router(AS 边界路由器)保留。area border router 的
路由表条目在计算 inter-area(区域间)路由时使用(见 16.2 节),
以及在维护已配置的 virtual link(虚链路)时使用(见第 15 节)。
AS boundary router 的路由表条目在计算 AS external(AS 外部)
路由时使用(见 16.4 节)。
Destination ID(目的地标识)
目的地的标识符或名称。这取决于 Destination Type。对于 network,
标识符是其关联的 IP 地址。对于 router,标识符是 OSPF Router
ID。[9]
Address Mask(地址掩码)
仅对 network 定义。网络的 IP 地址与其地址掩码共同定义了一段
IP 地址范围。对于 IP 子网,该地址掩码被称为子网掩码。对于
主机路由,掩码为"全 1"(0xffffffff)。
Optional Capabilities(可选能力)
当目的地为 router 时,该字段指示目的路由器所支持的 OSPF 可选
能力。本规范定义的唯一可选能力是处理 AS-external-LSA 的能力。
关于 OSPF 可选能力的进一步讨论,见 4.5 节。
对某个目的地所使用的路径集合,可能因这些路径所属的 OSPF 区域
不同而不同。这意味着对于同一个目的地,可能存在多个路由表条目,
取决于下一个字段的取值。
Area(区域)
该字段指示其链路状态信息导致产生该路由表条目路径集合的那个
区域。它被称为该条目的关联区域。对于 AS external 路径集合,
该字段未定义。对于 "router" 类型的目的地,可能存在分别与若干
区域关联的多组路径(因而是多个路由表条目)。例如,当两台
area border router 共享多个公共区域时就会发生这种情况。对于
"network" 类型的目的地,只保留与最佳区域(提供首选路由的那个
区域)关联的路径集合。
路由表条目的其余部分描述通向该目的地的路径集合。以下字段针对
整个路径集合。换言之,路由表条目中包含的每条路径都具有相同的
path-type(路径类型)和 cost(代价)(见下文)。
Path-type(路径类型)
用于将流量路由到目的地的路径共有四种可能类型,按优先级递减
顺序列出:intra-area(区域内)、inter-area(区域间)、type 1
external(1 型外部)或 type 2 external(2 型外部)。
intra-area 路径表示目的地属于路由器所连接的某个区域。
inter-area 路径是通向其他 OSPF 区域中目的地的路径,它们通过
检查收到的 summary-LSA 发现。AS external 路径是通向 AS 外部
目的地的路径,它们通过检查收到的 AS-external-LSA 检测得到。
Cost(代价)
通向目的地的路径的链路状态代价。除 type 2 external 路径外,
对所有路径而言这描述的是整条路径的代价。对于 Type 2 external
路径,该字段描述的是路径中位于 AS 内部那一部分的代价。该
代价按路径各组成链路代价之和计算。
Type 2 cost(2 型代价)
仅对 type 2 external 路径有效。对这类路径而言,该字段指示
路径外部部分的代价。该代价由 AS boundary router 通告,并且是
总路径代价中最重要的部分。例如,type 2 代价为 5 的 type 2
external 路径总是优于 type 2 代价为 10 的路径,而不论两条
路径内部部分的代价如何。
Link State Origin(链路状态来源)
仅对 intra-area 路径有效,该字段指示直接引用该目的地的那个
LSA(router-LSA 或 network-LSA)。例如,如果目的地是一个
transit network(转接网络),那么它就是该转接网络的
network-LSA。如果目的地是一个 stub network(末梢网络),那么
它就是所连接路由器的 router-LSA。该 LSA 是在最短路径树计算
过程中发现的(见 16.1 节)。可能有多个 LSA 引用该目的地,
但一套决胜(tie-breaking)方案总能将选择归结为单个 LSA。
Link State Origin 字段不被 OSPF 协议本身使用,但被 OSPF 的
组播路由扩展(MOSPF)中的路由表计算所使用。
当到某个目的地存在多条 path-type 和 cost 均相同的路径时(在别处
称为 "equal-cost"(等价)路径),它们被存储在单个路由表条目中。
每条 "equal-cost" 路径由以下字段加以区分:
Next hop(下一跳)
向该目的地转发流量时所使用的出向路由器接口。在 broadcast、
Point-to-MultiPoint 和 NBMA 网络上,next hop 还包括通向目的地
路径上下一台路由器(如果有的话)的 IP 地址。
Advertising router(通告路由器)
仅对 inter-area 和 AS external 路径有效。该字段指示通告了
导致该路径的 summary-LSA 或 AS-external-LSA 的路由器的
Router ID。
11.1. 路由表查找(Routing table lookup)
当收到一个 IP 数据报时,OSPF 路由器会查找与该报文目的地最佳
匹配的路由表条目。该路由表条目随后提供转发该报文所使用的出向
接口和下一跳路由器。本节描述查找最佳匹配路由表条目的过程。
在查找开始之前,应当为路由器的每个活动 area address range
(区域地址范围)向路由表中插入 "discard"(丢弃)路由表条目
(见 3.5 节)。(如果某个 area range 包含一个或多个可通过
intra-area 路径到达的网络,则该范围被认为是"活动的"。)
"discard" 条目的目的地是其关联的活动 area address range 所
描述的地址集合,并且每个 "discard" 条目的 path type 被设为
"inter-area"。[10]
可能有多个路由表条目与目的地址匹配。此时,"最佳匹配"是提供
最精确(最长)匹配的那个路由表条目。换一种说法,就是选择指定
了最窄 IP 地址范围的那个条目。[11] 例如,地址/掩码对
(128.185.1.0, 0xffffff00) 的条目比 (128.185.0.0, 0xffff0000)
的条目更精确。默认路由是最不精确的匹配,因为它匹配所有目的地。
(注意,对于任何单个路由表条目,可能存在多条路径。在这些情况
下,16.1、16.2 和 16.4 节中的计算总是产生具有最优先 path-type
的路径,如第 11 节所述。)
如果没有匹配的路由表条目,或者最佳匹配的路由表条目是上述
"discard" 路由表条目之一,则该报文的 IP 目的地被认为不可达。
此时该报文不应被转发,而应被丢弃,并应向该报文的源端返回一个
ICMP destination unreachable(目的不可达)消息。
11.2. 示例路由表(无区域划分)
考虑图 2 中所示的自治系统。未配置任何 OSPF 区域。每个出向
接口显示一个 metric(度量值)。路由器 RT6 路由表的计算过程
如 2.2 节所述。所得到的路由表如表 12 所示。目的地类型采用
缩写:Network 记为 "N",Router 记为 "R"。
本例中不存在多条等价最短路径的情形。此外,由于没有区域划分,
也就不存在 inter-area 路径。
路由器 RT5 和 RT7 是 AS boundary router。已计算出到路由器
RT5 和 RT7 的 intra-area 路由。这使得可以计算出到 RT5 和 RT7
所通告目的地(即网络 N12、N13、N14 和 N15)的外部路由。假定
由 RT5 和 RT7 始发的所有 AS-external-LSA 通告的都是 type 1
外部度量值。这导致计算出到目的地 N12-N15 的 type 1 external
路径。
11.3. 示例路由表(有区域划分)
考虑前面的例子,这次将其划分为若干 OSPF 区域。一种 OSPF 区域
配置如图 6 所示。将针对该区域配置描述路由器 RT4 的路由表。
路由器 RT4 有一条到 Area 1 的连接和一条 backbone(骨干区域)
连接。这使得路由器 RT4 将该 AS 视为图 7 和图 8 中两张图的
拼接。所得到的路由表显示在表 13 中。
同样地,路由器 RT5 和 RT7 是 AS boundary router。路由器 RT3、
RT4、RT7、RT10 和 RT11 是 area border router。注意,area
border router RT3 有两个路由条目,因为它与 RT4 有两个公共
区域(Area 1 和 backbone)。
已计算出通向所有 area border router 的 backbone 路径。这些
路径在确定 inter-area 路由时使用。注意,所有 inter-area 路由
都与 backbone 关联;当计算路由器自身就是 area border router
时总是如此。路由信息在区域边界处被聚合。在本例中,我们假定
Area 3 的定义使得网络 N9-N11 和到 H1 的主机路由
Type Dest Area Path Type Cost Next Adv.
Hop(s) Router(s)
____________________________________________________________
N N1 0 intra-area 10 RT3 *
N N2 0 intra-area 10 RT3 *
N N3 0 intra-area 7 RT3 *
N N4 0 intra-area 8 RT3 *
N Ib 0 intra-area 7 * *
N Ia 0 intra-area 12 RT10 *
N N6 0 intra-area 8 RT10 *
N N7 0 intra-area 12 RT10 *
N N8 0 intra-area 10 RT10 *
N N9 0 intra-area 11 RT10 *
N N10 0 intra-area 13 RT10 *
N N11 0 intra-area 14 RT10 *
N H1 0 intra-area 21 RT10 *
R RT5 0 intra-area 6 RT5 *
R RT7 0 intra-area 8 RT10 *
____________________________________________________________
N N12 * type 1 ext. 10 RT10 RT7
N N13 * type 1 ext. 14 RT5 RT5
N N14 * type 1 ext. 14 RT5 RT5
N N15 * type 1 ext. 17 RT10 RT7
表 12:路由器 RT6 的路由表
(未配置区域)。
在通告进 backbone 时(由路由器 RT11 完成)全部被聚合为单条
路由。注意这条路由的代价是其各个组成部分代价集合中的最大值。
在路由器 RT10 和 RT11 之间配置了一条 virtual link。如果没有
这条配置的 virtual link,RT11 将无法把网络 N9-N11 和主机 H1
的路由通告进 backbone,并且路由器 RT4 的路由表中也不会有这些
网络的条目。
在本例中,到网络 N12 存在两条等价路径。但是它们使用相同的
next hop(路由器 RT5)。
如果在路由器 RT4 和路由器 RT3 之间再配置一条 virtual link,
路由器 RT4 的路由表将得到改善(即路由表中的部分路径会变得
更短)。这条新的 virtual link 本身将与表 13 中 area border
router RT3 的第一个条目关联(一条穿过 Area 1 的 intra-area
路径)。这将使该 virtual link 的代价为 1。添加这条 virtual
link 所引起的路由表条目变化显示在
Type Dest Area Path Type Cost Next Adv. Hops(s) Router(s)
N N1 1 intra-area 4 RT1 * N N2 1 intra-area 4 RT2 * N N3 1 intra-area 1 * * N N4 1 intra-area 3 RT3 * R RT3 1 intra-area 1 * *
N Ib 0 intra-area 22 RT5 * N Ia 0 intra-area 27 RT5 * R RT3 0 intra-area 21 RT5 * R RT5 0 intra-area 8 * * R RT7 0 intra-area 14 RT5 * R RT10 0 intra-area 22 RT5 * R RT11 0 intra-area 25 RT5 *
N N6 0 inter-area 15 RT5 RT7 N N7 0 inter-area 19 RT5 RT7 N N8 0 inter-area 18 RT5 RT7 N N9-N11,H1 0 inter-area 36 RT5 RT11
N N12 * type 1 ext. 16 RT5 RT5,RT7 N N13 * type 1 ext. 16 RT5 RT5 N N14 * type 1 ext. 16 RT5 RT5 N N15 * type 1 ext. 23 RT5 RT7
表 13:存在区域划分时
路由器 RT4 的路由表。
表 14 中。