开放式最短路径优先(OSPF)

DR:指定路由器
BDR:备份指定路由器
ABR:区域边界路由器
ASBR:自治系统边界路由器
AS:自治系统
LSA:链路状态公告
LSDB:链路状态数据库

链路状态路由协议

OSPF是一种基于链路状态的路由协议

无环路

OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路
OSPF还利用区域间的连接规则保证了区域之间无路由环路

收敛快

OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化

扩展性好

OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF还可以同其他协议(比如多协议标记切换协议MPLS)同时运行来支持地理覆盖很广的网络

支持认证

OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换

OSPF原理介绍

OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径
OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息
收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database),并在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树
最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中
image.png

OSPF报文

OSPF报文封装在IP报文中,协议号为89
OSPF报文类型有5种,每种报文都使用相同的OSPF报文头

Hello 报文

最常用的一种报文,用于发现、维护邻居关系。并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)

DD(Database Description)报文

两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。DD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量的一小部分,所以,这样就可以减少路由器之间的协议报文流量

LSR(LSA Request)报文

两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA,LSR只包含了所需要的LSA的摘要信息

LSU(LSA Update)报文

用来向对端路由器发送所需要的LSA

LSACK(Link State Acknowledgment)报文

用来对接收到的LSU报文进行确认

Router ID、邻居和邻接

Router ID

Router ID是一个32位的值(如1.1.1.1),它唯一标识了一个自治系统内的路由器
可以在路由器上通过重置OSPF进程来更新Router ID
如果没有通过命令指定RID,将按照如下顺序自动生成一个RID:
如果存在配置IP地址的逻辑接口,则选择Loopback接口地址中最大的作为Router ID
如果没有配置IP地址的逻辑接口,则从物理接口的IP地址中选择

邻居(Neighbor)

OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居
收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系

邻接(Adjacency)

形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定
只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系

邻居和邻接关系建立的过程

  1. Down:这是邻居的初始状态,表示没有从邻居收到任何信息
  2. Attempt:只在NBMA网络上存在,发送了Hello报文,但没有得到回应,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
  3. Init:路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,尚未与邻居建立双向通信关系
  4. 2-Way:双方已经建立双向通信的邻居关系,但还没有建立邻接关系
  5. ExStart:形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的,初始DD序列号也是在此状态下决定的。在此状态下发送的DD报文不包含LSA
  6. Exchange:路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容
  7. Loading:相互发送LSR报文请求LSA,发送LSU报文通告LSA
  8. Full:路由器的LSDB已经同步

    邻居发现

    OSPF的邻居发现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下

  9. Network Mask:发送Hello报文的接口的网络掩码

  10. HelloInterval:发送Hello报文的时间间隔,单位为秒
  11. Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能已超出这里的讨论范围
  12. Router Priority:发送Hello报文的接口的Router Priority,用于选举DR和BDR
  13. RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍HelloInterval
  14. Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器
  15. Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR
  16. Neighbor:邻居的Router ID列表,表示本路由器已经从这些邻居收到了合法的Hello报文

    数据库同步

    路由器在建立完成邻居关系之后,便开始进行数据库同步,具体过程如下

  17. 邻居状态变为ExStart以后,RTA向RTB发送第一个DD报文,在这个报文中,DD序列号被设置为X(假设),RTA宣告自己为主路由器。

  18. RTB也向RTA发送第一个DD报文,在这个报文中,DD序列号被设置为Y(假设)。RTB也宣告自己为主路由器。由于RTB的Router ID比RTA的大,所以RTB应当为真正的主路由器。
  19. RTA发送一个新的DD报文,在这个新的报文中包含LSDB的摘要信息,序列号设置为RTB在步骤2里使用的序列号,因此RTB将邻居状态改变为Exchange。
  20. 邻居状态变为Exchange以后,RTB发送一个新的DD报文,该报文中包含LSDB的描述信息,DD序列号设为Y+1(上次使用的序列号加1)。
  21. 即使RTA不需要新的DD报文描述自己的LSDB,但是作为从路由器,RTA需要对主路由器RTB发送的每一个DD报文进行确认。所以,RTA向RTB发送一个内容为空的DD报文,序列号为Y+1。

    建立完全邻接关系

    邻居状态变为Loading之后,RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息

  22. RTB收到LSR报文之后,向RTA发送LSU报文,在LSU报文中,包含了那些被请求的链路状态的详细信息。RTA收到LSU报文之后,将邻居状态从Loading改变成Full

  23. RTA向RTB发送LSACK报文,用于对已接收LSA的确认

