路由器知识网 手机版
当前位置: 首页 --> 路由器知识 -->

路由协议系列之OSPF的工作原理

2024-12-08 10:53:29

OSPF协议是怎么工作的?怎么把路由计算出来的?我相信这是学习路由协议的同学经常会思考的问题。那么今天我们就来一起学习一下,OSPF协议的工作原理以及基本的概念。


一、OSPF概述


1、OSPF是典型的链路状态路由协议,是目前业内使用非常广泛的IGP协议之一。


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


3、运行OSPF路由器之间交互的是LS(Link State,链路状态)信息,而不是直接交互路由。LS信息是OSPF能够正常进行拓扑及路由计算的关键信息。


4、OSPF路由器将网络中的LS信息收集起来,存储在LSDB中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。


5、每台OSPF路由器都采用SPF算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。


6、OSPF支持VLSM(Variable Length Subnet Mask,可变长子网掩码),支持手工路由汇总。


7、多区域的设计使得OSPF能够支持更大规模的网络。


二、基本概念


1、OSPF区域


①OSPF Area用于标识一个OSPF的区域。


②区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。


2、Router-ID


①Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。


②Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。


③在实际项目中,通常会通过手工配置方式为设备指定OSPF Router-ID。请注意必须保证在OSPF域中任意两台设备的Router-ID都不相同。通常的做法是将Router-ID配置为与该设备某个接口(通常为Loopback接口)的IP地址一致。


3、OSPF区域


①OSPF Area用于标识一个OSPF的区域。


②区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。


③OSPF的区域ID是一个32bit的非负整数,按点分十进制的形式(与IPv4地址的格式一样)呈现,例如Area0.0.0.1。为了简便起见,我们也会采用十进制的形式来表示。


4、cost值


一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。


OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=。其中100 为OSPF指定的缺省参考值,该参考值值是可配置的。也可以通过手工命令的方式配置接口的COST值,手工配置接口COST值由于系统自动计算的值。


5、五种类型的协议报文


6、三大表项


OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。


①OSPF的邻居表:

OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。

OSPF的邻居关系通过交互Hello报文建立。

OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。


②OSPF的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路由表。


7、DR/BDR


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


②只允许DR、BDR与其他OSPF路由器建立邻接关系。DRother之间建立邻居关系,双方停滞在2-way状态。


③BDR会监控DR的状态,并在当前DR发生故障时接替其角色。


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


8、OSPF网络类型


9、OSPF邻居状态机


Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。


Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。


Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。


2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。


2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。


1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。


ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的;初始DD序列号是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。


Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。


Loading:相互发送LS Request报文请求LSA,发送LS Update通告LSA。


Full:两台路由器的LSDB已经同步。


10、LSA

LSA是OSPF进行路由计算的关键依据。常见的LSA类型有:



三、OSPF工作过程


OSPF工作过程主要分为三步:邻居发现,建立邻接关系、同步LSDB,优选路径计算、OSPF路由计算。



1、邻居发现


OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系,状态到达2-way 即可称为建立了邻居关系。


Hello报文用来发现和维持OSPF邻居关系。

Hello报文的作用:

邻居发现:自动发现邻居路由器。

邻居建立:完成Hello报文中的参数协商,建立邻居关系。

邻居保持:通过Keepalive机制,检测邻居运行状态。


邻居建立过程如下:

①RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Init。


②RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。


③RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。


④RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。


因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。


对于不支持组播的网络可以通过手动配置实现邻居的发现与维护。


2、建立邻接关系、同步LSDB


形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。


如果两台邻居路由器之间的网络类型是P2P网络或P2MP网络,则这两台邻居路由器直接进入LSDB同步的过程;如果两台邻居路由器之间的网络类型是broadcast网络或NBMA网络,则选举DR与BDR,然后DR与BDR之间、DRothers与DR之间、DRothers与BDR之间的LSDB同步的过程。


当双方成功交换DD报文,并同步LSDB后,才形成真正意义上的邻接关系。


LSDB同步过程如下:


①RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。


②当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。


③当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。


④当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为Master。


⑤虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。


⑥RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。


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


⑧RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。


3、优选路径计算与OSPF路由计算


同一区域内的OSPF路由器拥有完全一致的LSDB,在区域内部,OSPF采用SPF算法完成路由计算。


OSPF路由计算包括区域内部路由、区域间路由及外部路由的计算过程。


①区域内OSPF路由计算

同一区域的OSPF路由器拥有完全一致的LSDB。在只有一个区域的情况下,区域内部主要存在两种类型的LSA,即Router-LSA和Network-LSA。


每台路由器都会产生Router-LSA,描述了路由器的直连接口信息。


在MA网络中,DR会产生Network-LSA来描述接入该MA网络的所有路由器的Router-ID(其中包括DR自身),以及这个网络的掩码。


②区域间OSPF路由计算

OSPF区域间路由信息传递是通过ABR产生的Network Summary LSA(3类LSA)实现的。


以192.168.1.0/24路由信息为例:

R2依据Area 1内所泛洪的Router LSA及Network LSA计算得出192.168.1.0/24路由(区域内路由),并将该路由通过Network Summary LSA通告到Area 0。R3根据该LSA可计算出到达192.168.1.0/24的区域间路由。


R3重新生成一份Network Summary LSA通告到Area 2中,至此所有OSPF区域都能学习到去往192.168.1.0/24的路由。


OSPF使用3类LSA来描述区域间的路由信息。


为了避免出现区域间路由环路,OSPF设计了多个规则。


OSPF Virtual Link是一种虚拟的、逻辑的链路,被部署在两台OSPF路由器之间,它穿越某个非骨干区域,用于实现另一个非骨干区域与Area0的连接。Virtual Link应该始终作为一种临时的技术手段来解决非骨干区域没有与Area0直接相连的情况。


③外部路由的计算

在一个大规模网络中,可能存在多种不同的路由协议,OSPF支持将AS外部路由引入本AS,使得AS内的路由器能够获知到达AS外部的路由。


ASBR将外部路由引入OSPF后,使用5类LSA描述它们,与ASBR同属一个区域的路由器能够根据5类LSA以及区域内的1类、2类LSA完成外部路由计算;与ASBR不在同一个区域的路由器还需借助4类LSA才能完成外部路由计算。


OSPF将外部路由引入OSPF后,可以设置路由的度量值类型:Metric-Type-1或Metric-Type-2,不同度量值类型的外部路由,其开销的计算方式不同,其路由的优先级也不相同,Metric-Type-1路由的优先级高于Metric-Type-2路由。


AS-external LSA(5类LSA):由ASBR产生,描述到达AS外部的路由,该LSA会被通告到所有的区域(除了Stub区域和NSSA区域)。


ASBR-Summary LSA(4类LSA):由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。


OSPF外部路由的2种度量值类型:


本文给大家介绍了关于OSPF的一些基本概念以及工作原理,从中我们可以了解到OSPF协议的设计理念、掌握其路由计算过程。这些知识可以为以后深入学习OSPF知识打下良好的基础。


OSPF协议应用广泛,也是从业者经常遇到的“老朋友”,在不断的学习进取中,我们对OSPF的认知会越来越深。