1、基本介绍
开放最短路径优先 OSPF
(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。“开放”表明 OSPF
协议不是受某一家厂商控制,而是公开发表的。
“最短路径优先”是因为使用了 Dijkstra
提出的最短路径算法 SPF
。OSPF
是基于链路状态的,而不像RIP那样是基于距离向量的。
OSPF
采用 SPF
算法计算路由,从算法上保证了不会产生路由环路。OSPF
不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost
)。
- “代价” 用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。
例如:如下,R1
的邻居路由器有 R2
,相应的链路代价用 / 链路带宽 ,结果:
-
R1
的邻居路由器有R4
,相应的链路代价用 / 链路带宽 ,结果小于 ,记为
2、问候分组(封装到 IP 数据报(端口:89))/邻居表
OSPF
相邻路由器之间通过交互,建立和维护。
-
Hello
分组封装在IP
数据报中,发往组播地址
IP
数据报首部中的协议号字段
的取值应为 89
,来表明 IP
数据报的数据载荷为 OSPF
分组
- 发送周期为
10
秒 -
40
秒未收到来自邻居路由器的Hello
分组,则认为该邻居路由器不可达
每个路由器都会建立一张邻居表
例如:
若在 “死亡” 倒计时到达 之前再次收到了来自 R2
的问候分组
- 则重新启动针对该邻居条目的
40
秒 “死亡” 倒计时
否则,当 “死亡” 倒计时为
- 则判断该邻居路由器不可达
3、链路状态通告 LAS / 链路状态更新分组 LSU
使用 OSPF
的每个路由器都会产生
LSA
中包含以下内容:
- 直连网络的链路状态信息
- 邻居网络的链路状态信息
例如:
LSA
被封装到
例如:
这样,自治系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组,会传递给系统中其他所有路由器。
4、链路状态数据库 LSDB
使用 OSPF
的每个路由器都有一个 ,用于存储 LSA
。
通过各路由器洪泛发送封装有自己 LSA
的 LSU
分组,各路由器的 LSDB
最终将达到一致。
使用 OSPF
的各路由器,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。
例如:以下各链路旁的数字表示代价,通过各路由器洪泛发送封装有自己链路状态通告的链路状态更新分组
- 各路由器最终会得出相同的链路状态数据库
- 有链路状态数据库可以得出带权有向图
5、5大类型
类型 ,问候
(Hello)分组
- 用来发现和维护邻居路由器的可达性。
类型 ,数据库描述
(Database Description)分组
- 向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
类型 ,链路状态请求
(Link State Request)分组
- 向邻居路由器请求发送某些链路状态项目的详细信息。
类型 ,链路状态更新
(Link State Update)分组
- 路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。
类型 ,链路状态确认
(Link State Acknowledgment)分组
- 这是对链路状态更新分组的确认分组。
6、OSPF 的基本工作过程
OSPF
的基本工作过程
相邻路由器之间周期性发送问候
分组,以便建立和维护邻居关系
建立邻居关系后,给邻居路由器发送数据库描述分组
也就是将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器
例如 R1
收到 R2
的数据库描述分组
后,发现自己缺少其中的某些链路状态项目
- 于是就给
R2
发送链路状态请求分组
R2
收到后,将 R1
所缺少的链路状态项目的详细信息封装
在链路状态更新分组
中发送给 R1
R1
收到后,将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中
- 并给
R2
发送链路状态确认分组
说明:R2
也可以向 R1
请求自己所缺少的链路状态项目的详细信息
最终 R1
和 R2
的状态数据库到达一致,也就是链路数据库达到同步
每 30
分钟或链路状态发生变化时,路由器都会发送链路状态更新分组
收到该分组的其他路由器将洪泛转发该分组,并给该路由器发回链路状态确认分组
- 新情况下的链路状态数据库同步
7、多点接入造成的广播风暴
当 OSPF
路由器再多点接入网络中建立邻居关系时
- 若不采用其他机制,将会长生大量的多播分组
例如:如下
- 它们周期性地发送问候分组已建立和维护邻居关系
这些路由器中的任意两个路由器都互为邻居关系
这样每个路由器要向其他 () 个路由器发送问候分组
和链路状态更新分组
8、指定路由器 DR / 备用路由器 BDR
为了减少所发送分组的数量
OSPF
采用选举指定路由器DR
(designated router)- 和备用路由器
BDR
(backup designated router)
非 DR/BDR
之间通过 DR/BDR
交换信息
若 DR
出现问题,则由 BDR
顶替 DR
实现 DR/BDR
的选举并不复杂,无非就是各路由器之间交换一些选举参数
- 例如:路由器优先级、路由器
ID
、接口IP
地址等 - 然后根据选举规则选出
DR
和BDR
这与交换机生成树协议选举根交换机类似
9、区域(Area)划分
为了使 OSPF
能够用于规模很大的网络,OSPF
把一个自治系统再划分为若干个更小的范围
- 叫做区域(
Area
)
例如:如下所示的很大的网络,将其划分成一个自治系统
- 在该自治系统以内,所有路由器都是用
OSPF
协议
OSPF
将该自治系统划分成
每个区域都有一个
例如:主干区域的标识符必须为 ,
- 主干区域用于连通其他区域,其他区域的标识符不能为
每个区域的规模不能太大,一般所包含的路由器不应超过 个
划分区域的好处
就是:
- 把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统
- 这样就减少了整个网络上的通信量
若一个路由器的所有接口都在一个区域内
- 则成为
区域内路由器 IR
(internal router):R1
,R2
,R8
,R9
为了本区域可以和自治系统内的其他区域连通。
每个区域都会有一个区域边界路由器
(area border router)
- 其一个接口用于连接自身所在区域,另一个接口用于连接主干区域
R3
,R4
,R7
主干路由器
(包含区域边界路由器)BBR
(backbone router)
自治系统边界路由器 ASBR
(AS border router)
- 专门和本自治系统外的其他自治系统交换路由信息
以上中,区域边界路由器 R3
向主干区域发送自己所在区域
- 向自己所在区域发送区域 ,,的链路状态通告
其他同理
采用分层次划分区域的方法,虽然使交换信息的种类多了,同时也使 OSPF
协议更加复杂了
- 却能使每个区域内部交换信息的通信量大大减少
- 因而使
OSPF
协议能够用于规模很大的自治系统中
10、小结