OSPF协议

距离矢量路由协议

  • 运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。
  • 路由器并不了解整个网络的拓扑结构,它只是简单地对度量值做加法、只知道到达某个目的地从哪里走,距离多远。

链路状态路由协议

  1. LSAs的泛洪
    运行链路状态路由协议的路由器,彼此之间交互的就不是路由信息了,而是LSA(链路状态通告)。
  2. LSDB的维护
    每台路由器将搜集到的LSAs放入自己的LSDB(链路状态数据库)存储起来。有了LSDB,路由器相当于掌握了全网的拓扑。

lsu在ospf中的作用 ospf的lsdb是什么_网络

  1. SPF计算
    每台路由器基于LSDB,使用SPF(最短路径算法)进行计算,得到一个以自己为根、覆盖全网的一棵无环的树。
  2. 维护路由表
    每台路由器根据SPF的计算结果,将路由加载进路由表。

lsu在ospf中的作用 ospf的lsdb是什么_网络_02

OSPF简介

开放式最短路径优先OSPF(Open Shortest Path First)路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。

目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。

OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点:

  • OSPF采用组播(224.0.0.5,224.0.0.6)形式收发协议报文,这样可以减少对其它不运行OSPF路由器的影响。
  • OSPF支持无类型域间选路(CIDR)。
  • OSPF支持对等价路由进行负载分担。
  • OSPF支持报文认证。

OSPF重要概念

AS

  • AS(自治系统),也可称为“路由域”(Routing Domain),由运行同一种路由协议的一组路由器组成。
  • 同一AS,所有路由器必须允许相同路由协议,且必须相互连接,分配相同AS号
  • 在OSPF中,只有同一AS中的路由器才会相互交互链路状态信息
  • 所有OSPF路由器共同维护一个相同的AS结构描述(AS各区域间的连接关系)

Router-ID

lsu在ospf中的作用 ospf的lsdb是什么_网络_03

  • OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台路由器拥有相同的Router-ID。
  • OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈建议手工配置OSPF的Router-ID,因为这关系到协议的稳定。

OSPF Cost

  • OSPF使用cost“开销”作为路由度量值。
  • OSPF接口cost=100M /接口带宽,其中100M为OSPF的参考带宽(reference-bandwidth),可以修改。
  • 每一个激活OSPF的接口都有一个cost值。
  • 一条OSPF路由的cost由该路由从起源一路到达本地的所有入接口cost值的总和。

lsu在ospf中的作用 ospf的lsdb是什么_lsu在ospf中的作用_04

  • 如果从不同接口学到的路由优先级和开销值相同,那么一同加入路由表,负载分担;反之,选择最优的。

lsu在ospf中的作用 ospf的lsdb是什么_lsu在ospf中的作用_05

DR、BDR

lsu在ospf中的作用 ospf的lsdb是什么_字段_06

  • 在广播多路访问网络(Multi Access)中,所有的路由器的接口都是相同网段,这些接口都将两两建立OSPF邻居关系,这就意味着,网络中共有:n(n-1)/2
  • 这么多个OSPF邻居关系,维护如此多的邻居关系不仅仅额外消耗设备资源,更是增加了网络中LSA的泛洪数量。

lsu在ospf中的作用 ospf的lsdb是什么_lsu在ospf中的作用_07

  • 为减小多路访问网络中的 OSPF 流量,OSPF 会在每一个MA网络(多路访问网络)选举一个指定路由器 (DR) 和一个备用指定路由器 (BDR)。
  • DR选举规则:最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性。
  • 指定路由器 (DR):DR 负责使用该变化信息更新其它所有 OSPF 路由器(DRother)。
  • 备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。
  • 注意OSPF为“接口敏感型协议”,DR及BDR的身份状态是基于OSPF接口的。
  • MA网络中,所有的DRother路由器均只与DR和BDR建立邻接关系,DRother间不建立全毗邻邻接关系。
  • 如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解。

