前言:
-
链路状态路由协议(Link-State Routing Protocol)是一种动态路由协议,通告的是链路状态而不是路由信息,其核心思想是通过全网拓扑信息的共享和计算,实现高效、精确的路由选择
-
每个路由器通过收集并分析全网链路状态信息,构建统一的网络拓扑图(链路状态数据库,LSDB),并基于此计算最短路径
OSPF的工作过程
邻居关系:
两台OSPF路由器通过Hello报文发现彼此,并确认了双向通信(2-Way状态),但尚未进行LSDB(链路状态数据库)的同步
1. Down状态
-
含义:初始状态,未收到任何邻居的Hello报文
-
行为:
-
主动发送Hello报文(组播地址224.0.0.5)
-
该组播用于泛洪LSA(如Type 1),DR通过此地址向所有OSPF路由器发送更新
-
-
触发进入Init状态的条件:收到邻居的Hello报文,但未在报文中发现自己的Router ID
2. Init状态
-
含义:收到邻居的Hello报文,但未确认双向通信
-
行为:
-
检查Hello报文中的参数(区域ID、认证、Hello/Dead时间、网络类型)
-
若参数匹配,将邻居的Router ID加入Hello报文的“邻居列表”中
-
-
触发进入2-Way状态的条件:
-
在后续收到的Hello报文中,发现自己的Router ID被对方列出(确认双向通信)
-
3. 2-Way状态
-
含义:双向通信已确认,但尚未建立邻接关系
-
行为:
-
在广播网络(如以太网)中,进行一般为40秒的DR/BDR选举
-
DROther:既不是DR也不是BDR的路由器就是DROther路由器,保持2-Way状态,不进行后续LSDB同步
-
DR/BDR路由器:与所有邻居建立邻接关系(进入ExStart状态)
-
-
关键点:
只有DR/BDR与其他路由器建立邻接关系,非DR/BDR之间保持2-Way
DR和BDR的选举规则
在广播网络中,若所有路由器两两建立邻接关系,会导致大量重复的LSA泛洪
于是便有了选举DR/BDR作为信息交换的“中心节点”
-
DROther仅与DR/BDR建立邻接关系
-
DR负责收集和分发LSA,BDR作为备份
-
DR和BDR的选举是非抢占式的
-
即一旦选举完成,即使有更高优先级的路由器加入,也不会抢占DR/BDR角色
-
是基于具体的接口进行选举的
-
接口的优先级越大越优先,如果该优先级设为0,则代表不参与选举,默认优先级为1
-
若优先级相同,Router ID最大的当选
-
224.0.0.6仅DR和BDR会监听此地址, DROther通过此地址向DR/BDR发送LSA更新或请求
邻接关系:
在邻居关系的基础上,双方完成LSDB的同步,最终进入Full状态,形成用于路由计算的完全邻接关系
4. ExStart状态
-
含义:主从关系协商,准备交换LSDB摘要
-
行为:
-
发送空的DD报文(Database Description Packet),并携带序列号
-
DD报文隐式确认机制:通过序列号(DD Sequence )确保报文传输的可靠性和完整性
-
通过DD报文标志位,包含:
-
I(Init):判断是否为连续报文中的第一个DD报文,是第一个报文则=1,不是则=0
-
M(More):是否后续还有DD报文,如果有则=1,没有则=0
-
MS(Master/Slave):发送方角色(Master=1,Slave=0)
-
-
-
通过比较Router ID确定Master/Slave角色:
-
Router ID大者成为Master,控制DD报文序列号递增
-
-
-
触发进入Exchange状态的条件:主从角色协商完成
5. Exchange状态
-
含义:交互LSDB摘要(LSA头部信息)
-
设行为:
-
Master发送DD报文(携带LSA头部),Slave响应确认
-
双方对比本地LSDB,标记缺失或过期的LSA
-
-
触发进入Loading状态的条件:摘要交换完成,发现需要请求的LSA
6. Loading状态
-
含义:请求并获取缺失的LSA
-
行为:
-
发送LSR(Link State Request)报文,请求缺失的LSA
-
收到LSU(Link State Update)报文后,更新本地LSDB
-
发送LSAck确认接收
-
-
触发进入Full状态的条件:所有缺失LSA同步完成
7. Full状态
-
含义:邻接关系完全建立,LSDB完全同步
-
行为:
-
触发SPF算法计算最短路径树,更新路由表
-
周期性发送Hello报文维持邻居关系
-
不同网络类型中的DR和BDR的选举
OSPF网络类型 | 常见链路层协议 | 是否选举DR | 是否建立邻居关系 |
Point to point 点到点 | ppp链路 | 否 | 建立 |
Point-to-Multipoint 点到多点 | 部分帧中继 | 否 | |
NBMA 非广播多路访问 | 帧中继链路 | 是 |
DR和BDR会于DROther建立邻接关系 DROther之间只会建立邻居关系 |
Broadcast 广播多路访问 | 以太网链路 | 是 |
Hello报文
主要功能:
-
邻居发现建立与保持:
通过周期性发送Hello报文(默认10秒一次),发现同一链路上的OSPF邻居,并保持邻居关系 -
参数协商:
确保邻居双方的参数一致:-
区域ID(Area ID)
-
认证方式和密码
-
网络类型(Broadcast、P2P、NBMA等)
-
Hello间隔和Dead时间
-
-
DR/BDR选举:
在广播网络和NBMA网络中,通过Hello报文中的优先级和Router ID选举DR/BDR -
位于邻居关系建立(Down → Init → 2-Way)
DD报文
主要功能:
-
LSDB摘要交换:
在邻接关系建立过程中,交换链路状态数据库(LSDB)的摘要信息(LSA头部),用于快速对比缺失或过期的LSA -
主从角色协商:
确定Master/Slave角色,控制DD报文序列号的递增 -
隐式确认机制:
通过序列号(Sequence Number)确保报文传输的可靠性 -
位于邻接关系建立(ExStart → Exchange → Full)
命令配置
[Huawei] ospf [process-id] router-id [router-id]
启动进程1,手动设置Router ID为1.1.1.1
[Huawei] ospf 1 router-id 1.1.1.1
宣告进入OSPF区域
[Huawei-ospf-1] area 0
[Huawei-ospf-1-area-0.0.0.0] network [network-address] [wildcard-mask]
直接在OSPF中宣告192.168.1.0/24网段 后跟反掩码
[Huawei-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
接口视图下直接启用OSPF
[Huawei] interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1] ospf enable 1 area 0
将接口加入OSPF进程1的区域0
选举DR的优先级
[Huawei] interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1] ospf dr-priority [value]
示例:设置接口优先级为200(默认1,0表示不参与选举)
[Huawei-GigabitEthernet0/0/1] ospf dr-priority 200
修改接口开销
[Huawei] interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1] ospf cost [value]
设置接口开销为100(默认根据带宽计算)
[Huawei-GigabitEthernet0/0/1] ospf cost 100
修改接口类型
[Huawei] interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1] ospf network-type broadcast(默认)(nbma、p2p、p2mp)
查看邻居状态
<Huawei> display ospf peer brief
查看OSPF路由表
<Huawei> display ospf routing
查看链路状态数据库
<Huawei> display ospf lsdb