OSPF(开放最短路径优先)与华为设备配置实操
OSPF:Open Shortest Path First,链路状态路由协议,基于 IP 协议号 89,组播地址 224.0.0.5(AllSPFRouters)/ 224.0.0.6(AllDRouters)。
一、为什么需要 OSPF(对比 RIP)
| 对比项 | RIP | OSPF |
|---|---|---|
| 协议类型 | 距离矢量 | 链路状态 |
| 度量值 | 跳数 | 开销(基于带宽) |
| 网络规模 | 最大 15 跳 | 无跳数限制,可分区域扩展 |
| 更新��式 | 周期 30 秒发全表 | 触发式增量更新(LSA) |
| 收敛速度 | 慢(可达数分钟) | 快(秒级) |
| 防环手段 | 水平分割等五件套 | SPF 算法区域内天然无环 |
| 报文承载 | UDP 520 | IP 协议号 89 |
| 适用场景 | 小型网络 | 中大型网络 |
二、核心概念
1. 链路状态与 SPF 算法
- 每台路由器描述自己的接口状态(网段、掩码、开销、邻居),生成 LSA 泛洪到同区域;
- 同区域所有路由器最终拥有完全相同的链路状态数据库(LSDB);
- 各路由器以自己为根运行 SPF(Dijkstra)算法,算出最短路径树,得到路由表;
- 链路开销 = 参考带宽 / 接口带宽,默认参考带宽 100Mbps(千兆与百兆链路算出的开销同为 1,需用 bandwidth-reference 调整参考带宽加以区分,全网必须一致)。
2. Router ID
- 32 位整数,点分十进制格式(如 1.1.1.1),唯一标识一台 OSPF 路由器;
- 选取顺序:手工指定 > Loopback 接口最大 IP > 物理接口最大 IP;
- Router ID 冲突会导致邻居无法建立或路由震荡。
3. 区域
- 区域 0 为骨干区域,负责转发区域间路由;非骨干区域必须与骨干区域直接相连;
- 划分区域可缩小 LSDB 规模、SPF 计算范围,隔离拓扑变化的影响,便于扩容。
4. 路由器角色
- 骨干路由器:至少一个接口属于区域 0;
- ABR(区域边界路由器):连接两个及以上区域(通常是区域 0 与非 0 区域),产生 Type-3 LSA;
- ASBR(自治系统边界路由器):引入外部路由(静态、RIP 等),产生 Type-5 LSA。
三、五种协议报文
| 报文 | 全称 | 作用 |
|---|---|---|
| Hello | — | 发现并维持邻居;广播/P2P 网络 10 秒一次,Dead 时间为其 4 倍 |
| DD | Database Description | 描述本地 LSDB 中 LSA 的摘要,先协商主从 |
| LSR | Link State Request | 请求自己缺少的 LSA |
| LSU | Link State Update | 携带一条或多条完整 LSA |
| LSAck | Link State Acknowledgment | 确认收到的 LSA,实现可靠传输 |
四、邻居状态机七个状态
Down → Init → 2-Way → ExStart → Exchange → Loading → Full
- Down:初始状态,尚未收到对方 Hello;
- Init:收到对方 Hello,但其中未包含自己的 Router ID;
- 2-Way:双方 Hello 中均含对方 RID,双向通信建立;广播网中在此阶段完成 DR/BDR 选举,DROther 之间停留在 2-Way,不再向下;
- ExStart:发送空 DD 报文协商主从(Router ID 大者为主)与 DD 序列号;
- Exchange:交换携带 LSA 摘要的 DD 报文;
- Loading:对比摘要后用 LSR 请求缺失的 LSA,对方以 LSU 回复;
- Full:LSDB 同步完成,建立邻接关系。
邻居(2-Way)与邻接(Full)是两回事:广播网中只有 DR/BDR 与所有路由器建立邻接,DROther 之间保持 2-Way。
五、DR/BDR 选举
- 广播/NBMA 网络中,n 台路由器全互联需要 n(n-1)/2 个邻接,LSA 泛洪开销大;选举一台 DR、一台 BDR,所有路由器只与 DR/BDR 建立邻接,BDR 备份 DR;
- 选举规则:先比较接口优先级(0~255,默认 1,优先级 0 不参与选举),优先级相同时比较 Router ID,越大越优;
- 不抢占:DR 已存在时,即使新路由器优先级更高也不会重新选举,需重启 OSPF 进程或接口才触发重新选举。
六、LSA 类型与特殊区域
1. 五种常见 LSA
| 类型 | 名称 | 产生者 | 传播范围 |
|---|---|---|---|
| Type-1 | Router LSA | 每台路由器 | 本区域内 |
| Type-2 | Network LSA | DR | 本区域内 |
| Type-3 | Network Summary LSA | ABR | 区域之间 |
| Type-4 | ASBR Summary LSA | ABR | 区域之间(描述到 ASBR 的路径) |
| Type-5 | AS External LSA | ASBR | 整个 OSPF 域(特殊区域除外) |
| Type-7 | NSSA External LSA | NSSA 区域的 ASBR | NSSA 区域内,离开时由 ABR 转为 Type-5 |
路由标记:区域内路由 O、区域间路由 O IA、外部路由 O_ASE / O_NSSA。
2. 特殊区域
| 区域类型 | 拒绝的 LSA | 默认路由注入 |
|---|---|---|
| Stub 末梢区域 | Type-5 | ABR 自动发 Type-3 默认路由 |
| Totally Stub 完全末梢区域 | Type-3/4/5 | ABR 只发一条 Type-3 默认路由 |
| NSSA | Type-5(允许自身引入外部路由成 Type-7) | 需手工下发 N2 默认路由 |
| Totally NSSA | Type-3/4/5 | ABR 自动发默认路由 |
七、完整实操:双区域 OSPF(华为路由器)
1. 拓扑与地址规划
R1 ---GE0/0/0: 12.1.1.0/24--- R2 ---GE0/0/1: 23.1.1.0/24--- R3
R1:GE0/0/0 = 12.1.1.1/24,Loop0 = 1.1.1.1/32(区域 0)
R2:GE0/0/0 = 12.1.1.2/24(区域 0),GE0/0/1 = 23.1.1.2/24(区域 1),ABR
R3:GE0/0/0 = 23.1.1.3/24,Loop0 = 3.3.3.3/32(区域 1)2. R1 配置(区域 0)
<Huawei> system-view
[Huawei] sysname R1
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 12.1.1.1 24
[R1-GigabitEthernet0/0/0] quit
[R1] interface LoopBack 0
[R1-LoopBack0] ip address 1.1.1.1 32
[R1-LoopBack0] quit
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 12.1.1.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0] quit
[R1-ospf-1] quit说明:network 命令使用反掩码(wildcard),精确通告 Loopback 时用 0.0.0.0。
3. R2 配置(ABR)
<Huawei> system-view
[Huawei] sysname R2
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 12.1.1.2 24
[R2-GigabitEthernet0/0/0] quit
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 23.1.1.2 24
[R2-GigabitEthernet0/0/1] quit
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 12.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0] quit
[R2-ospf-1] area 1
[R2-ospf-1-area-0.0.0.1] network 23.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.1] quit
[R2-ospf-1] quit4. R3 配置(区域 1)
<Huawei> system-view
[Huawei] sysname R3
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 23.1.1.3 24
[R3-GigabitEthernet0/0/0] quit
[R3] interface LoopBack 0
[R3-LoopBack0] ip address 3.3.3.3 32
[R3-LoopBack0] quit
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 1
[R3-ospf-1-area-0.0.0.1] network 23.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.1] network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.1] quit
[R3-ospf-1] quit5. 扩展配置
静默接口(只通告网段、不收发协议报文,用于防环口与用户网段):
[R1] ospf 1
[R1-ospf-1] silent-interface LoopBack 0修改接口开销与参考带宽(参考带宽全网必须一致):
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ospf cost 10
[R1-GigabitEthernet0/0/0] quit
[R1] ospf 1
[R1-ospf-1] bandwidth-reference 1000引入外部路由(R3 引入静态,路由器变为 ASBR):
[R3] ip route-static 100.1.1.0 24 NULL0
[R3] ospf 1
[R3-ospf-1] import-route static区域 MD5 认证(同一区域所有路由器配置一致才能建立邻居):
[R1] ospf 1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] authentication-mode md5 1 cipher Huawei@123
[R2] ospf 1
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] authentication-mode md5 1 cipher Huawei@123向 OSPF 域下发默认路由(加 always 可在自身无默认路由时仍下发):
[R2] ospf 1
[R2-ospf-1] default-route-advertise always八、验证与预期结果
1. 常用验证命令
| 命令 | 作用 |
|---|---|
| display ospf peer | 查看邻居详细状态(Full 为邻接建立) |
| display ospf peer brief | 邻居简表(区域、RID、状态) |
| display ospf lsdb | 查看链路状态数据库 |
| display ip routing-table protocol ospf | 查看 OSPF 路由 |
| display ospf interface | 查看接口 OSPF 参数(DR、优先级、开销) |
| display ospf routing | 查看 OSPF 计算出的路由 |
2. R2 邻居预期输出
[R2] display ospf peer brief
Area Id Router ID Neighbor IP State
0.0.0.0 1.1.1.1 12.1.1.1 Full
0.0.0.1 3.3.3.3 23.1.1.3 Full3. R1 路由表预期输出(区域间路由标记 OSPF IA)
[R1] display ip routing-table protocol ospf
Destination/Mask Proto Pre Cost NextHop Interface
3.3.3.3/32 OSPF 10 2 12.1.1.2 GE0/0/0
23.1.1.0/24 OSPF 10 2 12.1.1.2 GE0/0/0R1 到 3.3.3.3 的开销为 2:R1-R2 以太链路开销 1,R2-R3 链路开销 1,出接口开销累加。
4. 连通性验证
[R1] ping -a 1.1.1.1 3.3.3.3
--- 3.3.3.3 ping statistics ---
5 packet(s) transmitted, 5 packet(s) received, 0.00% packet loss5. 故障切换与收敛观察
[R1] display ospf peer
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] shutdown
[R1-GigabitEthernet0/0/0] quit
[R1] display ip routing-table protocol ospf链路故障后 LSA 触发泛洪,OSPF 在秒级完成重新收敛(有 SPF 抑制计时,默认两次计算间隔约 5 秒)。
九、排错思路
| 现象 | 可能原因 | 排查命令 |
|---|---|---|
| 邻居卡在 Init | 只收到单向 Hello:ACL 拦截、对方未配 OSPF | display ospf peer / display ospf error |
| 邻居卡在 ExStart/Exchange | 接口 MTU 不一致 | display ospf interface |
| 邻居无法建立 | RID 冲突、区域号不一致、认证不一致、广播网掩码不一致、Hello/Dead 计时器不一致 | display current configuration |
| 路由缺失 | network 反掩码写错、silent-interface 误用 | display ospf interface |
| 区域间路由不通 | 非骨干区域未与区域 0 相连 | display ospf brief |
| 外部路由缺失 | ASBR 未配置 import-route 或被特殊区域过滤 | display ospf lsdb |
排错三步法:先查接口(IP/掩码/ospf 使能)→ 再查邻居(display ospf peer)→ 最后查 LSDB 与路由(display ospf lsdb、display ip routing-table)。
十、面试高频问答
- OSPF 与 RIP 的区别? 链路状态 vs 距离矢量;开销 vs 跳数;触发增量更新 vs 周期全表;可分区域大规模组网 vs 15 跳小网络。
- OSPF 用 TCP 还是 UDP? 都不用,直接承载在 IP 上,协议号 89,自身通过 LSAck 机制保证可靠。
- 邻居与邻接的区别? 2-Way 即邻居;同步完 LSDB 到 Full 才是邻接;广播网中 DROther 之间只建邻居不建邻接。
- DR/BDR 怎么选? 优先级大者优先,相同时 Router ID 大者优先;DR 不可抢占,BDR 接替 DR 不重新选举。
- OSPF 为什么收敛快? 拓扑变化触发 LSA 增量泛洪,而非周期性全表更新;收到 LSA 后立即计算(受 SPF 抑制间隔约束)。
- 五类 LSA 分别谁产生? 1 类每台路由器、2 类 DR、3 类 ABR、4 类 ABR(描述 ASBR 位置)、5 类 ASBR、7 类 NSSA 的 ASBR。
- 为什么非骨干区域必须连区域 0? 区域间路由计算采用"距离矢量"方式,骨干区域是所有区域间路由的必经中转,防止区域间环路。
- OSPF 邻居建立的关键一致项? Hello/Dead 计时器、区域号、认证、网段掩码(广播网)、MTU(DD 协商阶段),RID 不能冲突。
十一、记忆口诀
- 报文五类:Hello 问好,DD 报单,LSR 要货,LSU 发货,LSAck 签收;
- 状态七步:初见 Down、听见 Init、对视 2-Way、谈价 ExStart、清点 Exchange、补货 Loading、成交 Full;
- LSA 五类:一类人人有,二类 DR 造,三类出区域,四类寻 ASBR,五类进外部,七类 NSSA 变五类;
- 邻居五一致:计时器一致、区域一致、认证一致、掩码一致(广播网)、网段一致;
- 角色三兄弟:区域内跑 1/2 类,ABR 搬 3 类,ASBR 引 5 类。