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

OSPF协议详解2:链路状态通告(LSA)与邻居关系建立

在这里插入图片描述

本文是OSPF协议详解系列的第二部分,深入探讨了链路状态通告(LSA)的各种类型及其在OSPF网络中的作用。文章详细阐述了OSPF路由器如何利用LSA构建链路状态数据库,并逐一介绍了Type 1到Type 5以及Type 7等核心LSA的特点、传播范围和生成机制。此外,本文还详细解析了OSPF邻居关系的建立过程,包括影响邻接的属性、邻居状态的转换流程,以及多路访问网络中指定路由器(DR)和备份指定路由器(BDR)的选举机制与行为。

1. 链路状态通告LSA

LSA是Link-State Advertisements的缩写。在第一部分中,我们介绍了路由器之间进行LSA的传递和交换。而LSA包括路由器接口信息,邻居信息,链路开销等数据。路由器则靠着这些LSA来构建链路状态数据库并生成路由表。它一共有如下的11种LSA。

LSA TypeName
LSA Type 1OSPF Router LSA
LSA Type 2OSPF Network LSA
LSA Type 3OSPF Summary LSA
LSA Type 4OSPF ASBR Summary LSA
LSA Type 5OSPF ASBR External LSA
LSA Type 6OSPF Group Membership LSA
LSA Type 7OSPF Not So Stubby Area (NSSA) External LSA
LSA Type 8OSPF External Attributes LSA (OSPFv2) / Link Local LSA (OSPFv3)
LSA Type 9OSPF Link Scope Opaque (OSPFv2) / Intra Area Prefix LSA (OSPFv3)
LSA Type 10OSPF Area Scope Opaque LSA
LSA Type 11OSPF AS (Autonomous System) Scope Opaque LSA

1.1 Type 1 - Router LSA

在这里插入图片描述

  • 区域内每台路由器有一个Router LSA,只在区域内泛洪,并不跨越ABR。
  • 由始发路由器的Router ID来区分。
  • 包括直连的所有接口及其分配的IP前缀和链路类型。

通过查看LSDB来分析下面的输出。

  • 首先是在OSPF进程1下的R3(RID为3.3.3.3)上查看2.2.2.2的Router LSA。
  • 可以看出来这个路由器是在Area 1。
  • 直连的有两个链路,
    • 一个为点到点的链路到RID为3.3.3.3的邻居,链路的地址为10.10.10.5。
    • 另一个是末节网络,前缀为10.10.10.4/30。

在这里插入图片描述

在链路的信息部分,根据连接到的网络类型不同,Link ID的值也是不同的。

Link TypeDescriptionLink ID
1点到点连接到另一台路由器邻居的RID
2连接到多路访问网络指定路由器的IP地址
3连接到末节网络网段的网络地址
4虚链路邻居的RID

1.2 Type 2 - Network LSA

在这里插入图片描述

  • 区域内每个多路访问网络有一个Network LSA,只在区域内泛洪,并不跨越ABR。
  • 由多路网络选举的指定路由器DR来产生这条Network LSA。
  • 包括连接到这个网络的所有路由器,DR,以及网络的前缀包含掩码。

通过查看LSDB来分析下面的输出。

  • 产生这条Network LSA的DR的RID为3.3.3.3,在这个多路网络内的链路地址是192.168.123.3,网络的掩码是/24。
  • 有3台路由器在这个多路网络中及其各自的RID。

在这里插入图片描述

1.3 Type 3 - Summary LSA

在这里插入图片描述

  • 1类和2类LSA只在本区域内传播,当需要跨区域传播时,ABR负责将它们转化为3类的Summary LSA。这个3类LSA会传播到所有其他区域。
  • 当生成的3类LSA再跨越到其他区域时,则由新的区域的ABR再重新这个3类LSA,这时的通告路由器则会变成这个新的区域的ABR。只是相当于告诉一个区域内的路由器,可以通过我来到达3类LSA的目标网络。
  • 虽然名字是Summary LSA,但是实际上在生成3类LSA的时候,ABR默认不会汇总网络。
  • 包括到从通告路由器的ABR到目标网络的开销。如果跨越多个ABR,开销值是累计的。在路由表中显示为 O IA。

