通向HCIP之路:第三步:动态路由协议OSPF(全)

目录

一、静态路由VS动态路由

二、动态路由协议分类

1、基于AS(自治系统)分类:

2、基于更新时是否携带子网掩码(无类别、有类别):

3、基于工作方式进行分类:

三、OSPF基础特性

四、OSPF的数据包类型

1.hello包(不携带数据)

2.DBD包

3.LSR包

4.LSU包(真正携带LSA信息的数据包)

5.LSACK包

五、OSPF状态机(邻居建立过程)

1.down状态

2.init状态(初始化)

3.Two-way状态(双向通信)

4.Exstart状态(预启动)

5.exchange状态(准交换)

6.loading状态(加载)

7.full状态(邻接)

OSPF工作过程

六、OSPF的基础配置

七、邻居与邻接建立条件

[1、Hello 包参数必须一致:](#1、Hello 包参数必须一致:)

2、DR/BDR选举(MA网络中):

八、OSPF接口网络类型

[九、OSPF 不规则区域及解决方案](#九、OSPF 不规则区域及解决方案)

1、正常OSPF协议要求的区域划分规则:

2、两种不规则区域:

3、三种解决方案:

[十、OSPF 数据库(LSDB)与 LSA 类型](#十、OSPF 数据库(LSDB)与 LSA 类型)

1、LSA通用字段:

2、五种常见LSA对比:

[十一、LSA 更新量优化方法](#十一、LSA 更新量优化方法)

1、手工汇总:

2、特殊区域:

十二、OSPF排错

[华为eNSP OSPF排错四步口诀:](#华为eNSP OSPF排错四步口诀:)

最常犯的五个错误:

附:关键命令查看


一、静态路由VS动态路由

| 项目 | 静态路由 | 动态路由 |
| 定义 | 管理员手工添加路由表 | 路由器间自动通信、计算生成路由 |
| 使用场景 | 小型网络、拓扑稳定 | 中大型网路、拓扑复杂或常边 |
| 优点 | 简单、安全、不占宽带 | 自适应拓扑变化、配置量小 |

缺点 1、在中型大型网路中配置量大; 2、当拓扑结构发生变化时,不能实时的进行更新,容易出现不可达、无最佳路径,路由黑洞、环路等; 3、管理维护在中大型网络中较为麻烦。 1、路由器间需要共享信息,占用链路资源,同时需要计算,占用设备的运算资源; 2、存在被黑洞利用路由器之间需要沟通计算的特征,来攻击协议,导致安全隐患; 3、依赖算法进行选路,存在计算错误(特殊的环境),最终可能导致环路。

二、动态路由协议分类

1、基于AS(自治系统)分类:

IGP(内部网关协议):运行在一个AS内部,如 RIP、OSPF、EIGRP、ISIS

EGP(外部网关协议):运行在AS之间,如 EGP、BGP

2、基于更新时是否携带子网掩码(无类别、有类别):

有类别:不携带子网掩码,按主类掩码匹配

无类别:携带子网掩码,按实际掩码加载

3、基于工作方式进行分类:

距离矢量(DV):如 RIP、EIGRP,邻居间直接共享路由表

链路状态(LS):如 OSPF、ISIS,邻居间共享拓扑信息,本地计算路由

三、OSPF基础特性

  • 属于无类别链路状态型IGP协议
  • 基于LSA收敛,更新量大,需结构化部署(区域划分、IP规划)
  • 组播更新:224.0.0.5(All OSPF Routers)、224.0.0.6(All DR Routers)
  • 支持触发更新,30分钟周期更新
  • 跨层封装,协议号 89

**四、**OSPF的数据包类型

包类型 英文全称 作用
Hello Hello Packet 邻居发现、建立、保活
DBD Database Description 本地LSDB目录共享
LSR Link State Request 请求未知LSA
LSU Link State Update 发送LSA信息
LSack Link State Acknowledgment 确认收到LSA
[OSPF数据包类型]

注:1、LSA(链路状态通告)是OSPF中描述拓扑或路由信息的基本单位,通过LSU传递。

2、LSDB(链路状态数据库)是装载本地获取到的所有LSA信息

1.hello包(不携带数据)

作用:用于邻居和邻接关系的发现,建立,周期的保活

默认以十秒为周期发送一个包(ospf的失效判断时间位四倍的hello时间------40s),若40s未收到邻居的hello包,就认为邻居已经死亡,这个时间被称为死亡时间(dead-time)

2.DBD包

数据库描述包(本地数据库(LSDB存储收集到的LSA信息)):会携带数据库中收集到的LSA信息的摘要值

在发送正式的更新数据之前,先发送所拥有的链路信息目录,让对方自己选取没有的数据,避免直接发送全部链路信息,造成重复更新

3.LSR包

链路状态请求包,基于DBD包请求位置的LSA

4.LSU包(真正携带LSA信息的数据包)

LSU包:链路状态更新包

5.LSACK包

LSACK包:链路状态确认包

ospf每30min进行一次周期更新,为了保证收敛的可靠性

五、OSPF状态机(邻居建立过程)

1、Down → 收到Hello包 → Init

2、Init → 对方Hello包中有我方RID → 2Way(邻居建立)

3、2Way → 条件匹配(DR/BDR选举等)→Exstart(主从选举)

4、ExstartExchange(DBD目录交换)

5、ExchangeLoading(请求未知LSA)

6、LoadingFull(邻接建立,LSDB同步完成)

1.down状态

一旦接收到其他OSPF设备的hello包 ,进入下一状态

2.init状态(初始化)

接收到其他OSPF设备的hello包,且包中存在我方的RID,进入下一状态

3.Two-way状态(双向通信)

标志着邻居关系的建立

4.Exstart状态(预启动)

使用不携带目录信息的DBD包进行主从关系的选举,RID数值大为主,优先进入下一状态,其意义在于排序,避免双方同时大量数据的更新导致网络拥塞

5.exchange状态(准交换)

主先行发生携带数据库目标信息的DBD包,从再跟发,共享双方的目录

6.loading状态(加载)

查看其它设备的数据库目录后,针对本地未知的LSA信息,使用LSA请求查询,邻居使用LSU回复,需要ACK确认

7.full状态(邻接)

标志着邻接关系(用于区分邻居关系)的建立。邻接关系之间才会进行真正的链路状态数据(LSA)交换,二邻居之间仅使用hello包周期保活

OSPF工作过程

1、建立邻居:启动配置之后,ospf将向本地所有的运行了ospf协议的端口发送hello包(224.0.0.5),hello包中携带自己的RID用来区分不同路由器的身份(不携带路由信息),同时携带自己已知的邻居RID,之后会将这些RID存储在自己的邻居表中。

2、条件匹配:邻居表建立完成之后,会进行条件匹配,如匹配成功则开始进入下一个状态,如果匹配失败则会停留在邻居关系。---之后仅hello包进行保活。

3、如果匹配成功,则开始建立邻接关系-之后会使用未携带数据DBD包(并没有携带LSDB的摘要信息)进行主从关系的选举。主路由器会优先进入下一个状态,会优先发送摘要进行比对,比对之后,会请求自己本地没有的lsa信息。对端会发送真正携带lsa信息的LSU包,会利用LSACK进行确认。本地的链路状态数据库建立完成,生成本地链路数据库表。---Full

4、完成收敛----基于本地的链路状态数据库收集的lsa,根据自己的spf算法计算得出最短路径树。生成路由表。

5、收敛完成后,会使用hello包每10s发送一次,用来保活邻居关系。ospf会每30min进行一次周期更新。

六、OSPF的基础配置

bash 复制代码
#启动OSPF进程,指定RID
[r1] ospf 1 router-id 1.1.1.1 

#进入区域0,宣告网段
[r1-ospf-1] area 0
[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] network 12.1.1.0 0.0.0.255
  • 启动配置时,需要定义进程号(仅具有本地意义);可以在一台路由器上启动多个进程,但每个进程都是独立工作的。
  • RID(router-id):每个OSPF进程均需要一个全网唯一的标识,用于区分拓扑中的每台设备;RID需要格式相同(IP地址)、全网唯一;故使用了ip地址来作为RID。
  • 宣告的作用:1、划分区域 2、激活接口协议 3、定义可共享内容范围
  • 区域划分规则:

1、多区域时必须存在骨干区域(Area0) ,必须为星型拓扑(中心到站点、轴辐状)

2、区域间必须存在ABR-区域边界路由器-- 同时工作在多个区域

七、邻居与邻接建立条件

1、Hello 包参数必须一致:

  • Hello / Dead Time
  • 区域 ID
  • 认证密钥
  • 末梢区域标记
  • 接口掩码长度(华为要求)

2、DR/BDR选举(MA网络中):

  • 选举原因:避免全互联邻接关系导致重复LSA泛洪
  • 选举规则:①比较优先级(0-255,默认1,0表示不参选)②优先级相同则比较RID
  • 非抢占性,修改优先级后需重启进程生效
  • DR/BDR与所有非DR/BDR建立邻接关系
bash 复制代码
# 修改接口优先级
[r2-GigabitEthernet0/0/1] ospf dr-priority 3

# 重启 OSPF 进程
<r2> reset ospf process

八、OSPF接口网络类型

| OSPF网络类型 | 默认对应链路/场景 | 是否选举DR/BDR | 邻居发现方式 | 邻接关系建立 | 关键特点与适用场景 |
| 广播 (Broadcast) | 以太网、FDDI、令牌环等支持广播的多路访问网络 | | 自动(组播Hello) | 所有路由器与DR/BDR建立完全邻接 | 典型LAN环境,减少邻接关系数量,最常用类型 |
| 非广播多路访问 (NBMA) | 帧中继、X.25、ATM等不支持广播的多路访问网络 | | 手动静态指定(单播) | 所有路由器与DR/BDR建立完全邻接 | 传统非广播网络,配置复杂,需保证全互联拓扑 |
| 点到点 (Point-to-Point) | PPP、HDLC、LAPB等串行链路,点对点子接口 | | 自动(组播Hello) | 与直连邻居建立完全邻接 | 专线直连,简单高效,无DR选举开销 |
| 点到多点 (Point-to-Multipoint) | 无默认,需手动配置(常用于帧中继Hub-Spoke) | | 通常自动(组播Hello) 非广播变种需手动 | 中心与每个分支建立独立邻接 | 解决NBMA非全互联拓扑,无需全互联PVC |
| Loopback接口 | 环回接口(逻辑接口) | 否 | 不发送Hello包 | 不建立邻接 | 路由以/32主机路由通告,无论掩码配置 |

虚链路 (Virtual Link) 区域0与非骨干区域间的逻辑隧道 虚拟接口上自动建立 在两个ABR间建立逻辑连接 修复不连续骨干区域或连接远离骨干的区域
[OSPF接口网络类型]

MGRE 环境建议:

1、使用 Broadcast 类型

2、注意 DR 位置(星型拓扑中中心为 DR)

3、也可使用 P2MP(不选 DR,Hello 30s)

修改默认工作方式:

bash 复制代码
[r1]interface Tunnel 0/0/0
[r1-Tunnel0/0/0]ospf network-type ?
  broadcast  Specify OSPF broadcast network
  nbma       Specify OSPF NBMA network
  p2mp       Specify OSPF point-to-multipoint network
  p2p        Specify OSPF point-to-point network

九、OSPF 不规则区域及解决方案

1、正常OSPF协议要求的区域划分规则:

  1. 若全网仅一个区域,可以为任意区域编号
  2. 若多区域必须存在骨干区域(区域0)
  3. 多区域时必须为星型结构拓扑,所有非骨干区域必须连接到骨干区域;
  4. 区域间必须依赖ABR互联

2、两种不规则区域:

  1. 远离骨干的非骨干区域:ABR设备若未连接到骨干区域,视为非法ARB,虽然可以正常建立邻居关系,也可以正常学习到各个区域的LSA信息,但不能区域间共享LSA,导致全网无法全通。
  2. 不连续骨干区域:OSPF协议为避免环路,存在区域水平分割;及从A区域共享到B区域的LSA,不能回到A区域;故在不连续骨干环境下,A骨干不能学习到B骨干的路由,无法全网可达。

3、三种解决方案:

| 方案 | 原理 | 优点 | 缺点 |
| GRE 隧道 | 在 ABR 间建立隧道,宣告进 OSPF | 可实现路由共享 | 选路不佳(骨干区域优先) |
| 虚链路(Virtual Link) | 非法 ABR 与合法 ABR 间建立逻辑链路 | 无新增链路,选路正常 | 占用中间区域资源(华为)/可靠性低(思科) |

多进程双向重发布(推荐) 在不同进程间重发布路由 无选路问题,可靠性高 配置稍复杂

GRE配置示例:

bash 复制代码
R1
[R1]int t0/0/0
[R1-Tunnel0/0/0]ip ad 192.168.3.1 24
[R1-Tunnel0/0/0]tunnel-protocol gre
[R1-Tunnel0/0/0]source 12.1.1.1
[R1-Tunnel0/0/0]destination 23.1.1.1
[R1-Tunnel0/0/0]q
[R1]ip route-static 192.168.2.0 24 192.168.3.2

R3
[R3]int t0/0/0
[R3-Tunnel0/0/0]ip ad 192.168.3.2 24
[R3-Tunnel0/0/0]tunnel-protocol gre
[R3-Tunnel0/0/0]source 23.1.1.1
[R3-Tunnel0/0/0]destination 12.1.1.1
[R3-Tunnel0/0/0]q
[R3]ip route-static 192.168.1.0 24 192.168.3.1

虚拟链路配置示例:

bash 复制代码
[r2-ospf-1] area 1
[r2-ospf-1-area-0.0.0.1] vlink-peer 4.4.4.4

多进程重发布配置示例:

bash 复制代码
r2
[r2]ospf 1
[r2-ospf-1]import-route rip 1
[r2-ospf-1]q
[r2]rip 1
[r2-rip-1]import-route ospf 1
 
r3
[r3]ospf 1
[r3-ospf-1]import-route rip 1
[r3-ospf-1]q
[r3]rip 1
[r3-rip-1]import-route ospf 1

十、OSPF 数据库(LSDB)与 LSA 类型

1、LSA通用字段:

  • Type:LSA 类型
  • Ls id:Link-ID(类似页码)
  • Adv rtr:通告者
  • Ls age:老化时间(最大 1800s)
  • Seq#:序列号(防环)
  • Chksum:校验和
  • Link count:包含几条内容

2、五种常见LSA对比:

| LSA类型 | 名称 | 传播范围 | 通告者 | 携带内容 | Link-ID |
| LSA1 | Router | 单区域 | 每台路由器 | 本地直连拓扑 | 通告者RID |
| LSA2 | Network | 单区域 | DR | MA 网段拓扑 | DR 接口 IP |
| LSA3 | Summary | 整个 OSPF 域 | ABR(会修改) | 区域间路由 | 目标网络号 |
| LSA4 | ASBR Summary | 除 ASBR 所在区域外 | ABR(会修改) | ASBR 位置 | ASBR 的 RID |

LSA5 External 整个 OSPF 域 ASBR 域外路由(重发布) 目标网络号
[LSA对比]

十一、LSA 更新量优化方法

1、手工汇总:

  • 域间路由汇总(3类 LSA):在 ABR 上汇总区域路由
bash 复制代码
[r1-ospf-1-area-0.0.0.2] abr-summary 5.5.4.0 255.255.252.0
  • 域外路由汇总(5类 LSA):在 ASBR 上汇总外部路由
bash 复制代码
[r4-ospf-1] asbr-summary 100.1.0.0 255.255.252.0

2、特殊区域:

| 区域类型 | 拒绝的LSA | 添加的缺省路由 | 使用场景 |
| 末梢区域(Stub) | 4、5类 | 3类缺省(来自 ABR) | 无 ASBR 的区域 |
| 完全末梢区域(Totally Stub) | 3、4、5类 | 仅一条 3类缺省(ABR 配置 no-summary) | 无 ASBR 的区域 |
| NSSA | 4、5类 | 7类缺省(来自 ASBR) | 有 ASBR 的区域,5类转7类 |

完全NSSA 3、4、5类 3类缺省(ABR 配置 no-summary) 有 ASBR 的区域

特殊区域不能是骨干区域,不能存在虚链路

配置示例:

bash 复制代码
# 末梢区域
[r5-ospf-1-area-0.0.0.2] stub

# 完全末梢区域(仅在 ABR 上配置)
[r1-ospf-1-area-0.0.0.2] stub no-summary

# NSSA
[r4-ospf-1-area-0.0.0.1] nssa

# 完全 NSSA(仅在 ABR 上配置)
[r3-ospf-1-area-0.0.0.1] nssa no-summary

十二、OSPF排错

bash 复制代码
display ospf peer [brief] # 查看邻居状态(最重要)

display ospf interface [interface-type interface-number] # 查看接口OSPF详细信息

display ospf lsdb # 查看链路状态数据库

display ospf routing # 查看OSPF路由表

display ip routing-table protocol ospf # 查看OSPF学到的路由(在全局路由表中)

display current-configuration configuration ospf # 查看OSPF配置(精简)

华为eNSP OSPF排错四步口诀:

一步:底层通不通?

  • 命令:ping -a 本端IP 对端IP
  • 目标:确保直连三层IP能通。不通则检查物理链路、接口IP、VLAN/串口时钟。

二步:邻居对不对? (最关键)

  • 命令:display ospf peer brief
  • 目标:查看邻居状态是否为 Full。

无邻居/状态异常:立即检查 display ospf interface,对比两端:

区域(Area) 是否一致?

认证(Authentication) 是否一致?

网络类型(Type) 是否一致?

Hello/Dead计时器 是否一致?

卡在ExStart/Exchange:检查 MTU 是否一致、Router ID 是否冲突。

三步:路由有没有?

  • 命令:display ip routing-table protocol ospf
  • 目标:查看OSPF路由是否装入全局路由表。

有邻居无路由:

查LSDB:display ospf lsdb,看是否有对应LSA。

查区域设计:非骨干区域必须直连 Area 0。

查路由过滤:是否有 filter-policy 等。

四步:终极抓包看

  • 操作:在eNSP链路上右键开始抓包。
  • 目标:直接观察OSPF协议报文(Hello, DD等),定位是发不出、收不到还是参数错。

最常犯的五个错误:

  • 区域配错:直连接口不在同一个OSPF区域。
  • 网段宣告错:network 命令或接口下的 ospf enable 没包含正确接口。
  • 认证不配:一端配了认证,另一端没配或密码/模式不对。
  • 网络类型混淆:默认以太网是Broadcast,串行链路有时需手动改为 P2P。
  • eNSP"玄学":设备未启动、镜像Bug,重启设备/重开拓扑试试。

附:关键命令查看

bash 复制代码
# 查看邻居表
display ospf peer
display ospf peer brief

# 查看 LSDB
display ospf lsdb

# 查看 OSPF 路由
display ip routing-table protocol ospf

# 查看接口 OSPF 信息
display ospf interface GigabitEthernet 0/0/1
相关推荐
REDcker2 小时前
HTTP请求数据包流转详解:localhost、127.0.0.1、公网 IP、公网域名访问时的数据流转
网络·tcp/ip·http
我送炭你添花3 小时前
开源TR-069 ACS(自动配置服务器)GenieACS 的四个主要模块详细介绍
运维·服务器·开源
Godspeed Zhao3 小时前
现代智能汽车系统——网络
网络·汽车
Exquisite.3 小时前
企业高性能web服务器---Nginx(2)
服务器·前端·nginx
Andy Dennis3 小时前
FTP局域网小网站V2.3——安全、批量、有序,体验全新进化
服务器·flask·ftp工具
m0_737302583 小时前
四大厂商云服务器安全创新对比,筑牢数字化转型安全底座
服务器
kyle-fang3 小时前
阿里云服务器部署MySQL
服务器·mysql·阿里云
开开心心_Every3 小时前
Win10/Win11版本一键切换工具
linux·运维·服务器·edge·pdf·web3·共识算法
怣504 小时前
Linux创意命令组合:让终端变得有趣又高效
linux·运维·服务器