目录
第二阶段:邻接建立与LSDB同步(Database Synchronization)
步骤2:主从选举(Master/Slave Negotiation)
步骤3:交换LSDB摘要(Exchange LSDB Catalogs)
步骤4:请求缺失LSA(Link State Request)
步骤5:同步完整LSA(Link State Update)
第一阶段:邻居发现(Neighbor Discovery)
核心目标
确认相邻路由器的物理连通性和协议兼容性,建立基础邻居关系(Neighbor Adjacency)。
详细流程
1.主动发送 Hello 报文
每个OSPF路由器周期性(默认每10秒)从所有启用OSPF的接口组播发送
Hello
报文。目的地址:
224.0.0.5
(AllSPFRouters)组播地址 224.0.0.5
确保只有OSPF路由器处理报文,减少其他设备负担携带关键信息:
字段 | 作用 |
---|---|
Router ID | 发送方唯一标识(如手动配置或最大IP的接口地址) |
Area ID | 发送接口所属区域(如Area 0) |
Network Mask | 发送接口的子网掩码 |
Hello Interval | Hello包发送间隔(默认10s) |
Dead Interval | 邻居失效超时(默认40s) |
Neighbors | 已知邻居的Router ID列表(初始为空) |
2.接收并解析 Hello 报文
当路由器R2收到邻居R1的Hello报文时:
记录邻居信息:
将R1的Router ID
加入本地邻居表(Neighbor Table),状态标记为Init
(单向发现)。
3.双向确认(2-Way 状态)
R2在下一个Hello报文中,将R1的Router ID加入
Neighbors
字段列表。当R1收到R2的Hello报文(其中包含自己的Router ID)时:
确认R2已感知到自己 → 双向通信建立!
将R2的邻居状态更新为
2-Way
(稳定邻居状态)。
第二阶段:邻接建立与LSDB同步(Database Synchronization)
核心目标
在已建立的邻居关系(2-Way
状态)基础上,与特定邻居(DR/BDR) 建立邻接关系(Adjacency),同步链路状态数据库(LSDB),确保区域内所有路由器拥有完全一致的拓扑视图。
详细流程
步骤1:触发邻接建立
条件:
在广播网络中,非DR/BDR路由器只与 DR 和 BDR 建立邻接。
-
点对点链路中,所有邻居直接建立邻接。
动作:
路由器向目标邻居(DR/BDR)发送 DBD(Database Description)报文,进入ExStart
状态。
🌟 关键设计:通过DR/BDR集中管理同步,避免全互联洪泛风暴(N台路由器需建立O(N)邻接关系 → 优化为O(1))。
步骤2:主从选举(Master/Slave Negotiation)
交换空DBD:
双方互发无LSA摘要的DBD(Flags字段标记I=1, M=1, MS=1
),声明自己希望成为Master。选举规则:
比较双方的 Router ID,较大者成为 Master(控制序列号同步)。
状态迁移:
ExStart
→Exchange
。
步骤3:交换LSDB摘要(Exchange LSDB Catalogs)
Master主导传输:
Master发送携带 LSA头部摘要 的DBD报文(Flags:M=1, MS=1
),序列号按序递增(Seq=Y+1, Y+2...)。#用抓包工具抓包后,打开ospf的DBD包,可看到这些数据 I为1,表示本地发出的第一个DBD包 M为0,表示本地发出的最后一个DBD包 MS为1,代表主,为0代表从 #ospf的主从关系表示的BR,BDR
Slave确认摘要:
Slave收到DBD后,回复相同序列号的DBD报文(包含自身摘要)。摘要内容:
每个LSA摘要包含:字段 作用 LSA Type 类型(如1-Router, 2-Network) Link State ID 唯一标识LSA Advertising Router 通告该LSA的路由器ID Sequence Number 版本标识(越大越新) Checksum 数据完整性校验 状态保持:
Exchange
步骤4:请求缺失LSA(Link State Request)
比对摘要差异:
双方根据收到的DBD报文,对比本地LSDB:
若发现对方有更新的LSA(序列号更高)→ 标记为 Need to Request
若对方缺失本地持有的LSA → 标记为 Need to Send
发送LSR:
通过 LSR(Link State Request) 报文精准请求缺失的LSA(指定Type/Link State ID/Adv Router)。
状态迁移:Exchange
→Loading
步骤5:同步完整LSA(Link State Update)
响应LSU:
收到LSR后,通过 LSU(Link State Update) 报文发送完整的LSA数据。可靠传输:
接收方必须回复 LSAck(Link State Acknowledgment) 确认收到。循环直至完成:
重复LSR → LSU → LSAck
过程,直到双方LSDB完全一致。
状态迁移:Loading
→Full
(邻接建立完成)💡 洪泛的起点:
新路由器同步完成后,立即洪泛自身的 Router-LSA(Type 1),宣告加入网络。
概述
1. 邻居发现与DR/BDR角色
新路由器周期性发送Hello报文(目的IP:224.0.0.5
),所有直连OSPF路由器都会回复(非仅DR/BDR)。
新路由器会与所有邻居建立2-Way
关系,但仅与DR/BDR建立邻接(Adjacency) 用于LSDB同步。
非DR/BDR路由器间保持2-Way
状态,不交换LSDB(避免洪泛风暴)。
2. LSDB同步(新路由器 ↔ DR/BDR)
通过DBD摘要比对 → LSR精准请求 → LSU发送数据,新路由器获取全网拓扑信息。
DR也会学习新路由器的LSA(如它的直连网络),存入本地LSDB。
同步阶段仅更新新路由器和DR/BDR的LSDB,其他路由器尚未感知
3. 洪泛更新全网(DR主导)
新路由器洪泛自身LSA:
同步完成后,新路由器立即洪泛 Router-LSA(Type 1),宣告自身加入。
洪泛规则
广播网络:新路由器将LSA单播给DR → DR通过组播
224.0.0.5
转发给全网。点对点网络:新路由器直接组播洪泛给邻居。
每台路由器收到新LSA后:
存入LSDB
向其他邻接邻居转发(除接收端口)
回复
LSAck
确认
→ 直至全网LSDB一致。