查看完整版本: OSPF V2 RFC中文版本

cunshen 2006-8-30 11:25

OSPF V2 RFC中文版本

探知;识别;构建;标识;标注;单击、间隔记时器;通断(失效);废止(删除)  (浓缩)
Network Working Group        J. Moy       
Request for Comments: 2328        Ascend Communications, Inc.       
STD: 54        April 1998       
Obsoletes: 2178               
Category: Standards Track               


OSPF 版本 2

本备忘录的状态:

本文档讲述了一种Internet团体的Internet标准跟踪协议,它需要进一步进行讨论和建议以得到改进。请参考最新版的“Internet正式协议标准”(STD1)来获得本协议的标准化程度和状态。本备忘录的发布不受任何限制。

版权提示:

Copyright (C) The Internet Society (1998). All Rights Reserved.

摘要:

本备忘录说明了OSPF协议版本2。OSPF是一种连接状态/link-state路由协议,被设计用于单一的自制系统/Autonomous System中。每个OSPF路由器都维持着同样的数据库以描述AS的拓扑结构,并以此数据库来创建最短路径树并计算路由表。

OSPF在发现拓扑改变后,仅利用很少的路由流量就可以快速的重新计算出路径。OSPF提供等值多路径。通过提供区域/area路径,来提供额外的路径保护并可以减少协议所需要的流量。此外,所有的OSPF路由信息交换都经过验证。

本备忘录与RFC 2178的不同,在附录G中说明。所有的不同点都实现向后兼容。

按本备忘录的实现,与按照RFC2178、1583、1247的实现能够协同运作。

请将建议发往[email]ospf@gated.cornell.edu[/email]。

请将有关本文翻译的建议发往[email]raymon@itpub.net[/email]
目录

1        绪论               
1.1        协议概述               
1.2        常用术语的定义               
1.3        连接状态路由技术的简要历史               
1.4        本文档的结构               
1.5        感谢               
2        连接状态数据库:组织和计算               
2.1        路由器和网络的表示方法               
2.1.1        非广播网络的表示方法               
2.1.2        一个连接状态数据库的示例               
2.2        最短路径树               
2.3        使用外部路由信息               
2.4        等值多路径               
3        将自制系统划分为区域               
3.1        自制系统的骨干区域               
3.2        区域间路由               
3.3        路由器的分类               
3.4        一个简单区域配置               
3.5        IP子网化支持               
3.6        支持存根区域               
3.7        区域的划分               
4        功能摘要               
4.1        区域间路由               
4.2        自制系统外部路由               
4.3        路由协议包               
4.4        基本实现的需求               
4.5        OSPF可选项               
5        协议数据结构               
6        区域数据结构               
7        形成邻接               
7.1        Hello协议               
7.2        数据库同步               
7.3        指定路由器               
7.4        备份指定路由器               
7.5        邻接图               
8        协议包处理               
8.1        发送协议包               
8.2        接收协议包               
9        接口数据结构               
9.1        接口状态               
9.2        引起接口状态改变的事件               
9.3        接口状态机               
9.4        选举指定路由器               
9.5        发送Hello包               
9.5.1        在NBMA网络上发送Hello包               
10        邻居数据结构               
10.1        邻居状态               
10.2        引起邻居状态改变的事件               
10.3        邻居状态机               
10.4        是否形成邻接               
10.5        接收到Hello包               
10.6        接收到数据库描述包               
10.7        接收到连接状态请求包               
10.8        发送数据库描述包               
10.9        发送连接状态请求包               
10.10        示例               
11        路由表结构               
11.1        查找路由表               
11.2        路由表示例,无区域               
11.3        路由表示例,有区域               
12        连接状态宣告(LSA)               
12.1        LSA头部               
12.1.1        连接状态时限               
12.1.2        选项               
12.1.3        连接状态类型               
12.1.4        连接状态标识               
12.1.5        宣告路由器               
12.1.6        连接状态序号               
12.1.7        连接状态校验和               
12.2        连接状态数据库               
12.3        TOS表现               
12.4        生成LSA               
12.4.1        Router-LSA               
12.4.1.1        描述点对点接口               
12.4.1.2        描述广播和NBMA接口               
12.4.1.3        描述虚拟通道               
12.4.1.4        描述点对多点接口               
12.4.1.5        Router-LSA示例               
12.4.2        Network-LSA               
12.4.2.1        Network-LSA示例               
12.4.3        Summary-LSA               
12.4.3.1        向存根区域生成Summary-LSA               
12.4.3.2        Summary-LSA示例               
12.4.4        AS-external-LSA               
12.4.4.1        AS-external-LSA示例               
13        洪泛过程               
13.1        判定较新的LSA               
13.2        将LSA加入数据库               
13.3        洪泛过程的下一步操作               
13.4        接收自生成的LSA               
13.5        发送连接状态确认包(LSAck包)               
13.6        重传LSA               
13.7        接收连接状态确认包(LSAck包)               
14        老化连接状态数据库               
14.1        提前老化LSA               
15        虚拟通道               
16        计算路由表               
16.1        计算一个区域的最短路径树               
16.1.1        计算下一跳               
16.2        计算区域间路径               
16.3        查看传输区域的Summary-LSA               
16.4        计算AS外部路径               
16.4.1        外部路径参数               
16.5        增量更新--Summary-LSA               
16.6        增量更新--AS-external-LSA               
16.7        路由表改变引起的事件               
16.8        等值多路径               
        脚注               
        引用               
A        OSPF数据格式               
A.1        OSPF包的封装               
A.2        选项域               
A.3        OSPF包格式               
A.3.1        OSPF包头               
A.3.2        Hello包               
A.3.3        数据库描述包(DD包)               
A.3.4        连接状态请求包(LSR包)               
A.3.5        连接状态更新包(LSU包)               
A.3.6        连接状态确认包(LSAck包)               
A.4        LSA格式               
A.4.1        LSA头部               
A.4.2        Router-LSA               
A.4.3        Network-LSA               
A.4.4        Summary-LSA               
A.4.5        AS-external-LSA               
B        结构常量               
C        可配置变量               
C.1        全局参数               
C.2        区域参数               
C.3        路由器接口参数               
C.4        虚拟通道参数               
C.5        NBMA网络参数               
C.6        点对多点网络参数               
C.7        主机路径参数               
D        验证               
D.1        空验证               
D.2        简单口令验证               
D.3        密码验证               
D.4        信息生成               
D.4.1        生成空验证               
D.4.2        生成简单口令验证               
D.4.3        生成密码验证               
D.5        信息校验               
D.5.1        校验空验证               
D.5.2        校验简单口令验证               
D.5.3        校验密码验证               
E        设定LS标识的一种算法               
F        多接口接入同一网络/子网               
G        与RFC 2178的不同               
G.1        洪泛过程的修改               
G.2        外部路径优先级的改变               
G.3        解决不完整的虚拟下一跳               
G.4        路由表查找               
        安全性考虑               
        作者的地址               
        完整的版权声明               

1.  绪论

本文档描述了开放最短路径优先/Open Shortest Path First(OSPF)TCP/IP网际路由协议。OSPF是一种典型的内部网关协议/Interior Gateway Protocol(IGP)。这意味着其路由信息是描述属于同一个自制系统/Autonomous System(AS)中的路由器。OSPF协议是基于连接状态或被称为SPF的技术,这与传统TCP/IP网际路由协议所使用的Bellman-Ford技术不同。

OSPF协议是由Internet Engineering Task Force的OSPF工作组所开发的,特别为TCP/IP网络而设计,包括明确的支持CIDR和标记来源于外部的路由信息。OSPF也提供了对路由更新的验证,并在发送/接收更新时使用IP多播。此外,还作了很多的工作使得协议仅用很少的路由流量就可以快速地响应拓扑改变。

1.1.  协议概述

OSPF仅通过在IP包头中的目标地址来转发IP包。IP包在AS中被转发,而没有被其他协议再次封装。OSPF是一种动态路由协议,它可以快速地探知AS中拓扑的改变(例如路由器接口的失效),并在一段时间的收敛后计算出无环路的新路径。收敛的时间很短且只使用很小的路由流量。

在连接状态路由协议中,每台路由器都维持着一个数据库以描述AS的拓扑结构。这个数据库被称为连接状态数据库,所有参与的路由器都有着同样的数据库。数据库中的各项说明了特定路由器自身的状态(如该路由器的可用接口和可以到达的邻居)。该路由器通过洪泛/flooding将其自身的状态传送到整个AS中。

所有的路由器同步地运行完全相同的算法。根据连接状态数据库,每台路由器构建出一棵以其自身为树根的最短路径树。最短路径树给出了到达AS中各个目标的路径,路由信息的起源在树中表现为树叶。

当有多条等值的路径到达同一目标时,数据流量将在这些路径上平均分摊。路径的距离值表现为一个无量纲数。

OSPF允许将一些网络组合到一起。这样的组被称为区域/area。区域对AS中的其他部分隐藏其内部的拓扑结构,信息的隐藏极大地减少了路由流量。同时,区域内的路由仅由区域自身的拓扑来决定,这可使区域抵御错误的路由信息。区域通常是一个子网化了的IP网络。

