OSPF动态路由协议


单区域OSPF


1. 定义:

    • OSPF(Open Shortest Path First) 是一种基于链路状态(Link-State)内部网关路由协议(IGP) ,采用 Dijkstra最短路径优先算法(SPF) 计算到达每个网络的最短路径。

2. rip的缺点:

|-------------|---------------------------------------|
| 以跳数为度量 | 跳数少不一定路径最优(如10M链路 vs 2M链路,跳数相同但带宽差异大) |
| 最大跳数16 | 限制网络直径,无法用于大型网络 |
| 收敛速度慢 | 更新计时器30秒、失效计时器180秒、清除计时器240秒 |
| 发送全部路由表 | 浪费带宽资源(1000条路由单次更新需160Kb) |

3. 基本协议模型

    • 建立邻居:通过hello包探测和发现邻居形成ospf邻居表
    • 发起路由:描述直连网段和直连拓扑,发起lsa,存放到自己的LSDB
    • 传播路由:LSA洪泛,区域捏路由器的LSDB达到一致
    • 计算路由:以自己的LSA1为跟进行spf计算,算出路由。

4. 基本工作原理(核心参数)

    • Router ID(32为无符号整数,唯一标识一台路由器)
      • 选取顺序:
        1. 手工配置
        2. Loopback接口最大的IP地址
        3. 物理接口最大的IP地址(需UP状态)
    • 链路状态(LS)
      • 定义:路由器周边链路的状态
      • 内容:
        • 直连网段状态
        • 直连拓扑状态
        • 接口开销
    • 链路状态通告LSA
      • 链路状态通告(按照一定格式封装后的链路状态信息)
    • 链路状态数据库LSDB
      • 每一个OSPF路由器中存储LSA的数据库
    • SPF计算(最短路由优先算法--计算时每个路由器以自己的lsa为根)
    • 区域
      • 骨干区域(area0):必须存在且连续
      • 非骨干区域:必须直连Area0
      • 特殊区域------多区域中讲解
      • 区域划分目的:
        • 减小LSDB
        • 隔离拓扑变化
        • 支持路由汇总
    • 路由角色
      • DR
      • BDR
      • 为什么需要BR、BDR选举?
        • 当全路由器互联需要n*(n-1)/2个邻接关系,而DR机制只需要一个星型的拓扑就可以
      • 选举规则
        • 优先级(0-255 默认1)0不参与选举
        • 优先级高者当选DR,次高者当选BDR
        • 优先级相同,RouterID大的优先
        • DR失效 → BDR立即成为新DR → DRother竞争新BDR
    • OSPF网络类型
      • Broadcast广播多路访问:以太网接口(如efg口)
      • P2P点到点:Serial口(不需要进行DR/BDR选举)
    • ospf报文类型

|-----------------------------------|------------------|
| Hello | 发现并维持邻居关系 |
| DD(Database Description) | 描述LSDB摘要(仅LSA头部) |
| LSR(Link State Request) | 请求缺少的LSA |
| LSU(Link State Update) | 发送LSA更新 |
| LSAck(Link State Acknowledge) | 确认收到LSU |

    • 邻居建立过程(接口状态)

      Down → Init → 2-Way → ExStart → Exchange → Loading → Full

      Down 未收到Hello
      Init 收到Hello(不含自己RID)
      2-Way 收到含自己RID的Hello(邻居建立)
      ExStart DD序列号协商(主从选举)下面有注释
      Exchange 交换DBD描述
      Loading 请求缺失LSA(LSR/LSU/LSAck)
      Full 邻接建立,LSDB同步完成

    • 主从状态选举(准开始状态)
      • 根据RouterID进行选举(大的为主)
    • LSA老化与刷新
      • 最大老化时间:3600秒
      • 刷新机制:老化时间到达1800秒(一半)时,发起路由器重新发起该LSA
      • 序列号+1,老化时间归零
    • 度量值--cost
      • cost=参考带宽 / 接口带宽

5. 作用

    • OSPF采用SPF算法计算路由,从算法上保证了无路由环路。
    • OSPF通过邻居关系维护路由,避免了定期更新对带宽的消耗。
    • OSPF路由更新效率高,网络收敛快,适用于大中型网络

多区域OSPF


1. 为什么要划分多区域的OSPF呢?

    • 减少LSDB
    • 减小LSA洪泛范围
    • 可以做路由汇总
    • 特殊区域优化(可以配置stub nssa区域等进一步减小路由表)

2. 多区域OSPF的规则:

    • 非骨干区域必须和Area0相连
    • Area0必须连续
    • 区域间路由必须通过Area0传递

