一、OSPF 原理简介

1、定义

开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。本文的OSPF均指对IPv4协议使用的OSPFv2

2、特点

由于RIP协议存在收敛慢、路由环路及扩展性差等问题,不适合大规模网络。与RIP等路由协议相比,OSPF具有如下特点:

  • 适应范围广:支持各种规模的网络,特别是大型网络。
  • 收敛速度快:在网络拓扑结构发生变化后立即发送更新报文,并将变化在AS(Autonomous System,自治系统即由一组使用相同路由协议来交换路由信息的路由设备组成的网络)中同步。
  • 无路由自环:OSPF根据收集到的链路状态利用最短路径树算法计算路由,从算法本身保证了不会形成路由自环。
  • 支持区域划分:允许将网络划分成不同区域来分层管理,区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽。
  • 支持等价路由:支持到同一目的地址的多条等价路由。
  • 支持组播:在某些类型的链路上以组播地址发送协议报文,减少对其它设备的干扰。
  • OSPF中对路由信息的描述都是封装在链路状态通告LSA(Link State Advertisement)中发布出去的。

3、路由设备ID号

一台路由设备如果要运行OSPF协议,则必须存在Router ID(路由设备ID)。Router ID是一个32比特无符号整数,可以在一个自治系统中唯一的标识一台路由设备。Router ID可以由系统选举产生,也可以手动进行配置。Router ID选举规则如下:

  • 若存在配置IP地址的Loopback接口,则选择Loopback接口地址中最大的作为Router ID
  • 若没有配置IP地址的Loopback接口,则从IP接口中选择IP地址最大的作为Router ID
  • IP地址已经被其它OSPF进程选用,则不能被该进程选用;
  • 若没有配置任何IP地址,则无法选举Router ID,无法创建进程,只能手动配置Router ID

4、OSPF的网络类型

根据链路层协议类型,OSPF将网络分为以下几种类型:

  • 广播(Broadcast)类型:当链路层协议是EthernetFDDI时,OSPF缺省认为网络类型是Broadcast。在该类型的网络中,通常以组播形式(组播地址为224.0.0.5224.0.0.6)发送协议报文。
  • P2MP(Point-to-MultiPoint,点到多点)类型:没有一种链路层协议会被缺省的认为是P2MP类型,必须是由其他的网络类型强制更改的。常用做法是将NBMA改为P2MP。在该类型的网络中,缺省情况下,以组播形式(组播地址为224.0.0.5)发送协议报文。可以根据用户需要,以单播形式发送协议报文。
  • P2P(Point-to-Point,点到点)类型:当链路层协议是PPPHDLC(High-Level Data Link Control,高级数据链路控制)时,OSPF缺省认为网络类型是P2P。在该类型的网络中,以组播形式(组播地址为224.0.0.5)发送协议报文。
  • NBMA(Non-Broadcast Multi-Access)类型:当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。

5、OSPF的协议报文:

OSPF协议报文主要包括以下几种:

47397c8fa2880debd74fa05d0fd0cc17.png

6、邻居和邻接:

OSPF网络中,邻居设备之间为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念:

  • 邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。
  • 邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

邻居和邻接状态是通过OSPF状态机表现的,OSPF共有8种邻居状态机,分别是DownAttemptInit2-wayExstartExchangeLoadingFull,如下图所示。Down2-wayFull是稳定状态,AttemptInitExstartExchangeLoading是不稳定状态。不稳定状态是在转换过程中瞬间存在的状态,一般不会超过几分钟。

4c741c1d2f097f9922697f5d1f086c34.png

OSPF邻居状态机及含义如下表:

bf3f73c90292b93c4bd90df0d8359203.png

7、OSPF路由的计算过程

OSPF协议中,路由的计算过程如下:

  • 每台OSPF路由设备根据网络拓扑结构生成LSA,并通过更新报文将LSA发送给网络中的其它OSPF路由设备。
  • 每台OSPF路由设备都会收集其它路由设备通告的LSA,所有的LSA组成了LSDBLSA是对路由设备周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。
  • OSPF路由设备将LSDB转换成一张带权值的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由设备得到的有向图是完全相同的。
  • 每台路由设备根据有向图,使用SPF(Shortest Path First,最短路径优先)算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。

二、OSPF 基本功能配置方式

1、CN12900、CN12700、CN8000、CN93240、CN6000(CN61108PC-V-H除外)系列交换机适用

配置步骤:

Switch(config)#feature ospf

//开启ospf feature

Switch(config)#router ospf 1

//创建OSPF进程1

Switch(config-router)#router-id 192.168.1.100

//配置router-id

Switch(config)#interface vlan 100

//进入三层接口配置视图

Switch(config-if)#ip address 192.168.100.254/24

//配置三层接口的IP地址

Switch(config-if)# ip router ospf 1 area 0.0.0.0

//将该接口的网段宣告进OSPF进程1区域O

多台设备建立起OSPF邻局关系后,可通过以下命令查看OSPF邻居状态:

Switch# show ip ospf neighbors

OSPF Process ID 1 VRF default

Total number of neighbors: 3

Neighbor ID Pri State Up Time Address Interface

192.168.1.4 1 TWOWAY/DROTHER 6d07h 192.168.2.51 Vlan105

192.168.1.6 1 FULL/DR 2d01h 192.168.2.60 Vlan107

