欢 迎 光 临
's BLog
这就是我
最新公告
站点日历
最新日志
最新回复
最新留言
 日志搜索

友情链接
其他信息
·RFC2328 OSPF V2 中文版     -|ixp2xxx 发表于 2006/5/24 9:14:00
RFC2328 OSPF V2 中文版
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 的实现能够协同运作。
请将建议发往ospf@gated.cornell.edu
请将有关本文翻译的建议发往raymon@itpub.net
目录
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。
[阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志]

发表评论:

    昵称:
    密码:
    主页:
    标题: