OSPF(开放式最短路径优先)详解
1. 基本概念
- OSPF(Open Shortest Path First)是一种基于链路状态(Link-State)的内部网关协议(IGP),用于在单一自治系统(AS)内动态交换路由信息。
- 版本:OSPFv2(IPv4)、OSPFv3(IPv6)。
- 标准:由RFC 2328(OSPFv2)和RFC 5340(OSPFv3)定义。
2. 核心特点
- 链路状态算法:通过洪泛(Flooding)机制收集网络拓扑信息,构建链路状态数据库(LSDB),使用SPF算法(Dijkstra算法)计算最短路径。
- 快速收敛:网络变化时能快速更新路由表。
- 分层设计:支持区域划分(Area),减少路由更新流量。
- 无环路:基于SPF算法保证无环路路径。
- 支持VLSM/CIDR:适用于复杂网络规划。
- 认证机制:支持明文、MD5等认证方式。
3. OSPF工作原理
- 邻居发现:通过发送Hello报文发现相邻路由器,建立邻居关系。
- 链路状态数据库同步:邻居路由器交换LSA(链路状态通告),同步LSDB。
- SPF计算:每个路由器独立运行Dijkstra算法,生成最短路径树。
- 路由表生成:根据最短路径树生成路由表。
4. OSPF区域(Area)
- 骨干区域(Area 0):所有非骨干区域必须直接连接到Area 0,负责区域间路由。
- 非骨干区域:
- 普通区域(Area 1, Area 2等)。
- 末梢区域(Stub Area):不接收外部路由(如Type 5 LSA)。
- 完全末梢区域(Totally Stubby Area):仅保留默认路由。
- NSSA(Not-So-Stubby Area):允许引入外部路由但限制传播。
- 虚链路(Virtual Link):用于连接不直接连到Area 0的区域。
5. OSPF报文类型
类型 |
名称 |
作用 |
1 |
Hello |
发现和维护邻居关系。 |
2 |
Database Description (DBD) |
描述本地LSDB的摘要信息。 |
3 |
Link-State Request (LSR) |
请求详细的LSA信息。 |
4 |
Link-State Update (LSU) |
携带具体的LSA更新。 |
5 |
Link-State Ack (LSAck) |
确认收到LSA。 |
6. 邻居状态机
- Down:初始状态,未收到任何Hello报文。
- Init:收到对方的Hello,但未包含自己的Router ID。
- 2-Way:双向通信建立,选举DR/BDR(广播网络)。
- ExStart:协商主从路由器,准备交换DBD。
- Exchange:交换DBD报文,对比LSDB差异。
- Loading:通过LSR/LSU同步缺失的LSA。
- Full:邻居LSDB完全同步,建立邻接关系。
7. DR和BDR选举
- 目的:在广播网络(如以太网)中减少邻接关系数量。
- 选举规则:
- 优先级最高的路由器成为DR,次高为BDR(默认优先级=1,0表示不参与选举)。
- 优先级相同则比较Router ID(数值大者胜出)。
- 注意:DR/BDR选举是非抢占的,除非重启或优先级修改。
8. LSA类型
类型 |
名称 |
作用 |
1 |
Router LSA |
描述路由器直连链路信息,每个区域生成。 |
2 |
Network LSA |
由DR生成,描述广播网络的连接路由器。 |
3 |
Summary LSA |
ABR生成,描述区域间路由。 |
4 |
ASBR Summary LSA |
ABR生成,指向ASBR的路由。 |
5 |
AS External LSA |
ASBR生成,描述外部路由(如RIP、BGP引入)。 |
7 |
NSSA External LSA |
在NSSA区域中替代Type 5 LSA。 |
9. 配置示例(华为)
[HUAWEI]ospf 1 router-id 0.0.0.6 # 启用OSPF进程1 router ID为0.0.0.6
[HUAWEI-ospf-1]area 0.0.0.0 # 区域为0.0.0.0
[HUAWEI-ospf-1-area-0.0.0.0]network 20.19.0.0 0.0.0.255 # 宣告网络
[HUAWEI-Vlanif19]ospf enable 1 area 0.0.0.0 #接口启用ospf1
10. OSPF的优缺点
- 优点:
- 快速收敛,适应网络变化。
- 分层设计降低资源消耗。
- 支持复杂网络和多种路由类型。
- 缺点:
- 配置相对复杂(尤其是多区域)。
- LSDB占用内存较高。
11. 常见故障排查
- 邻居无法建立:检查Hello间隔、网络类型、认证、子网掩码是否一致。
- 路由未更新:确认LSA是否正确洪泛,区域配置是否一致。
- 路由环路:检查区域设计和路由汇总配置。