3. 几种特殊区域:

    • Stub(末梢区域)
      • 核心特征:不允许45类LSA进入,允许学习123类LSA(含默认路由)
      • 限制条件:
        • 所有路由器必须配置为stub
        • 不能有虚链路
        • 不能有ASBR

      ! ABR和区域内所有路由器都要配置
      R1(config-router)# area 1 stub
      R1(config-router)# area 1 default-cost 20 ! (可选)修改默认路由Cost

    • Totally Stub(完全末梢区域)
      • 核心特征:不允许345类进入,只允许12类LSA(含有默认路由)

      ! 仅在ABR上添加no-summary
      R1(config-router)# area 1 stub no-summary

      ! 区域内其他路由器仍配置为普通stub
      R3(config-router)# area 1 stub

    • NSSA(非纯末梢区域)
      • 核心特征:允许123类的基础上,允许7类LSA(外部路由)转换为5类LSA进行学习,不允许5类LSA。允许区域内有ASBR,LSDB包含12347类 路由

      ! NSSA区域内所有路由器配置为nssa
      R6(config-router)# area 2 nssa
      R2(config-router)# area 2 nssa

      ! (可选)在NSSA ASBR上注入默认路由
      R2(config-router)# area 2 nssa default-information-originate

    • Totally NSSA(完全非纯末梢区域)
      • 在nssa基础上禁止3类LSA

      R6(config-router)# area 2 nssa no-summary
      R6(config-router)# area 2 default-cost 20 ! (可选)

      ! 区域内其他路由器配置为普通nssa
      R2(config-router)# area 2 nssa

4. 路由汇总---减少路由数量

复制代码
区域间汇总	
area <区域号> range <网络> <掩码>            	在ABR上汇总3类LSA
外部路由汇总	
summary-address <网络> <掩码>	               在ASBR上汇总5类/7类LSA

5. 几种类型的LSA

|--------|----------------------------|---------------------|---------------------|------------------------------|---------------------------------------|
| 类型 | 名称 | 产生者 | 传播范围 | 通告内容 | 核心作用 |
| 1类 | Router-LSA(路由器LSA) | 每台路由器 | 本区域内部 | 自身直连链路的状态、Cost、邻居信息 | 描述路由器自身的链路状态,是本区域拓扑的基础 |
| 2类 | Network-LSA(网络LSA) | DR(指定路由器) | 本区域内部 | 该广播网段内所有相连路由器的RID | 描述广播型多路访问(如以太网)网络的拓扑,配合1类LSA使用 |
| 3类 | Summary-LSA(汇总LSA) | ABR(区域边界路由器) | 跨区域传播(本区域→其他区域) | 区域间的网络前缀和Cost | 将本区域的路由通告给其他区域,实现区域间通信 |
| 4类 | ASBR-Summary-LSA | ABR | 跨区域传播(本区域→其他区域) | ASBR的Router-ID和到达ASBR的Cost | 告诉其他区域"ASBR在哪里",配合5类LSA使用 |
| 5类 | AS-external-LSA(自治系统外部LSA) | ASBR(自治系统边界路由器) | 全网传播(除特殊NSSA区域) | 外部路由(如RIP/静态路由/直连引入)的网段和Cost | 将OSPF域外的路由通告到整个OSPF网络 |
| 7类 | NSSA-LSA | ASBR(位于NSSA区域内) | NSSA区域内部 | 外部路由(同5类LSA内容) | 在NSSA(非完全末梢区域)内引入外部路由,由ABR转换为5类LSA后传出 |

6. 各类特殊区域支持的LSA:

|--------------------|-------|------------|----------|----|-------------------------|
| 区域类型 | 1&2类 | 3类 | 4&5类 | 7类 | 默认路由来源 |
| 骨干/普通区域 | ✅ | ✅ | ✅ | ❌ | 手动(default-information) |
| Stub区域 | ✅ | ✅ | ❌(禁止4/5) | ❌ | ABR自动注入3类默认路由 |
| Totally Stub区域 | ✅ | ❌(禁止3/4/5) | ❌ | ❌ | ABR自动注入3类默认路由(唯一3类) |
| NSSA区域 | ✅ | ✅ | ❌(禁止4/5) | ✅ | ASBR手动注入7类默认路由 |
| Totally NSSA区域 | ✅ | ❌(禁止3/4/5) | ❌ | ✅ | ABR自动注入3类默认路由 |

7. 链路拓扑分析(各类lsa要用的情况)

8. 相关命令