LSA的泛洪

lsu在ospf中的作用 ospf的lsdb是什么_字段_08

  • 路由器R3用224.0.0.6通知DR及BDR。
  • DR、BDR监听224.0.0.6这一组播地址。
  • DR向组播地址224.0.0.5发送更新以通知其它路由器。
  • 所有的OSPF路由器监听224.0.0.5这一组播地址。

路由器收到包含变化后的LSA的LSU后,更新自己的LSDB,过一段时间(SPF延迟),对更新的链路状态数据库执行SPF算法,必要时更新路由表。

Area

  • 一个AS内部可以划分多个区域(area)
  • 每个OSPF路由器只能在所属区域内部学习到完整的链路状态信息
  • OSPF的区域边界是接口,不是链路,即直连链路两端接口只能同属于一个区域
  • 与OSPF不同的IS-IS的路由边界是链路

单区域存在的问题

  • LSA泛洪严重,OSPF路由器的负担很大。
  • 区域内部动荡会引起全网路由器的SPF计算。
  • LSDB庞大,资源消耗过多,设备性能下降,影响数据转发。
  • 每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总。

OSPF多区域

lsu在ospf中的作用 ospf的lsdb是什么_lsu在ospf中的作用_09

  • 减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的。
  • 在区域边界可以做路由汇总,减小了路由表。
  • 充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由。
  • 多区域提高了网络的扩展性,有利于组建大规模的网络 。

Area0为骨干区域,负责在非骨干区域之间中转由区域边界路由器归纳的链路状态通告信息。为了防止出现环路,OSPF要求所有的非骨干区域之间不能直接进行LSA的交互,而必须通过Area0骨干区域进行中转,因此所有的非骨干区域必须都与Area0“直接相连”。

路由器的角色

lsu在ospf中的作用 ospf的lsdb是什么_OSPF_10

  • 区域内路由器 Internal Router
  • 区域边界路由器ABR Area Border Router
  • 骨干路由器 Backbone Router
  • AS边界路由器ASBR AS Boundary Router

OSPF的三张表

  • 邻居表(Peer table):
    OSPF是一种可靠的路由协议,要求在路由器之间传递链路状态通告之前,需先建立OSPF邻居关系,hello报文用于发现直连链路上的其他OSPF路由器,再经过一系列的OSPF消息交互最终建立起全毗邻的邻居关系,OSPF路由器的邻居信息显示在邻居表中。
  • 链路状态数据库(Link-state database,简称LSDB):
    OSPF用LSA(link state Advertisement,链路状态通告)来描述网络拓扑信息,然后OSPF路由器用LSDB来存储网络的这些LSA。OSPF将自己产生的以及邻居通告的LSA搜集并存储在LSDB中。掌握LSDB的查看以及对LSA的深入分析才能够深入理解OSPF。
  • OSPF路由表(Routingtable):
    基于LSDB进行SPF(Dijkstra算法)计算,而得出的OSPF路由表。

OSPF报文类型

报文类型

报文作用

Hello报文

周期性发送,用来发现和维持OSPF邻居关系。

DD报文(Database Description packet)

描述本地LSDB的摘要信息,用于两台设备进行数据库同步。

LSR报文(Link State Request packet)

用于向对方请求所需的LSA。 设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。

LSU报文(Link State Update packet)

用于向对方发送其所需要的LSA。

LSAck报文(Link State Acknowledgment packet)

用来对收到的LSA进行确认。

邻居关系的建立

lsu在ospf中的作用 ospf的lsdb是什么_网络_11

