本发明涉及动态路由技术,尤指一种实现链路状态通告处理的方法及装置。
背景技术:
动态路由协议主要分为距离矢量路由算法和链路状态路由算法两种。距离矢量路由算法包括路由信息协议(RIP,Routing Information Protocol)和边界网关协议(BGP,Border Gateway Protocol);链路状态路由算法包括开放式最短路径优先(OSPF,Open Shortest Path First)和中间系统-中间系统(ISIS,Intermediate System-to-Intermediate System)。
在距离矢量路由算法中,每一台路由器维护一张表,表中列举了当前已知的到每个目标的最佳路径,这些表通过邻居之间的相互交换信息而不断被更新,最终每台路由器都有到达每个目的地的最佳路径。由于距离矢量路由算法存在一定的缺点,比如当网络拓扑结构发生变化后距离矢量算法需要太长时间才能收敛到稳定状态,由此逐渐出现了链路状态路由算法。在链路状态路由算法中,通过发送和接收打招呼(HELLO)报文来发现邻居,邻居之间进行链路状态数据库(LSDB,Link State Database)的同步,本地路由器利用同步完成的LSDB来构造最短路径优先(SPF,Shortest Path First)树,最终计算出到达每一个目的地址的无环最佳路径。链路状态数据库同步完成后,两端路由器链路状态数据库一致,运行SPF将保证计算出来的最优路径不会形成路由环路。
在计算最优路径过程中,可能出现链路状态数据库不同步的问题,例如、由于一端路由器的内存使用达到最大值,没有额外的内存存储新接收的链路状态通告,导致两端路由器链路状态数据库不同步;此时,运行SPF计算出的最优路径过程中形成了路由环路,无法完成数据报文传输。图1是由四台路由器形成的组网环境,如图1所示,路由器2连接路由器4的链路接口花 费值为10,其余链路接口花费值都为1。路由器4通告目的地D,在链路状态数据库一致的情况下,路由器1运行SPF计算到达D的最优路径是经过路由器3到达路由器4,路由器2运行SPF计算到达D的最优路径是经过路由器1、路由器3到达路由器4。假设路由器1中的内存使用到达最大值,没有多余的存储空间将路由器3通告的路由器链路状态通告存储到自身数据库中;此时,路由器1运行SPF计算到达D的最优路径是经过路由器2的路径1,而路由器2运行SPF计算到达D的最优路径是经过路由器1、路由器3到达路由器4的路径2,路由器1发往目的地D的数据报文会发往路由器2,而路由器2会将目的地为D的数据报文发往路由器1,发往目的地D的数据报文会在路由器1和路由器之间来回传递直至生存时间为0,即出现了路由环路。路由环路造成数据报文无法传输到目的路由,影响数据报文的正常传输。
技术实现要素:
为了解决上述技术问题,本发明提供一种实现链路状态通告处理的方法及装置。能够避免由于存储LSA失败造成SPF计算出现路由环路。
为了达到本发明目的,本发明提供了一种实现链路状态通告处理的方法,包括:
路由器存储链路状态通告LSA失败时,生成添加有区分标识的LSA;
将添加区分标识的LSA洪泛到网络中的其他路由器中,以使其他路由器在运行最短路径优先SPF计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中。
进一步地,生成添加有区分标识的LSA时,该方法还包括:
设置所述存储LSA失败的路由器进入等待wait状态,并根据存储LSA失败的次数设置相应的等待时长,在等待时长到达时,重新存储所述存储失败的LSA;
所述等待时长小于预设设置的最大时长阈值。
进一步地,根据存储LSA失败的次数设置相应的等待时长具体包括:
预先设定单位等待时长,根据存储LSA失败的次数设置相应的等待时 长;
所述等待时长等于存储LSA失败的失败次数与预先设定的单位等待时长的乘积。
进一步地,当存储LSA失败的次数大于1时,通过指数退避机制进行设置所述等待时长。
进一步地,重新存储所述存储失败的LSA具体包括:
所述等待时长到达时,所述存储LSA失败的路由器退出等待wait状态;
当所述存储失败的LSA来自其他路由器时,接收其他路由器重传的存储失败的LSA并存储;
当所述存储失败的LSA为路由器自身生成的LSA时,路由器重新生成存储失败的LSA并存储。
另一方面,本申请还提供一种实现链路状态通告处理的装置,包括:生成单元和洪泛单元;其中,
生成单元,用于在路由器存储LSA失败时,生成添加有区分标识的LSA;
洪泛单元,用于将添加区分标识的LSA洪泛到网络中的其他路由器中,以使其他路由器在运行SPF计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表。
进一步地,该装置还包括等待设置单元和重新存储单元,
等待设置单元,用于生成单元生成所述添加有区分标识的LSA时,设置所述存储LSA失败的路由器进入wait等待状态,并根据存储LSA失败的次数设置相应的等待时长;
重新存储单元,用于在等待时长到达时,所述重新存储所述存储失败的LSA;
所述等待时长小于预设设置的最大时长阈值。
进一步地,等待时长等于存储LSA失败的失败次数与预先设定的单位等待时长的乘积。
进一步地,等待设置单元具体用于,生成单元生成所述添加有区分标识 的LSA时,设置所述存储LSA失败的路由器进入wait等待状态,
存储LSA失败的次数为1时,设置预先设定单位等待时长乘积作为等待时长;
当存储LSA失败的次数大于1时,所述等待时长通过指数退避机制设置所述等待时长。
进一步地,重新存储单元具体用于,
所述等待时长到达时,所述存储LSA失败的路由器退出wait等待状态;
当所述存储失败的LSA来自其他路由器时,接收其他路由器重传的存储失败的LSA并存储;
当所述存储失败的LSA为路由器自身生成的LSA时,路由器重新生成存储失败的LSA并存储。
与现有技术相比,本申请技术方案包括:路由器存储LSA失败时,生成添加有区分标识的LSA;将添加区分标识的LSA洪泛到网络中的其他路由器中,以使其他路由器在运行SPF计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表。本发明方法通过存储LSA失败时,生成添加有区分标识的LSA,使其他路由器在运行SPF计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中,避免了存储LSA失败造成路由环路,保证了数据报文的正常传输。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是由四台路由器形成的组网环境;
图2为本发明实现链路状态通告处理的方法的流程图;
图3为本发明实现链路状态通告处理的装置的结构程图;
图4为本发明第一实施例存储LSA失败时处理方法的流程图;
图5为路由器从处于wait状态到退出wait状态的方法的流程图;
图6为本发明第三实施例的方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图2为本发明实现链路状态通告处理的方法的流程图,如图2所示,包括:
步骤200、路由器存储链路状态通告(LSA)失败时,生成添加有区分标识的LSA;
需要说明的是,存储LSA失败可以通过路由器反馈的参数信息确定;在生成的LSA上添加区分标识,可以在LSA未使用的数据帧上添加区分标识,例如、在LSA长度帧后面未使用的数据帧上添加OVER作为区分标识,也可以在生成的LSA上扩展一个新的数据帧,用于添加区分标识,添加区分标识的方法为本领域技术人员的惯用技术手段;
步骤201、将添加区分标识的LSA洪泛到网络中的其他路由器中,以使其他路由器在运行最短路径优先(SPF)计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中。
生成添加有区分标识的LSA时,本发明方法还包括:
设置所述存储LSA失败的路由器进入等待(wait)状态,并根据存储LSA失败的次数设置相应的等待时长;
在等待时长到达时,重新存储所述存储失败的LSA;
等待时长小于预设设置的最大时长阈值。
优选的,等待时长等于存储LSA失败的失败次数与预先设定的单位等待时长的乘积。
需要说明的是,单位等待时长为本领域技术人员的经验值,一般默认为 200毫秒。最大时长阈值也是根据本领域技术人员的经验值进行设定。修改等待时长可以通过退避算法实现。
优选的,当存储LSA失败的次数大于1时,所述等待时长通过指数退避机制进行设置。
优选的,重新存储所述存储失败的LSA具体包括:
等待时长到达时,存储LSA失败的路由器退出wait等待状态;
当所述存储失败的LSA来自其他路由器时,接收其他路由器重传的存储失败的LSA并存储;
当存储失败的LSA为路由器自身生成的LSA时,路由器重新生成存储失败的LSA并存储。
需要说明的是,完成存储失败的LSA的存储后,按照现有的方法,路由器将反馈存储完成的信息到网络中的其他路由器,以使其他路由器在进行SPF计算时,将重新存储LSA的路由器添加到SPF树中,计算最优路径。
本发明方法通过存储LSA失败时,生成添加有区分标识的LSA,使其他路由器在运行SPF计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中,避免了存储LSA失败造成路由环路,保证了数据报文的正常传输。图3为本发明实现链路状态通告处理的装置的结构程图,如图3所示,包括:生成单元和洪泛单元;其中,
生成单元,用于在路由器存储LSA失败时,生成添加有区分标识的LSA;
洪泛单元,用于将添加区分标识的LSA洪泛到网络中的其他路由器中,以使其他路由器在运行SPF计算最优路径将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中。
本发明装置还包括等待设置单元和重新存储单元,
等待设置单元,用于生成单元生成所述添加有区分标识的LSA时,设置所述存储LSA失败的路由器进入wait等待状态,并根据存储LSA失败的次数设置相应的等待时长。
优选的,等待时长等于存储LSA失败的失败次数与预先设定的单位等待 时长的乘积。
等待设置单元具体用于,生成单元生成所述添加有区分标识的LSA时,设置所述存储LSA失败的路由器进入wait等待状态,
存储LSA失败的次数为1时,设置预先设定单位等待时长乘积作为等待时长;
当存储LSA失败的次数大于1时,所述等待时长通过指数退避机制设置。
重新存储单元,用于在等待时长到达时,所述重新存储所述存储失败的LSA;
等待时长小于预设设置的最大时长阈值。
重新存储单元具体用于,
等待时长到达时,存储LSA失败的路由器退出wait等待状态;
当存储失败的LSA来自其他路由器时,接收其他路由器重传的存储失败的LSA并存储;
当存储失败的LSA为路由器自身生成的LSA时,路由器重新生成存储失败的LSA并存储。
以下通过具体实施例对本发明方法进行清楚详细的说明,实施例仅用于陈述本发明,并不用于限定本发明方法的保护范围。
实施例1
本实施例以存储LSA失败为例对本发明方法进行清楚详细的说明,本实施例中存储失败的LSA可以是接收的来自网络中其他路由器的LSA,也可以是路由器自身生成的LSA。存储失败的原因可能是路由器的内存达到最大值。
图4为本发明第一实施例存储LSA失败时处理方法的流程图,如图4所示,包括:
步骤400、存储LSA失败时,判断路由器是否处于wait状态,如果未处于wait状态,则执行步骤4010;否则执行步骤4020.
步骤4010、生成添加有区分标识的LSA并洪泛到网络中的其他路由器, 设置wait状态的等待时长为单位等待时长;
其他路由器接收到带区分标识的LSA后,构造SPF树将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中,即其他路由器不会将存储失败路由器作为转发下一跳路由器。
步骤4020、如果路由器处于wait状态,判断等待时长是否等于最大时长阈值,不是执行步骤4021;否则,执行4022;
步骤4021、通过指数退避机制,设置存储LSA失败的次数与单位等待时长乘积作为等待时长。
步骤4022、保持等待时长等于最大时长阈值不变。
实施例2
图5为路由器从处于wait状态到退出wait状态的方法的流程图,如图5所示,包括:
步骤500、等待时长未到达,路由器处于wait状态;
步骤501、等待时长到达,路由器退出wait状态;
步骤502、路由器重新存储存储失败的LSA,存储完成后生成不带区分标识的LSA到其他路由器,以使其他路由器运行SPF计算最优路径时将邻居路由器添加到SPF候选列表中。即其他路由器可以考虑将邻居路由器作为转发下一跳路由器。
实施例3
路由器洪泛添加区分标识的LSA到网络中的其他路由器,其他路由器在运行SPF计算最优路径的流程需要进行相应的修改,将生成添加有区分标识的LSA的路由器添加到SPF树时,不将邻居路由器添加到SPF候选列表中,从而保证了其他路由器不再将存储LSA失败路由器作为转发下一跳路由器,避免了可能出现的路由环路。图6为本发明第三实施例的方法流程图,如图6所示,包括:
步骤600、运行SPF的路由器将自身添加到最优路径的候选列表中,花费值为0;
步骤601、从候选列表中,选取花费值最小的路由器,并将该路由器添加到SPF树中。
步骤602、判断路由器的LSA带有区分标识;不是,执行步骤603;是,返回步骤601;
步骤603、处理邻居路由器的链接。
步骤604、判断路由器的链接检查通过;是,执行步骤6050;不是,执行步骤6060。
步骤6050、计算根路由器到达邻居路由器的下一跳路由器N的花费值。这里,路由器N为下一跳。
步骤6060、判断是否存在其他未处理邻居路由器的链接;是,返回步骤603;不是,执行步骤60521。
步骤6051、判断邻居路由器已经在候选列表中;不是,执行60520;是,执行60530;
步骤60520、将邻居路由器添加到候选列表中。
步骤60521、判断是否还有未处理的邻居路由器链路;是,返回步骤603;不是,执行步骤60522;
步骤60522、判断候选列表为空;是,执行步骤60523;不是,返回步骤601。
步骤60523、SPF计算结束;
步骤60530、判断计算的花费值小于已知花费值;是,执行步骤605310;不是,执行步骤605320。
步骤605310、将邻居路由器的花费值修改为计算根路由器到达邻居路由器的下一跳的花费值,确定下一跳为路由器N。之后执行步骤60521。
步骤605320、判断花费值等于已知花费值;是,执行步骤605321;不是,返回步骤6060。
步骤605321、添加下一条到邻居路由器已知下一跳列表后,继续执行步骤6060。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。