HCIA-Datacom笔记之OSPF基础
由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。
动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(Open Shortest Path First,开放式最短路径优先)协议是使用场景非常广泛的动态路由协议之一。
OSPF在RFC2328中定义,是一种基于链路状态算法的路由协议。
6.1 OSPF协议概述
6.1.1 为什么需要动态路由协议?
静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。
静态路由有以下问题:
- 无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
- 无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。

6.1.2 动态路由协议的分类
1、根据路由信息传递的内容、计算路由的算法,可以将动态路由协议分为两大类
距离矢量协议(Distance-Vector Protocol):RIP、BGP
链路状态协议(Link-State Protocol):OSPF、IS-IS
注意:
BGP使用一种基于距离矢量算法修改后的算法,该算法被称为路径适量(Path Vector)算法。因此在某些场合下,BGP也被称为路径矢量路由协议。
2、根据工作范围不同,又可以分为
内部网关协议IGP(Interior Gateway Protocol):在一个自治系统内部运行。RIP、OSPF、ISIS为常见的IGP协议。
外部网关协议EGP(Exterior Gateway Protocol):运行于不同自治系统之间。BGP是目前最常用的EGP协议。
6.1.3 距离矢量路由协议
运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。
对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远。这即是距离矢量算法的本质。

6.1.4 链路状态路由协议
与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。
链路状态通告,可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告。
链路状态路由协议有四个步骤:
第一步是建立相邻路由器之间的邻居关系。
第二步是邻居之间交互链路状态信息和同步LSDB。
第三步是进行优选路径计算。
第四步是根据最短路径树生成路由表项加载到路由表。
6.1.4.1 LSA泛洪
运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。

6.1.4.2 LSDB组建
每台路由器都会产生LSAs,路由器将接收到的LSAs放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。

- 路由器将LSA存放在LSDB中
- LSDB汇总了网络中路由器对于自己接口的描述
- LSDB包含全网拓扑的描述
6.1.4.3 SPF计算
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。
每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。

6.1.4.4 路由表生成
路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。

6.1.5 OSPF简介
OSPF是典型的链路状态路由协议,是目前业内使用非常广泛的IGP协议之一。
目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明本章后续所指的OSPF均为OSPF Version 2。
6.1.5.1 OSPF协议特点
- 运行OSPF路由器之间交互的是LS(Link State,链路状态)信息,而不是直接交互路由。LS信息是OSPF能够正常进行拓扑及路由计算的关键信息。
- OSPF路由器将网络中的LS信息收集起来,存储在LSDB中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
- 每台OSPF路由器都采用SPF算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
- OSPF支持VLSM(Variable Length Subnet Mask,可变长子网掩码),支持手工路由汇总。
- 多区域的设计使得OSPF能够支持更大规模的网络。
6.1.5.2 OSPF在园区网络中的应用
在核心交换机与汇聚交换机上运行OSPF,实现园区网络内的路由可达。

6.1.5.3 OSPF基础术语
区域
OSPF Area用于标识一个OSPF的区域。
区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。

Router-ID
Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。

在实际项目中,通常会通过手工配置方式为设备指定OSPF Router-ID。请注意必须保证在OSPF域中任意两台设备的Router-ID都不相同。通常的做法是将Router-ID配置为与该设备某个接口(通常为Loopback接口)的IP地址一致。
度量值
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=100 Mbit/s /接口带宽。其中100 Mbit/s为OSPF指定的缺省参考值,该值是可配置的。
笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。


6.1.5.4 OSPF协议报文类型
OSPF有五种类型的协议报文。这些报文在OSPF路由器之间交互中起不同的作用

6.1.5.5 OSPF三大表项
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。
邻居表
对于OSPF的邻居表,需要了解:
- OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
- OSPF的邻居关系通过交互Hello报文建立。
- OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。

LSDB表
对于OSPF的LSDB表,需要了解:
- LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
- Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
- 使用命令行display ospf lsdb查看LSDB表。

OSPF路由表
对于OSPF的路由表,需要了解:
- OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
- OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。
- 使用命令display ospf routing查看OSPF路由表。

6.2 OSPF协议工作原理
6.2.1 邻居关系和邻接关系
- 考虑一种简单的拓扑,两台路由器直连。在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。
- 邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。
6.2.2 OSPF邻接关系建立过程
OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB。

6.2.2.1 OSPF邻接关系建立流程 - 1

当一台OSPF路由器收到其他路由器发来的首个Hello报文时会从初始Down状态切换为Init状态。
当OSPF路由器收到的Hello报文中的邻居字段包含自己的Router ID时,从Init切换2-way状态。
6.2.2.2 OSPF邻接关系建立流程 - 2&3

