OSPF基础

宁 邹 发布于 2025-05-06 551 次阅读 3503 字 网络 最后更新于 2025-05-06


前言

在与OSPF类似的协议未出现之前,IP路由的配置通常是通过人工静态配置。当网络拓扑结构发生变化的时候需要手动调整,如果遇到大规模网络配置将会变得十分困难。

动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(Open Shortest Path First,开放式最短路径优先)协议是使用场景非常广泛的动态路由协议之一。

OSPF在RFC2328中定义,是一种基于链路状态算法的路由协议。


OSPF协议概述

为什么需要动态路由协议

静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。静态路由有以下问题:

  • 无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
  • 无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。

动态路由协议的分类

按工作区域分类

按工作机制及算法分类


距离矢量路由协议

距离矢量路由协议是数据通信中基于路径距离算法的一种动态路由协议,其核心思想是通过相邻的路由器周期性地交换路由信息,以矢量(距离和方向)的形式通告网络可达性。

运行距离矢量路由协议的路由器或三层交换机周期性的泛洪自己的路由表,通过路由的交互,每台路由器从相邻的路由器学习到路由,并加载自己的路由表中。对于网络中所用工作的路由器或三层交换和而言,并不清楚具体的网络拓扑,只是简单地知道要去往的某个目的地址在哪个方向,距离有多远。这是距离矢量算法的本质。


链路状态路由协议

LSA泛洪

与距离矢量路由协议不同的是,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。链路状态通告,可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告。

  • 不再通告路由信息,而是LSA。
  • LSA描述了路由器接口的状态信息,例如接口的开销、连接的对象等。

LSDB组建

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

  • 路由器将LSA存放在LSDB中
  • LSDB汇总了网络中路由器对于自己接口的描述
  • LSDB包含全网拓扑的描述

SPF计算

每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。

路由表生成

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


OSPF简介

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


OSPF基础术语

区域

OSPF Area用于标识一个OSPF区域。区域是从逻辑上将设备划分为不同的组,每个组用区域编号Area ID标识。

Router-ID

Router-ID(Router Identifier),用于在一个OSPF域中唯一地标识一台路由器。Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。在实际项目中通常会通过手工配置的方式为设备指定Router-ID,Router-ID是唯一地,通常配置为Loopback的IP地址相同。


OSPF报文协议类型

OSPF共有5种报文类型。这些报文在OSPF路由器之间起到不同作用。

报文名称报文功能
Hello周期性发送,用来发现和维护OSPF邻居关系。
Database Description描述本地LSDB的摘要信息,用于两台设备进行数据库同步。
Link State Request用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
Link State Update用于向对方发送其所需要的LSA。
Link State ACK用来对收到的LSA进行确认。

OSPF三大表项

邻居表

OSPF协议在传递链路状态信息之前,需要先建立OSPF邻居关系,OSPF邻居关系通过交互Hello报文建立,OSPF邻居表显示了OSPF路由器之间的邻居状态,使用“display ospf peer“命令查看邻居表。

LSDB表

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

OSPF路由表

OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。使用命令”display ospf routing“查看OSPF路由表。


OSPF协议工作原理

初识OSPF邻接关系建立过程

OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB。


OSPF网络类型简介

OSPF网络类型是一个非常重要的接口变量,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文,以及是否需要选举DR、BDR等。接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。

如图所示,OSPF的有四种网络类型,Broadcast、NBMA、P2MP和P2P。

一般情况下,链路两端的OSPF接口网络类型必须保持一致,否则双方无法建立邻居关系。OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景。

  • P2P,点对点:指的是在一段链路上只能连接两台网络设备的环境,典型的例子就是PPP链路。
  • BMA,广播式多路访问:指的是一个允许多台设备接入的,支持广播的环境。典型的例子是Ethernet,当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA。
  • NBMA,非广播式多路访问:指的是一个允许多台网络设备接入且不支持广播的环境,典型的例子就是帧中继(Frame-Relay)网络。
  • P2MP,点到多点:P2MP相当于将多条P2P链路的一段进行捆绑得到的网络,值得注意的是没有一种链路层协议会被缺省的认为是P2MP网络类型,该类型必须由其他网络类型手动更改。常用的做法是将非全连通的NBMA协议改为点到多点的网络。
P2P
BMA
NBMA
P2MP

DR与BDR

MA(Multi-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)及非广播型多路访问网络(NBMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。

在MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量。当拓扑出现变更,网络中的LSA泛洪可能会造成带宽的浪费和设备资源的损耗。

为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备用指定路由器)和DRother路由器。

只允许DR、BDR与其他OSPF路由器建立邻接关系。DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。BDR会监控DR的状态,并在当前DR发生故障时接替其角色。

选举规则:OSPF DR优先级更高的接口成为该MA的DR,如果优先级相等(默认为1),则具有更高的OSPF Router-ID的路由器(的接口)被选举成DR,并且DR具有非抢占性。


OSPF区域

OSPF域(Domain):一系列使用相同策略的连续OSPF网络设备所构成的网络。OSPF路由器在同一个区域(Area)内网络中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。

OSPF单区域

如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题:

  • LSDB越来越庞大,同时导致OSPF路由表规模增加。路由器资源消耗多,设备性能下降,影响数据转发。
  • 基于庞大的LSDB进行路由计算变得困难。
  • 当网络拓扑变更时,LSA全域泛洪和全网SPF重计算带来巨大负担。

OSPF多区域

OSPF引入区域(Area)的概念,将一个OSPF域划分成多个区域,可以使OSPF支撑更大规模组网。

OSPF多区域的设计减小了LSA泛洪的范围,有效的把拓扑变化的影响控制在区域内,达到网络优化的目的。

在区域边界可以做路由汇总,减小了路由表规模。多区域提高了网络扩展性,有利于组建大规模的网络。


OSPF路由器类型

OSPF路由器根据其位置或功能不同,有这样几种类型:

  • 区域内路由器(Internal Router):该类路由器的所有接口都属于同一个OSPF区域
  • 区域边界路由器ABR(Area Border Router):该类路由器的接口同时属于两个以上的区域,但至少有一个接口属于骨干区域
  • 骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨干区域
  • 自治系统边界路由器ASBR(AS Boundary Router):该类路由器与其他AS交换路由信息。只要一台OSPF路由器引入了外部路由的信息,他就成为ASBR。

OSPF协议典型配置命令

1.(系统视图)创建并运行OSPF进程

[Huawei] ospf [ process-id | router-id router-id ]

porcess-id用于标识OSPF进程,默认进程号为1。OSPF支持多进程,在同一台设备上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。router-id用于手工指定设备的ID号。如果没有通过命令指定ID号,系统会从当前接口的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 bit。

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。


2025 年 5 月
 1234
567891011
12131415161718
19202122232425
262728293031  

二次元!不是的?喜欢数码科技吗?我来带你了解。
最后更新于 2025-05-06