16. 路由表计算 (Calculation of the Routing Table)
summary-LSA 由区域边界路由器产生. 依次考虑区域 A 中的每个 summary-LSA. 记住,
summary-LSA 描述的目的地可以是一个网络 (Type 3 summary-LSA), 也可以是一个 AS 边界路由器
(Type 4 summary-LSA). 对每个 summary-LSA:
(1) 如果 LSA 指定的开销为 LSInfinity, 或者 LSA 的 LS age 等于 MaxAge, 则检查下一个 LSA.
(2) 如果该 LSA 由执行计算的路由器自身产生, 则检查下一个 LSA.
(3) 如果它是 Type 3 summary-LSA, 且该 summary-LSA 描述的目的地集合等于该路由器配置的某个区域地址范围
(见第 3.5 节), 并且这个特定区域地址范围处于 active 状态, 则应忽略该 summary-LSA.
"Active" 表示该区域范围内包含一个或多个可达的网络 (可通过区域内路径到达).
(4) 否则, 将 LSA 描述的目的地称为 N (对于 Type 3 summary-LSA, N 的地址通过用 LSA 主体中的网络/子网掩码
对 LSA 的 Link State ID 做掩码得到), 将产生该 LSA 的区域边界路由器称为 BR.
查找与区域 A 关联的 BR 路由表条目. 如果不存在路由器 BR 的此类条目 (即 BR 在区域 A 中不可达),
不对该 LSA 做任何处理, 并考虑列表中的下一个 LSA. 否则, 该 LSA 描述一条到目的地 N 的区域间路径,
其开销为到 BR 的距离加上 LSA 中指定的开销. 将这条区域间路径的开销称为 IAC.
(5) 接下来查找到目的地 N 的路由表条目. (如果 N 是 AS 边界路由器, 则查找与区域 A 关联的 "router" 路由表条目).
如果 N 没有条目, 或者该条目的 path type 为 "type 1 external" 或 "type 2 external",
则安装到 N 的区域间路径, 关联区域为区域 A, 开销为 IAC, 下一跳等于到路由器 BR 的下一跳列表,
Advertising router 等于 BR.
(6) 否则, 如果表中现有路径为区域内路径, 不对该 LSA 做任何处理 (区域内路径始终优先).
(7) 否则, 路由表中现有路径也是区域间路径. 如果经 BR 的新路径开销更低, 则安装该路径, 覆盖路由表中的路径.
否则, 如果新路径开销相同, 将其加入路由表条目中出现的路径列表.
16.3. 检查传输区域的 summary-LSA
只有连接到一个或多个能够承载传输流量的非骨干区域的区域边界路由器才执行此步骤
(即 "transit areas", 或者在 Dijkstra 算法步骤 2 中其 TransitCapability 参数已设置为 TRUE 的区域; 见第 16.1 节).
下面计算的目的, 是检查传输区域是否提供了比第 16.1 节和第 16.2 节先前计算出的路径更好 (更短) 的路径.
发现的任何优于或等于先前路径的路径都会安装到路由表中.
该计算还会确定那些在第 16.1 节和第 16.2 节中下一跳被计算为虚链路的目的地的实际下一跳.
下面计算完成后, 第 16.1 节和第 16.2 节中仍带有未解析虚拟下一跳的任何路径都应丢弃.
计算过程如下. 依次检查所有传输区域的 summary-LSA. 每个此类 summary-LSA 都描述一条穿越传输区域区域 A
到网络 N 的路由 (N 的地址通过用 LSA 主体中的网络/子网掩码对 LSA 的 Link State ID 做掩码得到),
或者在 Type 4 summary-LSA 情况下, 描述到 AS 边界路由器 N 的路由. 同时假设该 summary-LSA 由区域边界路由器 BR 产生.
(1) 如果 summary-LSA 通告的开销为 LSInfinity, 或者 LSA 的 LS age 等于 MaxAge, 则检查下一个 LSA.
(2) 如果该 summary-LSA 由执行计算的路由器自身产生, 则检查下一个 LSA.
(3) 查找到 N 的路由表条目. (如果 N 是 AS 边界路由器, 则查找与骨干区域关联的 "router" 路由表条目).
如果该条目不存在, 或者路由类型不是 intra-area 或 inter-area, 或者与该路由表条目关联的区域不是骨干区域,
则检查下一个 LSA. 换言之, 此计算只更新第 16.1 节发现的骨干区域内路由和第 16.2 节发现的区域间路由.
(4) 查找与区域 A 关联的通告路由器 BR 的路由表条目. 如果它不可达, 则检查下一个 LSA.
否则, 到目的地 N 的开销为 BR 在区域 A 路由表条目中的开销与 LSA 中通告的开销之和.
将该开销称为 IAC.
(5) 如果该开销小于 N 路由表条目中的当前开销, 用用于 BR 的下一跳覆盖 N 的下一跳列表,
并将 N 的路由表开销设置为 IAC. 否则, 如果 IAC 与 N 的当前开销相同, 将 BR 的下一跳列表加入 N 的下一跳列表.
无论如何, 与 N 路由表条目关联的区域必须保持为骨干区域, path type (intra-area 或 inter-area) 也必须保持不变.
需要注意, 上述计算绝不会使不可达目的地变为可达; 它只是可能找到到已可达目的地的更优路径.
该计算会把发现的任何更低开销安装到路由表条目中, 随后可从该条目重新通告到其他区域的 summary-LSA 中.
作为该计算的示例, 考虑图 17 中的自治系统. 其中有一个非骨干区域 (区域 1), 它在物理上把骨干分成两个独立部分.
为保持骨干连通性, 已在路由器 RT1 和 RT4 之间配置一条虚链路. 在图右侧, 网络 N1 属于骨干.
虚线表示路由器 RT5 与网络 N1 之间存在一条开销为 20 的更短区域内骨干路径, 而路由器 RT4 与网络 N1 之间路径开销为 100.
........................
. Area 1 (transit) . +
. . |
. +---+1 1+---+100 |
. |RT2|----------|RT4|=========|
. 1/+---+********* +---+ |
. /******* . |
. 1/*Virtual . |
1+---+/* Link . Net|work
=======|RT1|* . | N1
+---+\ . |
. \ . |
. \ . |
. 1\+---+1 1+---+20 |
. |RT3|----------|RT5|=========|
. +---+ +---+ |
. . |
........................ +
图 17: 通过传输区域进行路由
路由器 RT4 和 RT5 都会把网络 N1 的 summary-LSA 注入区域 1.
在第 16.1 节为骨干计算完最短路径树之后, 路由器 RT1 (虚链路左端) 会为所有发往网络 N1 的数据流量计算出一条经由路由器 RT4 的路径.
但是, 由于路由器 RT5 离网络 N1 近得多, 区域 1 内部的所有路由器 (例如 RT2 和 RT3) 都会把它们的网络 N1 流量转发给 RT5,
而不是 RT4. 事实上, 按上述计算检查区域 1 的 summary-LSA 后, 路由器 RT1 也会把网络 N1 流量转发给 RT5.
注意, 在此示例中, 虚链路使传输数据流量能够穿过区域 1 转发, 但传输数据流量实际采用的路径并不沿着虚链路.
换言之, 虚链路允许传输流量穿过某区域转发, 但不规定该流量将采用的精确路径.
16.4. 计算 AS 外部路由
AS 外部路由通过检查 AS-external-LSA 计算. 依次考虑每个 AS-external-LSA.
大多数 AS-external-LSA 描述到特定 IP 目的地的路由. AS-external-LSA 也可以描述自治系统的默认路由
(Destination ID = DefaultDestination, network/subnet mask = 0x00000000). 对每个 AS-external-LSA:
(1) 如果 LSA 指定的开销为 LSInfinity, 或者 LSA 的 LS age 等于 MaxAge, 则检查下一个 LSA.
(2) 如果该 LSA 由执行计算的路由器自身产生, 则检查下一个 LSA.
(3) 将 LSA 描述的目的地称为 N. N 的地址通过用 LSA 主体中的网络/子网掩码对 LSA 的 Link State ID 做掩码得到.
查找产生该 LSA 的 AS 边界路由器 (ASBR) 的路由表条目 (可能每个直连区域一个). 如果不存在路由器 ASBR 的条目
(即 ASBR 不可达), 不对该 LSA 做任何处理, 并考虑列表中的下一个 LSA.
否则, 该 LSA 描述一条到目的地 N 的 AS 外部路径. 检查 AS-external-LSA 中指定的 forwarding address.
它表示发往该目的地的分组应转发到的 IP 地址.
如果 forwarding address 设置为 0.0.0.0, 分组应发送到 ASBR 自身. 在 ASBR 的多个路由表条目中,
按如下方式选择首选条目. 如果 RFC1583Compatibility 设置为 "disabled", 按第 16.4.1 节所述裁剪 ASBR 的路由表条目集合.
无论如何, 在剩余路由表条目中选择开销最低的条目; 当有多个最低开销路由表条目时, 选择其关联区域具有最大 OSPF Area ID
(按无符号 32 位整数看待) 的条目.
如果 forwarding address 非零, 在路由表中查找 forwarding address.[24] 匹配的路由表条目必须指定一条 intra-area 或 inter-area 路径;
如果不存在此类路径, 不对该 LSA 做任何处理, 并考虑列表中的下一个 LSA.
(4) 令 X 为 ASBR/forwarding address 的首选路由表条目指定的开销, Y 为 LSA 中指定的开销.
X 以链路状态 metric 表示, Y 是 type 1 或 type 2 external metric.
(5) 查找到目的地 N 的路由表条目. 如果 N 没有条目, 则安装到 N 的 AS 外部路径,
下一跳等于到 forwarding address 的下一跳列表, advertising router 等于 ASBR.
如果 external metric type 为 1, 则 path-type 设置为 type 1 external, 开销等于 X+Y.
如果 external metric type 为 2, 则 path-type 设置为 type 2 external, 路由开销的链路状态部分为 X,
type 2 开销为 Y.
(6) 按如下方式比较 LSA 描述的 AS 外部路径与 N 路由表条目中的现有路径.
如果新路径更优, 它会替换 N 路由表条目中的当前路径. 如果新路径具有相同优先级, 则加入 N 路由表条目的路径列表.
(a) intra-area 和 inter-area 路径始终优先于 AS external 路径.
(b) Type 1 external 路径始终优先于 type 2 external 路径. 当所有路径都是 type 2 external 路径时,
通告 type 2 metric 最小的路径始终优先.
(c) 如果新的 AS external 路径仍无法与 N 路由表条目中的当前路径区分优劣, 且 RFC1583Compatibility 设置为 "disabled",
则按第 16.4.1 节规定, 根据到 ASBR/forwarding address 的 AS 内路径选择首选路径.
(d) 如果新的 AS external 路径仍无法与 N 路由表条目中的当前路径区分优劣, 则基于最低开销比较选择首选路径.
Type 1 external 路径通过查看到 forwarding address 的距离与通告的 type 1 metric 之和 (X+Y) 进行比较.
通告相同 type 2 metric 的 Type 2 external 路径通过查看到 forwarding address 的距离进行比较.
16.4.1. 外部路径优先级
当存在多条到 ASBR/forwarding address 的 AS 内路径时, 以下规则指出哪些路径更优.
当同一个 ASBR 可通过多个区域到达, 或者在决定多个 AS-external-LSA 中哪个更优时, 这些规则适用.
前一种情况下所有路径都终止于同一个 ASBR, 后一种情况下路径终止于不同 ASBR/forwarding address.
无论哪种情况, 每条路径都由第 11 节定义的一个独立路由表条目表示.
本节只在 RFC1583Compatibility 设置为 "disabled" 时适用.
路径优先级规则从最高到最低如下所示. 注意, 根据这些规则, 仍可能存在多条最高优先级路径.
在这种情况下, 必须按第 16.4 节所述基于开销确定要使用的路径.
o 使用非骨干区域的 intra-area 路径始终最优先.
o 其他路径, 即 intra-area 骨干路径和 inter-area 路径, 具有相同优先级.
16.5. 增量更新 -- summary-LSA
收到新的 summary-LSA 时, 不必重新计算整个路由表. 将 summary-LSA 描述的目的地称为 N
(N 的地址通过用 LSA 主体中的网络/子网掩码对 LSA 的 Link State ID 做掩码得到), 并令区域 A 为该 LSA 所属区域.
这时有两个独立情况:
Case 1: 区域 A 是骨干, 和/或该路由器不是区域边界路由器.
在这种情况下, 必须执行以下计算. 首先, 如果当前存在到目的地 N 的区域间路由,
使 N 的路由表条目失效, 并保存该条目的值供后续比较. 然后只针对单个目的地 N 再次运行第 16.2 节中的计算.
在该计算中, 会检查区域 A 中所有描述到 N 路由的 summary-LSA. 此外, 如果该路由器是连接到一个或多个传输区域的区域边界路由器,
必须再次针对这个单个目的地运行第 16.3 节中的计算. 如果这些计算结果改变了到 AS 边界路由器的开销/路径
(Type 4 summary-LSA 会出现这种情况), 或改变了到任何 forwarding address 的开销/路径,
则必须通过重新运行第 16.4 节中的计算来重新检查所有 AS-external-LSA.
否则, 如果 N 现在新近不可达, 必须针对单个目的地 N 重新运行第 16.4 节中的计算,
以防存在到 N 的备用外部路由.
Case 2: 区域 A 是传输区域, 且该路由器是区域边界路由器.
在这种情况下, 必须执行以下计算. 首先, 如果 N 的路由表条目当前包含一条或多条使用传输区域区域 A 的区域间路径,
应移除这些路径. 如果这会从该路由表条目中移除所有路径, 则应使该条目失效. 该条目的旧值应保存供后续比较.
接下来必须针对单个目的地 N 再次运行第 16.3 节中的计算. 如果此计算结果导致到 N 的开销增加,
则必须从第 16.1 节规定的 Dijkstra 算法开始重新运行完整路由表计算. 否则, 如果到 AS 边界路由器的开销/路径
(Type 4 summary-LSA 会出现这种情况) 或到任何 forwarding address 的开销/路径发生变化,
则必须通过重新运行第 16.4 节中的计算来重新检查所有 AS-external-LSA.
否则, 如果 N 现在新近不可达, 必须针对单个目的地 N 重新运行第 16.4 节中的计算,
以防存在到 N 的备用外部路由.
16.6. 增量更新 -- AS-external-LSA
收到新的 AS-external-LSA 时, 不必重新计算整个路由表. 将 AS-external-LSA 描述的目的地称为 N.
N 的地址通过用 LSA 主体中的网络/子网掩码对 LSA 的 Link State ID 做掩码得到.
如果已经存在到该目的地的 intra-area 或 inter-area 路由, 不需要重新计算 (内部路由优先).
否则, 必须执行第 16.4 节中的过程, 但只针对目的地为 N 的那些 AS-external-LSA.
在执行该过程之前, 应使 N 的当前路由表条目失效.
16.7. 路由表变化产生的事件
路由表条目的变化有时会使 OSPF 区域边界路由器采取额外动作. 这些路由器需要处理以下路由表变化:
o 路由表条目的开销或 path type 发生变化. 如果该条目描述的目的地是 Network 或 AS boundary router,
且这不仅仅是 AS external 路由变化, 则可能必须生成新的 summary-LSA
(可能每个直连区域一个, 包括骨干). 更多信息见第 12.4.3 节. 如果先前通告的条目被删除,
或者不再能通告到某个特定区域, 则必须通过把其 LS age 设置为 MaxAge 并重新泛洪来从路由域中清除该 LSA
(见第 14.1 节).
o 与已配置虚链路关联的路由表条目发生变化. 这种路由表条目的目的地是区域边界路由器.
该变化表示虚链路开销或可用性发生修改.
如果该条目表示区域边界路由器新近可达, 相应虚链路现在可运行. 应为该虚链路生成 InterfaceUp 事件,
这将导致虚邻接开始形成 (见第 10.3 节). 此时也会计算虚链路的 IP 接口地址和虚邻居的 Neighbor IP address.
如果该条目表示区域边界路由器不再可达, 应销毁该虚链路及其关联邻接. 这意味着应为关联虚链路生成 InterfaceDown 事件.
如果该条目的开销发生变化, 且存在完全建立的虚邻接, 必须为骨干产生新的 router-LSA.
这反过来可能导致更多路由表变化.
16.8. 等价多路径 (Equal-cost multipath)
OSPF 协议维护到所有目的地的多条等价路由. 这一点可以从上面用于计算路由表的步骤以及路由表结构定义中看出.
多条路由中的每一条都具有相同类型 (intra-area, inter-area, type 1 external 或 type 2 external),
相同开销, 并且具有相同关联区域. 但是, 每条路由可以指定独立的下一跳和 Advertising router.
运行 OSPF 的路由器不要求跟踪到某个目的地的所有可能等价路由. 实现可以选择只为任一给定目的地保留固定数量的路由.
这不影响本规范中给出的任何算法.
脚注
[1] 图的顶点表示路由器, 传输网络或 stub 网络. 由于路由器可能属于多个区域, 因此无法为图的顶点着色.
[2] 路由器的所有接口都可能是未编号点到点链路. 在这种情况下, 必须给该路由器分配一个 IP 地址.
随后该地址将在路由器的 router-LSA 中作为主机路由通告.
[3] 注意, 在这些情况下, 非虚接口和虚接口这两个接口将具有相同 IP 地址.
[4] 注意, 对未编号点到点网络的接口不会生成主机路由, 也不能将 IP 分组寻址到这些接口.
这与该接口状态无关.
[5] 观察网络的 Designated Router 崩溃时会发生什么是有启发性的. 将网络的 Designated Router 称为 RT1,
Backup Designated Router 称为 RT2. 如果路由器 RT1 崩溃 (或者它到该网络的接口失效),
网络上的其他路由器会在 RouterDeadInterval 秒内检测到 RT1 缺失. 所有路由器未必在完全相同的时间检测到这一点;
那些在 RT2 之前检测到 RT1 缺失的路由器, 会在一段时间内选择 RT2 同时作为 Designated Router 和 Backup Designated Router.
当 RT2 检测到 RT1 已离开时, 它会把自己迁移为 Designated Router. 此时, 剩余路由器中 Router Priority 最高者会被选为 Backup Designated Router.
[6] 在点到点网络上, 低层协议会指示邻居是否已启动并运行. 同样, 虚链路上邻居的存在由路由表计算指示.
但是, 在这两种情况下仍会使用 Hello Protocol. 这确保邻居间通信是双向的, 并确保每个邻居都有可工作的路由协议层.
[7] 当 Designated Router 身份正在变化时, 处于此状态的邻居向路由器发送 Database Description packet 可能相当常见;
这表示对 Designated Router 身份存在短暂分歧.
[8] 注意, 路由器可以通过把任一完全建立邻接的状态设置回 ExStart, 来重新同步该邻接.
这会使邻接另一端处理 SeqNumberMismatch 事件, 因而也回到 ExStart 状态.
[9] IP 网络地址空间和 OSPF Router ID 地址空间可能重叠. 也就是说, 某个网络可以具有与某台路由器 Router ID 相同的 IP 地址
(按 32 位数字看待时).
[10] "Discard" 条目是必要的, 用于确保区域边界处的路由汇总不会导致分组环路.
[11] 假定对于匹配目的地的两个不同地址范围, 一个范围比另一个更具体. 非连续子网掩码的配置可能违反这一假定.
OSPF 协议无法处理这样的子网掩码配置.
[12] MaxAgeDiff 是一个体系结构常量. 它表示单个 LSA 实例在整个路由域中泛洪时可能出现的最大年龄离散度, 单位为秒.
如果两个 LSA 的年龄差超过该值, 它们会被假定为同一 LSA 的不同实例. 当路由器重启并丢失该 LSA 先前 LS sequence number 的记录时,
可能出现这种情况. 更多细节见第 13.4 节.
[13] 当两个 LSA 具有不同 LS checksum 时, 它们被假定为不同实例. 当路由器重启并丢失该 LSA 先前 LS sequence number 的记录时,
可能出现这种情况. 在两个 LSA 具有相同 LS sequence number 的情况下, 无法判断哪个 LSA 实际更新.
但是, 如果错误地接受了不该作为更新的 LSA, 发起路由器只会再产生另一个实例. 更多细节见第 13.4 节.
[14] 有一种情况下必须基于部分信息进行查找. 这发生在路由表计算期间, 此时必须仅基于 network-LSA 的 Link State ID 找到该 network-LSA.
此情况下查找仍是明确定义的, 因为不会有两个 network-LSA 具有相同 Link State ID.
[15] 这是 RFC 1583 指定点到点表示的方式. 它有三个优点: a) 不要求给点到点链路分配子网,
b) 倾向于使路由偏向这样一种结果: 发往点到点接口的分组实际会通过该接口接收 (这对诊断很有用),
c) 允许邻居的网络引导, 而不要求引导程序包含 OSPF 实现.
[16] 这是 RIP 等协议使用的更传统点到点表示.
[17] 该子句覆盖这种情况: 区域间路由不汇总到骨干. 这是因为区域间路由始终与骨干区域关联.
[18] 该子句只在非骨干区域 A 支持传输数据流量 (即 TransitCapability 设置为 TRUE) 时调用.
例如, 在图 6 的区域配置中, 由于路由器 RT10 和 RT11 之间配置了虚链路, 区域 2 能够支持传输流量.
因此, 路由器 RT11 只需向区域 2 产生一个 summary-LSA (其折叠目的地为 N9-N11,H1),
因为 RT11 的所有其他符合条件的路由都有属于区域 2 本身的下一跳
(因此只需由其他区域边界路由器通告; 在此情况下为路由器 RT10 和 RT7).
[19] 通过在路由表中保留更多信息, 实现可以只为单个区域重新计算最短路径树.
实际上, 存在一些增量算法允许实现只重新计算单个区域最短路径树的一部分 [Ref1].
但是, 这些算法超出本规范范围.
[20] 这就是 Link state request list 被清空的方式, 最终会导致邻居状态转换为 Full. 更多细节见第 10.9 节.
[21] LSA 的 LS age 以这种方式达到 MaxAge 应该是比较少见的情况. 通常, LSA 会在老化到期前被更新实例替换.
[22] 严格来说, 由于存在等价多路径, 该算法不会创建一棵树. 我们继续使用 "tree" 术语, 因为这是现有文献中最常见的说法.
[23] 注意, 存在任何返回 V 的链路就足够了; 它不必是正在考虑的从 V 到 W 链路的匹配另一半.
这足以确保在一对相邻路由器之间传输数据流量之前, 它们的链路状态数据库已经同步.
[24] 当 forwarding address 非零时, 它应指向属于另一个自治系统的路由器. 更多细节见第 12.4.4 节.
参考文献
[Ref1] McQuillan, J., I. Richer and E. Rosen, "ARPANET Routing
Algorithm Improvements", BBN Technical Report 3803, April
1978.
[Ref2] Digital Equipment Corporation, "Information processing
systems -- Data communications -- Intermediate System to
Intermediate System Intra-Domain Routing Protocol", October
1987.
[Ref3] McQuillan, J., et.al., "The New Routing Algorithm for the
ARPANET", IEEE Transactions on Communications, May 1980.
[Ref4] Perlman, R., "Fault-Tolerant Broadcast of Routing
Information", Computer Networks, December 1983.
[Ref5] Postel, J., "Internet Protocol", STD 5, RFC 791, September
1981.
[Ref6] McKenzie, A., "ISO Transport Protocol specification ISO DP
8073", RFC 905, April 1984.
[Ref7] Deering, S., "Host extensions for IP multicasting", STD 5,
RFC 1112, May 1988.
[Ref8] McCloghrie, K., and M. Rose, "Management Information Base
for network management of TCP/IP-based internets: MIB-II",
STD 17, RFC 1213, March 1991.
[Ref9] Moy, J., "OSPF Version 2", RFC 1583, March 1994.
[Ref10] Fuller, V., T. Li, J. Yu, and K. Varadhan, "Classless
Inter-Domain Routing (CIDR): an Address Assignment and
Aggregation Strategy", RFC1519, September 1993.
[Ref11] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC
1700, October 1994.
[Ref12] Almquist, P., "Type of Service in the Internet Protocol
Suite", RFC 1349, July 1992.
[Ref13] Leiner, B., et.al., "The DARPA Internet Protocol Suite", DDN
Protocol Handbook, April 1985.
[Ref14] Bradley, T., and C. Brown, "Inverse Address Resolution
Protocol", RFC 1293, January 1992.
[Ref15] deSouza, O., and M. Rodrigues, "Guidelines for Running OSPF
Over Frame Relay Networks", RFC 1586, March 1994.
[Ref16] Bellovin, S., "Security Problems in the TCP/IP Protocol
Suite", ACM Computer Communications Review, Volume 19,
Number 2, pp. 32-38, April 1989.
[Ref17] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321,
April 1992.
[Ref18] Moy, J., "Multicast Extensions to OSPF", RFC 1584, March
1994.
[Ref19] Coltun, R., and V. Fuller, "The OSPF NSSA Option", RFC 1587,
March 1994.
[Ref20] Ferguson, D., "The OSPF External Attributes LSA", work in
progress.
[Ref21] Moy, J., "Extending OSPF to Support Demand Circuits", RFC
1793, April 1995.
[Ref22] Mogul, J., and S. Deering, "Path MTU Discovery", RFC 1191,
November 1990.
[Ref23] Rekhter, Y., and T. Li, "A Border Gateway Protocol 4 (BGP-
4)", RFC 1771, March 1995.
[Ref24] Hinden, R., "Internet Routing Protocol Standardization
Criteria", BBN, October 1991.
[Ref25] Moy, J., "OSPF Version 2", RFC 2178, July 1997.
[Ref26] Rosen, E., "Vulnerabilities of Network Control Protocols: An
Example", Computer Communication Review, July 1981.