路由协议分类
按路由分类

按工作机制、算法分类

按有类、无类分类

按工作区域分类

OSPF简介
两台路由器运行OSPF协议的路由器若希望建立邻居关系,则必须满足的条件:
-
区域号要一致
-
均不配置验证、若均配置验证,需密钥完全相同
-
两端的
Hello与Dead Time时间间隔完全一致
常见优先级对比
宣告方式
辅助实验
OSPF进程下宣告
[R2]ospf 1 router-id 10.0.1.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 10.0.12.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 10.0.23.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 10.0.1.2 0.0.0.0接口下宣告
必须先配置IP再宣告OSPF
[R1]interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1]ip address 192.168.1.1 255.255.255.0
[R1-GigabitEthernet0/0/1]ospf enable 1 area 0
[R1-GigabitEthernet0/0/1]quit使用情景区分
-
在初次部署OSPF时,建议在进程配置模式下进行路由宣告,因为此时可以同时指定Router-ID、VPN-Instance等关键参数,实现一次性配置。
-
当后续需要扩展网络时,例如新增接口需要加入现有OSPF进程,则推荐在接口配置模式下进行宣告,这种方式能够有效减少操作步骤,实现命令最小化。
开销值计算
单个接口的OSPF开销值计算方法
华为设备计算单个接口的OSPF开销值,遵循以下默认公式:接口Cost值 = 参考带宽 / 接口带宽
cost = 10^8 / BW
参考带宽(Reference Bandwidth)
-
定义:这是一个基准值,用于标准化不同带宽接口的成本计算。
-
华为默认值:100 Mbps。
-
查看命令:
display ospf [process-id]在输出信息中查找Bandwidth-reference。
接口带宽(Interface Bandwidth)
-
定义:这是接口的物理带宽或手动配置的带宽。
-
单位:Mbps。
-
注意:接口的带宽值可以通过
display interface [interface-name]查看。有时需要手动使用bandwidth命令配置,因为某些接口(如以太网接口)的默认带宽可能不准确。
计算规则与限制
-
结果取整:计算结果是小数时,直接取整(不是四舍五入)。
-
最小值限制:计算出的Cost值不能小于1。如果
参考带宽/接口带宽 < 1,则Cost值取1。这是为了防止高速接口(如10G、100G)的Cost值变为0。
计算示例
假设使用默认参考带宽100 Mbps。
-
100 Mbps 以太网接口:Cost = 100 Mbps / 100 Mbps = 1
-
10 Mbps 以太网接口:Cost = 100 Mbps / 10 Mbps = 10
-
1.544 Mbps T1 接口:Cost = 100 Mbps / 1.544 Mbps ≈ 64.76 → 取整为 64
-
10 Gbps (10000 Mbps) 接口:Cost = 100 Mbps / 10000 Mbps = 0.01 → 因为小于1,所以取1
从这些例子可以看出,接口带宽越高,Cost值越低,路径越优。
如何修改OSPF开销值(三种方法)
在实际网络中,经常需要手动调整Cost值来影响路由选择。
方法1:修改接口带宽(不推荐用于控制Cost)
在接口视图下修改带宽值,这会直接影响Cost计算。
[Huawei] interface GigabitEthernet 0/0/0
[Huawei-GigabitEthernet0/0/0] bandwidth 1000 # 将带宽值改为1000 Mbps注意:这只会改变OSPF计算用的带宽参数,并不会改变接口的实际物理带宽。通常不建议用这种方法来控制Cost,因为它可能影响其他依赖带宽特性的协议(如QoS)。
方法2:直接配置接口的OSPF Cost值(最常用、最推荐)
这是最直接、最可靠的方法。在接口视图下直接指定该接口在OSPF中的Cost值。
[Huawei] interface GigabitEthernet 0/0/0
[Huawei-GigabitEthernet0/0/0] ospf cost 50 # 直接将该接口的OSPF Cost设置为50优先级最高:手动配置的Cost值会覆盖所有自动计算的值。
方法3:修改OSPF进程的参考带宽(用于高速网络)
当网络中存在大量高速接口(如10G、40G、100G)时,如果使用默认参考带宽100 Mbps,所有高速接口的Cost都会是1,无法区分优劣。此时可以增大参考带宽。
在OSPF进程视图下修改:
[Huawei] ospf 1
[Huawei-ospf-1] bandwidth-reference 1000 # 将参考带宽修改为1000 Mbps (1 Gbps)修改后
-
10G接口Cost = 1000 Mbps / 10000 Mbps = 0.1 → 取1
-
1G接口Cost = 1000 Mbps / 1000 Mbps = 1
注意:一个OSPF域内所有路由器的参考带宽必须设置为相同值,否则会导致路由计算错误。
特殊接口的开销
-
Loopback接口:默认开销为1,且不受参考带宽和接口带宽影响。但可以手动修改。
-
VLANIF接口:其Cost值取决于其物理接口的Cost值。
总结
扩展
计算Cost值时,看的是自己出口的Cost值。

