6-24 OSPF原理
OSPF邻居关系的建立
OSPF邻居关系建立的简要过程

- 建立双向通信关系:知道互有彼此
- 协商主从关系:协商交互路由信息时,谁做主人,谁做从属
- 交互链路状态通告LSA:同步和发送LSA
- 完成同步:实现OSPF全毗邻
OSPF邻居关系建立的详细过程

A→B:Hello
- 路由器A向路由器B发送一个Hello包并进入Init状态:源地址为A,目的地址为组播地址224.0.0.5(运行OSPF的路由器都会监听该组播地址);
- 路由器B接收这个Hello包,并将A放入邻居表中
B→A:Hello:通过下述过程,A、B之间的邻居关系就建立起来,彼此直到互为对方邻居
- 路由器B向路由器A发送一个Hello包并进入Init状态:源地址为B,目的地址为A(注意此时发的是一个单播包)
- 路由器A收到上述单播包,将B放进自己的邻居表当中,并且由于收到的是一个单播包,A就知道B的邻居表里已经有A了,A进入Two-way(双向)状态
A→B:DBD:数据库描述包,协商主从关系
- 路由器A向路由器B发送一个DBD包:告诉B说我的RouterID为12.1.1.1
B→A:DBD:数据库描述包
- 路由器B向路由器A发送一个DBD包:告诉A说我的RouterID为12.1.1.2,比你高一些;则B为主,A为从
A↔B:DBD:交互数据库描述包,这个DBD相当于是自己链路状态数据库的目录索引信息
- 交互DBD数据库描述包,即交互链路状态数据库的目录索引信息
A↔B:ACK:
- 确认DBD数据库描述包交互完毕
A→B:LSR链路状态请求包
- 链路状态请求包:告诉对方我需要哪个网络的链路状态信息
B→A:LSU链路状态更新包
- LSU链路状态更新包:对方需要的网络的链路状态信息
A→B:LSUAck确认更新包
- LSUAck确认更新包:告诉对方已收到并更新上述信息
通过上述交互,使得两台路由器LSDB链路状态数据库完全同步
注意上图中用红色标注出来的,是邻居关系建立的状态阶段
查看邻居关系
当两台路由器建立起OSPF邻居关系之后,可使用display ospf peer查看邻居关系

上图中Full状态说明两台路由器已经完全同步LSDB链路状态数据库
OSPF网络类型
OSPF支持的网络类型
- 点到点网络
- 广播型多路访问网络
- 非广播型多路访问(NBMA)网络
- P2MP网络
常见链路层协议对应的默认网络类型
| 网络类型 | 常见链路层协议 |
|---|---|
| Point-to-Point | PPP链路,HDLC链路 |
| Broadcast | 以太网链路 |
| NBMA | 帧中继链路,ATM链路 |
| P2MP | 需手工指定 |
DR和BDR
OSPF中有两个较为重要的概念,分别是DR和BDR

上述网络拓扑是一个广播多路网络,图1相当于将这些路由器连接至同一个交换机上去,交换机在拓扑中表现为一条总线了
在广播多路访问网络中,所有路由器接口都在相同网段,这些接口都将两两建立OSPF邻居关系这就意味着,网络中共有(排列组合):
$$
M=N(N-1)/2
$$
这么多OSPF邻居关系,维护如此多邻居关系不仅耗费设备资源,也增加了网络中LSA泛洪数量,如图2所示。
为解决上述的问题,我们需在广播多路访问网络中选举一个指定路由器DR和一个备用指定路由器BDR

为减小多路访问网络中的OSPF流量,OSPF会在每一个Ma网络(多路访问网络)选举一个指定路由器(DR)和一个备用指定路由器(BDR)。
DR选举规则:最高OSPF接口优先级拥有者被选坐DR,如果优先级相等(默认为1),具有最高OSPF RouterID的路由器被选举为DR,并且DR具有非抢占性。
指定路由器(DR):负责使用变化新消息更新其他OSPF路由器(DRother)
备用指定路由器(BDR):监控DR状态,并在当前DR发生故障后接替其角色
注意OSPF为“接口敏感协议”,DR及BDR的身份状态是基于OSPF接口的
Ma网络中(多路访问网络),所有其他路由器均只与DR和BDR建立邻居关系,其他路由器之间不建立邻接关系
如此一来,Ma网络中OSPF需要维护的邻居关系大幅减少至
$$
M=(n-2)*2+1
$$
因此,LSA泛洪问题得到缓解,如下图所示

- 假设R3下方网络链路状态发生变化,路由器R3用224.0.0.6通知DR及BDR;DR、BDR监听224.0.0.6这一组播地址
- DR向组播地址224.0.0.5发送更新以通知其他路由器,所有的OSPF路由器监听224.0.0.5
- 路由器收到链路变化后的LSU后,更新自己的LSDB,进行SPF重新计算,更新路由表
OSPF区域概念
单区域存在的问题

如果所有路由器处于同一个OSPF区域,则会存在如下问题:
- LSA泛洪严重,OSPF路由器的负担很大
- 区域内部动荡会引起全网路由器的SPF计算,消耗路由器CPU资源
- LSDB庞大,资源消耗过多,设备性能下降,影响数据转发
- 每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总
OSPF多区域

为此,引入多区域的OSPF,有如下优点:
- 减少了LSA洪泛范围,有效把拓扑变化控制在区域内,达到网络优化的目的
- 在区域边界可以做路由汇总,减小了路由表
- 充分利用OSPF特殊区域的扩展性,进一步减少LSA泛洪,从而优化路由
- 多区域提高了网络的扩展性,有利于组建大规模网络
所有非骨干区域必须与骨干区域直连
若骨干区域定义为区域0,则所有的其他非骨干区域必须与区域0直连,下面图2中区域3连接错误

OSPF区域中的路由器角色

| 类型 | 英文名称 |
|---|---|
| 区域内路由器 | Internal Router |
| 区域边界路由器 ABR | Area Border Router |
| 骨干路由器 | Backbone Router |
| AS边界路由器ASBR(自治系统边界路由器) | AS Boundary Router |