作者 【美】Thomas M. Thomas II
OSPF网络设计解决方案(第2版)
本节描述 OSPF 操作环境的基本特点和特性,OSPF 操作和设计的特性及特点决定了OSPF所运行的环境。简单来说,OSPF的操作环境定义了协议能够正常运行所需的网络架构。
RFC 1793,“Extending OSPF to Support Demand Circuits”中为OSPF增加了在按需链路上运行的能力。在该RFC文档发表及应用之前,OSPF在诸如ISDN等按需链路上无法很好地运行。当前,通过必要的调整和改进,OSPF协议可以很好地运行在按需链路上,协议的功能环境由此得到了扩展。
记住以上对操作环境的解释例子,然后我们转而来关注OSPF能够识别的4种路由器类型和 4 种网络类型1。
2.5.1 OSPF路由器类型
OSPF 使用4种不同类型的路由器来构建分层路由结构。在这种分层结构中,每一台路由器都拥有相应的角色和一系列定义的特点。图2-9描绘了一个典型的OSPF网络,不同区域中包含了不同类型的OSPF路由器。
下面的小节将对4种类型的OSPF路由器进行简要描述。
1.内部路由器
内部路由器(IR)直连的所有网络都属于相同的 OSPF 区域。这种类型的路由器只有一份链路状态数据库,因为它只属于一个区域。
2.区域边界路由器
区域边界路由器(ABR)连接多个 OSPF 区域,且 OSPF 网络中可以存在多台 ABR。正是由于 ABR 连接了多个区域,因此它拥有多份链路状态数据库的实例。ABR将每个区域的数据库进行汇总,然后转发至骨干区域以便分发到其他区域。
如果路由器位于 OSPF 区域的边界,并负责将这些区域连接到骨干网络,那么这些路由器被称为ABR。ABR既属于骨干区域,同时也属于所连接的区域。另外,ABR 需要维护描述骨干区域和其他区域拓扑的多份链路状态数据库。ABR必须和骨干区域相连,并发送汇总LSA给骨干区域。
3.自治系统边界路由器
自治系统边界路由器(ASBR)连接多个 AS,并和其他 AS 内的路由器交换路由信息。ASBR 负责把通过交互学到的外部路由信息通告给它所连接的AS。同一个AS 内的每一台路由器都知道如何到达所在AS的ASBR。ASBR 可能同时运行了OSPF和其他路由协议,如RIP或BGP。另外,ASBR必须位于OSPF的非末节区域。
提示
在Cisco路由器上,可能经常需要使用redistribute命令在两个路由协议之间进行重分发。另外,BGP协议还可以承载多个自治系统。想要获取关于BGP协议的额外信息及操作方法,请参考Sam Halabi 所著的Internet Routing Architectures,Second Edition。
ASBR负责处理外部路由。把路由器配置成ASBR,或者说在OSPF中激活ASBR 的一种方法是,在 OSPF 的路由进程配置模式下添加 redistribute static或redistribute connected命令。
4.骨干路由器
所有接口都连接在骨干区域内的路由器被称为骨干路由器(BR)。BR没有连接到其他OSPF区域的接口;否则,这种路由器应该被称为ABR。
2.5.2 OSPF网络类型
图2-10描绘了OSPF所支持的4种不同的网络类型。
下面的列表解释了图2-10所描绘的OSPF 不同网络类型的特点。
广播——使用诸如以太网或FDDI等广播介质连接多台OSPF路由器的网络类型。在这种网络类型中,路由器交互OSPF Hello包建立邻居关系,选举指定路由器(DR)和备份指定路由器(BDR),并与DR及BDR形成邻接。
注意
下一节将详细阐述OSPF邻居关系、邻接以及DR的概念。
非广播多路访问(NBMA)——NBMA网络默认不支持传输广播流量,例如帧中继、ATM或X.25网络。在NBMA网络中,路由器之间可能需要建立多条邻接关系,但是由于网络介质不支持广播的发送,因此无法保证路由器建立正确的交互。
点到多点——配置 NBMA 网络的一种办法是允许 OSPF 将其看作多条点到点连接的网络集合,即点到多点网络类型。这种网络类型中不存在DR或BDR,因为每一条链路都被视为点到点链路。
点到点——使用一条链路连接两台OSPF路由器的网络,仅需建立一对邻居关系。这种网络类型的例子可以是运行了点到点协议(PPP)或高级数据链路控制(HDLC)的串行链路。点到点网络类型同样不选举DR或BDR。
OSPF网络类型的配置是在路由器接口下完成的,如例2-3所示。
2.5.3 路由器ID
网络内每一台运行OSPF的路由器都必须拥有一个唯一的路由器ID(RID)。该标识的长度为32个比特,用于AS内OSPF路由器之间的区分。OSPF的链路状态数据库(LSDB)使用RID 对AS内每一台路由器进行跟踪并关联各条链路。
对于每台OSPF路由器而言,其标识必须是唯一的。你可以使用一些规则来确定路由器所使用的OSPF RID。
为了确定RID,OSPF遵循下面的选择步骤。
步骤1 使用手动配置的router-id命令所指定的RID,如果未配置,转至步骤2。
步骤2 使用最高loopback接口IP地址。如果只使用了一个loopback接口,那么直接选择该loopback接口的IP地址。如果路由器未配置loopback接口,转至步骤3。
步骤3 选择路由器活动接口中的最高IP地址作为RID,即使该接口未启用OSPF。
在Cisco路由器上配置一个loopback地址作为OSPF的RID,比使用路由器上物理接口的最高IP地址要稳定得多。因为loopback地址不会在路由表更新过程中出现down状态或者丢失连通性。loopback接口本质上是一种基于软件的接口,可以被用于各种目的,如汇总 IP 地址范围、故障排除等。只要loopback地址在被通告的IP地址范围内,那么该地址便可达。
提示
当为loopback接口配置IP地址时,尽量使用公有地址空间中的“真实”IP地址。当然,你也可以使用未注册的或私有IP地址。如果使用私有地址空间的话,此时loopback接口的IP地址实际上不在当前网络所使用的IP地址范围内(如果网络使用公网地址空间的话),而是一个编造的IP地址。如果确定使用这种方式,你可以选择RFC 1918中所定义的IP地址。
2.5.4 邻居关系
通过各自的接口连接到相同网络的两台路由器被称之为邻居。OSPF 的邻居发现是其获知网络状况并构建路由表的第一步。这一过程是需要在路由器之间发送多播Hello包,并从学习到邻居的路由器标识(RID)开始的。
Hello包在广播和点到点网络类型的接口上每10秒发送一次,而在NBMA接口上每30秒发送一次。Hello包发送的目的地址为多播地址224.0.0.5(代表所有 SPF 路由器);发送至该地址可以使得所有运行了 OSPF 的路由器都能够接收和处理Hello包。
当路由器之间成功交换了Hello包,各自从对方的Hello包中发现了自己的RID,并且在以下内容上达成了一致后,便宣告建立了邻居关系:
Hello包发送间隔和Dead时间;
区域ID号;
子网掩码(对于多路访问网络而言);
末节区域标记(如前所述);
认证类型和认证密钥。
例2-4中的输出能够帮助你确定路由器之间所形成的邻居关系。本例中,路由器HAL9000已经和它所连接的其他所有路由器建立了邻居关系。
提示
为了构建稳定的OSPF邻居关系,你应当适量减少每个LAN中的路由器数量。同时更改priority命令来指定哪台路由器成为DR,从而避免因ip ospf priority命令的不当使用,导致同一台路由器成为多条链路的DR。
2.5.5 邻接关系
想要形成邻接关系,OSPF必须首先发现邻居。形成邻接关系的目的是为了交换路由信息。不是所有的邻居路由器都可以形成邻接关系,以下是OSPF形成邻接关系的条件。
网络类型为点到点。
网络通过虚拟链路达成连通性。
路由器为DR。
邻居路由器为DR。
路由器为BDR。
邻居路由器为BDR。
从实际意义上而言,邻接关系控制了路由信息更新的分发:只有形成了邻接关系的路由器之间才会发送更新并处理更新。第3章将详细讨论邻接关系的形成。
OSPF路由器的邻居和邻接
关于OSPF路由器的邻居和邻接关系之间的区别很容易解释,但通常都被人们所忽视。可以举这样一个例子,假设你和许多不同的人一起相邻居住,那么他们可以称之为你的邻居。虽然偶遇时可能会招手致意,但是你们之间并不是亲密的朋友。
但是某些情况下,你可能会和最初的邻居成为亲密的朋友,那么这种亲密朋友也可以称之为邻接;之后,你们或许会在夏日的庭院里相互攀谈,或共进晚餐——诸如此类。总之,你和他们已经拥有了更进一步的沟通关系。
你可以使用show ip ospf interface命令查看当前路由器和其他路由器的邻接关系,如例2-5所示。
2.5.6 指定路由器
OSPF 在路由器之间建立邻接关系是为了交换路由信息。但是,当 OSPF 运行于 NBMA 或广播网络上时,邻接关系的建立会遇到一些问题。在上述类型的网络中,如果存在较多的路由器,那么会导致出现过多的邻接关系。为了消除多余的邻接关系,OSPF引入了指定路由器(DR)的概念。
OSPF在每个多路访问网络中选举一台路由器和其他所有路由器建立邻接关系。如果不选举DR,那么多路访问网络中全互连邻接关系数量的计算公式为:
所需建立的邻接关系数量 = [n(n-1)]/2
其中n为相同网段上的路由器数量。
例如,假设同一网段内拥有5台路由器,则需要建立的邻接关系数为:
[5×(5-1)]/2 = 10
另一个例子,如果拥有10台路由器,那么所需的邻接关系数为:
[10×(10-1)]/2 = 45
OSPF 是通过 Hello 包来选举 DR 的。DR 的存在可以减少所需形成的邻接关系数量,从而也就降低了路由协议的流量和路由器的开销。
DR 是有利于 OSPF 的,但是 OSPF 如何决定网络中哪一台路由器将成为DR呢?下面的步骤描述了OSPF选举DR路由器的过程。
注意
描述如何选举DR的步骤是建立在当前网络中没有DR存在的假设之上。如果是DR已存在的情景,那么该过程会发生细微的变化;如需获得更多信息,请查阅RFC 2328文档。
图2-11展示了选举DR和BDR路由器的过程。
图2-11所描绘的过程遵循如下步骤:
1.OSPF随机选择一台路由器并检查其邻居表;不妨称该路由器为T。路由器邻居表包含了所有之前已经建立了双向通信的路由器。这种通信被称为双向(2-way),它是不形成邻接关系的邻居路由器之间所能达成的最高级状态。
2.路由器T从邻居列表中移除所有没有资格成为DR的路由器。这包括那些配置了 OSPF 路由优先级为 0 的路由器。改变默认优先级的过程将在本节后续内容中进行介绍。列表中依然存在的路由器(即优先级不为0)将进入下一个步骤。
3.通过比较哪台路由器拥有最高的优先级,首先选出BDR。如果多台路由器拥有相同的优先级值,那么OSPF将选取最高路由器ID来打破这一平局。
4.优先级可以被更改或保持默认值。如果当前已存在DR,那么此时任何路由器都没有资格进行选举2。
5.如果没有其他的路由器宣称自己为DR,那么则选举BDR成为新的DR。
6.如果路由器T成为了DR,那么此时便开始确定哪些路由器应作为BDR。
例如,如果路由器T是 DR,当重复步骤3时它将没有资格参与BDR的选举,这就确保了一台路由器不会同时宣称自己是DR和BDR。在完成了选举之后,假设路由器T成为了 DR,那么路由器将相应地设置好OSPF接口的角色。这里的角色是指DR的接口角色为DR,而其他路由器的接口角色为DROther。
7.选举完成后,DR便开始向网络内余下的路由器发送Hello包,从而建立必要的邻接关系。
1译者注:事实上Cisco路由器支持5种不同的网络类型,Cisco扩展了非广播点到多点的网络类型。
2译者注:因为OSPF DR选举不具备抢占性。