OSPF允许灵活的配置IP子网。由OSPF发布的每条路径都包含目标和掩码。同一个IP网络的两个子网可以有不同的大小(即不同的掩码),这常被称为变长子网/variable length subnetting。数据包按照最佳匹配(最长匹配)来转发。主机路径被看作掩码为“全1”(0xffffffff)的子网来处理。

OSPF协议中所有的信息交换都经过验证。这意味着,在AS中只有被信任的路由器才能参与路由。有多种验证方法可以被选择。事实上,可以为每个IP子网选用不同的验证方法。

来源于外部的路由信息(如路由器从诸如BGP[引用23]的外部网关协议中得到的路径)向整个AS内部宣告。外部数据与OSPF协议的连接状态数据相对独立。每条外部路径可以由所宣告的路由器作出标记,在自制系统边界路由器(ASBR)之间传递额外的信息。

1.2.  常用术语的定义

本节定义了贯穿本文的,在OSPF协议中有特定含义的术语。对IP协议不熟悉的读者可使用[引用13]作为IP协议的绪论。

路由器/Router:
一种三层IP包的交换设备。在早期的IP文献中被称为网关/gateway。

自制系统/Autonomous System:
一组使用相同路由协议交换路由信息的路由器,缩写为AS。

内部网关协议/Interior Gateway Protocol:
被一个AS内的路由器所使用的路由协议,缩写为IGP。每个AS使用单一的IGP,不同的AS会使用不同的IGP。

路由器标识/Router ID:
一个32位的数字,用以识别每台运行OSPF协议的路由器。在一个AS中,这个数字可以唯一地表示出一台路由器。

网络/Network:
在本备忘录中,会表示IP网络/子网/超网。一个物理网络上可能设置有多个网络/子网号,我们把它们按照独立的网络来对待。物理点对点/point-to-point网络是个例外--无论在上面设置了多少网络/子网号(如果有的话),都将其看作是一个网络。

网络掩码/Network        mask:
一个32位的数字,表示IP地址的范围来说明这是一个IP网络/子网/超网。本文以16进制来表示网络掩码。如将C类IP地址的网络掩码显示为0xffffff00,这一掩码在其他文献中经常被表示为255.255.255.0。

点对点网络/Point-to-point networks:
仅仅连接一对路由器的网络。56k的串行线路是一个点对点网络的例子。

广播网络/Broadcast networks:
支持多台(大于两台)路由器接入的网络,同时有能力发送一条信息就能到所有接入的路由器(广播)。网络上邻居路由器可以通过OSPF的Hello协议来动态发现。如果可能,OSPF协议将进一步使用多播。广播网络上的每一对路由器都被认为可以直接通讯。以太网/ethernet是一个广播网络的例子。

非广播网络/Non-broadcast networks:
支持多台(大于两台)路由器接入的网络,但没有广播能力。网络上的邻居路由器通过OSPF的Hello协议来维持。但由于缺乏广播能力,需要一些配置信息的帮助来发现邻居。在非广播网络上,OSPF协议的数据通常需要被轮流发送到每一台邻居路由器上。X.25公用数据网/Public Data Network(PDN)是一个非广播网络的例子。

在非广播网络上运行的OSPF有两种模式。第一种被称为非广播多路接入/non-broadcast multi-access(NBMA),模拟OSPF在广播网络上的操作;第二种被称为点对多点/Point-to-MultiPoint,将非广播网络看作是一系列点对点的连接。非广播网络被作为NBMA网络还是点对多点网络,取决于OSPF在该网络上所配置的运行模式。

接口/Interface:
是指路由器与所接入的网络之间的一个连接。接口通过下层协议和路由协议获取与其相关的状态信息。指向网络的接口只和单一的IP地址及掩码相关(除非是无编号的点对点网络)。接口有时也被称为连接/link。

邻居路由器/Neighboring routers:
在同一网络中都有接口的两台路由器。邻居关系是由OSPF的Hello协议来维持,并通常依靠Hello协议来动态发现。

邻接/Adjacency:
用以在所选择的邻居路由器之间交换路由信息的关系。不是每对邻居路由器都会成为邻接。

连接状态宣告/Link state advertisement:
描述路由器或网络自身状态的数据单元。对路由器来说,这包含它的接口和邻接状态。每一项连接状态宣告都被洪泛到整个路由域中。所有路由器和网络连接状态宣告的集合形成了协议的连接状态数据库。在本备忘录中,连接状态宣告被缩写为LSA。

Hello协议/Hello Protocol:
在OSPF协议中,用于建立和维持邻居关系的部分。在广播网络中还被用于动态发现邻居路由器。

洪泛/Flooding:
在OSPF协议中,用于OSPF路由器之间发送及同步连接状态数据库的部分。

指定路由器/Designated Router:
在每个接入了至少两台路由器的广播和NBMA网络中都有一台作为指定路由器。指定路由器生成Network-LSA并在运行协议时完成其他特定职责。指定路由器通过Hello协议选举。(译注:本文后边将缩写为DR)

指定路由器的概念减少了广播和NBMA网络上所需要的邻接数量。同时也减少了路由协议所需要的流量及连接数据库的大小。

下层协议/Lower-level protocols:
为IP及OSPF协议提供服务的下层网络接入协议。如为X.25 PDN服务的X.25 packet and frame level;以及为以太网服务的以太网数据链路层。

1.3.  连接状态路由技术的简要历史

OSPF是一种连接状态路由协议。此类协议在其他文献中也被称为基于SPF或基于分布数据库/distributed-database的协议。本节简要地介绍连接状态技术发展过程中影响OSPF协议的部分。

第一种连接状态路由协议是为ARPANET网络开发的。该协议在[引用3]中被描述。它成为其他连接状态协议的起点。所谓ARPANET网络环境,就是指通过同步串行线路连接的单一厂商的包交换网络,设计简单且只实现基本的协议。

对此协议的修改在[引用4]中被提出。修改包括增加路由协议的容错性,其中之一的手段就是在LSA中添加了校验和(用于发现数据库错误)。该文还提及在连接状态协议中要减少路由流量。这通过将产生LSA的间隔增加相当长时间来实现。

连接状态算法同时也被ISO的IS-IS路由协议所使用。该协议在[引用2]中被描述。该协议工作在广播网络上时,通过为每个网络选举DR,来减少数据及路由流量。由DR产生表示该网络的LSA。

IETF的OSPF工作组长期以来从事OSPF协议的开发工作。增强了指定路由器的概念以减少对路由流量的需求;还进一步使用多播能力来减少路由带宽;开发出区域路由而允许信息的隐藏/保护/汇聚;最后,修改算法以专为TCP/IP服务。

1.4.  本文档的结构

本文档开始的三章大致介绍了协议的功能,第4-16章介绍了协议内容的细节,在附录中列出了包格式、协议常量和可配置变量的清单。

在文档中出现的诸如HelloInterval的标注是协议所需要的参数,包括可配置的和不可配置的。结构化常量在附录B中汇总,可配置变量在附录C中汇总。

为了使描述更为精确,本文档定义了协议所需要的数据结构。对本协议的实现必须支持所描述的功能,但不必使用和本备忘录完全一致的数据结构。

1.5.  感谢

作者感谢Ran Atkinson、Fred Baker、Jeffrey Burgan、Rob Coltun、Dino Farinacci、Vince Fuller、Phanindra Jujjavarapu、Milo Medin、Tom Pusateri、Kannan Varadhan、Zhaohui Zhang和其他OSPF工作组成员对本项目的建议和支持。

OSPF点对多点/Point-to-MultiPoint接口是基于Fred Baker 的工作。

OSPF密码验证选项是由Fred Baker和Ran Atkinson开发的。

另外,本文译者感谢tigerfish、chenghit、cisco800、4099和其他ITPUB论坛成员的鼓励和支持。

最后还要特别感谢我的女儿,她正是出生在我翻译本文的这段日子里。她让我知道,这世界上除了网络还有很多其他的东西。
2.  连接状态数据库:组织和计算

下面的章节描述OSPF连接状态数据库的结构,以及如何从数据库来计算路由器的路由表。

2.1.  路由器和网络的表示方法

在AS内的连接状态数据库直接表现为一张图表。图表的行、列用来表示路由器和网络。当两台路由器通过物理点对点网络接入时,图表上的标记就连接这两台路由器。当路由器在某个网络有接口时,图表标记就连接该路由器和这个网络。网络分传输/transit网络和存根/stub网络。传输网络可以传送既不是由本网络产生、也不是到达本网络的数据流量。传输网络在图表中有输入、输出两个标记,而存根网络只有输入标记。

网络中各节点在图表上的邻居关系取决于网络的类型(点对点、广播、NBMA或点对多点),以及连接到该网络的路由器数量。图1a描述了三种情况:方框表示路由器,纵横线表示网络。路由器名由字母RT开头、网络名由字母N开头、路由器的接口名由字母I开头。两台路由器之间的直接连线表示点对点网络。左边的图表示网络和路由器的连接,右边的表显示结果。

                                                  **FROM**
                                           *      |RT1|RT2|
                +---+Ia    +---+           *   ------------
                |RT1|------|RT2|           T   RT1|   |        X |
                +---+    Ib+---+           O   RT2| X |          |
                                           *    Ia|   |        X |
                                           *    Ib| X |          |
物理点对点网络

                                                  **FROM**
                      +---+                *
                      |RT7|                *      |RT7| N3|
                      +---+                T   ------------
                        |                  O   RT7|   |   |
            +----------------------+       *    N3| X |   |
                       N3                  *
存根网络

                                                  **FROM**
                +---+      +---+
                |RT3|      |RT4|              |RT3|RT4|RT5|RT6|N2 |
                +---+      +---+        *  ------------------------
                  |    N2    |          *  RT3|   |   |   |   | X |
            +----------------------+    T  RT4|   |   |   |   | X |
                  |          |          O  RT5|   |   |   |   | X |
                +---+      +---+        *  RT6|   |   |   |   | X |
                |RT5|      |RT6|        *   N2| X | X | X | X |   |
                +---+      +---+
广播网络或NBMA网络

图 1a:网络表的构成

图表的行、列用来表示路由器和网络。当且仅当A列B行上有“X”记号时,表示A、B两项之间有连接。

图1a的最上部分显示了两台通过点对点线路连接的路由器。在连接状态数据库表的结果中,两个路由器项通过一对标记相互直接连接,每个标记表示一个方向。点对点接口不必设定IP地址。如果设定了IP地址,每台路由器就宣告对端路由器的接口地址为一个存根连接。如果在点对点网络上设定了IP子网,每台路由器就宣告这个子网为存根连接,而不是宣告对端路由器的接口地址。

图1a的中间显示了只接入一台路由器的网络(即存根网络)。这时,连接状态数据库中表现为存根连接后的网络。

当广播网络上接入了多台路由器后,连接状态数据库表现为这些路由器与网络的双向连接。如图1a的底部表示。

每个在表中的网络(传输和存根)都有IP地址以及相关联的网络掩码,掩码说明了在网络上的节点数量。直接连接到路由器的主机(称为主机路径),表现为存根网络。主机路径的网络掩码始终为0xffffffff,表示只有一个节点。

2.1.1.        非广播网络的表示方法

正如前面所述,OSPF在非广播网络上有两种运行方式:NBMA和点对多点。运行的方式决定了Hello协议及洪泛在非广播网络上的工作方法,以及该网络在连接状态数据库中的表示方法。

在NBMA模式下,OSPF模拟在广播网络上的操作,并选举DR为该网络来生成Network-LSA。正如图1a中显示的那样,NBMA网络和广播网络的图表表示是一致的。

不论从连接状态数据库的大小,还是从路由协议所需的流量,NBMA模式都是在非广播网络上运行OSPF最有效的方式。但这需要一个很重要的限制:所有接入NBMA网络的路由器都能够直接通讯。这一限制适合某些非广播网络,如使用SVC的ATM子网;但在另一些非广播网络上就不适合,如仅使用PVC的帧中继网络。可以将这种网络分为几个逻辑上的子网,使每个子网中的路由器都能够直接通讯,并在每个子网上按NBMA模式运行(见[引用15])。但是这需要更多些的管理,且容易配置错误。在此类网络上使用点对多点模式更好。

在点对多点模式中,OSPF将非广播网络里,每个路由器之间的连接都看作是点对点的连接。不在网络中选举DR,也不为该网络产生Network-LSA。事实上,连接状态数据库的图表中并没有表示点对多点网络的项。

                                                  **FROM**
                +---+      +---+
                |RT3|      |RT4|              |RT3|RT4|RT5|RT6|
                +---+      +---+        *  --------------------
                I3|    N2    |I4        *  RT3|   | X | X | X |
            +----------------------+    T  RT4| X |   |   | X |
                I5|          |I6        O  RT5| X |   |   | X |
                +---+      +---+        *  RT6| X | X | X |   |
                |RT5|      |RT6|        *   I3| X |   |   |   |
                +---+      +---+            I4|   | X |   |   |
                                            I5|   |   | X |   |
                                            I6|   |   |   | X |
图1b:点对多点网络的网络表构成

除了RT4与RT5外,其他的路由器之间都可以通过N2直接通讯。I3到I6表示路由器的IP接口地址。

图1b说明了点对多点网络在连接状态数据库中的表现。图的左边一半给出了一个点对多点网络。并假设除了RT4与RT5外,其他的路由器之间都可以直接通讯。I3到I6表示路由器在该网络上的IP接口地址。在图表中,能够通过点对多点网络而直接通讯的路由器使用双向标记连接;此外每台路由器都有一个表示自身IP接口地址的存根连接(对照图1a中真正点对点连接中的表示)。

在某些非广播网络上,使用点对多点模式和诸如逆向ARP(见[引用14])的数据链路层协议,可以在没有广播支持的情况下自动发现OSPF邻居。

2.1.2.        一个连接状态数据库的示例

                 +
                 | 3+---+                     N12      N14
               N1|--|RT1|\ 1                    \ N13 /
                 |  +---+ \                     8\ |8/8
                 +         \ ____                 \|/
                            /    \   1+---+8    8+---+6
                           *  N3  *---|RT4|------|RT5|--------+
                            \____/    +---+      +---+        |
                  +         /   |                  |7         |
                  | 3+---+ /    |                  |          |
                N2|--|RT2|/1    |1                 |6         |
                  |  +---+    +---+8            6+---+        |
                  +           |RT3|--------------|RT6|        |
                              +---+              +---+        |
                                |2               Ia|7         |
                                |                  |          |
                           +---------+             |          |
                               N4                  |          |
                                                   |          |
                       N11                         |          |
                   +---------+                     |          |
                        |                          |          |    N12
                        |3                         |          |6 2/
                      +---+                        |        +---+/
                      |RT9|                        |        |RT7|---N15
                      +---+                        |        +---+ 9
                        |1                   +     |          |1
                       _|__                  |   Ib|5       __|_
                      /    \      1+----+2   |  3+----+1   /    \
                     *  N9  *------|RT11|----|---|RT10|---*  N6  *
                      \____/       +----+    |   +----+    \____/
                        |                    |                |
                        |1                   +                |1
             +--+   10+----+                N8              +---+
             |H1|-----|RT12|                                |RT8|
             +--+SLIP +----+                                +---+
                        |2                                    |4
                        |                                     |
                   +---------+                            +--------+
                       N10                                    N7

图2:一个简单的自制系统

图2显示了一个简单的AS示意图。标有H1的方框表示一台主机通过SLIP与路由器RT12连接,路由器RT12因此宣告主机路径。路由器之间的连线表示物理点对点网络,唯一设定了接口地址的点对点网络用以连接路由器RT6和RT10。路由器RT5和RT7通过BGP与其他AS连接,这些路由器各自从BGP得到一系列的路径。

每个路由器输出接口都有数值与其关联,这些值由系统管理员设定。值越小,该接口就越会被用来转发数据流量。来源于外部的路由数据也有值与其关联(如从BGP得到的路径)。

图2表示的示意图所产生的结果在图3中描述。对应路由器输出接口的数值被填写在连接中。没有标明数值的连接填入0。注意,从网络到路由器的连接,其数值虽然总是0,但却有重要意义。还要注意,来源于外部的路由数据,在表中表现为存根。

连接状态数据库是由产生于路由器的LSA集合而成。结合图表,每一个单独的LSA表示一个相邻的路由器或传输网络。图4显示了这些LSA。路由器RT12与两个广播网络各有一个接口连接,还与另一主机通过SLIP连接。网络N9(译注:本小节中的N9,原文均为N6,但相信为笔误)是一个广播网络并有3台路由器接入,从网络N9到接入路由器的数值都是0。网络N9的LSA是由接入到该网络上的一台路由器来生成的,该路由器就是在网络上选举出的DR。

                                 **FROM**

                 |RT|RT|RT|RT|RT|RT|RT|RT|RT|RT|RT|RT|
                 |1 |2 |3 |4 |5        |6 |7 |8 |9 |10|11|12|N3|N6|N8|N9|
              ----- ---------------------------------------------
              RT1|  |  |  |  |  |  |  |  |  |  |  |  |0 |  |  |  |
              RT2|  |  |  |  |  |  |  |  |  |  |  |  |0 |  |  |  |
              RT3|  |  |  |  |  |6 |  |  |  |  |  |  |0 |  |  |  |
              RT4|  |  |  |  |8 |  |  |  |  |  |  |  |0 |  |  |  |
              RT5|  |  |  |8 |  |6 |6 |  |  |  |  |  |  |  |  |  |
              RT6|  |  |8 |  |7 |  |  |  |  |5 |  |  |  |  |  |  |
              RT7|  |  |  |  |6 |  |  |  |  |  |  |  |  |0 |  |  |
          *   RT8|  |  |  |  |  |  |  |  |  |  |  |  |  |0 |  |  |
          *   RT9|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |0 |
          T  RT10|  |  |  |  |  |7 |  |  |  |  |  |  |  |0 |0 |  |
          O  RT11|  |  |  |  |  |  |  |  |  |  |  |  |  |  |0 |0 |
          *  RT12|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |0 |
          *    N1|3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
               N2|  |3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
               N3|1 |1 |1 |1 |  |  |  |  |  |  |  |  |  |  |  |  |
               N4|  |  |2 |  |  |  |  |  |  |  |  |  |  |  |  |  |
               N6|  |  |  |  |  |  |1 |1 |  |1 |  |  |  |  |  |  |
               N7|  |  |  |  |  |  |  |4 |  |  |  |  |  |  |  |  |
               N8|  |  |  |  |  |  |  |  |  |3 |2 |  |  |  |  |  |
               N9|  |  |  |  |  |  |  |  |1 |  |1 |1 |  |  |  |  |
              N10|  |  |  |  |  |  |  |  |  |  |  |2 |  |  |  |  |
              N11|  |  |  |  |  |  |  |  |3 |  |  |  |  |  |  |  |
              N12|  |  |  |  |8 |  |2 |  |  |  |  |  |  |  |  |  |
              N13|  |  |  |  |8 |  |  |  |  |  |  |  |  |  |  |  |
              N14|  |  |  |  |8 |  |  |  |  |  |  |  |  |  |  |  |
              N15|  |  |  |  |  |  |9 |  |  |  |  |  |  |  |  |  |
               H1|  |  |  |  |  |  |  |  |  |  |  |10|  |  |  |  |

