开放最短路径优先协议

发布于:2025-08-19 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

第一阶段:邻居发现(Neighbor Discovery)

核心目标

详细流程

第二阶段:邻接建立与LSDB同步(Database Synchronization)

核心目标

详细流程

步骤1:触发邻接建立

步骤2:主从选举(Master/Slave Negotiation)

步骤3:交换LSDB摘要(Exchange LSDB Catalogs)

步骤4:请求缺失LSA(Link State Request)

步骤5:同步完整LSA(Link State Update)

概述

1. 邻居发现与DR/BDR角色

2. LSDB同步(新路由器 ↔ DR/BDR)

3. 洪泛更新全网(DR主导)

4. 全网路由表更新


第一阶段:邻居发现(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)发送 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后:

  1. 存入LSDB

  2. 其他邻接邻居转发(除接收端口)

  3. 回复LSAck确认
    → 直至全网LSDB一致。

4. 全网路由表更新


网站公告

今日签到

点亮在社区的每一天
去签到