复制代码
show ip ospf neighbor              ! 查看邻居状态
show ip ospf database              ! 查看LSDB
show ip ospf interface             ! 查看接口OSPF信息
show ip route ospf                 ! 查看OSPF路由
show ip protocols                  ! 查看OSPF协议状态
show ip ospf statistics            ! 查看OSPF统计
debug ip ospf events               ! 调试OSPF事件
debug ip ospf adj                  ! 调试邻居建立

// 查看各种的lsa
LSA类型				思科查看命令															说明
1类 	show ip ospf database router				查看所有1类LSA,或后面加具体的LSA-ID查看单条
2类 	show ip ospf database network				查看所有2类LSA,由DR产生
3类 	show ip ospf database summary				查看所有3类LSA,由ABR产生,描述区域间路由
4类 	show ip ospf database asbr-summary	查看所有4类LSA,由ABR产生,描述ASBR的位置
5类 	show ip ospf database external			查看所有5类LSA,由ASBR产生,描述OSPF域外路由
7类 	show ip ospf database nssa-external	查看所有7类LSA,只在NSSA区域内存在
查看LSDB统计	show ip ospf database summary	快速查看各类LSA的数量
查看特定区域的LSDB	show ip ospf database [area-id]	例如 show ip ospf database area 0

router ospf 1                         ! 启用OSPF进程1
router-id 1.1.1.1                     ! 设置Router ID
network 192.168.1.0 0.0.0.255 area 0  ! 通告直连网络
network 10.0.0.0 0.0.0.3 area 0       ! 通告点对点链路
area 1 stub                           ! 配置Stub区域
area 1 range 10.1.0.0 255.255.252.0   ! 区域间汇总
redistribute static subnets           ! 重分发静态路由
default-information originate         ! 下发默认路由
passive-interface FastEthernet0/0     ! 接口不发送Hello(被动接口)

ps:一般配置的时候越详细越好,尤其是宣告网段的时候,有具体的ip就配具体的ip

9. OSPF路由重发布与环路控制

  • 路由重发布
    • 定义:在连接不同路由协议的边界路由器上,把从一个协议学到的路由信息,转换成另一种协议的格式并广播出去
    • 作用:在一个大型网络中常常会混用多种不同的路由协议,这些协议各自为政,互不通信,需要路由重发布进行翻译实现全网路由互通。
    • 重发布的四种类型:

|-------------|-------------------------------------------------------------|-----------------|
| 重发布类型 | 配置命令(思科) | 说明 |
| 重发布直连 | redistribute connect subnets metric <值> metric-type <1/2> | 将直连接口所在网段引入OSPF |
| 重发布静态 | redistribute static subnets metric <值> metric-type <1/2> | 将静态路由引入OSPF |
| 重发布其他协议 | redistribute rip subnets metric <值> metric-type <1/2> | 将RIP路由引入OSPF |
| 重发布默认路由 | default-information originate [always] | 向OSPF域注入默认路由 |

  • 路由环路控制:
    • OSPF的路由类型以及优先级

|--------|--------------|----------|------------|
| 优先级 | 路由类型 | 路由表标记 | LSA类型 |
| 最高 | 区域内路由 | O | 1类、2类 |
| | 区域间路由 | O IA | 3类 |
| | 1类外部路由 | O E1 | 5类(Type 1) |
| | 2类外部路由 | O E2 | 5类(Type 2) |
| | 1类NSSA路由 | O N1 | 7类(Type 1) |
| 最低 | 2类NSSA路由 | O N2 | 7类(Type 2) |

    • 关于E1和E2外部路由对比:

|------------|-----------------------|--------------------|
| 对比项 | E1(Type 1) | E2(Type 2) |
| Cost计算 | 外部Cost + 累加内部Cost | 仅外部Cost(不累加内部) |
| 默认类型 | ❌ 不是(需手动指定) | ✅ 是默认 |
| 选路效果 | 随进入OSPF域深度增加而增大 | 整个AS内Cost不变 |
| 推荐场景 | 需要反映内部路径优劣时 | 简单场景,只关心外部开销 |

10. 常见OSPF不能建立邻居的原因:

    • 物理层问题:
      • 接口未启用
      • 物理链路不通
    • ospf配置问题
      • 区域id配置不同
      • Routerid配置相同
      • 区域编号不匹配
      • (一般是Hello包中的几个参数不同的问题)
      • 网络类型问题(点对点和广播型网络混用)

11. 假如一个拓扑发生了更新,那么网络是收敛的情况是什么样的?

    • 拓扑变更 → 本地生成新 LSA 打包 LSU → 全网泛洪(每一个邻居) + LSAck 确认同步 LSDB → 每台设备独立跑 SPF 算最短路径 → 更新路由表 → 全网收敛完成