通过查看LSDB可以看出在这个Area 1的网络中宣告3类LSA的路由器的RID是10.23.23.2。

在这里插入图片描述

1.4 Type 4 - ASBR Summary LSA

在这里插入图片描述

  • 用来通告自治系统内所有其他区域可以通过我来到达ASBR。
  • ASBR所在区域的ABR将ASBR的1类LSA生成4类LSA。在跨区域其他其他区域时,由该区域的ABR再重新生成这条4类LSA,并将通告路由器改成这个新的ABR。
  • 包括到从通告路由器的ABR到ASBR的开销。如果跨越多个ABR,开销值是累计的。在路由表中显示为 O IA。

在这里插入图片描述

1.5 Type 5 - ASBR External LSA

在这里插入图片描述

  • 用于宣告外部引入的路由,由引入此路有的ASBR发布,并在整个自治系统内传播。
  • 在跨区域传播中并不会更改通告路由器ASBR的RID,需要通过4类LSA来找到ASBR。

在这里插入图片描述

1.6 Type 7 - NSSA External LSA

在这里插入图片描述

  • 因为在NSSA区域不允许5类LSA的存在,所以引入了7类路由来承载一样的信息。
  • 在区域ABR处,将重新转换为5类LSA。

在这里插入图片描述

1.7 其他LSA

  • 6类LSA原计划是用于支持组播的,但是大部分厂商都不支持,事实上组播协议都是使用的PIM。
  • 8类LSA在OSPFv2中计划用于携带重分布BGP路由的属性,但并不是标准的特性,大部分厂商并不支持。在OSPFv3中,用于在本地链路上通告Link-Local的IPv6地址。
  • 9类LSA在OSPFv3中用于在区域内通告网络前缀,约等于OSPFv2的1类和2类LSA。
  • 在OSPFv2中,9类(本地链路),10类(本区域),11类(本自治系统)都是Opaque LSA,用于携带非标准路由信息。不同厂商对Opaque LSA的支持程度也存在差异。

1.8 LSA序列号及更新

OSPF路由器每30分钟会更新其产生的LSA。LSA的序列号会增加,通过序列号来比较谁是最新的条目。每条LSA都有一个老化的计时器,设置为60分钟。如果60分钟内,LSA没有被更新,则会被从LSDB移除。如果收到了更新,则计时器重置。

在不连续的区域之间会用到虚连接,通过虚连接学到的LSA会被打上DNA(DoNotAge)的标识。这是因为虚链路被认为是demand circuit。这时,通过虚链路学到的LSA不会老化。

在这里插入图片描述

1.9 LSA操作

当路由器收到一条新的LSA,首先检查是否在LSDB中,LSA的序列号是否相同,新旧的LSA的序列号谁的更大一些。如果需要更新LSA,则添加到LSDB,发送收到LSA的回执,泛洪新的LSA,重新运行SPF并计算新的路由表。

在这里插入图片描述

2. 邻居关系的建立

路由器通过交换Hello包来发现邻居关系。在检查Hello包中的特定参数或是选项后,路由器才可以宣布邻居起来了。

2.1 邻接属性

Hello包里携带的邻接属性直接影响链路两端的路由器能否建立起邻居关系。

  • 路由器ID (唯一的)
  • 接口IP地址(唯一的)
  • 接口区域ID
  • Hello和Dead间隔
  • 接口网络地址
  • 接口MTU
  • 网络类型
  • 认证
  • 末节区域标识
  • 其他的可选能力

当邻接属性不一致的情况下,大概略邻居关系不会起来,列举一些案例。

  1. 两端地址的掩码不同,也就是网络地址不同,会有如下的debug信息。
