OSPF补充知识
一、DD报文的MTU检查机制
1.1 MTU检查的基本原理
在OSPF邻居建立过程中,当两台路由器进入Exstart状态后,会开始协商主从关系,并确定DD报文的初始序列号。进入Exchange状态后,它们开始交换DD报文,以描述各自的LSDB摘要。
DD报文(Database Description Packet,数据库描述报文)中携带了一个关键字段:Interface MTU。根据RFC 2328定义,该字段应填充接口的MTU值(虚拟链路为0)。如果从对端接收的DD报文中Interface MTU大于本端,该DD报文将被丢弃,邻居状态会卡在Exstart状态。
1.2 华为设备的默认行为
为提高设备兼容性,华为OSPF缺省有以下特性:
- 接口发送DD报文时MTU值为0,即不填充接口的实际MTU值
- 接收DD报文时不检查邻居DD报文所携带的MTU值
- 这使得当邻居两端设备配置的接口MTU不一致时,OSPF邻居也能正常建立
但这种行为存在潜在风险:其他厂商收到实际长度大于MTU的OSPF报文时,可能会丢弃该报文。如果LSU报文被丢弃,就会发生OSPF邻居正常建立,但LSU报文携带的路由无法学习的问题,导致业务中断。
1.3 MTU检查的开启与效果
建议使用ospf mtu-enable命令手工设定接口在发送DD报文时填充MTU值,同时检查邻居DD报文所携带的MTU是否超过本端的MTU值。这样,当邻居两端设备配置的接口MTU不一致时,OSPF邻居无法达到Full状态,从而提前识别接口MTU值不一致的问题。
开启MTU检测后:
- 如果两端均开启了检查,且两端MTU值不一致,邻居状态会卡在Exstart状态(不是Exchange状态)
- 如果仅一端开启检查,另一端未开启(MTU值为0),邻居关系仍可正常建立
- 配置
ospf mtu-enable命令后,系统会自动重启OSPF进程
考试要点提醒 :在HCIP考试中,MTU问题是非常常见的考点。重点注意:华为设备缺省不检查MTU,只有开启
ospf mtu-enable后才检查;MTU不一致导致邻居卡在Exstart状态,而不是Exchange状态;不同厂商设备互联时需特别注意MTU兼容性问题。
1.4 配置与排障命令
bash
# 开启接口MTU检测
[Huawei] interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0] ospf mtu-enable
# 修改接口MTU值(需与对端保持一致)
[Huawei-GigabitEthernet0/0/0] mtu 1500
# 查看接口MTU和OSPF信息
[Huawei] display ospf interface GigabitEthernet0/0/0
# 查看OSPF邻居状态(若卡在Exstart,需检查MTU配置)
[Huawei] display ospf peer
# 重启OSPF进程(MTU修改后可能需执行)
[Huawei] reset ospf process
二、OSPF网络类型
2.1 四种网络类型的定义
OSPF根据链路层协议类型将网络分为四种不同的类型。华为官方文档对这四种网络类型的规定如下:
| 网络类型 | 报文发送方式 | 缺省依据 |
|---|---|---|
| 广播类型(Broadcast) | Hello、LSU、LSAck以组播发送;DD、LSR以单播发送 | Ethernet、FDDI |
| NBMA类型(Non-broadcast multiple access) | 全部以单播发送 | ATM;NBMA网络必须全连通 |
| 点到点P2P类型(point-to-point) | 全部以组播形式发送 | PPP、HDLC和LAPB |
| 点到多点P2MP类型(Point-to-Multipoint) | Hello组播;DD、LSR、LSU、LSAck单播 | 没有缺省类型,必须强制更改 |
2.2 网络类型配置原则
一般情况下,链路两端的OSPF接口的网络类型必须一致,否则双方不可以建立起邻居关系。
华为官方给出了以下网络类型修改场景的推荐配置:
- 如果接口网络类型为广播,但路由器不支持组播地址,可改为NBMA类型
- 如果接口网络类型为NBMA,且网络是全连通的,可改为广播类型,这样不必再配置邻居
- 如果接口网络类型为NBMA,但网络不是全连通的,可改为P2MP类型,改为P2MP后,不必再配置邻居
- 如果同一网段内只有两台设备运行OSPF协议,建议将接口网络类型改为P2P,以节省DR/BDR选举开销
2.3 网络类型配置命令
bash
# 查看当前接口OSPF网络类型
[Huawei] display ospf interface GigabitEthernet0/0/0
# 修改网络类型
[Huawei] interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0] ospf network-type broadcast
[Huawei-GigabitEthernet0/0/0] ospf network-type nbma
[Huawei-GigabitEthernet0/0/0] ospf network-type p2mp
[Huawei-GigabitEthernet0/0/0] ospf network-type p2p
# 恢复到缺省网络类型
[Huawei-GigabitEthernet0/0/0] undo ospf network-type
# NBMA网络中手动配置邻居
[Huawei] ospf 1
[Huawei-ospf-1] peer 192.168.1.2
三、DR/BDR选举与组播地址
3.1 DR/BDR选举规则
DR/BDR选举仅在广播网络(Broadcast)或NBMA网络中进行,选举规则如下:
- 对比接口优先级------越大越优先,默认值为1,范围为0-255;当优先级为0时代表放弃选举,不能成为DR或BDR
- 优先级相同则对比设备Router ID------越大越优先
优先级配置使用命令 ospf dr-priority <priority>。
3.2 DR/BDR的不可抢占特性
OSPF DR/BDR的选举属于非抢占模式,即一旦选举成功,不会因为新加入的设备而重新选举。
当修改了DR优先级后,网络中的DR或BDR不会立即重新选举。如果需要重新选举DR或BDR,可以通过以下两种方法实现,但这会导致设备之间的OSPF邻接关系中断,一般情况下不推荐使用:
- 重启所有设备的OSPF进程
- 在建立了OSPF邻居的接口上按顺序执行shutdown和undo shutdown命令
重要:DR/BDR选举不可抢占,新加入的高优先级路由器不会抢占现有角色。
3.3 组播地址的使用
OSPF在广播网络中使用两个组播地址:
| 组播地址 | 用途 | 侦听设备 |
|---|---|---|
| 224.0.0.5(AllSPFRouters) | 通用OSPF组播通信 | 所有OSPF路由器 |
| 224.0.0.6(AllDRouters) | DR/BDR专用通信 | 仅DR和BDR |
DR和BDR同时监听224.0.0.5和224.0.0.6;DR-OTHER只监听224.0.0.5。
3.4 不同角色的LSU更新与LSAck确认流程
LSU更新组播通信流程总结:
| 发送方 | 目标地址 | 接收方 | LSAck确认方式 |
|---|---|---|---|
| DROther | 224.0.0.6 | DR、BDR | --- |
| DR | 224.0.0.5 | 所有OSPF路由器 | BDR用224.0.0.5回复,DROther用224.0.0.6回复 |
| BDR | 224.0.0.5 | 所有OSPF路由器 | DR用224.0.0.5回复,DROther用224.0.0.6回复 |
四、LSA生命周期管理
4.1 老化时间与刷新时间
OSPF中每条LSA都有两个关键的时间参数:
| 时间参数 | 默认值 | 作用 |
|---|---|---|
| 刷新时间 | 1800秒(30分钟) | LSA的定期刷新周期,防止LSA过期 |
| 最大老化时间 | 3600秒(60分钟) | LSA的生存上限,到达后LSA将被删除 |
每一条LSA在产生后都会逐渐老化,当老化时间达到1800秒时,始发路由器会重新生成该LSA(序列号加1),再次泛洪。如果LSA在3600秒内未被刷新,该LSA将被从数据库中删除,即老化掉。
4.2 LSA的接收与新旧判断
当OSPF路由器收到一条LSA后,会根据以下规则判断新旧,并决定是否采用:
比较优先级 :序列号 → 校验和 → 老化时间
- 序列号:序列号越大表示LSA越新(取值范围0x80000001~0x7FFFFFFF)
- 校验和:如果序列号相同,校验和越大表示LSA越新
- 老化时间 :如果校验和也相同,则比较老化时间
- 若某条LSA的Age=3600秒(MaxAge),视为最新(用于触发删除)
- 若Age差值>900秒(15分钟),选择Age数值较小的(更新鲜的)
- 若Age差值<900秒,两条LSA视为相同,保持不变
4.3 LSA更新机制
OSPF中LSA的更新分为两种类型:
| 更新类型 | 触发条件 | 行为 |
|---|---|---|
| 周期更新 | 每30分钟超时 | Seq递增,Checksum重算,Age置1秒 |
| 触发更新 | 链路/网络状态变化 | Seq重置,Age置1秒 |
| LSA主动删除 | 路由撤销 | Seq/Checksum不变,Age置3600秒泛洪删除 |
4.4 LSDB同步原则
- 触发更新:当路由条目发生变化(新增或删除)时,设备会立即将这一变化通过LSU报文告知自己的邻居,实现快速收敛
- 周期更新:当LSA老化时间达到1800秒时,始发路由器会重新生成该LSA,序列号加1,再次泛洪,刷新所有路由器上的LSDB
五、DD报文格式
DD报文(Database Description Packet)在OSPF邻居建立过程中,当主从关系协商完毕后用于描述LSDB中LSA的摘要信息。DD报文中包含的关键字段:
| 字段 | 长度 | 含义 |
|---|---|---|
| Interface MTU | 16比特 | 发送接口的MTU值,华为缺省为0(不检查) |
| Options | 8比特 | 标记特殊区域类型 |
| I-bit | 1比特 | I=1表示第一个DD报文,用于协商主从关系 |
| M-bit | 1比特 | M=0表示最后一个报文,M=1表示后续还有报文 |
| MS-bit | 1比特 | MS=1表示主路由器,MS=0表示从路由器 |
| DD Sequence Number | 32比特 | DD报文序列号,用于隐式确认 |
DD报文序列号在主从协商阶段由Master设备决定初始值,在Exchange阶段主设备每发送一个DD报文序列号加1,从设备必须使用Master设备的序列号来确认收到的DD报文。这种隐式确认机制保证了DD报文传输的可靠性。
六、OSPF状态机详解
6.1 OSPF邻居状态机(8种状态)
OSPF共有8种邻居状态:
| 状态 | 含义 | 说明 |
|---|---|---|
| Down | 邻居会话初始状态 | 未收到邻居的Hello报文 |
| Attempt | 仅发生在NBMA网络中 | 尝试状态,设备启动后从Down切换到该状态,尝试向外发送Hello报文 |
| Init | 收到邻居Hello报文 | 邻居的Hello报文中尚未包含自己的Router ID |
| 2-Way | 双向通信建立 | 收到的Hello报文中包含有自己的Router ID,邻居关系建立的标志 |
| Exstart | 预启动状态 | 使用未携带LSA摘要的DD报文进行主从关系选举,RID大的为主设备 |
| Exchange | 准交换状态 | 使用携带LSA摘要信息的DD报文进行信息共享 |
| Loading | 加载状态 | 使用LSR/LSU/LSAck三种报文获取完整的拓扑信息 |
| Full | 完全邻接状态 | 拓扑交换完成后进入该状态,标志着邻接关系建立 |
在广播网络中,路由器只与DR和BDR建立Full状态,与其他路由器(DROther之间)仅保持在2-Way状态。
6.2 OSPF工作过程
OSPF的工作过程可以分为以下步骤:
- 设备启动并配置OSPF后,向本地所有运行了OSPF协议的接口以组播224.0.0.5的方式发送Hello报文,Hello报文中携带本地的Router ID以及已知晓的邻居Router ID
- 当收到的Hello报文中存在本地的Router ID,则进入2-Way状态,并将邻居关系加入到邻居表中
- 进行条件匹配,匹配成功开始建立邻接关系
- 开始建立邻接关系:首先使用未携带数据的DD报文进行主从关系选举,主设备先进入下一个状态,从设备先发送下一个报文;之后使用DD报文来共享LSA摘要信息;之后双方通过LSR/LSU/LSAck报文完成未知LSA的获取过程,完成本地数据库的搭建(LSDB)
- 基于本地数据库中的LSA信息,通过SPF算法计算出有向图和最短路径树,计算出所有到达节点的路由信息,将计算出的路由信息加载到OSPF路由表中
- 基于OSPF路由表以及其他协议路由表,共同选择出最优路由,并将最优路由加载到全局路由表中,以供后续指导数据包的转发过程
七、OSPF基本配置命令
7.1 启动OSPF进程与宣告网络
bash
# 进入系统视图
<Huawei> system-view
# 创建OSPF进程,手动指定Router ID(强烈推荐)
[Huawei] ospf 1 router-id 1.1.1.1
# 创建区域(骨干区域必须为Area 0)
[Huawei-ospf-1] area 0
# 宣告接口所属网段
[Huawei-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
# 退出OSPF进程视图
[Huawei-ospf-1] quit
7.2 接口下直接使能OSPF(推荐方式)
bash
# 在接口视图下直接使能OSPF
[Huawei] interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0] ospf enable 1 area 0
7.3 配置接口OSPF优先级
bash
# 设置接口在选举DR时的优先级(范围0-255,默认1)
[Huawei] interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0] ospf dr-priority 100
7.4 查看OSPF运行状态命令汇总
bash
# 查看OSPF进程概要信息(含Router ID)
[Huawei] display ospf brief
# 查看OSPF邻居状态
[Huawei] display ospf peer
[Huawei] display ospf peer brief
# 查看OSPF接口信息(含MTU、网络类型、DR优先级)
[Huawei] display ospf interface
# 查看OSPF路由表
[Huawei] display ospf routing
# 查看链路状态数据库
[Huawei] display ospf lsdb
7.5 维护OSPF
bash
# 重启OSPF进程(Router ID修改后需执行)
[Huawei] reset ospf process
# 清除OSPF计数器
[Huawei] reset ospf counters
# 复位OSPF邻居
[Huawei] reset ospf peer GigabitEthernet0/0/0 1.1.1.1
执行reset ospf process会导致设备之间的OSPF邻接关系中断,需要谨慎操作。其重要用途包括:
- 当Router ID有变化时,执行该命令可以使新的Router ID生效
- 会导致重新选举DR、BDR