图3:连接图结果

                     **FROM**                          **FROM**
                  |RT12|N9|N10|H1|                 |RT9|RT11|RT12|N9|
           *  --------------------          *  ----------------------
           *  RT12|    |  |   |  |          *   RT9|   |    |    |0 |
           T    N9|1   |  |   |  |          T  RT11|   |    |    |0 |
           O   N10|2   |  |   |  |          O  RT12|   |    |    |0 |
           *    H1|10  |  |   |  |          *    N9|   |    |    |  |
           *                                *
               RT12的路由器LSA                 N9的网络LSA

图4:单独的连接状态构成

2.2.  最短路径树

当不在OSPF中配置区域的时候,AS中每一台路由器都有着相同的连接状态数据库,并使用相同的图表表示。每台路由器根据图表,构建出一棵以其自身为树根的最短路径树,并生成路由表。显然,最短路径树是由路由器来计算的。例子中路由器RT6的最短路径树在图5中描述。

                                RT6(起点)
                    RT5 o------------o-----------o Ib
                       /|\    6      |\     7
                     8/8|8\          | \
                     /  |  \        6|  \
                    o   |   o        |   \7
                   N12  o  N14       |    \
                       N13        2  |     \
                            N4 o-----o RT3  \
                                    /        \   5
                                  1/     RT10 o-------o Ia
                                  /           |\
                       RT4 o-----o N3        3| \1
                                /|            |  \ N6      RT7
                               / |         N8 o   o---------o
                              /  |            |   |        /|
                         RT2 o   o RT1        |   |      2/ |9
                            /    |            |   |RT8   /  |
                           /3    |3      RT11 o   o     o   o
                          /      |            |   |    N12 N15
                      N2 o       o N1        1|   |4
                                              |   |
                                           N9 o   o N7
                                             /|
                                            / |
                        N11      RT9       /  |RT12
                         o--------o-------o   o--------o H1
                              3               |   10
                                              |2
                                              |
                                              o N10

图5:路由器RT6的最短路径树

没有列出数值的连接标记,其数值为0(网络到路由器的连接)。路由器使用外部信息到达网络N12-N15,这在第2.3节中描述。

最短路径树给出了到达任何目标网络或主机的完整路径。虽然在转发过程中,只使用通向目标的下一跳。注意,也同时计算到达任何路由器的最佳路径。为了处理外部数据,我们标注了到达这些宣告外部路由的路由器的下一跳和距离值。路由器RT6计算后的路由表在表2中描述。注意,各有一条路径到达有编号点对点网络的两端(本例中是路由器RT6与RT10之间的串行线)。

在图5中,从路由器到属于其他AS的网络(如N12)的连接使用虚线(译注:实际图中没有分别)。在下一节中考虑,如何使用外部信息。

                   目标          下一跳      距离
                   __________________________________
                   N1            RT3         10
                   N2            RT3         10
                   N3            RT3         7
                   N4            RT3         8
                   Ib            *           7
                   Ia            RT10        12
                   N6            RT10        8
                   N7            RT10        12
                   N8            RT10        10
                   N9            RT10        11
                   N10           RT10        13
                   N11           RT10        14
                   H1            RT10        21
                   __________________________________
                   RT5           RT5         6
                   RT7           RT10        8

表2:路由器RT6路由表,本地路由部分

2.3.  使用外部路由信息

当产生最短路径树后,开始解释外部路由信息。外部路由信息可以是由其他诸如BGP的路由协议所产生的,或是被静态配置的(静态路由)。默认路径也可以被看作是AS外部路由信息的一部分。

外部路由信息将不作修改地在整个AS中被洪泛。本例中,AS中的所有路由器都知道RT7有两条外部路径,其距离分别为2和9。       

OSPF支持两种类型的外部距离。类型1被解释为与OSPF接口值(也就是连接状态中的距离值)使用同样的计量单位。类型2使用在更大层次上,类型2的距离被认为大于任何AS内部的路径距离。在使用外部距离类型2时假设:在路由一个数据包时,其距离主要用于AS之间的路径,并消除了将外部距离转换为连接状态数值的必要。

作为一个处理外部距离类型1的例子,假设图2中的RT5和RT7都宣告类型1的距离。对于路由器RT6来说,到达每一条被宣告的外部路径的距离值,等于所宣告的外部路径距离加上RT6到达宣告路由器的距离值。当有两台路由器宣告同一条外部路径时,RT6选择总值最小的宣告路由器。并将到达该外部路径的下一跳设定为到达所选择宣告路由器的下一跳。

在图2中,RT5和RT7都宣告了外部路径:网络N12。对RT6来说,会首选RT7,因为从RT7到达N12的距离是10(8+2),要比RT5的14(6+8)小。表3显示了加上外部路由的路由表。

                   目标          下一跳      距离
                   __________________________________
                   N12           RT10        10
                   N13           RT5         14
                   N14           RT5         14
                   N15           RT10        17

表3:路由器RT6路由表,外部路由部分

处理外部距离类型2要简单些。将选择ASBR所宣告的较小距离,而不管到达ASBR的内部距离。假设例子中的RT5和RT7宣告类型2的距离。所有通往网络N12的流量都将由RT7转发,因为2 < 8。当有多条等值的类型2路径存在时,将比较AS内部到达宣告路由器的距离来作出选择。

在一个AS中,类型1和类型2的外部距离可以同时存在。这时,类型1将始终被优先选择。

本节中假设,通往外部目标的数据包始终通过ASBR来转发,而事实不尽如此。例如,假设图2中的N6上还接入了一台路由器RTX。RTX不参与OSPF路由,但与ASBR RT7交换BGP信息。这样RT7将无法宣告需通过RTX转发的目标为OSPF外部路径。这些数据包将首先被转发到RT7(宣告路由器),从而增加了额外的一跳。

为了解决这个问题,OSPF协议允许ASBR在AS-external-LSA中增加“转发地址/forward address”。在上面的例子中,为使需要的数据包被直接转发到RTX,RT7将RTX的IP地址填入那些路径的“转发地址”中。

“转发地址”还有另一个应用。能够使AS内部的路由器作为一台“路由服务器/route server”。例如,图2中的RT6可以成为路由服务器,通过静态配置和外部路由协议收集外部路由信息。RT6通过宣告自己为ASBR,生成一系列AS-external-LSA。RT6使用LSA中的“转发地址”为目标设定正确的AS出口点。

2.4.  等值多路径

上面的描述都简化为到达任何目标时,都只考虑一条路径。事实上,当有多条等值路径到达一个目标时,这些路径都会被发现并使用。这不需要修改算法的概念,在下面讨论树生成过程时,我们会再仔细研究。

当存在等值多路径时,路由器会有到达指定目标的多个可用下一跳。
3.  将自制系统划分为区域

在OSPF中允许将一系列连续的网络和主机组合在一起。这样的组合,以及至少有一个接口接入这些网络的路由器,称为区域/area。每个区域独立地运行一套连接状态路由算法。正如在前面所解释的,这意味着每个区域有其自己的连接状态数据库和相应的图表。

区域内的拓扑结构对于区域外来说是不可见的。反过来,在给定区域内的路由器也不知道区域外的拓扑细节。这种隔绝与将整个AS作为单一的连接状态域相比,可以使协议极大地减少路由流量。

随着区域的引入,AS中的路由器不再有完全相同的连接状态数据库。事实上路由器为它所连接的每个区域建立单独的连接状态数据库。(连接多个区域的路由器被称为区域边界路由器(ABR))。两台属于同一区域的路由器,为该区域建立完全相同的区域连接状态数据库。

在AS内部的转发有两个层次,取决于数据包的源及目标地址是在同一个区域内(使用区域内路由/intra-area routing),或者不同的区域间(使用区域间路由/ inter-area routing)。在使用区域内路由时,数据包仅根据从该区域内得到的信息来转发,而不使用从区域外得到的信息。这可以保护区域内路由,避免错误路由信息。在第3.2节中讨论区域间路由。

3.1.  自制系统的骨干区域

