「OSPF」- 协议交互过程、邻居状态建立过程

  CREATED BY JENKINSBOT

协议交互过程概述

设备直连,运行 OSPF 协议,大致交互过程如下:
1)彼此发现:设备开始相互发送 Hello 报文,组播 224.0.0.5 地址,发现彼此 ⇒ 建立邻居关系(无路由交互的关系);
2)协商主从:邻居间协商主从,用于确定数据同步的 DD 报文起始序列号;此时 DD 为 First DD 报文;
3)数据选择:通过 DD 报文,相互描述各自的 LSDB 信息,仅包含数据的摘要信息,以供对方选择数据条目;
4)数据同步:请求 LSA 信息,响应 LSA 信息,汇总收到的 LSA 信息后,形成 LSDB 信息 ⇒ 建立邻接关系(有路由交互的关系);
3)路由计算:路由器利用 LSDB 信息,并使用 SPF 算法,来生成最短路径树,以形成路由表;每个路由器都有自己的树;

邻居状态转换:Down ⇒ Init ⇒ 2-Way

1)Down:邻居关系的初始状态,表示未从邻居收到任何信息。当两台路由器配置 OSPF 后,邻居状态为 Down 状态;
2)Init:路由器已从邻居收到 Hello 报文,但是自己的 Router ID 不在所收到的 Hello 报文的邻居列表中;
3)2-way:路由器发现自己的 Router ID 存在于收到的 Hello 报文的邻居列表中(及邻居明确当前路由器的存在);

关于 Attempt 状态

在 FR 下会出现 Attempt 状态;

建立邻居关系的条件

1)Hello-Interval / Router-Dead-Interval 时间相同;
2)OSPF Area 要相同;
3)网络类型要求相同:虽然不影响邻居关系的建立以及 LSA 同步,但 LSA 所描述两端网络类型不同,会影响 SPF 计算;
4)Options 选项要一致,即支持功能相同;
5)Router-ID 不能冲突;

数据互相同步:ExStart ⇒ Exchange

RTA 与 RTB 发送 DD 报文时,都会使用自己的序列号,因此需要协商初时的序列号(选举主从)。“隐式确认”(两者使用相同的机制确认序列号,而不是协商机制来确认序列号。这里机制便是 Router ID 大,则使用其序列号),然后基于该序列号开始同步数据。目的是控制交互报文的序列号(路由的数据包的更新序列号),以保证同步机制可靠;

该阶段的 DD 报文包含 LSA 的头部信息,用来描述 LSDB 的摘要信息:

ExStart

进入 ExStart 阶段,核心任务是选举主从(Master/Slave):
1)通过 DD 交互,选举主从,Rouer ID 大为 Master,并使用其序列号;

在 ExStart 中,DD 只有“头部信息”,没有“摘要信息” ⇒ 足够完成主从选举

Exchange

进入 Exchange 阶段,这里的 DD 包含“摘要信息”,即开始同步数据库:
1)当主从选举结束后,Slave 进入 Exchange 状态,并由 Slave 主动发送 DD 报文,其使用 Master 的序列号;
2)当收到 Slave 的 DD 报文后,Master 进入 Exchange 状态;
3)此时 Slave 发送的 DD 报文包含完整的摘要信息,Master 也响应 DD 报文; ⇒ 双发交互;
4)最后收到 DD 的路由器,需要使用空的 DD 报文进行确认,序列号需要加一(但实际抓包显示未增加)

在 Exchange 中,DD 包含完整的摘要信息(类似于目录,是对整个数据库的摘要) ⇒ 以完成对数据的筛选

建立邻接关系:Loading ⇒ Full

1)Loading:在此状态下,路由器与邻居之间相互发送 LSR 、LSU 、LSAck 报文;
2)Full:路由器已完成了与邻居的 LSDB 同步;

1)RTA,在根据 Exchange 阶段的 DD 确定需要的(缺少的)路由信息之后,发送 LSR 向对方请求需要的 LSA 数据;
2)RTB,响应 LSU 报文(发送对方需要的 LSA 数据);
3)RTA,响应 LSAck 报文,以确认收到 LSA 信息;⇒ 这是“显式确认”,对比前面“隐式确认(没有 ACK 确认)”

邻居状态维护:Full ⇒ Down

OSPF 通过周期性的向邻居发送 Hello 报文来实现邻居检测:

IP.OSPF.Hello-Interval:该字段为发送 Hello 报文的时间间隔;在以太网中,为 10s 时间;

IP.OSPF.Router-Dead-Interval:该字段指定的时间超时来判断邻居失效;通常为 Hello Interval * 4(40s);如果该时间未收到 Hello 则认为邻居关系解除,关系进入 Down 状态;

常见问题

Q:对端通过 OSPF 学习到的路由条目,出接口、下一跳分别是什么?
A:出接口为接收 OSPF 路由条目的接口;下一跳为 OSPF 报文的源地址;(需要进一步确认)

邻居关系建立失败的原因

邻居关系建立失败的常见原因有:
Router ID 冲突
区域 ID 不匹配
网络掩码不匹配
MTU 不一致
MA 网络中,所有设备的 DR 优先级设置为 0
认证密码不匹配
接口被设置为 silent-interface
时间参数不匹配

开启 OSPF 调试:

<R1>terminal debugging 
Info: Current terminal debugging is on.

<R1>debugging ospf packet interface GigabitEthernet 0/0/0
...

<R1>display ospf interface GigabitEthernet 0/0/0 verbose 
	 OSPF Process 1 with Router ID 10.0.1.1
 Interface: 10.0.12.1 (GigabitEthernet0/0/0)
 Cost: 1       State: DR        Type: Broadcast    MTU: 1500  
 Priority: 1
 Designated Router: 10.0.12.1
 Backup Designated Router: 0.0.0.0
 Timers: Hello 10 , Dead 40 , Poll  120 , Retransmit 5 , Transmit Delay 1 
  IO Statistics
             Type        Input     Output
            Hello           36         36