OSPF协议概述
-
OSPF属于【内部网关路由协议】
-
用于单一自治系统【Autonomous System一AS】内决策路由
自治系统的概念
-
运行在同一个
AS内用于决策路由的协议称之为内部网关协议 -
用来连接不同的
AS,使之能够相互通信的协议被称之为外部网关协议 -
执行统一路由策略的一组网络设备组成的环境称之为一个自治系统(AS)
-
为了适应大型的网络,OSPF在
AS内划分多个区域,每个OSPF路由器只维护所在区域的完整链路状态信息 -
OSPF是链路状态路由协议,链路状态路由协议中的路由器了解OSPF网络内的链路状态信息
-
链路状态路由协议中,直连的路由器之间建立邻接关系,互相【交流】链路信息,来【绘制】出完整的网络结构
-
Router ID:在OSPF区域内唯一标识一台路由器的IP地址
Router lD选取规则
-
若管理员手工指定,则使用指定的P地址
-
若没有手工指定,则路由器选取它所有
Loopback接口上数值最高的lP地址 -
若不存在
Loopback接口,就在所有物理端口中选取一个数值最高的P地址
OSPF建立并维护的3张表项
-
邻居表:列出每台路由器全部已建立邻接关系的邻居路由器
-
链路状态数据库【
LSDB】:列出每台路由器的信息,由此显示了全网的网路拓扑 -
路由表:列出通过SPF算法计算出的到达每个相连网络的最佳路径
具体过程
-
通过直连链路发送
Hello包,建立邻居关系,将邻居的信息放入邻居表中 -
再通过直连的邻居学会全网的网络结构,放入
LSDB中 -
在全网网络结构中通过SPF算法计算出最佳路径
OSPF的关系
-
邻居关系(2-Way)
-
邻接关系(Full)
OSPF建立关系需要使用7种状态和五种报文:
-
7种状态:
DownInit2-WayExStartExchangeFull(全毗邻) -
5种报文:
HelloDBDLSRLSULSAck
报文汇总表
OSPF建立邻接关系的全过程
初始发现与双向通信(Down → Init → 2-Way)
-
Down(关闭状态):这是起点,表示尚未与任何邻居进行通信。
Init(初始化状态):当路由器从其接口收到一个OSPF Hello报文时,会进入此状态。这表示它发现了邻居,但还需要确认对方是否也发现了自己。(自身的Router-ID并不在所收到的Helo报文的邻居列表中)
-
2-Way(双向通信状态):当路由器在自己收到的Hello报文中,发现邻居的「邻居列表」里包含了自己的Router ID时,就表明双向通信已经建立。此时,双方成为「邻居」(Neighbor)。在广播或NBMA网络中,所有路由器会在此阶段选举DR(指定路由器) 和 BDR(备份指定路由器),以优化邻接关系数量。之后,只有DR、BDR和DROther之间才会继续建立更紧密的「邻接」关系。(存在自身的 Router ID)
数据库同步的核心协商(ExStart → Exchange)
-
从
2-Way状态开始,需要建立邻接关系的路由器会进入数据库同步过程。 -
ExStart(交换启动状态):双方会像谈判一样,通过交换空的DD(数据库描述)报文来选举一个「主」设备(Master)。Router ID较大的通常会成为主设备,负责管理后续DD报文的发送序列,确保交换过程有序。(在此状态下发送的DBD报文不包含链路状态描述) -
Exchange(交换状态):主从关系确定后,双方开始正式交换包含LSA(链路状态通告)头部信息的DD报文。这些摘要就像书籍的目录,让对方快速了解自己数据库里有哪些网络拓扑信息,从而找出彼此缺失的部分。
最终同步与完全邻接(Loading → Full)
-
Loading(加载状态):根据交换得到的「目录」,路由器会使用LSR(链路状态请求) 报文向邻居请求自己缺失的、具体的LSA详情。邻居则用LSU(链路状态更新) 报文来回应这些请求,请求方在收到后会回复LSAck(链路状态确认) 进行可靠确认。这个过程会持续到所有缺失的LSA都被补全。 -
Full(完全邻接状态):当双方的链路状态数据库(LSDB) 完全同步一致时,就达到了Full状态。此时,邻居关系正式升级为邻接关系(Adjacency)。此后,它们就可以基于完全相同的网络拓扑地图,独立地计算出最优的路由路径了。(路由器已经完成了与邻居的LSDB同步,准备进行SPF计算,生成RIB【路由表项】)
「邻居」不等于「邻接」
-
所有达到
Full状态的路由器都是「邻接」,但「邻居」可能只停留在2-Way状态(如广播网络中的两台DROther路由器之间)
流程图

