发明内容
本发明所要解决的问题是提供一种自治系统内网络异常定位的系统和方法,其利用开放最短路径优先协议的链路状态广播(OSPF LSA)对自治系统内的网络异常进行定位,发现网络拓扑变化,协助定位网络异常。
为实现本发明目的而提供的一种自治系统内网络异常定位的系统,包括分析单元,用于根据采集的OSPF链路状态广播报文构建拓扑,并在拓扑构建完成之后,根据路由信息采集探针收到的使拓扑改变的OSPF更新报文发现拓扑的变化,然后结合OSPF协议定位网络异常。
所述的自治系统内网络异常定位的系统,还包括路由信息采集探针,用于通过物理上部署到自治系统的OSPF区域,通过隧道连通到网络中,与网络中每个OSPF区域的运行OSPF协议的路由器建立邻接关系,实时被动地采集在该OSPF区域泛洪的链路状态广播报文,并将采集到的链路状态广播报文发送给所述分析单元。
所述分析单元包括构建模块、更新模块和判断模块,其中:
所述构建模块,用于根据路由信息采集探针采集发来的自治系统内各个区域的OSPF链路状态广播报文,如果该报文为自治系统中的宣告路由器第一次发出的OSPF链路状态广播报文,则构建拓扑,并根据拓扑的数据结构得到OSPF报文列表;
所述更新模块,用于在拓扑构建完成之后,根据路由信息采集探针采集到的OSPF更新报文,对接收到的OSPF Router LSA,OSPF Network LSA报文进行解析,根据报文内容及拓扑的边关系,更新拓扑中的节点或者边的信息;
所述判断模块,用于通过比较新收到的链路状态广播报文和所述OSPF报文列表中同一宣告路由器发出的相同区域内的最近一条同类型链路状态广播报文,判断自治系统内拓扑的变化,并结合该变化及OSPF协议分析,定位自治系统内的网络异常事件。
所述的自治系统内网络异常定位的系统,还包括报文区分模块,用于区分路由信息采集探针和分析单元之间传输的报文的类型。
所述报文类型一类是路由信息采集探针通过与网络中的OSPF路由器建立邻居关系而得到的路由更新报文;另一类是路由采集探针所发送的与网络中OSPF路由器之间的邻居关系建立或者丢失的应用层控制报文。
所述的自治系统内网络异常定位的系统,还包括配置模块,用于对路由信息采集探针覆盖范围内的路由器进行OSPF配置,使路由信息采集探针与自治系统内建立隧道的路由器建立起OSPF全邻接关系,采集到区域内各路由器的报文信息。
为实现本发明目的还提供一种自治系统内网络异常定位的方法,包括下列步骤:
步骤A,分析单元根据采集到的OSPF链路状态广播报文,如果该报文为自治系统中的宣告路由器第一次发出的OSPF链路状态广播报文,则构建拓扑,并根据拓扑的数据结构为每个路由器维护一个OSPF报文列表;
步骤B,在拓扑构建完成之后,如果路由信息采集探针又收到OSPF更新报文,则分析单元利用该OSPF链路状态广播报文与OSPF报文列表中同类型的链路状态广播报文进行比较,根据OSPF更新报文发现更新拓扑的变化;
步骤C,根据OSPF更新报文发现拓扑变化之后,结合OSPF协议定位网络异常。
所述步骤A之前还包括下列步骤:
步骤A’,将路由信息采集探针通过物理上部署到自治系统的OSPF区域中,实时被动地采集在该OSPF区域泛洪的链路状态广播报文,并传输给分析单元。
所述步骤A中,所述数据结构包括:
自治系统数据结构:其包括该自治系统内区域列表,路由器列表,子网列表;
路由器信息数据结构:其包括路由器ID,类型,接口列表,OSPF RouterLSA列表,OSPF NetworkLSA列表,单向邻居集合,双向邻居集合;
记录网段及指定路由器信息的数据结构:包括网段IP,DR接口,DR路由器ID,通过该网段上普通路由器发出的RouterLSA与指定路由器建立单向边关系的路由器集合,通过DR的NetworkLSA获得该网段上普通路由器放入宣告路由器的单向邻居集合。
所述步骤A包括下列步骤:
步骤A1,收到一条链路状态广播报文后,如果该报文为自治系统中的宣告路由器第一次发出的OSPF链路状态广播报文,则通过链路状态广播报文内容获得宣告路由器所在区域号,在自治系统所维护的区域列表中检索所述区域号;若检索到,转向步骤A2;否则,转向步骤A3;
步骤A2,判断收到的OSPF链路状态广播报文类型,如果是RouterLSA,则转向步骤A4;如果是NetworkLSA,则转向步骤A6;否则,结束返回;
步骤A3,建立一所述区域号的区域结构,写入自治系统所维护的区域OSPF报文列表中,转向步骤A2;
步骤A4,以宣告路由器ID为路由器ID建立路由器结构,并根据RouterLSA中宣告的路由器类型填充路由器结构,并根据路由器ID和类型在拓扑图中画出该路由器,并将其添加到所述区域号的路由器OSPF报文列表中,转向步骤A5;
步骤A5,遍历RouterLSA中的每条链路,记录到该路由器以所述区域号为索引的OSPF RouterLSA报文列表中,分类型处理,直到最后一条,然后结束返回;
步骤A6,以宣告路由器ID为路由器ID建立路由器结构,根据路由器ID在拓扑图中画出该路由器,并将其添加到所述区域号的路由器列表中;
步骤A7,查找记录网段及指定路由器信息的数据结构中是否有该指定路由器信息;
若没有,创建一个新条目,将网段、DR接口、DR路由器ID信息填入;
若已经存在,则填补信息空缺处,同时为单向边关系的路由器集合中的路由器添加宣告路由器的单向邻居关系;
步骤A8,遍历NetworkLSA中的邻居路由器,记录到该路由器以所述区域号为索引的OSPF NetworkLSA报文列表中,直到最后一条。
所述步骤A5中,所述分类型处理,包括下列步骤:
步骤A51,对于点到点类型,如果linkData是宣告路由器的一个接口,linkID是邻居路由器的ID,记为neighborRouterID,则将neighborRouterID加入宣告路由器的单向邻居集合,并检查宣告路由器是否存在于neighborRouterID的单向邻居集合,若是,在拓扑图中画出边;否则,结束返回;
步骤A52,对于transit network类型,如果linkData是宣告路由器的一个接口,linkID是宣告路由器所在网段DR的接口,则:
若linkData与linkID相等,说明宣告路由器是一网段上的指定路由器,从记录网段及指定路由器信息的数据结构中检索相应的指定路由器条目,若检索到,则填充相应信息,并为宣告路由器的单向邻居集合中所有路由器建立它们与指定路由器的单向邻居关系;若没有检索到,将该接口和宣告路由器ID放入记录网段及指定路由器信息的数据结构;
若linkData与linkID不相等,说明宣告路由器是一网段上的普通路由器,查询记录网段及指定路由器信息的数据结构中是否有该网段DR信息;
若没有,则结束返回;若有,则根据该接口获得网段指定路由器的ID,记为neighborRouterID,将neighborRouterID加入宣告路由器的单向邻居集合;
检查宣告路由器是否存在于neighborRouterID的单向邻居集合;
若是,在拓扑图中画出边;若没有,建立一条以linkID为DR接口的条目放入记录网段及指定路由器信息的数据结构,将未知的信息置空,并将宣告路由器放入该条目中的单向边关系的路由器集合中,标记其尚未记录DR单向邻居关系;
步骤A53,对于stub network类型,以linkData子网IP和linkID子网掩码,即以子网IP&子网掩码的结果为子网ID,建立一个子网结构,在拓扑图中画出该子网,并将其添加到所述区域号的子网OSPF报文列表中,画出宣告路由器与该子网之间边的关系;
步骤A54,对于virtual link类型,如果linkData是宣告路由器的一个接口,linkID是邻居路由器的ID,记为neighborRouterID,则将neighborRouterID加入宣告路由器的单向邻居集合,并检查宣告路由器是否存在于neighborRouterID的单向邻居集合,若是,在拓扑图中画出边;
步骤A55,重复执行步骤A5。
所述步骤B包括下列步骤:
步骤B1,在路由信息采集探针收到使拓扑改变的OSPF更新报文后,判断收到的OSPF链路状态广播报文类型,如果是RouterLSA,转向步骤B2;如果是NetworkLSA,转向步骤B6;否则结束返回;
步骤B2,获得该条RouterLSA的宣告路由器ID,及所在区域号,以宣告路由器及区域作为查询条件,找到同一宣告路由器最近的RouterLSA,记为oldRouterLSA;
步骤B3,遍历同一宣告路由器最近的oldRouterLSA中的每一条原链路,在新的RouterLSA中检索宣告该原链路的接口,并进行分析转到步骤B4处理,直到最后一条,然后转向步骤B5;
步骤B4,判断原链路的类型,并根据不同的类型进行不同的处理,然后转向步骤B3;
步骤B5,转向步骤A5进行分析处理;
步骤B6,NetworkLSA中的linkStateID和子网掩码相与之后,获得网段IP,查找记录网段及指定路由器信息的数据结构,找到该网段IP对应的条目,查看该网段原指定路由器信息,并进行分析处理;
步骤B7,转向步骤A7~A8进行处理。
所述步骤B3包括下列步骤:
步骤B31,若在当前的RouterLSA中没有检索到接口,说明宣告路由器接口减少,初步判定路由器接口出现故障,转入步骤B4;
步骤B32,如检索到接口但链路中内容不一致,包括链路类型、linkID或linkData不一致,则说明接口正常,但链路内容变化,转向步骤B4。
所述步骤B4包括下列步骤:
步骤B41,如果是点到点类型,则获得先前与宣告路由器建立起点到点链路的邻居路由器ID,即原链路中的linkID,从拓扑图中删掉边,并从宣告路由器和邻居路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息;
步骤B42,如果是transit network类型,则判断原链路中的linkID与linkData是否相等;
如果linkID与linkData相等,说明宣告路由器以前是一网段上的指定路由器,现在指定路由器发生改变,从记录网段及指定路由器信息的数据结构中找到与之对应的条目,在拓扑图中删除指定路由器在该网段与普通路由器建立的边,将该条目从记录网段及指定路由器信息的数据结构中删除;
如果linkID与linkData不等,说明宣告路由器以前是一网段上的普通路由器,通过linkID获得网段指定路由器接口,从记录网段及指定路由器信息的数据结构找到与之对应条目,从拓扑图中删除宣告路由器与指定路由器之间的边,并从宣告路由器和指定路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息,并从指定路由器的单向边关系的路由器集合和宣告路由器的单向邻居集合中删除宣告路由器相关信息;
步骤B43,如果是stub network类型,则获得先前与宣告路由器建立起边关系的子网IP,即原链路中的linkData&linkID,从拓扑图中删掉该边;
步骤B44,如果是virtual link类型,则获得先前与宣告路由器建立起虚链路的邻居路由器ID,即原链路中的linkID,从拓扑图中删掉边,并从宣告路由器和邻居路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息。
所述步骤B6中,所述分析处理,包括下列步骤:
步骤B61,若原指定路由器ID与宣告路由器ID相等,以宣告路由器及区域作为查询条件,找到同一宣告路由器最近的NetworkLSA,记为oldNetworkLSA,遍历oldNetworkLSA中的每个邻居路由器;
若邻居路由器ID没有出现在新NetworkLSA的邻居路由器中,则从拓扑图中删除宣告路由器到邻居路由器ID的边,并从宣告路由器和邻居路由器ID数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息;并且将邻居路由器ID从宣告路由器的单向邻居集合中删除;
若邻居路由器ID出现在新NetworkLSA的邻居路由器中,则继续,重复步骤B61;
步骤B62,若原指定路由器ID与宣告路由器ID不等,说明网段指定路由器改变,在拓扑图中删除原指定路由器在该网段与普通路由器建立的边,从宣告路由器和普通路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息,并将网段IP对应的条目从记录网段及指定路由器信息的数据结构中删除。
所述步骤C中,所述定位网络异常,包括下列步骤:
若路由器与先前的邻居路由器之间的边都断开,在拓扑图中孤立,则推断该路由器宕机或重启;
若路由器与先前的一邻居路由器之间的链路中断,则若所述路由器的RouterLSA报文导致链路中断,则推断所述路由器与先前的一邻居路由器之间的接口出现问题;若先前的一邻居路由器的RouterLSA报文导致链路中断,则推断先前的一邻居路由器与所述路由器之间的接口出现问题;若所述路由器和先前的一邻居路由器的RouterLSA报文都发生变化,则推断所述路由器与先前的一邻居路由器之间的网线出现问题;
若拓扑图中增加一条从一路由器到另一路由器的链路,则若所述路由器的RouterLSA报文导致链路增加,则推断所述路由器到所述另一路由器的接口开启;若所述另一路由器的RouterLSA报文导致链路增加,则推断所述另一路由器到所述路由器的接口开启;
若先前在同一个网段上的路由器集合中心节点改变,则推断该网段的指定路由器改变。
本发明的有益效果是:本发明的自治系统内网络异常定位的系统和方法,构建自治系统内拓扑,并且为每个路由器分区域维护一OSPF报文列表,通过比较两条同一路由器发出的同类型链路状态广播报文(LSA)发现自治系统内的拓扑变化,并且通过该变化推断网络异常事件的发生,包括路由器宕机、重启,链路的增加、中断,接口开启、关闭,网段DR改变等。本发明帮助网管人员发现网络拓扑变化,协助定位网络异常。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种自治系统内网络异常定位的系统和方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提出了一种利用开放最短路径优先协议的链路状态广播(OSPFLSA)定位自治系统内网络异常的系统和方法,其通过设置路由信息探针与自治系统的每个区域内的任一路由器建立OSPF邻居关系,构建自治系统内拓扑,并且为每个路由器维护一个OSPF报文列表,并在路由信息采集探针收到宣告路由器相同但报文其他内容不同的OSPF LSA报文后,与报文列表中同类型的链路状态广播(LSA)报文进行比较,发现自治系统内拓扑的变化,并且通过该变化推断网络异常事件的发生,包括路由器宕机、重起,链路的增加、中断,接口开启、关闭,网段指定路由器(Designated Router,DR)改变等。
下面详细说明本发明的一种自治系统内网络异常定位的系统,其包括路由信息采集探针5和分析单元2,其中:
所述路由信息采集探针5,用于通过物理上部署到自治系统1(AS)的OSPF区域(Area),通过隧道连通到网络中,与网络中每个OSPF区域的运行OSPF协议的路由器6建立邻接关系,实时被动地采集在该OSPF区域泛洪的链路状态广播(OSPF LSA)报文,并将采集到的链路状态广播报文发送给分析单元2。
所述分析单元2,用于根据路由信息采集探针5采集的OSPF链路状态广播(LSA)报文构建拓扑,并在拓扑构建完成之后,根据路由信息采集探针5收到的使拓扑改变的OSPF更新报文发现拓扑的变化,然后结合OSPF协议定位网络异常。
较佳地,所述分析单元2,包括构建模块21、更新模块22和判断模块23,其中:
所述构建模块21,用于根据路由信息采集探针5采集发来的自治系统1内各个区域的OSPF链路状态广播(LSA)报文,如果该报文为自治系统1中的宣告路由器第一次发出的OSPF链路状态广播(LSA)报文,则构建拓扑,并根据拓扑的数据结构得到OSPF报文列表。
所述更新模块22,用于在拓扑构建完成之后,根据路由信息采集探针5采集到的OSPF更新报文(OSPF Update),对接收到的OSPF Router LSA,OSPF Network LSA报文进行解析,根据报文内容及拓扑的边关系,更新拓扑中的节点或者边的信息。
所述判断模块23,用于通过比较新收到的链路状态广播(LSA)报文和所述OSPF报文列表中同一宣告路由器发出的相同区域内的最近一条同类型链路状态广播(LSA)报文,判断自治系统1内拓扑的变化,并结合该变化及OSPF协议分析,定位自治系统1内的网络异常事件。
所述异常事件包括路由器宕机、重启,链路的增加、中断,接口开启、关闭,网段指定路由器(DR)改变等。
路由信息采集探针5需要模拟实现完整的开放最短路径优先协议(OSPF协议),能够运行开放最短路径优先路由协议的状态机,能够与真实路由器建立OSPF会话并交换OSPF路由更新报文,这个可以通过现有的开源路由软件GNU Zebra来实现。
通过开源路由软件GNU Zebra实现路由信息采集探针5是一种现有技术,本领域技术人员根据本发明实施例描述的内容,能够实现该路由信息采集探针5,因此,在本发明实施例中,不再一一详细描述。
为了实现本发明的路由信息采集探针5被动采集的目的,即路由信息采集探针5与真实路由器6建立起OSPF会话之后,只是被动地接受对方发送过来的OSPF更新报文,因此,本发明的路由信息采集探针5,除了按照OSPF协议规范,为了维持与对方路由器的邻居关系而发送的周期性Keep Alive报文外,不向网络中注入其他任何报文,从而不影响网络现有的路由状况,从而达到被动采集的目的。
网络采集设备通过遂道的方式参与到多个自治系统1的OSPF协议交互中,获取各OSPF区域的链路状态数据库信息。路由信息采集探针5通过物理部署到自治系统1(AS)的每个运行开放最短路径优先路由协议(OSPF)区域(Area)中的方式,或者仅物理部署到一自治系统1(AS)的一OSPF区域(Area)中,通过隧道(tunnel,例如GRE)连通到网络中其他OSPF区域中的方式,来与网络中每个特定OSPF区域(Area)的任何一台运行OSPF协议的路由器6建立邻接(Adjacency)关系,实时被动地采集在该OSPF区域(Area)泛洪的链路状态广播(LSA)报文。
对于实时采集到的链路状态宣告(LSA)报文,为每个路由器6维护一个OSPF报文列表,分区域记录该路由器6产生的最新OSPF RouterLSA和OSPFNetworkLSA。
较佳地,为了实现路由信息采集探针5与上层分析单元2有效结合的目的,所述自治系统1内网络异常定位的系统还包括报文区分模块4,用于区分路由信息采集探针5和分析单元2之间传输的报文类型。所述报文类型一类是路由信息采集探针5通过与网络中的OSPF路由器6建立邻居关系而得到的路由更新报文;另一类是路由采集探针所发送的与网络中OSPF路由器6之间的邻居关系建立或者丢失的应用层控制报文。
更佳地,所述自治系统1内网络异常定位的系统还进一步包括配置模块3,用于对路由信息采集探针5覆盖范围内的路由器6进行OSPF配置,使路由信息采集探针5与自治系统1内建立隧道的路由器6建立起OSPF全邻接关系,采集到区域内各路由器6的报文信息。
对路由信息采集探针5覆盖范围内的路由器6进行正确OSPF配置。在路由信息采集探针5覆盖范围内的路由器6进行的正确信息交互的前提下,保证采集器能收到全面的OSPF信息。需要在自治系统1内进行OSPF配置,分两种情况:
若采集探针与被监测路由器6属于同一区域,用network命令将采集器的某个接口加入到该区域;使采集探针与区域内的路由器6建立起OSPF全邻接关系,采集到区域内各路由器6的报文信息。
若采集探针与被监测路由器6属于不同区域,先在探针上建立隧道(tunnel),再用network命令将该隧道加入到被监测区域,使采集探针与区域内的路由器6建立起OSPF全邻接关系,采集到区域内各路由器6的报文信息。
下面详细说明本发明的一种自治系统内网络异常定位的方法,其包括如下步骤:
步骤S100,将路由信息采集探针通过物理上部署到自治系统1的OSPF区域中,实时被动地采集在该OSPF区域泛洪的链路状态广播(LSA)报文,并传输给分析单元2;
路由信息采集探针5通过物理上部署到自治系统1(AS)的某个OSPF区域(Area)中,通过隧道(tunnel,例如通用路由封装(Generic RoutingEncapsulation,GRE)连通到网络中其他OSPF区域(Area)中方式,来与网络中每个特定OSPF区域(Area)的任何一台运行开放最短路径优先(OSPF)协议的路由器6建立邻接(Adjacency)关系,实时被动地采集在该OSPF区域(Area)泛洪(Flooding)的链路状态广播(LSA)报文,将收集到的OSPF更新(OSPF Update)报文发向分析单元2。
步骤S200,分析单元根据采集到的OSPF链路状态广播(LSA)报文,如果该报文为自治系统1中的宣告路由器第一次发出的OSPF链路状态广播(LSA)报文,则构建拓扑,并根据拓扑的数据结构为每个路由器维护一个OSPF报文列表;
分析单元2根据路由信息采集探针5发上来的一个自治系统1内各个区域的OSPF报文,构建拓扑,并根据拓扑的数据结构,对于实时采集到的链路状态广播报文,分析单元2为每个路由器6分区域维护其OSPF报文列表,分区域记录该路由器6产生的最新OSPF Rounter LSA和OSPF Network LSA。
所述数据结构包括:
A)自治系统数据结构ASInfo_Class:其包括该自治系统内区域列表,路由器列表,子网列表;
B)路由器信息数据结构RouterInfo_Class:其包括路由器ID,类型,接口列表,OSPF RouterLSA列表,OSPF NetworkLSA列表,单向邻居集合,双向邻居集合;
C)记录网段及指定路由器(DR)信息的数据结构TransitnetMap:包括网段IP,DR接口,DR路由器ID,通过该网段上普通路由器发出的RouterLSA与指定路由器(DR)建立单向边关系的路由器集合NormalRouterSet,通过DR的NetworkLSA获得该网段上普通路由器放入宣告路由器的单向邻居集合AttachedRouterSet。
进一步地,所述步骤S200,其包括下列步骤:
步骤S210,收到一条链路状态广播(LSA)报文后,如果该报文为自治系统1中的宣告路由器第一次发出的OSPF链路状态广播(LSA)报文,则通过链路状态广播报文内容获得宣告路由器所在区域号(areaID),在自治系统1所维护的区域列表中检索所述区域号(areaID);若检索到,转向步骤S220;否则,转向步骤S230;
步骤S220,判断收到的OSPF的链路状态广播(LSA)报文类型,如果是RouterLSA,则转向步骤S240;如果是NetworkLSA,则转向步骤S260;否则,结束返回;
步骤S230,建立一个以所述区域号(areaID)为区域号的区域结构,写入自治系统1所维护的区域OSPF报文列表中,转向步骤S220;
步骤S240,以宣告路由器ID为路由器ID建立路由器结构,并根据RouterLSA中宣告的路由器类型填充路由器结构,并根据路由器ID和类型在拓扑图中画出该路由器,并将其添加到所述区域号(areaID)的路由器OSPF报文列表中,转向步骤S250;
步骤S250,遍历RouterLSA中的每条链路(link),记录到该路由器以所述区域号(areaID)为索引的OSPF RouterLSA报文列表中,分类型处理,直到最后一条,然后结束返回;
进一步地,所述步骤S250中,所述分类型处理,包括下列步骤:
步骤S251,对于点到点(point-to-point)类型,如果linkData是宣告路由器的一个接口,linkID是邻居路由器的ID,记为neighborRouterID,则将neighborRouterID加入宣告路由器的单向邻居集合,并检查宣告路由器是否存在于neighborRouterID的单向邻居集合,若是,在拓扑图中画出边;否则,结束返回;
步骤S252,对于transit network类型,如果linkData是宣告路由器的一个接口,linkID是宣告路由器所在网段DR的接口,则:
a)若linkData与linkID相等,说明宣告路由器是一网段上的指定路由器(DR),从数据结构TransitnetMap中检索相应的指定路由器(DR)条目,若检索到,则填充相应信息,并为宣告路由器的单向邻居集合AttachedRouterSet中所有路由器6建立它们与指定路由器(DR)的单向邻居关系;若没有检索到,将该接口和宣告路由器ID放入数据结构TransitnetMap;
b)若linkData与linkID不相等,说明宣告路由器是一网段上的普通路由器,查询数据结构TransitnetMap中是否有该网段DR信息;
若没有,则结束返回;若有,则根据该接口获得网段指定路由器(DR)的ID,记为neighborRouterID,将neighborRouterID加入宣告路由器的单向邻居集合;
检查宣告路由器是否存在于neighborRouterID的单向邻居集合;
若是,在拓扑图中画出边;若没有,建立一条以linkID为DR接口的条目放入数据结构TransitnetMap,将未知的信息置空,并将宣告路由器放入该条目中的单向边关系的路由器集合NormalRouterSet中,标记其尚未记录DR单向邻居关系;
步骤S253,对于stub network类型,以linkData子网IP和linkID子网掩码,即以子网IP&子网掩码的结果为子网ID,建立一个子网结构,在拓扑图中画出该子网,并将其添加到所述区域号(areaID)的子网OSPF报文列表中,画出宣告路由器与该子网之间边的关系;
步骤S254,对于virtual link类型,如果linkData是宣告路由器的一个接口,linkID是邻居路由器的ID,记为neighborRouterID,则将neighborRouterID加入宣告路由器的单向邻居集合,并检查宣告路由器是否存在于neighborRouterID的单向邻居集合,若是,在拓扑图中画出边;
步骤S255,重复执行步骤S250。
步骤S260,以宣告路由器ID为路由器ID建立路由器结构,根据路由器ID在拓扑图中画出该路由器,并将其添加到所述区域号(areaID)的路由器列表中;
步骤S270,查找数据结构TransitnetMap中是否有该指定路由器(DR)信息;
若没有,创建一个新条目,将网段、DR接口、DR路由器ID信息填入;
若已经存在,则填补信息空缺处,同时为单向边关系的路由器集合NormalRouterSet中的路由器6添加宣告路由器的单向邻居关系;
步骤280,遍历NetworkLSA中的邻居路由器attached Router,记录到该路由器以所述区域号(areaID)为索引的OSPF NetworkLSA报文列表中,直到最后一条。
遍历NetworkLSA中的邻居路由器attached Router,获得每个邻居路由器attached Router的路由器ID,记为attachedRouterID,将attachedRouterID加入宣告路由器的单向邻居集合AttachedRouterSet,并检查宣告路由器是否存在于attachedRouterID的单向邻居集合;若是,在拓扑图中画出边;否则,重复执行步骤S280。
在本发明分析单元2中,只有宣告自己的OSPF报文才能足以说明宣告路由器的真实存在,在其他报文中被指为邻居路由器的信息不能用来构建一个路由器。而且,边的构建依赖于双方的宣告,而不是单方面的。每个路由器会维护一OSPF报文列表,以区域为索引,记录该路由器在该区域内产生的最新OSPF RouterLSA和OSPF NetworkLSA内容。路由信息采集探针5收集到的报文顺序不可控,该拓扑生成阶段不要求特定的报文顺序,从而能在任何报文顺序下构建出正确的拓扑。
步骤S300,在拓扑构建完成之后,如果路由信息采集探针又收到OSPF更新报文,则分析单元利用该OSPF链路状态广播(LSA)报文与OSPF报文列表中同类型的链路状态广播(LSA)报文进行比较,根据OSPF更新报文(OSPF Update)发现更新拓扑的变化;
在拓扑构建完成之后,路由信息采集探针5又收到使拓扑改变的OSPF更新报文(OSPF Update),即收到的OSPF链路状态广播(LSA)报文是宣告路由器相同但其他内容不同的OSPF链路状态广播(LSA)报文,则分析处理而发现更新拓扑的变化。
进一步地,步骤S300具体包括如下步骤:
步骤S310,在路由信息采集探针收到使拓扑改变的OSPF更新报文后,判断收到的OSPF链路状态广播(LSA)报文类型,如果是RouterLSA,转向步骤S320;如果是NetworkLSA,转向步骤S360;否则结束返回;
步骤S320,获得该条RouterLSA的宣告路由器ID,及所在区域号(areaID),以宣告路由器及区域作为查询条件,找到同一宣告路由器最近的RouterLSA,记为oldRouterLSA;
步骤S330,遍历同一宣告路由器最近的oldRouterLSA中的每一条原链路oldlink,在新的RouterLSA中检索宣告这条链路(link)的接口(interface),并进行分析后转到步骤S340处理,直到最后一条,然后转向步骤S350;
进一步地,所述步骤S330包括下列步骤:
步骤S331,若在当前的RouterLSA中没有检索到接口(interface),说明宣告路由器接口减少,初步判定路由器6接口出现故障,转入步骤S340;
步骤S332,如检索到接口(interface)但链路(link)中内容不一致,包括链路类型、linkID或linkData不一致,则说明接口(interface)正常,但链路内容变化,转向步骤S340。
步骤S340,判断原链路oldlink的类型,并根据不同的类型进行不同的处理,然后转向步骤S330;
进一步地,所述步骤S340包括下列步骤:
步骤S341,如果是点到点(point-to-point)类型,则获得先前与宣告路由器建立起点到点(point-to-point)链路的邻居路由器ID,即原链路oldlink中的linkID,从拓扑图中删掉边,并从宣告路由器和邻居路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息;
步骤S342,如果是transit network类型,则判断原链路oldlink中的linkID与linkData是否相等;
如果linkID与linkData相等,说明宣告路由器以前是一网段上的指定路由器(DR),现在指定路由器(DR)发生改变,从数据结构TransitnetMap中找到与之对应的条目,在拓扑图中删除指定路由器(DR)在该网段与普通路由器建立的边,将该条目从数据结构TransitnetMap中删除;
如果linkID与linkData不等,说明宣告路由器以前是一网段上的普通路由器,通过linkID获得网段指定路由器(DR)接口,从数据结构TransitnetMap找到与之对应条目,从拓扑图中删除宣告路由器与指定路由器(DR)之间的边,并从宣告路由器和指定路由器(DR)数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息,并从指定路由器(DR)的单向边关系的路由器集合NormalRouterSet和宣告路由器的单向邻居集合AttachedRouterSet中删除宣告路由器相关信息;
步骤S343,如果是stub network类型,则获得先前与宣告路由器建立起边关系的子网IP,即原链路oldlink中的linkData&linkID,从拓扑图中删掉该边;
步骤S344,如果是virtual link类型,则获得先前与宣告路由器建立起虚链路的邻居路由器ID,即原链路oldlink中的linkID,从拓扑图中删掉边,并从宣告路由器和邻居路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息。
步骤S350,转向步骤S250进行分析处理;
步骤S360,NetworkLSA中的linkStateID和子网掩码相与之后,获得网段IP,查找数据结构TransitnetMap,找到该网段IP对应的条目transitNetInfo,查看该网段原指定路由器(DR)信息,并进行分析处理;
进一步地,所述步骤S360中,进行分析处理,包括下列步骤:
步骤S361,若原DR路由器ID与宣告路由器ID相等,以宣告路由器及区域作为查询条件,找到同一宣告路由器最近的NetworkLSA,记为oldNetworkLSA,遍历oldNetworkLSA中的每个邻居路由器attachedRouterID;
a)若attachedRouterID没有出现在新NetworkLSA的邻居路由器AttachedRouter中,则从拓扑图中删除宣告路由器到attachedRouterID的边,并从宣告路由器和attachedRouterID数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息;并且将attachedRouterID从宣告路由器的单向邻居集合AttachedRouterSet中删除;
b)若attachedRouterID出现在新NetworkLSA的邻居路由器attachedRouter中,则继续重复步骤S361;
步骤S362,若原指定路由器(DR)ID与宣告路由器ID不等,说明网段指定路由器(DR)改变,在拓扑图中删除原指定路由器(DR)在该网段与普通路由器建立的边,从宣告路由器和普通路由器数据结构中的单向邻居集合和双向邻居集合中删掉彼此的信息,并将网段IP对应的条目transitNetInfo从数据结构TransitnetMap中删除。
步骤S370,转向步骤S270~S280进行处理。
该阶段通过比较同一宣告路由器发出的不同内容的同类报文,对上层拓扑图及底层数据结构进行更新,并能定位出网络拓扑变化,供定位故障。
步骤S400,根据OSPF更新报文发现拓扑变化之后,结合开放最短路径优先协议(OSPF协议)定位网络异常。
根据OSPF更新报文(OSPF Update)发现拓扑变化之后,分析单元2结合OSPF协议定位网络异常,如路由器宕机、重启,链路的增加、中断,接口开启、关闭,网段指定路由器(DR)改变。
进一步地,所述步骤S400中定位网络异常,包括下列步骤:
步骤S410,若路由器与先前的邻居路由器之间的边都断开,在拓扑图中孤立,则推断该路由器宕机或重启;
步骤S420,若路由器A与先前的某一邻居路由器B之间的链路中断,则:
A1)若路由器A的RouterLSA报文导致链路中断,则推断路由器A与路由器B之间的接口出现问题;
B1)若路由器B的RouterLSA报文导致链路中断,则推断路由器B与路由器A之间的接口出现问题;
C1)若路由器A和B的RouterLSA报文都发生变化,则推断路由器A与B之间的网线出现问题;
步骤S430,若拓扑图中增加一条从路由器A到路由器B的链路,则:
A2)若路由器A的RouterLSA报文导致链路增加,则推断路由器A到B的接口开启;
B2)若路由器B的RouterLSA报文导致链路增加,则推断路由器B到A的接口开启;
步骤S440,若先前在同一个网段上的路由器集合中心节点改变,则推断该网段的指定路由器(DR)改变。
根据以上推断给出告警信息,便于网管人员定位、排查网络异常故障。
本发明的自治系统内网络异常定位系统和方法,利用OSPF链路状态广播(LSA)报文定位自治系统内网络异常,其通过路由信息采集探针5与每个区域内的任一路由器建立OSPF邻居关系,将收集到的OSPF更新报文(OSPFUpdate)发向分析单元2,分析单元2对接收到的OSPF Router LSA,OSPFNetwork LSA进行解析,根据报文内容及“双向”建立边关系原则,构建拓扑中节点或边的信息。该发明不依赖于OSPF LSA报文顺序,能在包乱序的情况下构建正确的拓扑,并为每个路由器分区域维护OSPF报文列表。本发明通过比较新收到的LSA和OSPF报文列表中同一宣告路由器发出的相同区域内的最近的一条同类型链路状态广播(LSA)报文,判断自治系统内拓扑的变化,并结合该变化及OSPF协议分析,定位自治系统内网络异常事件,包括路由器宕机、重起,链路的增加、中断,接口开启、关闭,网段DR改变等,帮助网管人员发现网络拓扑变化,协助定位网络异常。
通过以上结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。