在第七节(计网第四章(网络层)(七)_永无魇足的博客-CSDN博客)我们总结了路由信息协议RIP。在最后我们提到了RIP协议有坏消息传的慢的问题,这是距离向量算法的本质决定的,所以这种问题无法彻底避免。
既然基于距离向量无法彻底避免产生路由环路,那么就不基于它了。
一、最短路径优先协议OSPF
“最短路径”是因为使用了最短路径算法Dijkstra提出的最短路径算法SPF。
OSPF是基于链路状态的,由于采用SPF算法计算路由,所以从算法上就保证了不会产生路由环路问题。
在第七节我们提到,RIP协议只适合小规模网络。但是OSPF算法不限制网络规模,更新效率高,收敛速度快。
1.链路状态:
指本路由器与都与哪些路由器相邻,以及相应链路的“代价”(“代价”用来表示费用、距离、时延、带宽等,这是由网络管理人员决定的)。
2.基本工作原理
(1)Hello分组
OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。
Hello分组封装在IP数据报中,发往组播地址224.0.0.5。
发送周期为10秒。
如果40秒没有收到邻居路由器的Hello分组,就认为该邻居路由器不可达。
每个路由器都有一张邻居表。表里每一条条目都包括邻居ID,接口和“死亡”倒计时。在“死亡倒计时”到达0之前,如果再次收到来自条目对应的路由器传来的Hello分组,就会重启该条目的40秒倒计时。
(2)链路状态LSA
使用OSPF的每个路由器都会产生链路状态通告LSA,LSA包括直连网络的链路状态信息和邻居路由器的链路状态信息。
LSA被封装在链路状态更新分组LSU中,采用洪泛法发送(就是之前提到过的泛洪,路由器收到分组后,除了接收到该分组的接口,其余接口都转发)。
(3)链路状态数据库LSDB
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA(链路状态通告)。
就好像路由表一样,现在表成了LSDB,里面的条目变成了LSA。
通过各路由器洪泛发送装有自己的LSA的LSU分组,各路由器的LSDB最终达到一致。
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他路由器的最短路径。
3.五种分组
(1)问候分组
即前面提到的Hello分组,用来发现和维护邻居路由器的可达性。
(2)数据库描述分组
向邻居路由器给出自己LSDB中的所有链路状态项目的摘要信息。
(3)链路状态请求分组
向邻居路由器发送某些链路状态项目的详细信息。
(4)链路状态更新分组
路由器使用这种分组将其链路状态进行洪泛发送,
(5)链路状态确认分组
对链路状态更新分组的确认分组。
4.基本工作过程
如图:(1)相邻的两个路由器之间周期性地发送问候分组。以便建立和维护邻居关系。
(2)建立邻居关系后,给邻居路由器发送数据库描述分组。里面就有自己LSDB里面的所有链路状态的摘要信息。
(3)假设B收到来自A的数据库描述分组后,发现自己缺少其中某些链路状态项目。 便会向A发送链路状态请求分组。
(4)A收到请求分组后,将B所需的链路状态项目的详细信息封装到链路状态更新分组中 ,然后发送给B。
(5)B收到后,将这些链路状态项目的详细信息 添加到自己的LSDB中,随后向A发送链路确认分组。
同样地,A也会经历类似的上述过程获取到B中自己所缺的链路状态项目的详细信息。
最后,就实现了各路由器的LSDB达到一致。
需要注意的是:每30分钟或者链路状态发生变化的时候,路由器都会发送链路状态更新分组,收到该分组的其余路由器会通过洪泛方式转发该分组。并给该路由器发回链路状态确认分组。