计算机网络:网络层 —— 开放最短路径优先 OSPF
文章目录
- 路由选择协议
- 动态路由协议
- 开放最短路径优先 OSPF
- 链路状态
- OSPF路由器邻居关系的建立和维护
- 链路状态通告
- 链路状态更新分组
- 链路状态数据库
- OSPF的五种分组类型
- OSPF的基本工作过程
- 多点接入网络中的OSPF路由器
- OSPF划分区域
- OSPF 区域的类型
- OSPF 区域的相关概念
路由选择协议
因特网是全球最大的互联网,它所采取的路由选择协议具有以下三个主要特点:
-
自适应:因特网采用动态路由选择,能较好地适应网络状态的变化。
-
分布式:因特网中的各路由器通过相互间的信息交互,共同完成路由信息的获取和更新。
-
分层次:将整个因特网划分为许多较小的自治系统(AutonomousSystem,AS)在自治系统内部(域内路由选择)和外部(域间路由选择)采用不同类别的路由选择协议,分别进行路由选择。
-
自治系统内部使用内部网关协议
IGP
,自治系统之间使用外部网关协议EGP
-
外部网关协议
EGP
和内部网关协议IGP
只是路由选择协议的分类名称,而不是具体的路由选择协议。 -
外部网关协议和内部网关协议名称中使用的是“网关”这个名词,是因为在因特网早期的
RFC
文档中,没有使用“路由器”而使用的是“网关”这一名词。
动态路由协议
动态路由协议分为距离矢量路由协议和链路状态路由协议。
-
距离矢量路由协议(Distance Vector Routing Protocols):
- 通过向相邻路由器定期通告自己的路由表,逐跳传递路由信息。
- 典型协议:RIP(Routing Information Protocol)。
- 优点:实现简单。
- 缺点:收敛慢,容易产生路由环。
相关阅读:计算机网络:网络层 —— 路由信息协议 RIP
-
链路状态路由协议(Link State Routing Protocols):
- 每个路由器通过广播链路状态信息构建整个网络的拓扑图,使用
Dijkstra
算法计算最短路径。 - 典型协议:OSPF(Open Shortest Path First)、IS-IS(Intermediate System to Intermediate System)。
- 优点:收敛快,路由精确。
- 缺点:实现复杂,资源消耗大。
- 每个路由器通过广播链路状态信息构建整个网络的拓扑图,使用
-
路径矢量路由协议(Path Vector Routing Protocols):
- 主要用于大型互联网络(如互联网),通过通告路径信息,避免路由环。
- 典型协议:BGP(Border Gateway Protocol)。
- 优点:适用于大规模网络,避免路由环。
- 缺点:实现复杂,路由策略灵活。
开放最短路径优先 OSPF
开放最短路径优先(Open Shortest Path First,OSPF)协议是为了克服路由信息协议RIP的缺点在1989年开发出来的,是一种用于网际协议(IP)网络的链路状态路由协议。
-
“开放”表明
OSPF
协议不是受某一厂商控制,而是公开发表的, -
“最短路径优先”是因为使用了
Dijkstra
提出的最短路径算法(ShortestPath First,SPF) -
“开放最短路径优先”只是一个路由选择协议的名称,但这并不表示其他的路由选择协议不是“最短路径优先”。用于自治系统AS内部的各种路由选择协议(例如RIP),都要寻找一条“最短”的路径。
-
OSPF
是基于链路状态的,而不像RIP
是基于距由离向量的。 -
OSPF
基于链路状态并采用最短路径算法计算从算法上保证了不会产生路由环路。 -
OSPF
不限制网络规模,更新效率高,收敛速快。
链路状态
链路状态(Link State,LS)是指本路由器都和哪些路由器相邻,以及相应链路的代价(cost)。“代价”用来表示费用、距离、时延和带宽等,这些都由网络管理人员来决定。
如思科路由器中 OSPF 协议计算代价的方法是:100Mb/s除以链路带宽。
- 计算结果小于 1 的值仍记为 1
- 计算结果大于 1 且有小数的,舍去小数。
-
对于 R1 来说:
- 到 R2 的链路带宽是
100Mbps
,所以代价是1
。 - 到 R4 的链路带宽是
1Gbps
(1000Mbps),所以代价是 0.1,但因为小于1,所以实际代价是1
。
- 到 R2 的链路带宽是
-
对于 R2 来说:
- 到 R1 的链路带宽是
100Mbps
,所以代价是1
。 - 到 R3 的链路带宽是
10Mbps
,所以代价是10
。
- 到 R1 的链路带宽是
-
对于 R4 来说:
- 到 R1 的链路带宽是
1Gbps
(1000Mbps),所以代价是1
。 - 到 R3 的链路带宽是
1.544Mbps
,所以代价是 约等于 64.7,忽略小数后是64
。
- 到 R1 的链路带宽是
-
对于 R3 来说:
- 到 R2 的链路带宽是
10Mbps
,所以代价是10
。 - 到 R4 的链路带宽是
1.544Mbps
,所以代价是64
。
- 到 R2 的链路带宽是
OSPF路由器邻居关系的建立和维护
OSPF 相邻路由器之间通过交互问候(Hello)分组来建立和维护邻居关系.
问候(Hello)分组封装在IP数据报中,发往组播地址 224.0.0.5
。IP数据报首部中的协议号字段的取值为 89
,表明IP数据报的数据载荷为OSPF分组。
OSPF 分组直接使用网际层的 IP 数据报进行封装,而不像 RIP
报文需要使用运输层用户数据报协议 UDP 封装。从数据包按网络体系结构逐层封装的角度看,OSPF
属于网际层协议,而 RIP
属于应用层协议(但其核心功能是路由选择属于网际层)
-
问候(Hello)分组的发送周期为10秒
-
每个路由器都会建立一张邻居表
-
若40秒未收到来自邻居路由器的问候(Hello)分组,则认为邻居路由器不可达。
链路状态通告
使用 OSPF 的每个路由器都会产生链路状态通告(Link State Advertisement, LSA),LSA
中包含以下两类链路状态信息:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
如图为路由器 R4 的链路状态通告 LSA
链路状态更新分组
链路状态通告LSA被封装在链路状态更新(Link State Update,LSU)分组中,采用可靠的洪泛法(Flooding)进行发送。
-
洪泛法的要点是,路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),以此类推。
-
可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认。
链路状态数据库
使用 OSPF 的每一个路由器都有一个链路状态数据库(Link State Database,LSDB),用于存储链路状态通告LSA。
通过各路由器洪泛发送封装有各自链路状态通告 LSA
的链路状态更新分组 LSU
,将 LSA
存储到各自的链路状态数据库 LSDB
,各路由器的链路状态数据库 LSDB
最终将达到一致(同步),两个同步的路由器称作完全邻接的路由器。
使用 OSPF
的各路由器,基于链路状态数据库 LSDB 进行最短路径优先计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。
基于链路状态数据库进行最短路径优先计算
-
网络拓扑:图中展示了四台路由器(R1, R2, R3, R4)之间的物理连接关系。
-
LSDB:每台路由器维护一个
LSDB
,其中包含了关于网络拓扑的信息。LSDB
记录了路由器之间链接的状态,包括邻接路由器的身份和链路的成本(代价)。例如,在 R1 的LSA
中,记录了到 R2 的链路成本为 1,到 R3 的链路成本为 2等。 -
带权向图:根据
LSDB
,可以构建一张带权向图,其中节点代表路由器,边代表链路,权重代表链路成本。 -
Dijkstra算法的应用:
Dijkstra
算法被应用于带权向图,以找出从任意一台路由器出发到其他所有路由器的最短路径。算法逐步扩展已知的最短路径集合,直到所有的顶点都被访问为止。 -
最短路径树:最终,针对每一台路由器,都会生成一棵以该路由器为根的最短路径树。例如,以 R1 为根的最短路径树表明了从 R1 到其他所有路由器的最短路径是什么样子的。
OSPF的五种分组类型
-
问候(Hello):用来发现和维护邻居路由器的可达性。
-
数据库描述(Database Description):用来向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
-
链路状态请求(Link State Request):用来向邻居路由器请求发送某些链路状态项目的详细信息。
-
链路状态更新(Link State Update):路由器使用链路状态更新分组将其链路状态信息进行洪泛发送,即用洪泛法对整个系统更新链路状态。
-
链路状态确认(Link State Acknowledgement):对链路状态更新分组的确认分组。
OSPF的基本工作过程
-
邻居发现:启动
OSPF
路由器会发送 Hello 消息来探测相邻路由器,并通过相互交换 Hello 消息(每隔10秒)来建立邻居关系。 -
链路状态数据库(LSDB):每个
OSPF
路由器维护一个LSDB
,其中存储了与其他路由器相邻链路的信息,包括链路的状态、度量值(通常是链路带宽)和与链路关联的路由器。 -
路由计算:每个
OSPF
路由器使用Dijkstra算法在LSDB
上进行计算,以确定到达网络中其他路由器的最短路径。 -
路由更新:一旦计算出最短路径,
OSPF
将把这些路径信息发送给相邻路由器,通过链路状态更新(LSU
)消息来交换路由信息。 -
路由表生成:每个
OSPF
路由器使用从相邻路由器接收到的LSU
消息来更新其路由表,并选择最佳路径添加到路由表中。并向路由器发送链路状态确认分组。 -
路径维护:
OSPF
不仅在选择最佳路径时工作,还在路径维护过程中对网络进行监控。当链路状态发生变化时,OSPF
会更新LSDB
并重新计算路径。
多点接入网络中的OSPF路由器
多点接入网络:N 个路由器连接在一个以太网上,则任意两个路由器都是邻居关系,邻居关系的数量为 n ( n − 1 ) \frac{n}{(n-1)} (n−1)n,每个路由器都要向其他 ( N − 1 ) (N-1) (N−1)和路由器发送问候分组和链路状态信息,因而共有 N ( N − 1 ) N(N-1) N(N−1) 个链路状态要在这个一台网上传送。
为了减少所发送问候分组和链路状态更新分组的数量,OSPF
采用以下措施:
-
选举指定路由器(Designated Router,
DR
)和备用的指定路由器(Backup DesignatedRouter,BDR
) -
所有的非 DR/BDR 只与 DR/BDR 建立邻居关系,此时邻居关系的数量就变为 2 ( n − 2 ) + 1 2(n-2)+1 2(n−2)+1
-
非 DR/BDR 之间通过 DR/BDR 交换信息
-
若
DR
出现问题,则由BDR
顶替DR
OSPF划分区域
为了使 OSPF 协议能够用于规模很大的网络,OSPF 把一个自治系统AS再划分为若干个更小的范围,称为区域(area)。
划分区域的好处就是,把利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个自治系统 AS,这样就减少了整个网络上的通信量。
OSPF 区域的类型
-
骨干区域(Area 0):
- 又称为主干区域、区域0或Backbone Area,是OSPF网络的核心。
- 所有非骨干区域都必须直接或间接连接到骨干区域。
- 骨干区域负责汇总和传递各个区域的路由信息。
-
普通区域(Standard Area):
- 普通区域是标准的非骨干区域,可以与骨干区域或其他非骨干区域直接连接。
- 可以分为以下子类型:
- 普通区域:既不阻止LSA,也不进行任何额外的优化。
- 完全Stub区域(Totally Stubby Area):只允许默认路由进入,不允许其他外部路由信息进入。
- Stub区域:不接受AS外部路由信息,但可以接受摘要LSA。
- NSSA(Not-So-Stubby Area):允许外部路由进入,但不会向其他区域传播这些路由。
-
NSSA区域(Not-So-Stubby Area):
- 类似于
Stub
区域,但允许通过ASBR
(自治系统边界路由器)引入外部路由。 - 外部路由以
NSSA
特定的方式传播,并标记为类型7 LSA
。
- 类似于
OSPF 区域的相关概念
-
自治系统边界路由器(AS Border Router,ASBR):主干区域内专门和本自治系统外的其他自治系统交换路由信息的一个路由器。
-
主干路由器(Backbone Router, BBR):主干区域内的路由器
-
区域内路由器(Internal Router,IR):所有接口都在同一个区域内的路由器
-
区域边界路由器(Area Border Router, ABR):位于两个或多个
OSPF
区域之间的路由器,负责在区域间传递路由信息。汇总各区域的路由信息,并通过主干区域传递到其他区域。区域边界路由器的一个接口用于连接主干区域,另一个接口用于连接自身所在区域。
采用划分区域的方法,虽然使交换信息的种类增多了,同时也使 OSPF
协议更加复杂了,但这样做能使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF
协议能够用于规模更大的自治系统 AS
。