OSPF - Part 3:OSPF 邻接和邻居的概念及过程
本文章描述了OSPF 路由器如何执行邻居关系和邻接。我们将研究OSPF 如何通过路由器接口发送Hello 数据包来发现邻居,以及如何共享链路状态通告( LSA ) 以形成邻接并构建其拓扑表。我们还将研究OSPF Hello 数据包的内容(路由器 ID、Hello/Dead 间隔、子网掩码、路由器优先级、区域 ID、DB 和 BDR IP 地址、身份验证信息)等。
1. OSPF 的邻居关系
一旦在路由器接口上启用 OSPF,就会建立链路状态数据库(LSDB),并且运行 OSPF 的所有接口都将添加到此表中以用于链路状态通告(LSA),然后 OSPF 开始邻居发现和形成邻接过程。
现在我们将仔细看看邻居发现和邻接形成过程:
图 1. R1 发送初始 OSPF Hello 数据包。R2 使用 OSPF Reply Hello 数据包进行响应。
2. 发送和接收 OSPF Hello 消息
OSPF 路由器每轮询间隔生成一个 Hello 数据包(默认情况下,对等 (P2P) 网络为 10 秒,对非广播多路访问 (NBMA) 网络为 30 秒),并通过多播地址 224.0.0.5 将其通告给连接到其接口的所有路由器,同时搜索潜在的 OSPF 邻居。Hello 消息包含在两个相邻路由器之间形成 OSPF 邻居关系所需的信息列表
2.1 Hello 消息中包含的信息列表:
OSPF Router ID
由 OSPF 配置或自动选择的Router ID
Hello Interval Timer(Hello 间隔计时器)
发送 Hello 数据包的频率
Dead Interval Timer(死亡间隔定时器)
定义在宣布邻居死亡之前,我们应该等待 hello 数据包的时间间隔。
Subnet Mask (子网掩码)
Router Priority (优先级)
用于帮助确定指定路由器 (DR)。Priority值越高,优先级越高。配置的Priority为 0 表示路由器不会成为 DR 或 BDR
网络中可达的 OSPF 邻居列表
Area ID(区域ID)
DR & BDR 的IP地址(如果存在)
身份验证密码(如果已配置)
一旦运行 OSPF 的邻居路由器(R2)收到Hello 消息,它就会对上述列表进行检查。
2.2 两台路由器要成为邻居的必要条件
OSPF邻居关系建立的六个条件,缺一不可:
- Router ID不相同
- 它们必须子网掩码mask相同,比如双方都是24位掩码
- Hello和Dead Interval 计时器必须相同,(默认10s一次/40s超时)
- Area 相同,两台设备处于相同区域
- Area 的特殊区域类型 相同(normal or stub area)
- Authentication-type(验证类型)和Authentication-key(验证口令)(若使用)必须相同
2.3 成为邻居时的特别情况
Hello参数不匹配时
如果某些项目(Hello/Dead 间隔、子网掩码、Area ID 等)不匹配,就会出现**(Bouncing Relation)弹跳关系的情况,因为这个潜在邻居(R2)会在路由器的 OSPF 拓扑上不断波动,表明与其配对的Hello 消息**信息不匹配。
[!TIP]
路由器ID可以是名称、数字或IP地址。默认情况下,OSPF 会选择最高活动接口的 IP 地址作为路由器 ID。如果接口出现故障(例如,以太网接口开始断开连接),则可能会对 OSPF 进程产生问题。因此,始终建议在环回接口(始终处于“Up”状态的虚拟接口)上配置合适的 IP 地址,或手动将路由器 ID 配置为适合 OSPF 网络的 IP 地址。
Hello 参数匹配 - 回复 Hello 消息
当R2收到来自R1的OSPF Hello 消息并且所有必要的Hello参数都匹配时,R2将向R1发送回一个Reply Hello 数据包。
这个Reply Hello数据包允许R1(发送原始Hello消息)调查相邻路由器R2是否列在其邻居列表中。
如果相邻路由器R2已作为邻居列出,则R1 将重置其失效计时器,并且 Reply Hello 消息充当 Keep Alive 机制。
如果相邻路由器R2未列在R1 的邻居数据库中,它将把新发现的邻居R2路由器添加到其 OSPF 邻居数据库中。所有后续OSPF Hello和Hello Reply消息都将起到Keep Alive机制的作用。
3. 建立主从关系
当两个运行 OSPF 的路由器之间形成邻居关系时,必须创建交换信息的层次结构顺序,该顺序决定了哪个路由器首先发送数据库描述符 (DBD) 更新路由器(Master),而另一个路由器(Slave)侦听。一旦主服务器发送 DBD 数据包,从服务器就会紧随其后发送其数据库描述符 (DBD) 数据包。
OSPF 根据最高优先级(highest priority)选择主路由器(可以手动配置),但如果未配置优先级,OSPF 将使用路由器 ID 作为参考。
[!NOTE]
需要注意的是,指定路由器(DR)不一定要是主路由器,它只是一个基于路由器优先级(priority)的关系,用于安排邻居之间的数据交换,但并不影响DR和BDR的角色。
4. 交换数据库描述符 (DBD’s) - DBD 确认和审查
OSPF邻居遵循严格的路由信息和更新交换过程,以防止更新泛滥导致的故障控制,此过程遵循下述顺序:
图2。步骤1 & 2:R1发送DBD数据包,R2回复LSR (Link State Request)
1)R1 Master 主设备 首先发送 数据库描述符(DBD) 更新数据包。
2)R2 Slave 从设备 检查数据库描述符(DBD) 并找到新的路由信息,然后通过发送链路状态请求(LSR)数据包来请求更新。
图3.步骤 3 和 4。R1 使用链路状态更新 (LSU) 进行回复,R2 使用 LSAck 进行确认
3)R1 Master 主设备 通过链路状态更新 (LSU) 数据包发回更新。
4)R2 Slave 从设备 通过发送链路状态确认 (LSAck) 数据包来确认接收更新。
5)从设备接下来发送数据库描述符(DBD )更新数据包。
6)主设备通过发送链路状态请求( LSR ) 数据包来请求更新。
7)从设备通过链路状态更新( LSU ) 数据包发送更新。
8)主设备通过发送链路状态确认( LSAck ) 数据包确认收到更新。
没有显示步骤 5 到 8 的图表,但是这些步骤与前 4 个步骤类似,但主设备上变为请求链路状态请求( LSR )。