基础通信学习之OSPF路由技术
- OSPF路由协议
路由协议根据算法可以分为距离矢量协议和链路状态协议。其中,RIP属于距离矢量路由协议的一种,由于RIP是基于距离矢量算法的,协议本身具有一定的局限性。 如协议规定路由跳数超过15跳则认为网络不可达,RIP会存在路由环路、 路由收敛速度慢等问题,所以RIP只能满足小规模网络的需求,不能适应大规模网络的发展。
OSPF是基于链路状态算法的常用的IGP路由协议之一。在OSPF域内,路由器之间交换的是链路状态信息,所有的链路状态信息(Link State Advertisement, LSA)集合成链路状态信息库( Link State Database,LSDB),路由器通过最短路径优先算法( Shortest Path First,SPF)计算出到达目的地的最短路由 。 由于通过SPF算法可以生成一棵无环的最短路径树, 因此OSPF路由协议没有环路问题。同RIP相比,OSPF协议更适合大规模网络应用。
- OSPF基础概念
OSPF是基于链路状态算法的IGP路由协议,由互联网工程任务组(IETF)开发。OSPF发展经过了几个版本。OSPFv1在 RFC1131中定义,该版本一直处于实验阶段, 没有公开使用,目前1Pv4使用的是OSPFv2。OSPFv2 最早在RFC1247中定义,RFC2 328是其最新标准文挡。OSPFv3是针对1Pv6技术的版本。若没有特别说明,下文中所提到的OSPF均指OSPFv2。
OSPF直接运行于IP之上,使用的IP号89。OSPF报文结构为报文头部+报文体的格式,如图所示。
OSPF由于具有以下很多显著的特点,因此得到了广泛应用。
- 支持CIDR。早期的路由协议如(RIPv1)并不支持CIDR,而OSPF 可以支持CIDR,同时在发布路由信息时携带了子网掩码信息,使得路由信息不再局限于有类网络。
- 支持区域划分。OSPF协议允许自治系统内的网络被划分成区域来管理。通过划分区域来实现更加灵活的分级管理。
- 无路由自环。OSPF从设计上保证了无路由环路。OSPF 支持区域的 划分, 区域内部的路由器都使用SPF算法,保证了区域内部的无环路。在区域之间,OSPF利用区域的连接规则保证了区域之间无路由自环。
- 路由变化收敛速度快。OSPF 被设计为触发式更新方式。 当网络拓扑结构发生变化,新的链路状态信息会立刻泛洪。OSPF对拓扑变化敏感,因此路由收敛速度快。
- 使用IP多播收发协议数据。OSPF路由器使用多播和单播收发协议数据,因此占用的网络流量很小。
- 支持多条等值路由。在路由方面,OSPF还支持多条等值路由。当目的地有多条等值开销路径时,流量被均衡地分担在这些等值开销路径上, 实现了负载分担,更好地利用了链路带宽资源。
- 支持协议报文的认证。在某些安全级别较高的网络中,OSPF路由器可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过验证才能交换。通过验证可以提高网络的安全性。
- OSPF协议工作原理
OSPF最显著的特点是使用链路状态算法,区别于早先的路由协议使用的距离矢量算法。
1. 链路状态算法的路由计算过程
图所示为OSPF的路由计算过程,大致可以分为4个步骤。
- 邻接关系建立。相邻的路由器会形成OSPF邻接关系。只有邻接关系建立好后,路由器之间才会交互各自知道的LSA。
- LSDB同步。邻接关系建立好后,每个OSPF路由器会把自己的LSA通告给自己的邻居,同时接收邻居通告给自己的LSA,也会把自己知道的其他路由器的LSA通告给邻居。每个路由器会保存自己收到的LSA。所有LSA的集合叫作LSDB。
- SPF路由计算 。LSDB同步后,每个OSPF路由器以自己为根运行SPF算法 。运算的结果是以自己为根的一棵最短路径树。
- 路由表生成。根据SPF树,每台路由器都能计算出各自的路由信息,并添加到路由表。
- OSPF常见报文类型
上文已经介绍到OSPF在进行路由计算时首先要完成邻接关系的建立,那什么是邻接关系呢?邻接关系建立的过程又是怎么样的呢?在解答这两个问题之前, 先来了解下OSPF报文。OSPF有5种报文类型, 每种报文都使用相同的OSPF报文头。OSPF路由器通过这几种报文来发现和维护邻居关系,实现LSDB的同步和交互路由信息。以下分别介绍5种报文。
- Hello报文。最常用的一种报文,用于发现、 维护邻居关系,并在广播和NBMA类型的网络中选举指定路由器(Designated Router, DR)和备份指定路由路由器(Backup Designated Router, BDR)。
- 数据库描述(Database Description, DD)报文。两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。内容包括LSDB中每一条LSA的Heade头部(LSA的Header可以唯一标识一条LSA) 。LSA Header只占LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。
- 链路状态请求(LSA Request, LSR )报文。两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA。内容包括所需要的LSA 的摘要。
- 链路状态更新(LSA Update, LSU )报文。用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。
- 链路状态确认(Link State Acknowledgment, LSACK )报文。用来对接收到的LSU报文进行确认。
OSPF的 5种报文中,Hello报文用来发现和维护邻居关系,只有在邻接关系建立完成后才会交互DD、LSR, LSU以及LSAck报文。这时第三个问题产生了,什么是邻居关系呢?
3.OSPF的邻居和邻接关系
1. 邻居(Neighbor)路由器。OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文,用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方一致就会形成邻居关系。Hello报文是使用多播方式发送的,并且IP头的TIL值为1,也就表明了OSPF的邻居关系都是物理链路上直接相连的路由器。
2. 邻接( Adjacency )路由器。邻接路由器是在路由器形成邻居关系的基础之 上进一步建立的,但形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。但是路由器在发送LSA之前必须先发现邻居并建立邻居关系,即建立邻居关系是建立邻接关系的前提。
如图所示,RTA 通过以大网连接了3个路由器, 所以RTA有3个邻居,但不能说RTA 有3个邻接关系。那么谁来决定邻居关系路由器是否形成邻接关系呢?答案是OSPF的网络类型。所谓网络类型,是指运行OSPF网段的二层链路类型。OSPF根据链路层协议类型将网络分为4种类型:点到点网络、广播型网络、非广播多路访问(Non-Broadcast Multiple Access, NBMA)网络和点到多点网络( Point-to-Mult iPoint , P2MP )。
一个运行点到点协议(Point-to-Point Protocol,PPP)的64Kb/s串行线路就是一个点到点网络的例子。点到点网络常见的链路层协议有 PPP、链路访问过程平衡(Link Access Procedure Balanced for x.25, LAPB ), HDLC。广播型网络(Broadcast )则是当链路层协议是Ethernet、FDDI时,OSPF默认的网络类型。
非广播网络是指不具有广播能力的网络。在非广播网络上,OSPF有两种运行方式,非广播多路访问和点到多点。非广播多路访问要求网络中的路由器组成全连接。例如,使用全连接的ATM网络。在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。对于不能组成全连接的网络,应当使用点到点方式,例如不完全连接的帧中继网络,将整个非广播网络看成是一组点到点网络。每个路由器的邻居可以使用底层协议〔例如反向地址解析协议(Reverse ARP, RAAP)来发现。点到多点网络类型不是OSPF在非广播网络中默认的网络类型,OSPF在非广播网络中默认的网络类型是NBMA。
通过上文的介绍, 刚才3个问题的答案全部水落石出了,但是大家可能会有 个困惑, 为什么网络类型会决定邻居关系路由器是否建立邻接关系呢。再回到图中的例子,对于路由器 RTA而言,它有3个邻居。如果图中的4台路由器彼此之间都建立邻接关系,会有多少呢?答案是6。那么如果该网络中的n台路由器都属于广播型或者NBMA网络,彼此之间会建立的邻接关系是多少呢?答案是n*(n-1 )/2。这时大家会发现,网络中(广播型或者NBMA)随着路由器数量的增加, 邻接关系数量也会随之大量增加,邻接关系数量增加意昧着网络中需要泛洪大量的报文,而大量的报文交互需要足够的带宽资源以及设备性能的支持。 因此在广播型网络或者NBMA网络中需要减少邻接关系的数量,那么怎么减少呢?
在全广播型网络和NBMA网络中,为了避免两两路由器之间建立邻接关系而导致路由收敛慢,设计了DR和BDR两种路由器角色,如图所示,每一个含有至少两个路由器的广播型网络和NBMA网络都有一个指定路由器和一个备份指定路由器。
本例中,虽然RTA有3个邻居,但是只与DR和BDR形成邻接关系。与另一个个路由器只有邻居关系,没有邻接关系, 因而不交互路由信息。概括起来就是, 邻接关系的建立要针对不同的网络类型。在点到点网络中,路由器之间会建立邻接关系,点对多点网络可以看作多个点对点网络,邻接关系建立在点对点之间。
而广播网络和NBMA网络中会选举出DR和BDR,DRother只会与DR、BDR建立邻接关系,与其他DRother之间不建立邻接关系。
- 单区域OSPF网络
区域是一组路由器和网络的集合,单区域是指所有运行OSPF协议的路由器被划分到同一个区域。OSPF规定同一区域内部LSDB是相同的。这时大家需要同另外一个概念进行区别,那就是自治系统AS,自治系统是指使用同一种路由协议交换路由信息的一组路由器,简称AS。OSPF是基于链路状态算法的IGP协议,因此只在AS内部运行有效。
如图所示,三台路由器和所连接的网络被划分到同一个区域Area 0,这三台路由器都运行OSPF路由协议,所以它们都属于AS100。上文提到,OSPF规定同一区域内部的LSDB是相同的,那么在同一个Area内,如何区分LSDB中的LSA是由哪一台路由器产生的?
需要如图所示中的Router ID来完成这样的工作,一台路由器如果要运行OSPF协议,必须存在Router ID。LSDB描述的是整个网络的拓扑结构,包括网络内所有的路由器。所以网络内的每个路由器都需要有一个唯一的标识,用于LSDB中标识自己。这个标识RouterID是一个32 位的整数,用于在自治系统中唯一标识一台运行OSPF协议的路由器。 每个运行OSPF的路由器都有一个Router ID。Router ID的格式和IP地址的格式是一样的,推荐使用路由器LoopbackO的IP地址作为路由器的RouterID。
- 多区域OSPF网络
随着网络规模日益扩大,当一个大型网络中的路由器都运行单区域OSPF路由协议时,路由器数量的增多会导致LSDB非常庞大,占用大量的存储空间,并使得运行SPF算法的复杂度增加,导致CPU负担很重。
在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于 "动荡"之中,造成网络中会有大量的OSPF协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。
为了解决上述问题, OSPF 协议支持将自治系统划分成不同的区域(Area)。 区域是从逻辑上将路由器划分为不同的组, 每个组用区域号(Area ID)来标识。 区域是一组网段的集合。OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域,即区域是一组网段的集合。划分区域后可以缩小LSDB规模,减少网络流量。
区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息 ,而不是详细的描述拓扑 结构的链路状态信息。 每个区域都有自己的LSDB, 不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。
多区域OSPF网络如图所示
如图AreaO为骨干区域(骨干区域号必须为0),骨干区域负责在非骨干区域之间发布由区域边界路由器汇总的路由信息(并非详细的链路状态信息)。 为了避免区域间路由环路, 非骨干区域之间不允许直接相互发布区域间路由信息。因此,所有区域边界路由器都至少有一个接口属于Area0,即每个区域都必须连接到骨干区域。
如图所示,可以发现路由器处于不同区域,处于区域的不同位置,都会有不同的路由器角色。
- 内部路由器(Internal Router,IR)。内部路由器是指所有接口网段都在一个区域的路由器。属于同一个区域的IR 维护相同的LSDB。
- 区域边界路由器(Area Border Router. ABR)。区域边界路由器是指连接到多个区域的路由器。ABR为每一个所连接的区域维护一个LSDB,区域之间的路由信息通过ABR来交互。
- 骨干路由器(Backbone Router,BR)。骨干路由器是指至少有一个端口(或者虚连接)连接到骨干区域的路由器,包括所有的ABR 和所有端口都在骨干区域的路由器。由于非骨干区域必须与骨干区域直接相连,因此骨干区域中的路由器(即骨干路由器)往往会处理多个区域的路由信息。
- 自治系统边界路由器(AS Boundary Router,ASBR)。AS边界路由器是指和其他AS中的路由器交换路由信息的路由器 这种路由器负责向整个AS通告来源于AS外部的路由信息 AS内部路由器通过ASBR与AS外部进行通信。
自治系统边界路由器可以是内部路由器IR,或者是ABR,可以属于骨干区域, 也可以不属于骨干区域。
- OSPF故障案例分析
在OSPF的配置过程中,最常见的故障是两台相邻路由器不能正确建立邻居关系,而邻居关系建立是路由学习的基础。本小节将以OSPF邻居关系建主为例,介绍OSPF配置过程中常见故障的处理方法。
故障案例组网拓扑如图所示,
在上述的拓扑中,按要求完成OSPF配置 。正常状态下,在CR1 上执行命令displ ay ospf peer,显示结果应该是CR1有3个 OSPF邻居。但在本次配置中,执行查询邻居关系命令后显示CR1上只有一个邻居CR2。OSPF邻居无法正常建立的故障原因可能有以下几种可能。
- BFD故障。
- 对端设备故障。
- CPU利用率过高。
- 链路故障。
- 接口没有UP。
- 两端IP地址不在同一网段。
- RouterID配置冲突。
- 两端区域类型配置不一致。
- 两端OSPF参数配置不一致。
根据这些故障原因, 进行逐一排查定位,发现AR1上配置的认证字段同CR1不匹配,AR2则是由于修改了Hello 报文发送周期而导致无法和CR1建立邻居关系。





浙公网安备 33010602011771号