*Oct  1 14:54:57.432: OSPF-1 HELLO Gi1: Rcv hello from 1.1.1.1 area 0 10.0.13.1
*Oct  1 14:54:57.432: OSPF-1 HELLO Gi1: Mismatched hello parameters from 10.0.13.1
*Oct  1 14:54:57.432: OSPF-1 HELLO Gi1: Dead R 40 C 40, Hello R 10 C 10 Mask R 255.255.255.252 C 255.255.255.0
  1. 当两端的网络类型不配置时,如果广播和非广播网络,广播和点到多点等,这种情况下邻居关系都无法建立起来。要么是根本无法收到对端的Hello包,或是收到Hello包后显示参数不匹配。但是在广播网络和点到点网络的情况下,邻居是可以建立起来的,只不过是一边选举DR/BDR,另一端没有DR的选举。
  2. 两端的MTU不一致的时候,邻居关系会卡在EXSTART的阶段。
*Oct  1 15:12:19.019: OSPF-1 ADJ   Gi1: Route adjust notification: UP/UP
*Oct  1 15:12:19.019: OSPF-1 ADJ   Gi1: Interface going Up
*Oct  1 15:12:19.020: OSPF-1 ADJ   Gi1: Interface state change to UP, new ospf state P2P
*Oct  1 15:12:47.692: OSPF-1 ADJ   Gi1: 2 Way Communication to 1.1.1.3, state 2WAY
*Oct  1 15:12:47.692: OSPF-1 ADJ   Gi1: Nbr 1.1.1.3: Prepare dbase exchange
*Oct  1 15:12:47.692: OSPF-1 ADJ   Gi1: Send DBD to 1.1.1.3 seq 0x1120 opt 0x52 flag 0x7 len 32
*Oct  1 15:12:47.693: OSPF-1 ADJ   Gi1: Rcv DBD from 1.1.1.3 seq 0x18E0 opt 0x52 flag 0x7 len 32  mtu 3000 state EXSTART
*Oct  1 15:12:47.693: OSPF-1 ADJ   Gi1: Nbr 1.1.1.3 has larger interface MTU

2.2 建立邻居关系的过程

首先双方都要意识到对方的存在,也就是要达到一个2-Way的邻居。其次,双方同步LSDB信息完成后形成Full的邻居。

在这里插入图片描述

以直连的R1和R2为例,两个阶段的详细步骤如下:

在这里插入图片描述

  1. 最开始,R1和R2的邻居表都是空的,因为都没有收到对方的Hello包。这时候就是 Down 的状态。
  2. 当R2收到了R1的Hello包之后,但是在Hello包的Neighbor字段里没有看见自己的RID,这时会过渡到 Init 状态。R2会记录R1的RID,并附到给R1发送的Hello包里的Neighbor字段。
  3. 当R1收到了R1的Hello包之后,并发现Neighbor字段里有自己RID,这时就达到了 2-WAY 的状态。同理再返回给R2新的Hello包之后,R2也会到2-WAY 的状态。

在这里插入图片描述

  1. R1通过DBD包来向R2发送LSDB的摘要,并进入到了 Exstart 的状态。
  2. R2收到R1的DBD包后,也将自己的LSDB的摘要发送给R1,并进入到了 Exchange 的状态。
  3. R1和R2各自对比自己的LSDB和收到的对方的LSDB摘要。R1向R2通过LSR包请求其缺失的或过时的LSA,并进入到 Loading 的状态。
  4. R2通过LSU包将R1所需的全部LSA发送给R1,每个LSU包可以包含多个LSA,也可能需要发送多个LSU包。
  5. R1和R2通过LSAck确认从对方收到了相应的LSA,双方的LSDB同步成功,最终达到 Full 的状态。

2.3 DR的选举机制

对于多路访问网络,譬如以太网的广播网络,网络内的所有路由器会先选择DR(指定路由器)和BDR(备份指定路由器)。DR/BDR的选择机制是基于Hello包内携带的优先级参数(0-255),其规则如下:

  • 默认值是1。如果优先级设置为0,则在DR/BDR选举中忽略这个路由器。
  • 优先级高的成为DR,其次的成为BDR。
  • 如果优先级相同,则RID大的成为DR/BDR。
  • 每台路由器都在本地根据上述的选举规则选取DR/BDR。因为规则是一样的,所有路由器都会有同样的结果。