192.168.1.8 1 FULL/BDR 6d07h 192.168.2.61 Vlan109

备注:

不同于其他产品,CN12900CN12700CN8000CN93240CN6000(CN61108PC-V-H除外)系列交换机在宣告某网段到OSPF进程中时,需要在SVI、三层物理接口、loopback等三层接口下进行配置。

2、SC9600系列交换机适用

配置步骤:

Switch(config)interface vlan 10

//进入三层接口配置视图

Switch(config-if)ip address 1.1.1.1/24

//配置三层接口的IP地址

Switch(config)interface vlan 20

//进入三层接口配置视图

Switch(config-if)ip address 3.1.1.1/24

//配置三层接口的IP地址

Switch(config)#router ospf

//创建OSPF进程1

Switch(config-ospf-1)#router-id 1.1.1.1

//配置router-id

Switch(config-ospf-1)#network 1.1.1.0 255.255.255.0 area 0

//将该网段宣告进OSPF进程1区域O

Switch(config-ospf-1)#network 3.1.1.0 255.255.255.0 area 1

//将该网段宣告进OSPF进程1区域1

多台设备建立起OSPF邻局关系后,可通过以下命令查看OSPF邻居状态:

Switch# show ip ospf neighbor

OSPF Process 1

Ip Address NeighborID Option Priority State Event Aging

1.1.1.2 1.1.1.2 2 1 full 6 37

3.1.1.3 3.1.1.3 2 1 full 6 34

备注:

SC系列交换机默认OSPF进程ID1,创建OSPF进程时如果不明确process id,则进入默认进程1中。

3、CN61108PC-V-H、CN9008、S6350、S6820、S6550E、S6220等系列交换机适用

配置步骤:

Switch(config)interface eth-0-1

//进入三层接口配置视图

Switch(config-if)ip address 10.10.10.9/24

//配置三层接口的IP地址

Switch(config)#router ospf 1

//创建OSPF进程1

Switch(config-router)#router-id 10.10.9.10

//配置router-id

Switch(config-router)# network 10.10.10.0/24 area 0

//将该网段宣告进OSPF进程1区域O

多台设备建立起OSPF邻局关系后,可通过以下命令查看OSPF邻居状态:

Switch# show ip ospf neighbor

OSPF process 1:

Neighbor ID Pri State Dead Time Address Interface

10.10.10.10 1 Full/DROther 00:00:32 10.10.10.10 eth-0-1

10.10.10.11 1 Full/BDR 00:00:31 10.10.10.11 eth-0-1

4、S6650、S6850系列交换机适用

配置步骤:

Switch(config)#ip routing

//使能三层路由功能

Switch(config)#router ospf 1

//创建OSPF进程1

Switch(config-router)#router-id 192.168.10.254

//配置router-id

S6650S6850系列交换机OSPF宣告网段时,既可以在三层接口下直接配置,也可以在OSPF进程下进行配置。

a.在三层接口下宣告网段

Switch(config)#interface vlan 10

//进入三层接口配置视图

Switch(config-if)#ip address 192.168.10.254 255.255.255.0

//配置三层接口的IP地址

Switch(config-if)# ip ospf 1 area 0.0.0.0

//将该接口的网段宣告进OSPF进程1区域O

b.OSPF进程中宣告网段

Switch(config-router)# network 192.168.10.0 0.0.0.255 area 0.0.0.0

//将该网段宣告进OSPF进程1区域O

多台设备建立起OSPF邻局关系后,可通过以下命令查看OSPF邻居状态:

Switch# show ip ospf neighbor

Neighbor ID Pri State Dead Time Address Interface

192.168.10.100 1 Full/DR 00:00:32 192.168.10.100 vlan 10

5、S6550系列交换机适用

配置步骤:

Switch(config)#interface vlan 100

//进入三层接口配置视图

Switch(config)#ip address 10.10.10.1 255.255.255.0

//配置三层接口的IP地址

Switch(config)#router ospf 1 router-id 10.10.10.1

//创建OSPF进程1并设置router-id

Switch(config -router-ospf)# #network 10.10.10.0 0.0.0.255 area 0.0.0.0

//将该网段宣告进OSPF进程1区域O

多台设备建立起OSPF邻局关系后,可通过以下命令查看OSPF邻居状态:

Switch# show ip ospf neighbor

Neighbor ID Pri State Dead Time Address Interface

10.10.10.2 1 Full/DR 00:00:44 10.10.10.2 vlan100

6、IR12000(E20除外)系列路由器适用

配置步骤:

Router(config)# interface gei-1/1

//进入三层接口配置视图

Router(config-if-gei-1/1)# ip address 10.150.1.12 255.255.255.240

//配置三层接口的IP地址

Router(config-if-gei-1/1)# no shutdown

Switch(config)#router ospf 1

//创建OSPF进程1

Switch(config-ospf)# router-id 10.150.1.12

//配置router-id

Switch(config-ospf)# network 10.150.1.0 0.0.0.255 area 0.0.0.0

//将该网段宣告进OSPF进程1区域O

多台设备建立起OSPF邻局关系后,可通过以下命令查看OSPF邻居状态:

Switch# show ip ospf neighbor

OSPF Router with ID (10.150.1.12) (Process ID 1)

Neighbor ID Pri State Dead Time Address Interface

10.150.1.13 1 Full/DR 00:00:44 10.150.1.13 gei-1/1

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