时间间隔
网络类型
DBD报文部分字段解释
-
I【Init】:当发送连续多个DBD报文时,若这是第一个DBD报文,则置位为1,否则置位为0
-
M【More】:当发送连续多个DBD报文时,若这是最后个DBD报文,则置位为0,否则为1,表示后续还有其它的DBD报文
-
MS【Master/Slave】:当两台OSPF路由器交换DBD报文时,首先需要确定双方的主从关系,Router-lD较大的一方会成为Master;当该值为1时,表示发送方为Master
-
DBD报文序列号(DBD Sequence Number):主/从双方利用序列号来保证DBD报文传输的可靠性与完整性
实验拓扑如图所示:

抓包分析:

备注:
-
显式确认:会发一种独立的报文用于对接收到的消息做确认
-
隐式确认:通过发送另一种报文把确认报文包含在其中发送
在OSPF中:
-
DBD为隐式确认
-
LSU、LSAck为显式确认
验证:
R2发给R1的报文:

此时的R1和R2在协商主从,R2的Router ID更大,故R2为DR。
R1给R2的回包:

可见,Seq值变为了R2的Seq值,完成了隐式确认,确认R2为DR。
模拟器验证
[R1]dis ospf peer
OSPF Process 1 with Router ID 10.1.1.1
Neighbors
Area 0.0.0.0 interface 10.1.1.1(GigabitEthernet0/0/0)'s neighbors
Router ID: 10.1.1.2 Address: 10.1.1.2
State: Full Mode:Nbr is Master Priority: 1
DR: 10.1.1.2 BDR: 10.1.1.1 MTU: 0
Dead timer due in 31 sec
Retrans timer interval: 5
Neighbor is up for 00:03:08
Authentication Sequence: [ 0 ]
-
R2开始向R1发送LSR报文,请求那些在Exchange状态下通过DBD报文发现的,且在本地LSDB中没有的链路状态信息
-
R1向R2发送LSU报文,LSU报文中包含了哪些被请求的链路状态的详细信息;R2在完成LSU报文的接收,且没有其它待请求的LSA后,会将邻居状态从Loading转变为Full状态
-
R2向R1发送LSAck报文,作为对LSU报文的显示确认

思考:主从设备谁先发起LSR
-
主从选举的核心目的:在Exchange状态,主设备(Master)负责控制DD(Database Description)报文的序列号,从而管理摘要信息的交换过程,确保其可靠性和有序性。这好比一个会议中需要确定一个主持人来控制发言顺序。需要注意的是,选举主从时比较的是Router ID,而选举DR/BDR时先比较优先级,这是两个独立的过程
-
LSR的触发时机:当双方路由器在Exchange状态完成DBD报文(其中包含LSA的头部摘要信息)的交换后,都会进入Loading状态。此时,每一台路由器都会将收到的对端LSA摘要与自身的LSDB进行对比。一旦发现存在自己数据库中没有的LSA,或者对端的LSA比自己的更新(通过序列号等判断),该路由器就会立即主动向对方发送LSR报文,请求完整的LSA数据
-
关键交互:收到LSR的一方会使用LSU(链路状态更新)报文来回应,携带对方所请求的完整LSA信息。请求方在收到LSU后,会回复LSAck报文进行确认,确保传输的可靠性
Master/Slave角色管的是「目录」(DBD摘要)的交换顺序,而LSR的发起则是每台路由器根据「目录」对比自家「藏书」(LSDB)后,自主决定需要借阅哪本「书」(LSA)的行为。
Options字段中各关键字解析
-
DN:用来避免在MPLS VPN中出现环路;当PE向CE发送3类、5类与7类LSA时需要设置DN位,其它PE路由器从CE接收到该LSA时,不能够在它的OSPF路由计算中使用该LSA
-
O:该字段指出始发路由器支持Ppaque LSA【类型9、类型10与类型11】
-
DC位:当始发路由器支持按需链路上的OSPF的能力时,该位将被设置
-
N位:N=1表明路由器支持7类LSA;N=O表明该路由器将不接收与发送NSSA LSA
-
P位:只用在NSSA LSA;该位将告诉NSSA区域的ABR路由器将7类LSA转换为5类LSA
-
MC位:当始发路由器支持转发组播数据包的能力时,该位将被置位
-
E位:当始发路由器具有接收AS-external-LSA【Type-5LSA】的能力时,该位被置位;在所有5类LSA与始发于骨干区域以及非末节区域的LSA中,该位置为1。而始发于末节区域的SA中,该位置为0。若Hllo报文中该位被置位则表明该接口具有接收与发送5类LSA的能力
-
MT位:表示始发路由器支持多拓扑OSPF
-
Do Not Age Flag:LSA不老化标志位,该置于1,则表示该LSA不老化,此情况只在DC【虚电路】中应用