此时,RTA和RTB之间的邻居状态变成Full,表示达到完全邻接状态

DR&BDR

DR指定路由器
BDR备份指定路由器
每一个含有至少两个路由器的广播型网络和NBMA网络都有一个DR和BDR
DR和BDR可以减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,这样可以节省带宽,降低对路由器处理能力的压力
邻接关系的数量可以根据公式n(n-1)/2,n代表参与OSPF的路由器接口的数量
BDR在DR发生故障时接管业务,一个广播网络上所有路由器都必须同BDR建立邻接关系

DR&BDR选举

DR是基于端口的路由器优先级的值进行选举的;优先级一样时,看Router-ID
DR是不能抢占的,因此时间实际上成为DR选举的第一要素
优先级取值范围为0-255,默认是1,如是0则不参与选取
如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;
如果当前BDR发生故障,则DR不变,重新选举BDR
这种选举机制的目的是为了保持邻接关系的稳定,使拓扑结构的改变对邻接关系的影响尽量小

OSPF区域

OSPF区域可以缩小路由器的LSDB规模,减少网络流量
每个区域都维护一个独立的LSDB
Area 0是骨干区域,其他区域都必须与此区域相连
image.png
区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息
每个区域都有自己的LSDB,不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了
为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域

OSPF路由器类型

区域内路由器(Internal Router)
区域边界路由器(ABR,Area Border Router)

运行在区域之间的路由器叫做区域边界路由器,它包含所有相连区域的LSDB

骨干路由器(Backbone Router)
自治系统边界路由器(ASBR, Autonomous System Border Router )

自治系统边界路由器是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息

OSPF的网络类型

OSPF将网络划分为四种类型:
点到点网络(Point-to-Point)
广播多路访问网络(Broadcast MultiAccess,BMA)
非广播多路访问网络(None Broadcast MultiAccess,NBMA)
点到多点网络(Point-to-Multipoint)

OSPF开销

接口开销=带宽参考值÷带宽
带宽参考值默认为100Mbit/s

一个64kbit/s串口的开销为1562,一个E1接口(2.048 Mbit/s)的开销为48

可以调整带宽参考值,从而可以改变接口开销,带宽参考值越大,开销越准确
命令示例:

  1. [RTB]ospf
  2. [RTB-ospf-1]bandwidth-reference 10000

可以通过ospf cost命令来手动为一个接口调整开销,范围是1~65535,缺省值为1

  1. [RTA]interface GigabitEthernet 0/0/0
  2. [RTA- GigabitEthernet0/0/0]ospf cost 20

OSPF配置

  1. [RTA]ospf 1 router-id 1.1.1.1 ——启动ospf进程1,指定路由id1.1.1.1
  2. [RTA-ospf-1]area 0 ——进入区域0
  3. [RTA-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255 ——宣告网络

验证配置

  1. [RTA]display ospf peer

配置接口优先级

  1. ospf dr-priority <priority> ——配置接口优先级
  2. undo ospf dr-priority ——删除优先级
  3. 重新配置设备的DR优先级后,仍不会改变网络中的DRBDR,重启所有设备上的OSPF进程才行

重启ospf进程

  1. <RTA>reset ospf 1 process

显示ospf链路状态

[huawei]display ospf lsdb