(1)邻居状态机从2-way转为Exstart状态后开始主从关系选举:
- R1向R2发送的第一个DD报文内容为空,其Seq序列号假设为X。
- R2也向R1发出第一个DD报文,其Seq序列号假设为Y。
- 选举主从关系的规则是比较Router ID,越大越优。R2的Router ID比R1大,因此R2成为真正的主设备。主从关系比较结束后,R1的状态从Exstart转变为Exchange。
(2)R1邻居状态变为Exchange后,R1发送一个新的DD报文,包含自己LSDB的描述信息,其序列号采用主设备R2的序列号。R2收到后邻居状态从Exstart转变为Exchange。
(3)R2向R1发送一个新的DD报文,包含自己LSDB的描述信息,序列号为Y+1。
(4)R1作为从路由器需要对主路由R2发送的每个DD报文进行确认,回复报文的序列号与主路由R2一致。
发送完最后一个DD报文后,R1将邻居状态切换为Loading。
6.2.2.3 OSPF邻接关系建立流程 - 4

(1)邻居状态转变为Loading后,R1向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,但是在本地LSDB中没有的LSA。
(2)R2收到后向R1回复LSU。在LSU报文中包含被请求的LSA的详细信息。
(3)R1收到LSU报文后,向R2回复LS ACK报文,确认已接收到,确保信息传输的可靠性。
(4)此过程中R2也会向R1发送LSA请求。当两端LSDB完全一致时,邻居状态变为Full,表示成功建立邻接关系。
6.2.3 OSPF邻居表回顾

如图所示输入display ospf peer命令之后,各项参数含义如下:
- OSPF Process 1 with Router ID 1.1.1.1:本地OSPF进程号为1与本端OSPF Router ID为1.1.1.1
- Router ID:邻居OSPF路由器ID
- Address:邻居接口地址
- GR State:使能OSPF GR功能后显示GR的状态(GR为优化功能),默认为Normal
- State:邻居状态,正常情况下LSDB同步完成之后,稳定停留状态为Full
- Mode:用于标识本台设备在链路状态信息交互过程中的角色是Master还是Slave
- Priority:用于标识邻居路由器的优先级(该优先级用于后续DR角色选举)
- DR:指定路由器
- BDR:备份指定路由器
- MTU:邻居接口的MTU值
- Retrans timer interval:重传LSA的时间间隔,单位为秒
- Authentication Sequence:认证序列号
6.2.4 OSPF网络类型简介
OSPF网络类型是一个非常重要的接口变量,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文,以及是否需要选举DR、BDR等。
接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。
如图所示,OSPF的有四种网络类型,Broadcast、NBMA、P2MP和P2P。

一般情况下,链路两端的OSPF接口网络类型必须一致,否则双方无法建立邻居关系。
OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景,例如可以将BMA网络类型修改为P2P。
6.2.4.1 P2P(Point-to-Point,点对点)
P2P指的是在一段链路上只能连接两台网络设备的环境。

典型的例子是PPP链路。当接口采用PPP封装时,OSPF在该接口上采用的缺省网络类型为P2P 。
6.2.4.2 BMA(Broadcast Multiple Access,广播式多路访问)
BMA也被称为Broadcast,指的是一个允许多台设备接入的、支持广播的环境。

典型的例子是Ethernet(以太网)。当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA。
6.2.4.3 NBMA(Non-Broadcast Multiple Access,非广播式多路访问)
NBMA指的是一个允许多台网络设备接入且不支持广播的环境。

典型的例子是帧中继(Frame-Relay)网络。
6.2.4.4 P2MP(Point to Multi-Point,点到多点)
P2MP相当于将多条P2P链路的一端进行捆绑得到的网络。

没有一种链路层协议会被缺省的认为是P2MP网络类型。该类型必须由其他网络类型手动更改。
常用做法是将非全连通的NBMA改为点到多点的网络。
6.2.5 DR&BDR
6.2.5.1 DR与BDR的背景
MA(Multi-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)及非广播型多路访问网络(NBMA)。
以太网(Ethernet)是一种典型的广播型多路访问网络。
在MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量。
当拓扑出现变更,网络中的LSA泛洪可能会造成带宽的浪费和设备资源的损耗。

6.2.5.2 DR与BDR
为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备用指定路由器)和DRother路由器。
- 只允许DR、BDR与其他OSPF路由器建立邻接关系。
- DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。
- BDR会监控DR的状态,并在当前DR发生故障时接替其角色。

6.2.6 OSPF域、单区域、多区域
6.2.6.1 OSPF域
OSPF域(Domain):一系列使用相同策略的连续OSPF网络设备所构成的网络。

6.2.6.2 单区域
OSPF路由器在同一个区域(Area)内网络中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。
如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题:
- LSDB越来越庞大,同时导致OSPF路由表规模增加。路由器资源消耗多,设备性能下降,影响数据转发。
- 基于庞大的LSDB进行路由计算变得困难。
- 当网络拓扑变更时,LSA全域泛洪和全网SPF重计算带来巨大负担。
6.2.6.3 多区域