设备邻接关系建立过程:

  1. 邻居发现阶段
  • 首先,R1在ospf进程启动后,以组播方式(224.0.0.5)向所有直连的邻居发送hello报文(10s)。此时R1还没有建立邻居关系,所以hello报文中Neighbor字段没有封装任何RouterID.
  • R2收到R1的hello报文后,将收到R1的hello报文的接口转换为Init状态,并从hello报文中获得R1的RouterID,添加到邻居表。在DeadInterval失效前,R2也会以组播方式向所有邻居发送hello报文,不过除了封装自己RouterID,Neighber字段中也封装了R1的RouterID。
    (DeadInterval,路由失效时间,缺省40s,间隔这段时间没收到,则认为发此hello报文的路由失效)
  • R1收到R2的hello报文,并且发现里面有自己的RouterID后,将收到R2的hello报文的的接口转换为2-way状态,同时R1也获得了R2的RouterID。在DeadInterval失效前,发送携带邻居RouterID的hello报文。Neighber字段中封装了R2的RouterID。
  • 当R2再次收到R1的报文,并且发现里面有自己的RouterID后,将收到R1的hello报文的接口转换为2-way状态,这样R1和R2就建立起邻居关系。

lsu在ospf中的作用 ospf的lsdb是什么_链路_12

  1. 主从关系确立阶段
  1. 双方都建立2-way状态后,R1和R2都通过先前获取的hello报文进行DR、BDR选举,选举完成后双方进入ExStart状态。DR、BDR是通过路由器优先级和RouterID选举出来,且只有hello报文中Rtr Pri(优先级)大于0的路由器才有资格选举。选举过程如下:
  • 双向通信建立起来后,本地路由会检查各个邻居发来的hello包中的优先级、DR、BDR域。此时,每台路由器都宣称自己是DR、BDR(接口地址都置于hello包的DR、BDR字段)。
  • 通过比较hello包中DR字段优先级最高的就为DR,BDR字段优先级最高的就为BDR。DR\BDR的选举优先级越大越优先,如果优先级相等,就比较RouterID, 同样越大越优先。
  • 如果没有任何路由器被选为BDR,那么拥有最高优先级的非DR路由器就被选为BDR,优先级相等,就比较RouterID。
  1. 进入ExStart状态后,双方开始以DD报文进行交互,确定主从关系,确定数据交互的DD报文初始序列号,以保证收到的是最新的链路状态信息。
    在开始交互时,双方都在【M/S字段设为1(代表自己为主设备),在DD Sequence Number上加上各种当前DD报文的序列号(每次发送+1),LSA Header为空】的DD报文进行交互,最终根据RouterID确定主从,RouterID大的为主设备(假设是R2)
    确定主从关系后,R1以主设备R2的的报文的序列号向主设备R2发送DD报文,M/S置为0(代表自己为从设备),同样LSA Header为空,并将接收DD报文的接口转为Exchange状态。主设备R2收到从设备R1的DD报文也将接收DD报文的接口转为Exchange状态,然后进入数据库同步阶段。

lsu在ospf中的作用 ospf的lsdb是什么_网络_13

  1. 数据库同步阶段
  • 主设备R2开始陆续向从设备R1发送带有LSA Header字段的DD报文(其中第一个DD的I字段为1,代表连续DD报文中的第一个,其余DD报文I字段为0),M字段为1(代表后面还有报文)对R1进行数据库更新。每次发送DD报文,序列号+1。从设备R1每次均已收到的DD报文序列号进行响应(但LSA Header为空)
  • 当主设备R2主设备发送最后一个DD报文,将M字段置为0,同时LSA Header为空,并将接收DD报文的接口转为Loading状态。从设备R1知道这是最后一个DD报文后,也将接收DD报文的接口转为Loading状态
  • 当主设备R2发送完DD报文后, 从设备R1开始依据收到的DD报文的LSA Header字段检查自己的LSDB。如果发现有些LSA不在自己的LSDB中,从设备R1会向主设备R2发送LSR请求更新。主设备R2发送LSU给与更新信息,R1收到后,回应LSAck进行确认。
    注:双方都可能有对方没有的LSA,所以在DD交互时主从关系不是固定的,双方都可以发送LSR报文。