备注:华为设备默认是不开启端口MTU检测的,故抓包中MTU值为0。

但是在接口中可以查看,MTU为默认值1500。
[R1]dis ip interface
GigabitEthernet0/0/0 current state : UP
Line protocol current state : UP
The Maximum Transmit Unit : 1500 bytes
input packets : 230, bytes : 15776, multicasts : 225
output packets : 226, bytes : 15412, multicasts : 219
Directed-broadcast packets:
received packets: 0, sent packets: 0
forwarded packets: 0, dropped packets: 0
ARP packet input number: 3
Request packet: 2
Reply packet: 1
Unknown packet: 0
Internet Address is 10.1.1.1/24
Broadcast address : 10.1.1.255
TTL being 1 packet number: 230
TTL invalid packet number: 0
ICMP packet input number: 0
Echo reply: 0
Unreachable: 0
Source quench: 0
Routing redirect: 0
Echo request: 0
Router advert: 0
Router solicit: 0
Time exceed: 0
IP header bad: 0
Timestamp request: 0
Timestamp reply: 0
Information request: 0
Information reply: 0
Netmask request: 0
Netmask reply: 0
Unknown type: 0
扩展
-
选举时是先选BDR
-
从设备先向主设备要LSA
-
只有DR,没有BDR,可以正常通信
-
若无SPF算法,路由器和路由条目的数量应该为:
路由条目数= [n*(n-1)]/2,其中n为路由器数量,默认全连接 -
若两个路由器同时启动OSPF,则会在2Way状态下卡40s,此时在选举DR/BDR
辅助实验
OSPF的LSA介绍
LSA的基本概念
-
LSA是OSPF进行路由计算的关键依据
-
OSPF的LSU报文可以携带多种不同类型的LSA
-
各种类型的LSA拥有相同的报文头部
LSA汇总表
扩展
唯一LSA的三要素
-
类型(Type):用于标识哪种LSA(常见的6种,例如:Router LSA为类型1)
-
链路状态标识(LSID):用于描述连接信息(如:Router ID、网络地址等,不同的LSA类型连接的内容也不一样)
-
产生者Router ID(Adv Router):标识该LSA由哪台设备产生
用于标识LSA新旧程度的三要素
LSA并不是永久使用的,有老化时间,默认为3600s,从0开始递增
LSA是周期性更新的,每隔1800s更新一次,重新刷新老化时间
对于收到的LSA需要进行判断新旧,新的可以接收,旧的则丢弃,同时回复一份最新的给对方
-
seq(序列号):越大越优
-
chksum(校验和):越大越优
-
maxage(老化时间):
-
3600s最优先(用于撤销路由)
-
如果两者相差大于15min(900s),越小越优
-
如果两者相差小于15min(900s),则一样新,都可以使用
示意图
情景一

情景二

老化时间
OSPF
LSA:从0增加到3600s
IS-IS
-
LSP:LSP的老化时间从1200s【20m】递减,刷新周期为900s【15m】,递减至0老化
-
一条LSP的老化除了要等待20m外,还要等待60s的零老化时延
-
LSP重传计时器为5秒
特别注意
-
OSPF中seq/chksum/metric三个参数确定唯一的LSA,其中可以依靠metric值进行选路。
-
每到1800s,seq值会+1
-
OSPF的LSA中的Link-ID描述的是本设备到达DR的接口地址
-
OSPF的LSA中的Date描述的也是本设备到达DR的接口地址
-
OSPF的LSA中的Priority描述是这条路由在LSA更新时是稍后更新或者优先更新,只有Medium和Low两种。华为路由器中的环回口默认是Medium。
LSA头部信息
加粗部分为唯一LSA的三要素
LSA同步过程
流程图

