OSPF协议通过5种报文类型实现邻居发现、链路状态同步和路由计算。所有OSPF报文共享公共报文头,后续根据不同报文类型携带特定数据。以下是各报文的详细解析:
一、OSPF公共报文头
每个OSPF报文以24字节的头部开始,结构如下:
字段
长度(字节)
说明
版本(Version)
1
OSPF版本(OSPFv2为2,OSPFv3为3)。
类型(Type)
1
报文类型(1=Hello,2=DBD,3=LSR,4=LSU,5=LSAck)。
报文长度(Length)
2
整个报文(含头部)的总长度(单位:字节)。
Router ID
4
发送该报文的路由器ID(唯一标识)。
Area ID
4
报文所属的区域ID(Area 0为骨干区域)。
校验和(Checksum)
2
用于校验报文完整性(不包含认证字段)。
认证类型(Auth Type)
2
0=无认证,1=明文认证,2=MD5认证(OSPFv3使用IPv6原生安全机制)。
认证数据(Auth Data)
8
明文密码或MD5摘要(根据认证类型填充)。
二、OSPF报文类型详解
1. Hello报文(Type 1)
作用:发现并维护邻居关系,确认邻居存活。
关键字段:
字段
说明
网络掩码(Network Mask)
发送接口的子网掩码(必须与邻居一致)。
Hello间隔(HelloInterval)
发送Hello报文的时间间隔(默认10秒)。
Dead间隔(RouterDeadInterval)
邻居失效时间(默认40秒)。
邻居列表(Neighbors)
已收到的邻居Router ID列表。
优先级(Priority)
用于DR/BDR选举(默认1,0表示不参与选举)。
DR/BDR的Router ID
当前网络的DR和BDR的Router ID。
触发条件:
周期性发送(默认每10秒)。
接口激活时立即发送。
组播地址:
广播网络:224.0.0.5(所有OSPF路由器)。
DR/BDR与邻居通信:224.0.0.6(仅DR/BDR监听)。
2. DBD报文(Database Description,Type 2)
作用:描述本地LSDB的摘要信息,用于同步链路状态数据库。
关键字段:
字段
说明
接口MTU(MTU)
发送接口的最大传输单元(需与邻居一致)。
序列号(Sequence)
用于保证DBD报文顺序传输。
I/M/MS位
- I位:是否为第一个DBD报文。- M位:是否还有后续报文。- MS位:主从关系(1=主,0=从)。
LSA头部列表
本地LSDB中所有LSA的摘要(仅包含LSA头部)。
交互流程:
主从选举:通过比较Router ID,确定主路由器(Master)控制DBD交换顺序。
DBD交换:主从路由器交替发送DBD报文,携带本地LSDB的LSA摘要。
3. LSR报文(Link State Request,Type 3)
作用:请求缺失的LSA详细信息。
关键字段:
字段
说明
LSA类型(LS Type)
请求的LSA类型(如Type 1、Type 5等)。
链路状态ID(Link State ID)
标识特定LSA的ID(如路由器ID或网络地址)。
通告路由器(Advertising Router)
生成该LSA的路由器的Router ID。
触发条件:当路由器收到DBD报文后,发现本地LSDB缺少某些LSA时,发送LSR请求。
4. LSU报文(Link State Update,Type 4)
作用:携带具体的LSA信息,用于更新邻居的LSDB。
关键字段:
字段
说明
LSA数量(# LSAs)
报文中包含的LSA条目数量。
LSA列表
一个或多个完整的LSA条目(包含链路状态类型、ID、序列号等)。
触发条件:
收到LSR请求时,发送对应的LSA。
网络拓扑变化时,主动洪泛更新的LSA。
5. LSAck报文(Link State Acknowledgment,Type 5)
作用:确认收到LSU报文,确保可靠性。
关键字段:
字段
说明
LSA头部列表
需要确认的LSA的头部信息(类型、链路状态ID、通告路由器等)。
交互方式:
显式确认:单独发送LSAck报文。
隐式确认:通过回复LSU报文捎带确认(较少使用)。
三、OSPF报文交互流程
以邻居关系建立和LSDB同步为例:
Hello报文:发现邻居并协商参数(区域ID、认证、Hello/Dead间隔等)。
DBD报文:交换LSDB摘要,确定主从关系。
LSR/LSU/LSAck:请求、发送和确认缺失的LSA,最终同步LSDB。
SPF计算:所有路由器独立运行Dijkstra算法,生成路由表。
四、常见问题与排查
邻居关系卡在ExStart/Exchange状态:
原因:接口MTU不匹配或DBD报文丢失。
解决:检查两端MTU配置,确保一致(ip ospf mtu-ignore可跳过MTU检查)。
LSA无法洪泛:
原因:区域划分错误或LSA过滤配置不当。
解决:确认区域设计(如NSSA区域是否允许Type 7 LSA)。