背景技术
OSPF协议是一种边界网关协议(IGP),用于在单一自治系统内决策路由。OSPF路由器通过Hello报文发现邻居,并与邻居路由器之间互相通告链路状态,建立链路状态数据库(LSDB),生成最短路径树,并使用最短路径构造路由转发表。
当路由器发生OSPF协议重启时,会重新发送Hello报文以发现邻居。参见图1,图1是OSPF协议组网示意图,其中路由器R2分别与路由器R1、R3、R4是邻居。当R1发生OSPF协议重启后,会发送Hello报文以发现邻居,而R2之前已经和该R1建立邻居关系,收到R1的Hello报文之后就会把R1从邻居列表中删除,断开与R1的邻居关系,并通知R3、R4。当R1与R2重新建立OSPF邻居关系后,会重新同步所有的路由信息,而路由器R3、R4也需要重新进行路由计算,这样就会引起网络的路由振荡以及转发中断。
对于一个大型网络,尤其是运营商网络,这些路由振荡和转发中断是不可容忍的。目前使用平滑重启(GR)技术则可以解决此问题。两个路由器之间建立OSPF邻居关系时,进行GR能力协商;当其中一个路由器出现OSPF协议重启或主备切换时,另一台路由器会维护与该出现OSPF协议重启或主备切换的路由器的邻居关系不变,并保持路由稳定和正常转发。其中,出现OSPF协议重启或主备切换的路由器成为平滑重启设备(GR Restarter),维护与该出现OSPF协议重启或主备切换的路由器称为平滑重启帮助设备(GRHelper)。
参见图2,图2是现有技术OSPF协议的GR流程图,其中,路由器A和路由器B均支持GR,并在建立邻居关系时进行了GR能力协商;路由器A和路由B建立邻居关系后维持LSDB同步;当路由器A出现OSPF协议重启或主备切换时,GR流程具体包括如下步骤:
步骤1、路由器A协议重启后向路由器B发送Grace LSA,路由器B接收到路由器A发来的Grace LSA后,维持与路由器A的邻居关系。
步骤2、路由器A与路由器B进行Hello报文交互,并通过链路状态数据库描述(DD)报文、链路状态更新(LSU)报文、链路状态确认(LSAck)报文交互实现LSDB同步。在同步LSDB的过程中,如果路由器A从路由器B中获取得到自身在发生OSPF协议重启前产生的链路状态广播(LSA),则存储该LSA并置失效(stale)标志。
步骤3、路由器A完成与路由器B的LSDB同步后,向路由器B发送Grace Period TLV的type值为0的Grace LSA,通知路由器B结束GR流程;
步骤4、路由器A进入正常OSPF流程,重新生成LSA,并将设置了stale标志且未被重新生成的LSA删除;
步骤5、路由器A恢复所有路由信息后重新进行路由计算,生成路由表和转发信息表(FIB)。
在现有GR方案中,GR过程中网络拓扑必须保持不变,否则GR将失败。然而,在GR过程中发生LSA更新就宣告GR失败,将会造成与该更新的LSA不相关的数据流的中断。以图3所示的在图1所示OSPF协议组网上使能GR时的示意图为例,其中R2发生OSPF协议重启,为GR Restarter,R1、R3、R4为GR Helper,假如在R2进行GR的过程中R3上的一个叶子节点要退出OSPF,按照现有GR方案,则GR宣告失败,进而,R2上和OSPF相关的路由表项都要重新生成,那么R1上经过R2转发至R4的数据流就会中断。
发明内容
有鉴于此,本发明的目的在于提供一种OSPF协议平滑重启方法,该方法能够减少因LSA更新造成的GR失败,进而降低因GR失败造成的与发生更新的LSA不相关的数据流的中断。
为了达到上述目的,本发明提供了一种OSPF协议平滑重启方法,该方法包括:
GR过程中,平滑启动帮助设备GR Helper检测到链路状态通告LSA更新时,判断该LSA更新是否能够引起网络拓扑变化,如果否,则存储该发生更新的LSA;
GR结束后,GR Helper将存储的发生更新的LSA洪泛到平滑启动设备GR Restarter。
本发明还提供了一种平滑重启装置,该装置包括:应用于开放最短路径优先OSPF协议的平滑重启GR过程中的GR helper,其特征在于,该平滑重启设备包括:检测单元、判断单元、存储单元、发送单元;
所述检测单元,用于在GR过程中检测是否发生链路状态通告LSA更新,如果是,则将所述发生更新的LSA发送到判断单元;
所述判断单元,用于接收到检测单元发来的发生更新的LSA,并判断该LSA更新是否能够引起网络拓扑变化,如果否,将该发生更新的LSA发送到存储单元中存储;
所述存储单元,用于存储判断单元发来的发生更新的LSA;
所述发送单元,用于在GR结束后,将存储单元中存储的发生更新的LSA洪泛到平滑启动设备GR Restarter。
由上面的技术方案可知,本发明通过对发生更新的LSA进行判断,确定该发生更新的LSA是否能有引起网络拓扑变化,如果是,则通知GR Restarter本次GR失败,否则,存储该发生更新的LSA;在GR结束后,再将存储的发生更新的LSA洪泛到GR Restarter中进行LSDB同步。可见,采用本发明的技术方案之后,只有在LSA更新能够引起网络拓扑变化时,才允许GR失败,因此可以减少因LSA更新而引起的GR失败,进而也可以降低因GR失败造成的与发生更新的LSA不相关的数据流的中断。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图,并举实施例,对本发明的技术方案进行详细说明。
参见图4,图4是本发明实施例OSPF协议平滑重启方法流程图,包括以下步骤:
步骤401、GR过程中,平滑启动帮助设备GR Helper检测到LSA更新时,判断该LSA更新是否能够引起网络拓扑变化,如果是,则通知GRRestarter本次GR失败,如果否,则存储该发生更新的LSA。
在实际应用中,GR helper接收到邻居路由器发来的LSA时,会将该LSA与本地LSDB中对应的LSA进行比较,确定是否发生了LSA更新,如果发生更新,则GR失败。本步骤中,仍然采用现有技术的方法来判断是否发生了LSA更新。不同之处在于:本步骤中,当确定LSA更新后,还进一步判断该LSA更新是否能够引起网络拓扑变化,如果能够引起网络拓扑变化,则GR失败;如果不能够引起网络拓扑变化,则保存该发生更新的LSA。
步骤402、GR结束后,GR Helper将存储的发生更新的LSA洪泛到平滑启动设备GR Restarter。
这里,由于在GR过程中,GR Helper将发生了更新且不会引起网络拓扑变化的LSA存储起来,没有洪泛到GR Restarter,为了保持网络中LSDB的同步,需要在GR结束后,将存储的发生更新的LSA洪泛到GR Restarter,供GR Restarter重新计算路由,生成路由表和FIB表。
实际上,在OSPF协议平滑重启过程中,可能发生更新的LSA包括1类、2类、3类、4类、5类、7类LSA。其中,对于1类、2类、4类的LSA更新,只要发生LSA更新,则在不能得到及时同步的情况下一定会引起网络拓扑的变化,可能会导致路由环路问题。因此,在GR过程中,只要发生1类、2类、或4类的LSA更新,则GR必须失败。另外,1类、2类、4类的LSA更新,不涉及地址前缀的更新,而且,在GR过程中,1类、2类、4类LSA变化的情况也很少发生。对于3、5、7类LSA更新,当所述LSA更新是在该LSA中是新增加了一条地址前缀、或者删除了一条地址前缀时,则在不能得到及时同步的情况下也不会引起网络拓扑变化;如果所述LSA更新是地址前缀对应的cost改变或者下一跳改变,则在不能得到及时更新的情况下可能会引起网络拓扑变化,导致路由环路问题。下面对发生3类、5类、或7类LSA更新时,且所述LSA更新是在LSA中增加一条地址前缀,或者删除一条地址前缀时,在不能够得到及时更新的情况下不会引起网络拓扑变化的原因进行详细说明:
在GR过程中,如果当前GR Helper检测到3类、5类、或7类LSA更新,且所述LSA更新是在该LSA中新增加了一条地址前缀,例如,新增加了一条前缀1.2.3.0/24,由于其它设备并不知道存在该条地址前缀对应的路由,因此,无法通过该对应的路由将流量发送到1.2.3.0/24,也就不会引起网络拓扑变化,导致路由环路问题。如果当前GR Helper检测到3类、5类、或7类LSA更新,且所述LSA更新是在该LSA中删除了一条地址前缀,由于其它设备并不知道该地址前缀对应的路由已经删除,仍然可以通过该对应的路由将流量发送到当前GR Helper;但是由于当前GR Helper已经删除了该条地址前缀,也就无法根据该条前缀对应的路由对流量进行转发,因此,也就不会引起网络拓扑变化,导致路由环路问题。在所述LSA更新是在该LSA中删除一条地址前缀的时,其它设备会因为不知道该条地址前缀已删除而继续通过该对应的路由转发数据流到该GR Helper,造成一定的资源浪费,但是相对于因GR失败而导致所有流量均中断,邻居关系重新建立来说资源浪费较少,且不会引起其它和该地址前缀变化不相关的数据流的中断。
由上述两段内容可知,只有在发生3类、5类、或7类LSA更新时,且所述LSA更新是在LSA中增加一条地址前缀,或者删除一条地址前缀时,在不能够得到及时更新的情况下也不会引起网络拓扑变化。另一方面,1类、2类、4类的LSA更新不会涉及地址前缀的变化,因此,只需要判断LSA更新是否是地址前缀的增加或删除,即可确定该LSA更新在不能得到及时更新的情况下是否会引起网络拓扑变化。因此可以用如下方法判断该LSA更新是否能够引起网络拓扑变化:如果所述LSA更新是在该LSA中新增了一条地址前缀,则不能引起网络拓扑变化;如果是所述LSA更新是删除了该LSA中的一条地址前缀,则不能引起网络拓扑变化。
另外,为了不影响GR过程,当GR helper检测到LSA更新,且该LSA更新不会引起网络拓扑变化时,需要先保存该发生更新的LSA,在GR结束后,再同步该发生更新的LSA到GR Restarter。可以采用多种方式存储发生更新的LSA,本实施例中,采用预先创建临时链路状态数据库(LSDB)的方式,将发生更新的LSA存储在临时LSDB中,而不是加入到LSDB中。所述临时LSDB由GR Helper创建,具有OSPF LSDB的一切属性。
在GR结束后,GR Helper将存储的发生更新的LSA洪泛到平滑启动设备GR Restarter的方法为:将存储的发生更新的LSA加入到本地LSDB中,然后将存储的发生更新的LSA携带在链路状态更新(LSU)报文中发送到GR Restarter。
当GR Restarter接收到GR Helper发来的LSU报文后,将LSU报文中携带的发生更新的LSA加入到本地LSDB中,并重新进行路由计算,得到路由表和FIB表,此属于现有技术不再赘述。
当采用图4所示实施例的方案后,在GR过程中,如果GR Helper检测到LSA更新,且该LSA更新不会引起网络拓扑变化,则GR过程不会失败,因此,与该发生更新的LSA不相关的数据流也就不会中断。下面以背景技术中的图3为例进行说明:路由器R2发生OSPF协议重启后,作为GR Restarter进入GR过程,其邻居路由器R1、R3、R4分别作为GR Helper进入GR过程。当R3上发生LSA更新时,R3首先会检测该LSA更新是否能够引起网络拓扑变化,如果能够引起网络拓扑变化,则在不能得到及时更新的情况下,可能会造成环路问题,因此,GR必须失败;如果不能够引起网络拓扑变化,则在不能得到及时更新的情况下,也不会造成环路问题,因此,GR不必失败,只需要先存储该发生更新的LSA,并在GR结束后,将该发生更新的LSA同步到GR Restarter即可。
本发明还提供了一种平滑重启设备,应用于OSPF协议的GR过程中的GR helper。该平滑重启设备能够减少因LSA更新造成的GR失败,进而降低因GR失败造成的与发生更新的LSA不相关的数据流的中断。
参见图5,图5是本发明实施例平滑重启设备的结构示意图。该平滑重启设备包括:检测单元501、判断单元502、存储单元503、发送单元504;其中,
检测单元501,用于在GR过程中检测是否发生链路状态通告LSA更新,如果是,则将所述发生更新的LSA发送到判断单元502;
判断单元502,用于接收到检测单元501发来的发生更新的LSA,并判断该LSA更新是否能够引起网络拓扑变化,如果否,将该发生更新的LSA发送到存储单元503中存储;
存储单元503,用于存储判断单元502发来的发生更新的LSA;
发送单元504,用于在GR结束后,将存储单元503中存储的发生更新的LSA洪泛到平滑启动设备GR Restarter。
所述判断单元502判断该LSA更新是否能够引起网络拓扑变化时,用于:如果所述LSA更新是在该LSA中新增了一条地址前缀,则不能引起网络拓扑变化;如果是所述LSA更新是删除了该LSA中的一条地址前缀,则不能引起网络拓扑变化。
所述存储单元503,用于预先创建临时LSDB;在存储判断单元502发来的发生更新的LSA时,用于:将发生更新的LSA存储到临时LSDB中。
所述存储单元503,用于存储LSDB;用于接收到发送单元504发来的将存储的发生更新的LSA加入到LSDB中的通知后,将存储的发生更新的LSA加入到LSDB中;
所述发送单元504在GR结束之后,将存储单元503中存储的发生更新的LSA洪泛到GR Restarter之前,进一步用于:通知存储单元503将存储的发生更新的LSA加入到LSDB中;将存储单元503中存储的发生更新的LSA洪泛到GR Restarter时,用于:将存储单元503中存储的发生更新的LSA携带在链路状态更新报文LSU发送到GR Restarter。
由以上本发明实施例可知,本发明中,GR过程中,GR Helper在检测到LSA更新时,不像现有技术一样通知GR Restarter本次GR失败,而是进一步判断该LSA更新是否能够引起网络拓扑变化,如果是,则仍按照现有技术的方法,通知GR Restarter本次GR失败,否则,则存储更新的LSA;在GR结束后,将存储的发生更新的LSA洪泛到GR Restarter。因此,相对于现有技术,能够减少GR失败的次数,进而降低因GR失败而导致的其他与发生更新的LSA不相关的数据流的中断。另外,在GR过程中,当有少量LSA发生变化时,GR不失败的情况下,其网络收敛速度要比GR失败后OSPF路由器重新建立邻居关系时的网络收敛速度快。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。