1. 基本概念
路由协议OSPF全称为Open Shortest Path First,也就开放的最短路径优先协议,因为OSPF是由IETF开发的,它的使用不受任何厂商限制,所有人都可以使用,所以称为开放的,而最短路径优先(SPF)只是OSPF的核心思想,其使用的算法是Dijkstra算法。
2. 计算过程
每个路由器通过泛洪链路状态通告(LSA)向外发布本地链路状态信息(例如使能 OSPF的端口,可到达的邻居以及相邻的网段等等)。
每一个路由器通过收集其它路由器发布的链路状态通告以及自身生成的本地链路状态通告,形成一个链路状态数据库(LSDB)。LSDB 描述了路由域内详细的网络拓扑结构。
所有路由器上的链路状态数据库是相同的。通过 LSDB,每台路由器计算一个以自己为根,以网络中其它节点为叶的最短路径树。
通过每台路由器计算的最短路径树得出了到网络中其它节点的路由表。
OSPF 最显著的特点是使用链路状态算法,区别于 RIP 路由协议使用的距离矢量算法。
距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,而对于这个网络中的所有路由器而言,他们并不清楚网络的拓扑,他们只是简单的知道要去往某个目的应该从哪里走,距离有多远。
相比之下链路状态路由协议就要复杂的多。
3. OSPF区域划分
OSPF区域划分为骨干区域和非骨干区域。
骨干区域:Area0
非骨干区域:除Area0之外的所有区域
OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域,即区域是一组网段的集合。
划分区域可以缩小 LSDB 规模,减少网络流量。
区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。每个区域都有自己的 LSDB,不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此 LSDB 的规模大大缩小了。
Area 0 为骨干区域,骨干区域负责在非骨干区域之间发布由区域边界路由器汇总的路由信息(并非详细的链路状态信息),为了避免区域间路由环路,非骨干区域之间不允许直接相互发布区域间路由信息。因此,所有区域边界路由器都至少有一个接口属于 Area 0,即每个区域都必须连接到骨干区域。
4. OSPF中的DR、BDR选举过程
DR(指定路由器)和BDR(备用指定路由器)的选举是根据ID和优先级来进行选举的,如果优先级相同,则根据ID的大小来选择。
在与一个或多个邻居之间的双向通信建立起立之后,路由器对每个邻居发送来的Hello包中的优先级、DR和BDR域进行检查。列出所有能够参加选举的路由器(路由器的优先级高于0并且此路由器的邻居状态至少为“双向”);所有路由器都宣称自己为DR(将自己的接口地址置于Hello包的DR域中);而且所有路由器都宣称自己为BDR(将自己的接口地址置于Hello的BDR域中)。进行计算的路由器也要将自身包括在此列表中,除非它被禁止参加选举。
从备选路由器列表中,创造一个子集,此子集包含所有未宣称为DR的路由器(宣称自己为DR的路由器无法被选举为BDR)
如果此自己中的一或多个邻居将他们的接口地址置于BDR域中,这些邻居中拥有最高优先级的路由器将被宣告为BDR。如果出现平局(路由器优先级相等),拥有最高Router ID的邻居将被选举出来。
如果此子集中没有任何路由器被宣告为BDR,拥有最高优先级的邻居被宣告为BDR。如果出现平局,拥有最高RouterID的邻居们被选举出来。
如果一或多个备选路由器将它们自身的接口地址置于DR域中,拥有最高级的邻居将被宣告为DR。如果出现平局,拥有最高RouterID的邻居们被选举出来。
如果没有任何路由器宣告自己为DR,则新选举出来的BDR将成为DR。
如果进行计算的路由器是新选举出来的DR或BDR,或者不再是DR或BDR,重复2-6。
不是所有OSPF的网络类型都会产生DR和BDR,只有广播型网络和NBMA网络中才有DR和BDR。
为什么?
当链路层协议是Ethernet、FDDI时,OSPF缺省认为网络类型是Broadcast。在该类型的网络中,任意两台路由器之间都要传递路由信息。如果网络中有n台路由器,则需要建立nx(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF协议定义了DR和BDR路由器,所有路由器都只将信息发送给DR,由DR将网络链路状态广播出去。
5. OSPF防环机制
区域内:所有路由器拥有相同的 LSDB, 使用 SPF 算法, 都以自己为根计算到区域内各节点的最短路径树,得出到区域内各节点的路由表, 保证区域内无环。(Type1 和Type2)
区域间:非骨干区域之间不允许直接相互发布区域间路由信息,必须通过骨干区域,骨干区域负责不同区域间的路由信息转发;区域间水平分隔, ABR 路由器不会将从骨干区域学到的路由,在通告回骨干区域(Type3 和 Type4,产生于 ABR 的路由);
外部路由,与其它 AS 直连的 ABSR 路由器所在区域内, Type1 和 Type2 的防环机制防环;其它区域,使用 type3 和 Type4 的防环机制防环(Type5);
其它防环机制, DOWNbit, MPLS VPN 中 Type3 防环;Tag 防环 Type3 和 Type5 防环。
注:RIP 防环:最大跳数(超过 15 跳后,不可达),水平分隔(不发送从自己端口接收的路由),毒素反转(发送从自己端口接收到的路由并将跳数设置为 16),路由中毒(将不可达的路由条目的跳数设置为 16,在通告出去)
6. OSPF报文种类以及支持的网络类型
OSPF报文种类:
Hello建立和维护OSPF邻居关系
DBD链路状态数据库描述信息(描述LSDB中LSA头部信息)
LSR链路状态请求,用于向OSPF邻居请求链路状态信息
LSU链路状态更新(包含一条或多条LSA)
LSAck对LSU中的LSA进行确认
OSPF支持的网络类型(运行OSPF网络的二层链路类型):
1.广播:选举DR,链路层协议是Ethernet时,默认为广播类型网络。
2.非广播:非广播多路可达(NBMA、FDDI)
3.点对点(PPP、HDLC)
4.点对多点:可以看成是多个点到点的网络。
5.虚电路(虚电路的网络类型是点对点)
虚链路必须配置在ABR上,虚链路的配置使用的命令是area transit-area-id virtual-link router-id 虚链路的Metric等同于所经过的全部链路开销之和。
7. OSPF的优点
适应范围:OSPF支持各种规模的网络,最多可支持几百台路由器。
最佳路径:OSPF是基于带宽来选择路径。
快速收敛:如果网络的拓扑结构发生变化,OSPF立即发送更新报文,使这一变化在自治系统中同步。
无自环:由于OSPF通过收集到的链路状态用最短路径树算法计算路由,故从算法本身保证了不会生成自环路由。
子网掩码:由于OSPF在描述路由时携带网段的掩码信息,所以OSPF协议不受自然掩码的限制,对VLSM和CIDR提供很好的支持。
区域划分:OSPF协议允许自治系统的网络被划分成区域来管理,区域间传送的路由信息被进一步抽象,从而减少了占用网络的带宽。
等值路由:OSPF支持到同一目的地址的多条等值路由。
路由分级:OSPF使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
支持验证:它支持基于接口的报文验证以保证路由计算的安全性。