OSPF的骨干区域是OSPF的特殊区域0(由于OSPF的区域号是按IP地址的格式,所以经常被写为区域0.0.0.0)。OSPF骨干区域始终包含所有的ABR。骨干区域负责发布其他区域之间的路由信息。骨干区域必须是连续的,虽然不一定是物理上连续。骨干区域的连续性可以通过配置虚拟通道/virtual link来建立和维持。

虚拟通道可以在任何两台拥有同一非骨干区域接口的骨干路由器之间建立。虚拟通道属于骨干区域。协议将通过虚拟通道所连接的两台路由器,视为通过骨干区域内的无编号点对点网络连接。在骨干区域的图表中,这样两台路由器通过数值上等于路由器之间区域内距离的标记连接。在虚拟通道内的路由协议流量只包含区域内路由。

3.2.  区域间路由

当数据包在两个非骨干区域之间转发时,使用骨干区域。数据包所经过的路径可以被分为三段连续的过程:从源到ABR的区域内路径;从源区域到目标区域的骨干路径;到达目标的另一个区域内路径。算法用来发现拥有最小距离值的路径。

换一个角度看,区域间路由可以被理解为一个星形配置的AS,骨干区域是中心,每个非骨干区域是分支。

骨干区域的拓扑结构决定了区域间的骨干路径。骨干区域的拓扑结构可以通过增加虚拟通道来增强。这可以使系统管理员控制区域间流量。

选择恰当的ABR作为离开源区域出口的方法,与选择宣告外部路径的路由器的方法完全相同。区域内的每个ABR计算到达区域外所有网络的距离。在计算了本区域的最短路径树以后,路由器到达外部目标的距离值等于该数值加上到达ABR所需的距离。

3.3.  路由器的分类

在引入区域之前,路由器的唯一特殊功能是宣告外部路由信息,如图2中的路由器RT5。当把AS划分为OSPF区域以后,根据功能,可以将路由器进一步分为以下功能重叠的四类:

内部路由器/Internal routers(IR):
路由器所直接连接的网络都属于同一个区域。这些路由器只运行路由算法的一个副本。

区域边界路由器/Area border routers(ABR):
接入多个区域的路由器。ABR运行路由算法的多个副本,每个接入的区域一个。ABR将所接入区域的拓扑信息汇聚后发布到骨干区域。骨干区域再将这些信息发布到其他区域。

骨干路由器/Backbone routers:
有至少一个接口在骨干区域的路由器。这包括所有接入多个区域的路由器(即ABR)。但骨干路由器不一定是ABR,所有接口都在骨干区域的路由器也是骨干路由器。

自制系统边界路由器/AS boundary routers(ASBR):
与属于其他AS的路由器交换路由信息的路由器。这样的路由器在AS内宣告AS外部路由信息。到达各台ASBR的路径要被AS中的每台路由器所知晓。该分类与前面的分类完全独立:ASBR可能是内部路由器或ABR,也可能在或可能不在骨干区域中。

3.4.  一个简单区域配置

图6显示了一个简单的区域配置。第一个区域包含网络N1-N4,以及接入的路由器RT1-RT4。第二个区域包括网络N6-N8,以及接入的路由器RT7、RT8、RT10和RT11。第三个区域包括网络N9-N11和主机H1,以及接入的路由器RT9、RT11和RT12。第三个区域中的配置把N9-N11和H1对外宣告为一条单一路径(其细节见第3.5节)。

在图6中,路由器RT1、RT2、RT5、RT6、RT8、RT9和RT12是IR。路由器RT3、RT4、RT7、RT10和RT11是ABR。如前所述路由器RT5和RT7是ASBR。

图7显示了区域1连接状态数据库的结果。此图完整地描述了区域内路由。也显示了内部路由器RT1和RT2对整个网络的理解。ABR RT3和RT4的工作,就是将所有外部目标到本区域的路径距离,向区域1内宣告。这些在图7中表示为虚线存根路径(译注:实际图中没有分别)。同时,RT3和RT4必须向区域1内宣告ASBR RT5和RT7的位置。最后,由RT5和RT7产生的AS-external-LSA被洪泛到整个AS中,包括区域1。这些描述了到达网络N12-N15路径的LSA,被包含在区域1的数据库中。

路由器RT3和RT4必须将区域1的拓扑结构汇总,并发布到骨干区域中。这些骨干LSA在表4中显示,这些信息概要的显示了区域1中所包含的网络(即网络N1-N4),以及分别从RT3和RT4到达这些网络的距离。

骨干区域的连接状态数据库在图8中显示。其中显示的路由器是骨干路由器。路由器RT11因为属于两个区域而成为骨干路由器。为了使骨干区域连续,在RT10与RT11之间配置了一条虚拟通道。

            ...........................
             .   +                     .
             .   | 3+---+              .      N12      N14
             . N1|--|RT1|\ 1           .        \ N13 /
             .   |  +---+ \            .        8\ |8/8
             .   +         \ ____      .          \|/
             .              /    \   1+---+8    8+---+6
             .             *  N3  *---|RT4|------|RT5|--------+
             .              \____/    +---+      +---+        |
             .    +         /      \   .           |7         |
             .    | 3+---+ /        \  .           |          |
             .  N2|--|RT2|/1        1\ .           |6         |
             .    |  +---+            +---+8    6+---+        |
             .    +                   |RT3|------|RT6|        |
             .                        +---+      +---+        |
             .                      2/ .         Ia|7         |
             .                      /  .           |          |
             .             +---------+ .           |          |
             .区域 1           N4      .           |          |
             ...........................           |          |
          ..........................               |          |
          .            N11         .               |          |
          .        +---------+     .               |          |
          .             |          .               |          |    N12
          .             |3         .             Ib|5         |6 2/
          .           +---+        .             +----+     +---+/
          .           |RT9|        .    .........|RT10|.....|RT7|---N15.
          .           +---+        .    .        +----+     +---+ 9    .
          .             |1         .    .    +  /3    1\      |1       .
          .            _|__        .    .    | /        \   __|_       .
          .           /    \      1+----+2   |/          \ /    \      .
          .          *  N9  *------|RT11|----|            *  N6  *     .
          .           \____/       +----+    |             \____/      .
          .             |          .    .    |                |        .
          .             |1         .    .    +                |1       .
          .  +--+   10+----+       .    .   N8              +---+      .
          .  |H1|-----|RT12|       .    .                   |RT8|      .
          .  +--+SLIP +----+       .    .                   +---+      .
          .             |2         .    .                     |4       .
          .             |          .    .                     |        .
          .        +---------+     .    .                 +--------+   .
          .            N10         .    .                     N7       .
          .                        .    .区域 2                        .
          .区域 3                  .    ................................
          ..........................

图6:一个简单的OSPF区域配置

                   网络        RT3宣告    RT4宣告
                   __________________________________
                   N1          4          4
                   N2          4          4
                   N3          1          1
                   N4          2          3

表4:路由器RT3和RT4向骨干区域所宣告的网络

                               **FROM**

                          |RT|RT|RT|RT|RT|RT|
                          |1 |2 |3 |4 |5 |7 |N3|
                       ----- -------------------
                       RT1|  |  |  |  |  |  |0 |
                       RT2|  |  |  |  |  |  |0 |
                       RT3|  |  |  |  |  |  |0 |
                   *   RT4|  |  |  |  |  |  |0 |
                   *   RT5|  |  |14|8 |  |  |  |
                   T   RT7|  |  |20|14|  |  |  |
                   O    N1|3 |  |  |  |  |  |  |
                   *    N2|  |3 |  |  |  |  |  |
                   *    N3|1 |1 |1 |1 |  |  |  |
                        N4|  |  |2 |  |  |  |  |
                     Ia,Ib|  |  |20|27|  |  |  |
                        N6|  |  |16|15|  |  |  |
                        N7|  |  |20|19|  |  |  |
                        N8|  |  |18|18|  |  |  |
                 N9-N11,H1|  |  |29|36|  |  |  |
                       N12|  |  |  |  |8 |2 |  |
                       N13|  |  |  |  |8 |  |  |
                       N14|  |  |  |  |8 |  |  |
                       N15|  |  |  |  |  |9 |  |

图7:区域1的数据库

                                  **FROM**

                            |RT|RT|RT|RT|RT|RT|RT
                            |3 |4 |5 |6 |7 |10|11|
                         ------------------------
                         RT3|  |  |  |6 |  |  |  |
                         RT4|  |  |8 |  |  |  |  |
                         RT5|  |8 |  |6 |6 |  |  |
                         RT6|8 |  |7 |  |  |5 |  |
                         RT7|  |  |6 |  |  |  |  |
                     *  RT10|  |  |  |7 |  |  |2 |
                     *  RT11|  |  |  |  |  |3 |  |
                     T    N1|4 |4 |  |  |  |  |  |
                     O    N2|4 |4 |  |  |  |  |  |
                     *    N3|1 |1 |  |  |  |  |  |
                     *    N4|2 |3 |  |  |  |  |  |
                          Ia|  |  |  |  |  |5 |  |
                          Ib|  |  |  |7 |  |  |  |
                          N6|  |  |  |  |1 |1 |3 |
                          N7|  |  |  |  |5 |5 |7 |
                          N8|  |  |  |  |4 |3 |2 |
                   N9-N11,H1|  |  |  |  |  |  |11|
                         N12|  |  |8 |  |2 |  |  |
                         N13|  |  |8 |  |  |  |  |
                         N14|  |  |8 |  |  |  |  |
                         N15|  |  |  |  |9 |  |  |