lsu在ospf中的作用 ospf的lsdb是什么_lsu在ospf中的作用_14

  1. 完全邻接阶段
    当双方LSDB完全同步后,双方均转为Full状态,这样就建立了邻接关系。

OSPF网络类型

OSPF支持的网络类型

  • 点到点网络
  • 广播型多路访问网络
  • 非广播型多路访问(NBMA)网路
  • P2MP网络

常见链路层协议对应的默认网络类型

网络类型

常见链路层协议

Point-to-point

PPP链路;Lapb链路;HDLC链路;

Broadcast

以太网链路;

NBMA

帧中继链路;ATM链路

P2MP

需手工指定

OSPF的基础配置

创建OSPF进程,并指定OSPF进程号及Router-ID:
[Router] ospf [ process-id | router-id router-id ]
进入特定area的配置视图:
[Router-ospf] area area-id		
在特定area的配置视图内,在特定接口激活OSPF:
[Router-ospf-area] network ip-address wildcard-mask 
查看OSPF协议相关运行参数
	display ospf brief
查看OSPF邻居表
	display ospf peer  
查看LSDB表 
	display ospf lsdb 
 查看OSPF路由
	display ospf routing
	
Interface GigabitEthernet0/0/1
	ospf cost 9           #修改OSPF cost
	ospf dr-priority 255   # 修改dr优先级

OSPF进程号(Processor ID)

  • OSPF进程号的取值范围是1-65535,只具有本地意义,用于在一台网络设备上标识OSPF进程。华为的网络产品支持运行多个OSPF进程,每一个OSPF进程需指定特定的进程号加以区分。
  • 由于进程号只具有本地意义,因此两台直连的设备,如果要建立OSPF邻接关系,则并不要求二者使用相同的进程号。

通配符掩码Wildcard-mask

  • 通配符是一个32比特长度的数值,用于指示IP地址中,哪些比特位需要严格匹配,哪些比特位则无所谓。
  • 通配符通常采用类似网络掩码的点分十进制形式表示,但是含义却与网络掩码完全不同。

网络掩码

通配符

例如255.255.255.0

例如0.0.0.255

用于指示IP地址中,哪些比特是网络部分,哪些是主机部分。

用于指示IP地址中,哪些比特位需要严格匹配,哪些比特位则无所谓。

网络掩码中为1的比特表示网络部分。

通配符中为1的比特表示无需匹配。

网络掩码中为0的比特表示主机部分。

通配符中为0的比特表示需严格匹配。

lsu在ospf中的作用 ospf的lsdb是什么_字段_15

单区域OSPF

lsu在ospf中的作用 ospf的lsdb是什么_链路_16

配置:

[AR1]ospf 1 router-id 1.1.1.1
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[AR1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
[AR2]ospf 1 router-id 2.2.2.2
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[AR2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[AR2]ospf 1 router-id 3.3.3.3
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[AR2-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255

查看邻居信息

lsu在ospf中的作用 ospf的lsdb是什么_链路_17

查看学习到的路由

lsu在ospf中的作用 ospf的lsdb是什么_OSPF_18

多区域OSPF

lsu在ospf中的作用 ospf的lsdb是什么_网络_19

配置:

[AR1]ospf 1 router-id 1.1.1.1
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
[AR1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[AR2]ospf 1 router-id 2.2.2.2
[AR2-ospf-1]area 0               # area 0
[AR2-ospf-1-area-0.0.0.0]net	
[AR2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[AR2-ospf-1-area-0.0.0.0]area 1     # area 1
[AR2-ospf-1-area-0.0.0.1]network 192.168.23.0 0.0.0.255
[AR3]ospf 1 router-id 3.3.3.3
[AR3-ospf-1]area 1
[AR3-ospf-1-area-0.0.0.1]network 192.168.23.0 0.0.0.255
[AR3-ospf-1-area-0.0.0.1]network 192.168.2.0 0.0.0.255

查看路由表

lsu在ospf中的作用 ospf的lsdb是什么_链路_20