当前位置: 首页 > news >正文

开放最短路径优先协议

目录

第一阶段:邻居发现(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 IntervalHello包发送间隔(默认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 建立邻接。

    • OSPF——DR及BDR详解_dr和bdr-CSDN博客

    • 点对点链路中,所有邻居直接建立邻接。

  • 动作
    路由器向目标邻居(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. 全网路由表更新

http://www.dtcms.com/a/337744.html

相关文章:

  • Read View 在 MVCC 里如何工作的?
  • DSP音频算法工程师技能2
  • IDE开发系列(2)扩展的IDE框架设计
  • GNhao/GN号,海外SIM号怎么注册详细步骤!
  • 纯前端表格控件SpreadJS v18.0 Update1正式发布——集成AI智能化插件
  • 大数据计算引擎(一)——Spark
  • gdb的load命令和传给opeocd的monitor flash write_image erase命令的区别
  • 如何实现前后端交互以及方法传参中传字段和传对象的区别和方法。
  • 音乐怎么测试?正在播放音乐,中途拔掉u盘,再次插上u盘,是怎么播放的?
  • 低端设备加载webp ANR
  • JavaScript 常用事件总结汇总
  • 前端css学习笔记7:各种居中布局空白问题
  • Ethan独立开发新品速递 | 2025-08-18
  • 开发避坑指南(28):Spring Boot端点检查禁用失效解决方案
  • 【Linux操作系统】简学深悟启示录:进程状态优先级
  • 遨游三防科普|三防平板是指哪三防?应用在什么场景?
  • linux对外提供snmp服务
  • Pytest项目_day18(读取ini文件)
  • Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
  • 如何解决机器翻译的“幻觉“问题(Hallucination)?
  • 当AI学会“思考”:大语言模型背后的智能本质与伦理边界
  • 【提示词技巧】通用提示词原则介绍
  • Linux学习-软件编程(进程间通信1)
  • ROS 2 中用于建图的一些 topic
  • PyTorch神经网络工具箱(优化器)
  • buuctf:护网杯_2018_gettingstart、oneshot_tjctf_2016
  • llamafactory使用qlora训练
  • VectorDB+FastGPT一站式构建:智能知识库与企业级对话系统实战
  • 使用LLaMA-Factory对大模型进行微调-详解
  • OSG+Qt —— 笔记2- Qt窗口绘制棋盘及模型周期运动(附源码)