图8:骨干数据库

ABR RT3、RT4、RT7、RT10和RT11将其所接入的非骨干区域的信息汇聚后,通过骨干区域发布;这些在图8中表示为虚线存根路径(译注:实际图中没有分别)。其中第三个区域的配置将网络N9-N11和主机H1精简为一条路径。所以网络N9-N11和主机H1在图8中表示为一行。路由器RT5和RT7是ASBR,来源于外部的信息在图8中表示为存根。

ABR通过骨干区域交换汇总信息。每个ABR从其他ABR获得区域汇总。并通过检查所收集到的LSA来获取区域外网络距离的描述,并加上到达各自宣告路由器的骨干距离。

再次以路由器RT3和RT4为例子,处理过程如下:首先计算骨干区域的最短距离优先树。这给出了到达其他所有ABR的距离。同时注意到达网络(Ia和Ib)和ASBR(RT5和RT7)的距离也属于骨干区域。计算的结果在表5中。

然后,通过查看从ABR获取的区域汇总,RT3和RT4可以决定到达所有区域外网络的距离。这些距离可以由RT3和RT4向区域内宣告。RT3和RT4向区域1内宣告的信息在表6中显示。注意,表6假设在骨干区域的配置中,Ia和Ib被组合进一个LSA中。

这些由RT3和RT4输入到区域1中的信息,可以使IR,如RT1,灵活的选择ABR。路由器RT1将使用RT4到达网络N6、使用RT3到达网络N10、并使用两台路由器作负载均衡来到达网络N8。

                              从RT3的距离 从RT4的距离
                   __________________________________
                   to  RT3    *            21
                   to  RT4    22           *
                   to  RT7    20           14
                   to  RT10   15           22
                   to  RT11   18           25
                   __________________________________
                   to  Ia     20           27
                   to  Ib     15           22
                   __________________________________
                   to  RT5    14           8
                   to  RT7    20           14

表5:路由器RT3和RT4计算的骨干区域距离

                   目标          RT3的宣告 RT4的宣告
                   _________________________________
                   Ia,Ib         20         27
                   N6            16         15
                   N7            20         19
                   N8            18         18
                   N9-N11,H1     29         36
                   _________________________________
                   RT5           14         8
                   RT7           20         14

表6:路由器RT3和RT4向区域1宣告的距离

路由器RT1可以同样获取到达ASBR RT5和RT7的最短路径,并查看RT5和RT7的AS-external-LSA。路由器RT1可以决定使用RT5或RT7以到达另一个AS中的目标(网络N12-N15)。

注意,当路由器RT6和RT10之间的链路失效时,将使骨干区域变为不连续。在路由器RT7和RT10之间建立一条虚拟通道,可以提高骨干区域的连通性,以进一步抵御此类错误。

3.5.  IP子网化支持

在每条宣告的路径上,OSPF都有相关的IP地址掩码。掩码说明了特定路径所描述的地址范围。如一条指向目标128.185.0.0的Summary-LSA,使用掩码0xffff0000,就描述了一条到达目标128.185.0.0到128.185.255.255的路径。同样,在宣告主机路径时,始终使用0xffffffff为掩码,表示只存在单一的目标。

在宣告每条路径时包含掩码,可以实现变长子网。这意味着一个IP的A、B或C类网络可以被分为多个不同大小的子网。例如,网络128.185.0.0可以被分为62个不同大小的子网:15个大小为4k的子网、15个大小为256的子网、和32个大小为8的子网。表7显示了这些地址和子网划分的结果。

                  网络地址          IP 地址掩码       子网大小
                  _______________________________________________
                  128.185.16.0      0xfffff000        4K
                  128.185.1.0       0xffffff00        256
                  128.185.0.8       0xfffffff8        8

表7:一个子网大小的例子

有很多方法,可以将A、B或C类网络划分为变长子网。对这些做法的精确描述超出了本规范的范围。本规范所需要的是建立如下的方法:当转发IP数据包时,始终转发到与数据包目标地址最佳匹配的网络。这里的最佳匹配与最长匹配同义。例如,默认路径使用目标地址0.0.0.0和掩码0x00000000,始终匹配任何IP目标,但也始终比其他匹配要差。子网掩码在匹配任何IP目标时不能有任何歧义。

在每条路径中加入地址掩码同样可以支持IP超网。例如可以设定地址、掩码对[192.9.4.0,0xfffffc00]到一个物理网络。这样一个IP网络可以包含从192.9.4.0到192.9.7.0四个连续的C类网络地址。这样的地址,随着CIDR(见[引用10])的使用而变得普遍。

为了在区域边界上更好得汇聚,可以使用区域地址范围(细节见附录C.2)。每个地址范围被定义为[地址、掩码]对。就象子网化了的网络包含了很多子网一样,一个地址范围中可以包含很多独立的网络。ABR通过为每个地址范围宣告一条路径,来汇总区域中的内容(并向骨干区域发布)。汇总路径的距离值为该范围所包含网络距离值中的最大值。

例如:一个子网化的IP网络被配置为一个OSPF区域。这时,就可以单独配置一个地址范围加上其原始的IP掩码。而在区域内,可以定义任何可变大小的子网。通过向区域外发布整个网络的单一路径,而彻底隐藏了划分子网的情况。这条路径的距离值等于这些子网中,一系列路径距离的最大值。

3.6.  支持存根区域

在某些AS中,连接状态数据库中主要包含的是AS-external-LSA。一般情况下,OSPF将AS-external-LSA洪泛到整个AS中。但OSPF允许将一些区域配置为“存根区域/stub area”, AS-external-LSA将不被洪泛进这些区域。默认时,将以区域为单位,向AS外的目标转发数据。这减少了存根区域内部路由器中连接状态数据库的大小,以及所需要的内存。

为了利用OSPF存根区域的优点,在存根区域内必须使用默认路径,并按如下说明来完成。存根区域中的一台或多台ABR通过Summary-LSA向存根区域内宣告一条默认路径。这条汇总的默认路径仅被洪泛进存根区域,而不是更远(这样作的理由是,这条默认路径只属于特定的存根区域)。当所到达的目标既不在区域内路径,也不在区域间路径的时候(即AS外部目标),使用这条汇总的默认路径。

当一个区域内只有单一出口,或者不需要按每条外部路径来选择离开区域的出口时,可以将其配置为存根区域。例如,图6中的区域3可以被配置为存根区域,因为所有的外部流量都必须通过唯一的ABR RT11。这时,RT11将向区域3内部宣告一条默认路径(通过一个Summary-LSA),而不是将网络N12-N15的AS-external-LSA洪泛进区域。

OSPF协议确信同一区域内的路由器,对于是否把该区域配置为存根区域达成一致。这将保证在洪泛AS-external-LSA时,不出现混淆。

使用存根区域也有些限制。在存根区域中不能配置有虚拟通道;ASBR也不能存在于存根区域中。

3.7.  区域的划分

OSPF并不试图修复分隔的区域。当一个区域被分隔后,每个部分就成为一个独立的区域,这两部分间的数据转发将通过骨干区域。原来的一些区域内路径将会变为区域间路径。

为了保证区域被分隔后,还能保持完整的路由,同一个地址范围就不能出现在区域的多个部分中;同样骨干区域不能被分隔。不然,AS中的一部分网络就会变为不可到达。骨干区域的分隔可以通过配置虚拟通道来修复(见第15章)。

通过查看第2章的AS图表,可以换一个角度来理解区域分隔。区域号被视作图表中连接标记[脚注1]的颜色。图表中的每个标记用来连接网络,或代表点对点网络。标记的颜色表示网络的区域号。

一组同样颜色的标记,以及其相连接的节点表示为一个区域。如果AS的拓扑结构完整,图表中就会有多种颜色的部分,每个不同的区域号用一种颜色表示。

当AS的拓扑改变后,一个区域被分隔。AS图表中就会有多个部分拥有同样的颜色(同样的区域号)。只要这些部分连接到同一个骨干区域上,AS仍将正常工作。
4.  功能摘要

OSPF算法为每个区域运行独立的副本。在多个区域拥有接口的路由器运行算法的多个副本。下面描述路由算法的简明摘要。

路由器启动时,首先初始化路由协议的数据结构。然后等待下层协议提示接口可以开始工作。

然后路由器使用OSPF的Hello协议来探知邻居。路由器向其邻居发送Hello包,并等待接收邻居发送的Hello包。在广播和点对点网络上,路由器通过向多播地址AllSPFRouters发送自己的Hello包来动态的探知邻居路由器。在非广播网络上,需要一些其他的配置信息来发现邻居。在广播和NBMA网络上,Hello协议还被用来选择网络中的DR。

路由器试图与新探知的邻居建立邻接/adjacencies关系。在邻接路由器之间,连接状态数据库是同步的。在广播和NBMA网络上,哪些路由器需要形成邻接是由DR来决定的。

邻接控制路由信息地发布,只有在邻接路由器之间才会发送、接收路由更新。