OSPF引入区域(Area)的概念,将一个OSPF域划分成多个区域,可以使OSPF支撑更大规模组网。
OSPF多区域的设计减小了LSA泛洪的范围,有效的把拓扑变化的影响控制在区域内,达到网络优化的目的。
在区域边界可以做路由汇总,减小了路由表规模。
多区域提高了网络扩展性,有利于组建大规模的网络。
注意:
区域的分类:区域可以分为骨干区域与非骨干区域。骨干区域即Area0,除Area0以外其他区域都称为非骨干区域。
多区域互联原则:基于防止区域间环路的考虑,非骨干区域与非骨干区域不能直接相连,所有非骨干区域必须与骨干区域相连。
6.2.7 OSPF路由器类型
OSPF路由器根据其位置或功能不同,有这样几种类型:
- 区域内路由器(Internal Router):该类路由器的所有接口都属于同一个OSPF区域。
- 区域边界路由器ABR(Area Border Router):该类路由器的接口同时属于两个以上的区域,但至少有一个接口属于骨干区域。
- 骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨干区域。
- 自治系统边界路由器ASBR(AS Boundary Router):该类路由器与其他AS交换路由信息。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。

6.2.8 OSPF单区域&多区域典型组网
中小型企业网络规模不大,路由设备数量有限,可以考虑将所有设备都放在同一个OSPF区域。

大型企业网络规模大,路由设备数量很多,网络层次分明,建议采用OSPF多区域的方式部署。

6.3 OSPF协议典型配置
6.3.1 OSPF基础配置命令
1、(系统视图)创建并运行OSPF进程
[Huawei] **ospf** [ process-id | **router-id** router-id ]
porcess-id用于标识OSPF进程,默认进程号为1。OSPF支持多进程,在同一台设备上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。
router-id用于手工指定设备的ID号。如果没有通过命令指定ID号,系统会从当前接口的IP地址中自动选取一个作为设备的ID号。
注意:
Router ID的选择顺序是:优先从Loopback地址中选择最大的IP地址作为设备的ID号,如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为设备的ID号。
2、(OSPF视图)创建并进入OSPF区域
[Huawei] **area** area-id
area命令用来创建OSPF区域,并进入OSPF区域视图。
area-id可以是十进制整数或点分十进制格式。采取整数形式时,取值范围是0~4294967295。
3、(OSPF区域视图)指定运行OSPF的接口
[Huawei-ospf-1-area-0.0.0.0] **network** network-address wildcard-mask
network命令用来指定运行OSPF协议的接口和接口所属的区域。network-address为接口所在的网段地址。wildcard-mask为IP地址的反码,相当于将IP地址的掩码反转(0变1,1变0),例如0.0.0.255表示掩码长度24
4、(接口视图)配置OSPF接口开销
[Huawei-GE1/0/1] **ospf cost** cost
ospf cost命令用来配置接口上运行OSPF协议所需的开销。缺省情况下,OSPF会根据该接口的带宽自动计算其开销值cost取值范围是1~65535。
5、(OSPF视图)设置OSPF带宽参考值
[Huawei-ospf-1] **bandwidth-reference** value
bandwidth-reference命令用来设置通过公式计算接口开销所依据的带宽参考值。value取值范围是1~2147483648,单位是Mbit/s,缺省值是100Mbit/s。
6、(接口视图)设置接口在选举DR时的优先级
[Huawei-GigabitEthernet0/0/0] **ospf dr-priority** priority
ospf dr-priority命令用来设置接口在选举DR时的优先级。priority值越大,优先级越高,取值范围是0~255。
6.3.2 OSPF配置案例
案例描述:
有三台路由器R1、R2和R3,其中R1和R2分别连接网络1.1.1.1/32和3.3.3.3/32(LoopBack 0模拟),现需要使用OSPF实现这两个网络的互通。具体拓扑如下:

配置过程分为三个步骤:配置设备接口、配置OSPF和验证结果。
6.3.2.1 OSPF配置案例 - 配置接口
#配置R1的接口
[R1] interface LoopBack 0
[R1-LoopBack0] ip address 1.1.1.1 32
[R1-LoopBack0] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 10.1.12.1 30
#配置R2的接口
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 10.1.12.2 30
[R2-GigabitEthernet0/0/0] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 10.1.12.2 30
#配置R3的接口
[R3] interface LoopBack 0
[R3-LoopBack0] ip address 3.3.3.3 32
[R3-LoopBack0] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 10.1.23.2 30
6.3.2.2 配置OSPF
OSPF参数规划:OSPF进程号为1。R1、R2和R3的Router ID分别为1.1.1.1、2.2.2.2和3.3.3.3。
配置步骤:
- 创建并运行OSPF进程
- 创建并进入OSPF区域
- 运行指定的OSPF接口
#配置R1 OSPF协议
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.3
#配置R2 OSPF协议
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.3
[R2-ospf-1-area-0.0.0.0] area 1
[R2-ospf-1-area-0.0.0.1] network 10.1.23.0 0.0.0.3
#配置R3 OSPF协议
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 1
[R3-ospf-1-area-0.0.0.1] network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.1] network 10.1.23.0 0.0.0.3
6.3.2.3 结果验证
在路由器R1上查看路由表,并执行从源1.1.1.1 ping 3.3.3.3。


浙公网安备 33010602011771号