**一、OSPF邻接关系
运行链路状态路由协议的路由器必须首先与选定的邻居路由器建立邻接关系,这是通过与邻居路由器交换Hello分组来实现的。
1.邻接路由器建立步骤
路由器建立邻接关系的步骤如下:
1)路由器将Hello分组发送给邻居路由器,并接收来自邻居路由器的Hello分组。Hello分组的目标地址通常是组播地址。
2)路由器通过交换Hello分组来获悉协议特定的参数,如检查邻居是否位于同一个区域中,Hello间隔是否相等。交换完Hello分组后,路由器宣称邻居处于正常运行状态。
3)两台路由器使用Hello分组建立邻接关系后,它们通过LSA来同步LSDB,并确认已收到邻接路由器的LSA。至此,两台邻接路由器知道它们的LSDB已经同步。对OSPF而言,这意味着两台路由器已经处于完全邻接状态。
4)必要时,路由器将新的LSA转发给其他邻接路由器,确保在整个区域内,链路状态信息都是完全同步的。
2.点到点邻接
点到点串行链路上的两台路由器之间建立完全邻接的关系,它们使用的封装类型通常是高级数据链路控制(HDLC)或点到点协议(PPP)。然而,在LAN链路等广播网络上,将选举一个指定路由器(DR)和一个备用指定路由器(BDR)。其他的路由器都与这两台路由器建立邻接关系,却只将LSA通告给它们。DR从邻居那里收到更新后,将其转发给LAN上的其他所有邻居。DR的主要功能之一是确保同一个LAN中所有路由器的LSDB都相同。因此,在广播网络中,DROTHER(不属于DR或者BDR的路由器)与DR和BDR同步LSDB。
3.LAN链路中的邻接
LAN中不属于DR或BDR的路由器(DROTHER)之间维护部分邻居关系,这被称为双向邻居状态。例如,在上图中,路由器A为DR,路由器B为BDR,因此路由器C将与路由器A和B建立邻接关系,并与路由器D和E建立双向邻居关系。
需要指出的是,DR概念是链路级的。在多路访问的广播环境中,每个网段都有独立的DR和BDR。例如,如果路由器与多个多路访问广播网络相连,它可能在一个网段中为DR而在另一个网络中为DROTHER
LSA报告路由器和链路状态,因此有链路状态之说。路由器之间的链路状态信息必须同步,为此LSA必须具有如下特征。
1)LSA是可靠的,有一种用于确认LSA被成功递送的方法。
2)LSA被扩散到整个区域(或整个域,如果只包含一个区域的话)。
3)LSA有序列号和寿命,以确保每台路由器都知道自己有最新的LSA版本。
4)LSA被定期刷新以确保拓扑信息的有效性,直到LSA从LSDB中被删除。
只有以可靠的方式扩散链路状态信息,才能确保区域中每台路由器对网络的认识都是最新、最准确的这样,路由器才能做出可靠的路由器决策,并与网络中其他路由器的决策一致。
二、OSPF度量值的计算
1.简介
Edsger Dijkstra(SPF算法的创始者) 设计了一种用于计算复杂网络中最佳路径的数学算法,供链路状态路由器选择协议使用。通过网络中的每条链路指定开销,将特定的节点作为树根,并将前往特定目的地的开销相加,便可以对树中的分支进行计算以确定前往每个目的地的最佳路径。最佳路径被加入到转发数据库(路由选择表)中。
2.COST值的计算
默认情况下,Cisco路由器根据接口的配置带宽来计算OSPF开销,带宽越高,开销越低。在Cisco路由器上,默认情况下使用公式“100/(Mbit/s为单位的带宽)”来计算OSPF开销,这个公式也可以表示为“10^8/(bit/s为单位的带宽)”。
如果修改了链路带宽,OSPF开销也将相应地变化。对于每个接口,只能指定一种开销。在路由器链路通告中,以链路开销的方式通告它。默认的OSPF开销如下:
OSPF默认的COST值
也可以手工定义接口的OSPF开销,这种开销将覆盖默认开销(具体操作后续更新)。
3.SPF算法计算方式
下图是一个SPF计算示例,计算步骤如下。
1)路由器H向路由器E发送通告,以表明自己的存在。路由器E将路由器H和自己的通告传递给邻居(路由器C和G)。路由器G将这些通告及自己的通告传递给路由器D。依次类推。
2)这些LSA遵守水平分割规则,即路由器不应将LSA通告给提供该LSA的路由器。在这个例子中,路由器E不会将路由器H的LSA再通告给路由器H。
3)路由器X有4台邻接路由器:A、B、C和D。它从这些路由器那里接收到了网络中所有其他路由器的LSA。根据这些LSA,它能够推断出路由器之间的所有链路,并绘制出如上图所示的路由器连接情况。
4)在上图中每条以快速以太网链路的OSPF开销都被设置为1.通过将前往每个目的地的开销相加,路由器可以推断出最佳路径。
5)在上图的右边是路由器XX通过计算得到的最佳路径(SPF树)。根据这些最佳路径(实线),将前往每台路由器连接的目标网络的路由加入到路由表中,并将相应邻接路由器(A、B、C或D)指定为下一跳地址。