路由器周期性的宣告其状态:即连接状态。在路由器状态改变时也会宣告连接状态。在其LSA中会包含相邻接的路由器。邻接和连接状态的关系,使协议能够通过时间周期来探知失效的路由器。

LSA在整个区域中被洪泛。洪泛算法是可靠的,以确保区域中所有的路由器拥有完全相同的连接状态数据库。数据库中包含了区域中每个由路由器生成的LSA。从这个数据库,每台路由器构建出以自己为树根的最短路径树。再由最短路径树计算出协议的路由表。

4.1.  区域间路由

前一节描述了协议在单一区域中的操作。对于区域内路由,不再需要其他信息。为了能够到达区域外的目标,ABR需要把额外的路由信息向区域内发布。这些额外的信息是AS中其他部分拓扑结构的汇总。

汇聚过程按如下步骤完成:按定义每台ABR都是连接到骨干区域的。每台ABR将其非骨干区域内的拓扑结构汇总后,发往骨干区域,从而到达其他所有的ABR。这样ABR就有了骨干区域的完整拓扑信息和从其他ABR获得的区域汇总,并从这些信息计算出到达所有区域间目标的路径,再将这些路径向区域内宣告。这使区域内部的路由器可以选择最佳的出口路由器来转发区域间的流量。

4.2.  自制系统外部路由

了解其他AS信息的路由器,可以将这些信息洪泛进整个AS中。这些外部路由信息被逐个发布到每台参与的路由器。一个例外是:外部路由信息不被洪泛进存根区域(见第3.6节)。

为了使用外部路由信息,整个AS(除了存根区域内)中的路由器,都需要知道到达宣告外部信息路由器的路径。因此,ASBR的位置要由非存根的ABR来汇总。

4.3.  路由协议包

OSPF协议直接基于IP,使用IP协议号89。OSPF没有明确的提供分片/组装功能。当需要分片时,直接使用IP分片/组装。在OSPF协议中,按照设计较大的数据包可以被分割为较小的数据包,并推荐使用这种方法;应当竟可能地避免IP分片。

路由协议包应当始终将IP TOS域中设定为0。如果可能,在发送和接收的时候,路由协议包的优先级应当高于正常的IP数据。为实现这一点,OSPF协议包的IP优先级域应当被设置为Internet Control(见[引用5])。

所有的OSPF协议包使用相同的协议头部,协议头部在附录A中描述。OSPF包的类型在表8中列出,其格式同样在附录A中描述。

             类型   数据包名称                                协议功能
             ______________________________________________________________
             1      Hello                                     发现/维持邻居关系
             2      数据库描述/Database Description(DD)     数据库内容汇总
             3      连接状态请求/Link State Request(LSR)    数据库下载
             4      连接状态更新/Link State Update(LSU)     数据库更新
             5      连接状态确认/Link State Ack(LSAck)      洪泛确认

表8:OSPF数据包类型

OSPF的Hello协议使用Hello包来发现和维持邻居关系。DD包和LSR包用来形成邻接。OSPF的可靠更新机制是由LSU包和LSAck包来实现的。

每个LSU包中包括一系列新的LSA,并将其发送到距离其起源更远的一跳。一个LSU包中可以包括有多个路由器产生的LSA。每个LSA由其生成路由器的标识来识别,并对其内容生成校验和。每个LSA同样有一个类型域;不同类型的LSA在下面的表9中列出。

        LSA类型  LSA名称           LSA 描述
        ______________________________________________________________________________
        1        Router-LSA         由所有路由器产生。该LSA表述了在路由器在一个区域内所有接口的状态。仅在一个区域内洪泛。
        ______________________________________________________________________________
        2        Network-LSA        由广播或NBMA网络中的指定路由器产生。该LSA包含了接入该网络的路由器列表。仅在一个区域内洪泛。
        ______________________________________________________________________________
        3,4      Summary-LSA        由ABR产生,并在与该LSA相关联的区域内洪泛。每条Summary-LSA描述了一条在区域外,但在AS内的路径(区域间路径)。 类型3描述到达网络的路径。类型4描述到达ASBR的路径。
        ______________________________________________________________________________
        5        AS-external-LSA    由ASBR产生,并在整个AS内洪泛。每条AS-external-LSA描述了另一AS中的一条路径。AS的默认路径也可被描述为AS-external-LSA。

表9:OSPF连接状态宣告(LSA)

OSPF路由协议包(除了Hello包外)都只在邻接路由器之间传送。这意味着除了虚拟邻接外,所有的OSPF协议包都只在IP网络中传播一跳。OSPF协议包的源地址是邻接一端的路由器IP地址,目标地址是邻接另一端的IP地址或IP多播地址。

4.4.  基本实现的需求

要实现OSPF,需要系统支持以下一些内容。

记时器/Timers:
需要两种不同的记时器。第一种称为“单击记时器/single shot timers”,激活一次,并导致执行协议事件。第二种称为“间隔记时器/interval timers”,按持续的时间间隔激活。这常用于周期性的发送数据包,例如周期性的广播Hello包。这两种记时器的记时精度都为1秒。

单击记时器应当避免偏离/drift。在一些路由器上,处理数据包会影响记时器工作。当有多个使用广播的路由器接入同一网络时,会导致路由包的同步(这应当被避免)。如果不能保证避免偏离,每次激活记时器时,应当加上或减去一小段随机时间。

IP多播/IP multicast:
一些OSPF包以IP多播的形式发送。所以需要通过适当的下层协议,来支持收发IP多播。OSPF传送的IP多播包决不超过一跳。因此,不需要转发IP多播的能力。关于IP多播的信息,见[引用7]。

变长子网支持/Variable-length subnet support:
路由器的IP协议必须有能力将一个A、B或C类的IP网络划分为多个不同大小子网。这常被称为变长子网,细节见第3.5节。

IP超网支持/IP supernetting support:
路由器的IP协议必须有能力将一系列连续的A、B或C类的IP网络汇聚为一个超网。超网被提出用来改善Internet上的IP路由。关于IP超网的更多细节见[引用10]。

下层协议支持/Lower-level protocol support:
这里说的下层协议是指网络接入协议,如以太网数据链路层。这些协议必须向OSPF发出信号,表示网络接口的通断。例如,知道以太网接口被拔下是个很重要的信号。

非广播下层协议支持/Non-broadcast lower-level protocol support:
在非广播网络中,当OSPF向一个失效或不存在的路由器发送包时,可以由Hello协议来提供标识。例如在X.25 PDN中,由于适当的原因或诊断会收到X.25 clear,以表示邻居失效,这样的信息应当被传送到OSPF。

列表处理简化/List manipulation primitives:
很多OSPF功能,是通过对LSA列表的处理来实现的。例如一系列LSA将被重传到邻接路由器,直至接收到确认。任一特定的LSA可能出现在多个列表中。实现OSPF需要维持这些列表,按照需要增删特定的LSA。

任务支持/Tasking        support
在本规范中的特定过程要调用其他的过程时,其他的过程要被及时执行,即在特定过程结束前被执行,这通过编写调用过程的指令来实现。而有的时候,其他过程要等特定过程结束后才能执行,这通过编写任务调度的指令来实现。

4.5.  OSPF可选项

OSPF协议定义了一些可选项。路由器在OSPF Hello包、DD包和自生成的LSA中标识出所支持的可选项。这使支持不同可选项的路由器能够在一个AS中共存。

有些选项必须被特定区域内所有的路由器所支持。这时,如果邻居的Hello包中没有报告这一项,路由器将不接受(即不匹配的选项将不能形成邻居关系)。如下面所说的ExternalRoutingCapability。

其他选项可以在数据库交换过程中协商。这通过在DD包中指定可选项来实现。如果邻居间的选项不匹配,将导致在这两个邻居间,只交换一部分的连接状态数据库。

是否存在可选项同样影响路由表的建立。由于可以在LSA中报告可选项,所以在生成最短路径树时,就不会选择不支持特定功能的路由器。

本备忘录中定义的OSPF可选项在后面被列出。细节见附录A.2。

ExternalRoutingCapability
整个OSPF区域可以被配置成为“存根”(见第3.6节)。不会将AS-external-LSA洪泛进存根区域。这在OSPF可选项中表现为E位(见附录A.2)。为确保存根区域的配置一致,区域中所有的路由器必须在Hello包中清除E位(见第9.5和10.5节)。
5.  协议数据结构

在此描述OSPF协议操作时所需要的多种协议数据结构。下面的列表包含了顶层的OSPF数据结构。并说明所有必须的初始化。与OSPF的区域、接口和邻居相关的数据结构在本规范的后面描述。

路由器标识/Router ID:
一个32位数,在AS中唯一的识别出一台路由器。一个可行的策略是使用该路由器接口上设定的最小IP地址。当路由器的OSPF路由器标识改变时,需要重新启动OSPF软件使新的路由器标识生效。在重新启动前,路由器应当将其自身产生的LSA从路由域中废止(见第14.1节),不然它们会一直存在至多MaxAge分钟。

区域结构/Area structures:
路由器为其接入的每个区域建立自己的数据结构。该数据结构在讲述基本OSPF算法时描述。每个区域各自运行基本OSPF算法的独立副本。

骨干区域结构/Backbone (area) structure:
OSPF骨干区域负责发布区域间路由信息。