DR/BDR的行为:

  • DR/BDR的选择没有抢占机制。当DR/BDR选举完成后,即使是更改或新加一台优先级更高的路由器,DR/BDR也不会改变。直到DR/BDR的OSPF进程重启或是DR/BDR挂掉了,才会重新按优先级重新选举DR。
  • DR/BDR和所有的其他的路由器保持Full的邻居关系,其他的路由器之间保持2-Way的邻居关系。
  • DR作为整个网络的枢纽,搜集所有的路由器的1类LSA,并分发给所有的路由器。DR负责生成网络的2类LSA。
  • BDR只是同步DR的LSDB信息,在DR挂了之后才会接替DR的工作。

DR的选举过程:
在这里插入图片描述

  1. 在40秒的等待期内,不选举DR/BDR,所有的路由器发送自己的Hello包并监听收到其他路由器的Hello包。这时候的Hello包的DR/BDR地址为0.0.0.0,意味着还有DR/BDR。
  2. 如果路由器的优先级不是0,则会参加DR/BDR的选举,每个路由器都有参加选举的路由器列表。
  3. 在等待期,每台路由器都会跟其他路由器形成2-Way的邻居。
R1# sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   2WAY/DROTHER    00:00:38    10.1.1.2        Ethernet0/0
3.3.3.3           1   2WAY/DROTHER    00:00:39    10.1.1.3        Ethernet0/0
4.4.4.4           1   2WAY/DROTHER    00:00:38    10.1.1.4        Ethernet0/0
  1. 在选举结束之前,并不会开始交换LSDB的过程。

在这里插入图片描述

  1. 40秒之后,每个路由器开始选举DR/BDR,并将其放入到Hello包之中。

在这里插入图片描述

  1. DR和BDR的选择结束后,邻居会变FULL的状态。
R1# sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   2WAY/DROTHER    00:00:39    10.1.1.2        Ethernet0/0
3.3.3.3           1   FULL/BDR        00:00:32    10.1.1.3        Ethernet0/0
4.4.4.4           1   FULL/DR         00:00:31    10.1.1.4        Ethernet0/0

📚 延伸阅读

更多内容持续更新于我的博客:https://www.zenseek.site

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

相关文章:

  • hot100做题整理(11-20)
  • IDEA自动构建与热部署配置
  • 国庆day2
  • Mac添加全局变量
  • 东方美学融合真空保鲜技术,海信璀璨真空头等舱650冰箱发布
  • 网站设计风格分析牡丹江到林口火车时刻表
  • 【操作系统】外存到cpu数据流动路径
  • logits和softmax分布
  • 硬件工程师入门基础知识(九)压敏电阻
  • [Linux]学习笔记系列 -- lib/xarray.c eXtensible Array (XArray) 可扩展数组
  • 基于物理信息神经网络(PINN)求解二维稳态对流-扩散方程的MATLAB实现
  • 物流网站建设可行性分析品牌网站制作网站公司
  • 温州专业微网站制作网络公司建设125摩托车价格及图片
  • 《嵌入式 – GD32开发实战指南(RISC-V版本)》第5章 跳动的心脏-内核TIMER
  • 《嵌入式 – GD32开发实战指南(RISC-V版本)》第7章 定时器
  • 佛山新网站建设平台专业动画制作软件
  • 《WebAssembly指南》第九章:WebAssembly 导入全局字符串常量
  • ​​轻量之选:不依赖宝塔,用 NPM 与命令行部署在线工具箱​
  • RUST 静态生命周期和动态生命周期
  • Rocky Linux 8 远程管理配置指南(宿主机 VNC + KVM 虚拟机 VNC)
  • 北京网站快速备案建站手机网站
  • 第四章 信息系统管理
  • 【开发日记】记一次公司服务器中Redis服务问题排查
  • linux问题10--克隆后ip地址和源linux主机相同
  • 社交网站模版steam交易链接怎么改
  • AI重塑销售管理,突破“人”的能力边界|纷享AI主题研讨会宁波站圆满落幕
  • [C++项目组件] 后台服务器部署docker
  • 移动固态优盘坏道读写速率下降等测试
  • 解决django.db.utils.OperationalError: attempt to write a readonly database问题
  • Django SimpleUI 配置与优化详解