常见LSA详解
SPF算法
创建并维护以下3张表项
重复执行以下3步N次
-
从Tentative List的所有路由器中寻找距离自身【根节点】最近的网络节点,并将其从Tentative List中移动至Paths List中
-
发现此节点通告的所有前缀,并将其安装至RB【路由表项】中
-
发现此节点的所有邻居,并将其移动至Tentative Listr中
注:Dijkstra:迪杰斯特拉算法【是由荷兰计算机科学家狄克斯特拉于1959年提出的】
具体计算过程举例

OSPF的区域类型
特殊区域汇总表
区域划分
-
骨干区域【Area0】
-
非骨干区域
非骨干区域根据能够学习到的路由种类又可划分为
-
标准区域:学习本区域的内部路由、学习域间路由、学习外部路由。【包含的LSA Type-1、2、3、4、5】
-
未节区域【Stub】:学习本区域的内部路由、学习域间路由,不学习外部路由,不包含ASBR,与外部通讯完全依靠自动创建的缺省路由。【包含的LSA Type-1、2、3】
-
完全末节【Totally Stubby】区域:仅学习本区域内部路由,不学习外部路由,不学习域间路由,与外部通讯完全依靠自动创建的缺省路由。【包含的LSA Type-1、2】
-
非纯末节区域【NSSA】:学习域内路由,学习域间路由,学习本区域自身引入的外部路由【但引入的外部路由的LSA类型为Type-7】,不学习其它区域引入的外部路由。【包含的LSA Type-1、2、3、7】
-
非纯完全末节区域:学习域内路由,学习本区域自身引入的外部路由【但引入的外部路由的LSA类型为Type-7】,不学习域间路由,不学习其它区域引入的外部路由。【包含的LSA Type-1、2、7】
注:NSSA区域是OSPF RFC的补遗,定义了特殊的LSA类型7;提供类似以Stub Area与Totally Stubby Area的优点,可以包含ASBR
Q:有些特殊区域不学习外部路由,故没有外部的明细路由,那还能与外部通信吗?
A:ASBR不能将外部路由注入到OSPF的网络中;ABR不会将其它区域的路由发送到Area1中,而是使用一条缺省路由。故这些特殊区域会通过ABR下发的缺省路由与外部通信。
辅助实验
VLink虚链路
虚链路的作用
不规则区域的连接

骨干区域被分割

无骨干区域

解决次优路由及增强网络健壮性
-
避免R1和R2之间链路故障导致骨干区域被分割
-
让R3和R4互访可以走最优路径,让X和Y网段互访可以直接走R3和R4之间的链路

辅助实验
DR与BDR选举
-
DR是基于接口的路由器优先级的值进行选举的
-
取值范围:0-255,默认值为1
-
优先级为O表示不参与DR与BDR的选举
-
若优先级相同,则比较各个路由器的Router-ID
注:先选BDR,再选DR
流程图示

最终:(从下到上选)
-
DR是AR5
-
BDR是AR3
-
Drothers 是AR1
扩展
前提是两套设备已经先选举完,后并在一起
Q:假设左右半拓扑分别选举完成后,用一个交换机连接两端设备,最终的DR和BDR是哪些设备?
A:此时的两套设备会在分别在当前已有的DR与BDR候选者中选举,DR中AR6的Router-ID更大,故AR6成为最终的DR。同理,AR4成为最终的BDR。Drothers为AR1/AR2/AR3/AR5。

交换机连接前:
-
DR是AR5 AR6
-
BDR是AR3 AR4
-
Drothers 是AR1 AR2
交换机连接后:
-
DR是AR6
-
BDR是AR4
-
Drothers 是AR1 AR2 AR3 AR5
OSPF的路径类型
路径选择
OSPF选择路径的优先级顺序是:路由类型优先级 > 区域类型优先级 > 路径开销优先级。
-
区域内路径【Intra-area path】:在路由器所在的区域内就可以到达目的地的路径
-
区域间路径【Inter-area path】:目的地在其它区域,但还在OSPF自治系统内的路径
-
类型1的外部路径【Type I external path, E1】:目的地在OSPF自治系统外部的路径
-
类型2的外部路径【Type2 external path, E2】:目的地在OSPF自主系统外部的路径,但
在计算外部路由的度量时不再计入到达ASBR路由器的路径代价
举例说明
RTA有两条到达外部目的网络202.106.0.20的路径
示意图

E1类型
路径A-B-D的代价是35【5+20+10】
路径A-C-D的代价是50【30+10+10】
E2类型
路径A-B-D的代价是30【20+10】
路径A-C-D的代价是20【10+10】