虚拟通道配置/Virtual links configured:
在路由器上配置虚拟通道,使其成为一个端点。为了配置虚拟通道,路由器自身必须成为ABR。虚拟通道由另一端点(另一ABR)的路由器标识来识别。这两台路由器必须接入同一个区域,被称为虚拟通道传输区域。虚拟通道是骨干区域的一部分,就象在两台路由器之间有一个无编号点对点网络。虚拟通道使用传输区域的区域内路径来转发数据包。通过构建传输区域的最短路径树控制虚拟通道的通断。

外部路由器列表/List of external routes:
可以到达AS外部目标的路由器。可能是通过与其他路由协议(如BGP)的直接交互,或通过配置信息,或是两者的组合(例如OSPF使用配置了的距离来宣告外部动态信息)。任何拥有外部信息的路由器都被称为ASBR。外部路径由这些路由器通过AS-external-LSA向OSPF路由域内部宣告。

AS-external-LSA列表/List of AS-external-LSAs:
连接状态数据库的一部分,是由ASBR所生成。包含了到达AS外部目标的路径。注意,如果路由器本身为ASBR的话,其中一部分的AS-external-LSA是由其自身生成的。

路由表/The routing table:
来源于连接状态数据库。路由表中的每一项以目标为索引,包含了到达目标的距离值和用于转发到达该目标数据包的一系列路径。路径是按类型和下一跳来描述的。具体的细节见第11章。

图9显示了一台典型路由器所包含的数据结构。图中显示的路由器是图6中的RT10。注意,路由器RT10和RT11之间配置了一条虚拟通道,使用区域2作为传输区域,这在图9中表现为星号。当建立了区域2的最短路径树后,虚拟通道被开通,从而成为了骨干区域中的一个接口(在图9中,有两个接入骨干区域的接口)。

                              +----+
                              |RT10|------+
                              +----+       \+-------------+
                             /      \       |Routing Table|
                            /        \      +-------------+
                           /          \
              +------+    /            \    +--------+
              |Area 2|---+              +---|Backbone|
              +------+***********+          +--------+
             /        \           *        /          \
            /          \           *      /            \
       +---------+  +---------+    +------------+       +------------+
       |Interface|  |Interface|    |Virtual Link|       |Interface Ib|
       |  to N6  |  |  to N8  |    |   to RT11  |       +------------+
       +---------+  +---------+    +------------+             |
           /  \           |               |                   |
          /    \          |               |                   |
   +--------+ +--------+  |        +-------------+      +------------+
   |Neighbor| |Neighbor|  |        |Neighbor RT11|      |Neighbor RT6|
   |  RT8   | |  RT7   |  |        +-------------+      +------------+
   +--------+ +--------+  |
                          |
                     +-------------+
                     |Neighbor RT11|
                     +-------------+

图9:路由器RT10的数据结构
6.  区域数据结构

所有用于基本OSPF路由算法的信息都包含在区域数据结构中。每个区域维持着自己的连接状态数据库。每个网络只属于一个区域,每个路由器接口只连接一个区域,每对邻接路由器也属于同一区域。

OSPF骨干区域是一个特殊的OSPF区域,负责发布区域间路由信息。

区域的连接状态数据库包含了由本区域内路由器生成的一系列Router-LSA、Network-LSA和Summary-LSA。这些信息只在单一的区域内洪泛。AS-external-LSA列表(见第5章)也被认为是每个区域连接状态数据库的一部分。

区域标识/Area ID:
一个32位数以识别区域。区域标识0.0.0.0被保留用来表示骨干区域。

区域地址范围列表/List of area address ranges:
为了在区域边界汇总路由信息,需要使用区域地址范围。每个地址范围由一个[地址、掩码]对和一个表示是否宣告的状态组成。

相关路由器接口/Associated router interfaces:
路由器连接到区域的接口。每个路由器接口仅属于一个区域(包括骨干区域)。骨干区域的相关接口列表包含所有的虚拟通道。虚拟通道是由另一端的路由器标识来识别的,其距离值是这两台路由器在传输区域内的最短区域内路径。

Router-LSA列表/List of Router-LSAs:
Router-LSA是由区域中的每台路由器生成。它描述了该路由器在本区域内各接口的状态。

Network-LSA列表/List of Network-LSAs:
Network-LSA是为区域内每个广播和NBMA网络生成的。它描述了当前连接在该网络上的路由器集合。

Summary-LSA列表/List of Summary-LSAs:
Summary-LSA是由该区域的ABR生成。它描述了一条在本区域外,但在AS内的路径(即区域间路径)。

最短路径树/Shortest-path tree:
以路由器自身为树根的区域内最短路径树。以收集到的Router-LSA和Network-LSA,通过Dijkstra算法(见第16.1节)而构建得出。

TransitCapability:
此参数表示该区域是否能够传输既不是由本区域产生、也不是到达本区域的数据流量。该参数在生成区域最短路径树时使用(见第16.1节,当且仅当有一条或多条完全邻接的虚拟通道使用本区域作为传输区域时,TransitCapability被设为TRUE),还在生成路由表时作为输入参数(见第16.3节)。当一个区域的TransitCapability 被设为TRUE时,该区域也被称为“传输区域/transit area”。

ExternalRoutingCapability:
表示是否将AS-external-LSA洪泛进本区域。这是一个可配置的变量。如果AS-external-LSA被拒绝在区域外,该区域就是“存根”。在存根区域中,仅根据默认的汇总路径来判断到达AS外部的目标。骨干区域不能被配置为存根区域,同时在存根区域中不能配置虚拟通道。更多信息见第3.6节。

StubDefaultCost:
如果一台路由器被配置为存根区域的ABR,那么StubDefaultCost就说明了该路由器向区域内宣告的默认Summary-LSA的距离值。更多细节见第12.4.3节。

除非特别说明,本文的其他部分都是说明OSPF协议在一个区域内的操作。
7.  形成邻接

OSPF在邻居路由器之间形成邻接以交换路由信息。不是所有的邻居路由器之间都形成邻接。本章包含了产生邻接的一般性规则。更多细节参见第10章。

7.1.  Hello协议

Hello协议负责建立和维持邻居关系,它同时确保邻居间的通讯是双向的。Hello包从路由器的所有接口周期性地发出。双向通讯是指路由器发现其邻居的Hello包中包含了自己。在广播和NBMA网络上,Hello协议被用来为网络选举DR。

在广播网络、NBMA网络和点对多点网络上,Hello协议的工作不同。在广播网络上,每台路由器通过周期性地发送多播Hello包来宣告自身,这使得邻居能被动态探知。在这些Hello包中包含了自己所认为的DR和最近收到过Hello包的路由器列表。

在NBMA网络上,需要一些配置信息来使Hello协议运行。每台可能成为DR的路由器,都有接入该网络其他路由器的完整列表。每台可能成为DR的路由器,在第一次可以操作NBMA网络接口时,向其他可能成为DR的路由器发送Hello包,以试图在网络上找到DR。如果该路由器被选举为DR,它开始向接入该网络的其他所有路由器发送Hello包。

在点对多点网络上,路由器向所有能与它直接通讯的邻居发送Hello包。这些邻居可能使用诸如逆向ARP(见[引用14])的协议来动态探知,或通过静态配置而知。

当通过双向通讯发现邻居,且(在广播或NBMA网络上)选举了DR后,就要判断邻居间是否需要形成邻接(见第10.4节)。如果形成邻接,那么第一步就是同步邻居间的连接状态数据库。这在下一节阐述。

7.2.  数据库同步

对于连接状态路由算法,十分重要的一点是:在所有路由器之间保持连接状态数据库的同步。OSPF将其简化为保持邻接路由器之间的同步。同步过程在路由器之间试图形成邻接时开始。每台路由器通过向其邻居发送一系列DD包,来描述自身的数据库。每个DD包中包含了路由器数据库中的一组LSA。当邻居发现其中的LSA比自己数据库中的要新时,就记录下需要请求的LSA。

这种发送和接收DD包的过程被称为“数据库交换过程/Database Exchange Process”。在这个过程中,两台路由器形成主从关系。每个DD包都有一个序列号。主机发送描述包后,从机通过回应描述包的序列号来确认。在发送和回应包中都包含了连接状态数据的摘要。只有主机能够按照固定的时间间隔重传DD包,其长度是按接口配置的常量RxmtInterval。

每个DD包都通过一个标识--M(更多)位,来表示后面是否还有更多的包。当路由器收到并发出清除了M位的DD包后,表示数据库交换过程结束。

在数据库交换过程期间及完成后,每台路由器都有一个需要从邻居请求更新的LSA列表。在LSR包中发出对这些LSA的请求。没有被确认的LSR包,按固定间隔RxmtInterval重发。当数据库描述过程结束,并且所有的连接状态请求都得到确认时,数据库即被认为已经同步,邻居路由器也被标记为完全邻接。这时,可以实现邻接的所有功能,并在两台路由器的Router-LSA中宣告邻接。

从数据库交换过程开始,邻接就被用于洪泛过程。这简化了数据库同步,并保证可以在预计的时间内结束。

7.3.  指定路由器

在每个广播和NBMA网络上都有一台指定路由器(