一种避免冗余Flood的方法

文档序号:7623740阅读:343来源:国知局
专利名称:一种避免冗余Flood的方法
技术领域
本发明涉及网络通信技术领域,尤其涉及一种避免冗余Flood的方法。
背景技术
OSPF(开放最短路径优先协议)是运行于IP(网际协议)之上的协议,它没有利用TCP(传输控制协议)进行报文的传输,因此保证报文的可靠传输就成为OSPF协议的一部分。目前OSPF协议可以充分保证报文的可靠传输,但是在两台路由器之间存在多条并行链路的情况下却会出现传输冗余的情况。并行链路的数量越多,冗余传输的情况也就越严重。如果能够避免冗余的传输,那就能很大地提高路由器的处理效率。
OSPF的网络类型P2P,NBMA,Broadcast。P2P就是点到点类型,意思是一条链路只能使两台路由器通信。NBMA和Broadcast(广播网)的行为是一致的,这种网络中的路由器分为三种角色(以一个广播网为例)DR(一定会有且仅一个),BDR(是DR的备份路由器,DR坏了BDR就自动成为DR了,不一定有,但最多只能一个),DRother(数量没有限制,可以有,可以没有)。DR、BDR、DRother的概念仅存在于NBMA和Broadcase网络中,P2P中不存在也没有对应的角色。DR、BDR是路由器自动选举产生的,DRother就是除去DR和BDR的路由器了。
显式ACK在任何类型的网络上,如果路由器A给B发送一个LSA,然后B回给A一个ACK报文的话,这种确认的方式叫做显式ACK。
隐式ACK在NBMA和Broadcast类型的网络上,如果DRother给DR发送一个LSA,协议规定DR只能给DRother回那个收到的LSA,这种类型叫做隐式ACK。
根据OSPF标准(RFC2328),一台路由器收到一条LSA(链路状态通告)后应该向所有其它邻居Flood。接收端在收到LSA后会发送一个ACK给发送端。如果发送端在一定时间内没有收到确认,它会把LSA再Flood一次,直到收到ACK为止。这样一个Flood周期就完成了。
图1中的拓扑结构,Flood LSA的过程如图2所示,RTA和RTB都运行OSPF协议,它们之间有三条并行链路,对应的接口分别为s0、s1和s2。假设RTB向RTA Flood一条LSA,根据OSPF标准,LSA会分别从RTB的接口s0、s1、s2向RTA Flood;RTA会分别从三个接口收到三份相同的LSA,再假设s0接口的LSA先到达RTA,RTA会把该LSA从其接口s1、s2给Flood回RTB,然后再从接口s0发一个ACK给RTB,通知RTB在接口s0上发送的LSA已经收到了;接下来RTB从s1、s2 Flood出来的LSA也陆续到达RTA,RTA会认为这两个LSA是重复的LSA,它会分别在s1、s2发送一个ACK告诉RTB从上述两个接口Flood的LSA已经收到了。

发明内容
从图2可以看到,三个并行链路的情况下,两台路由器报文发送总的次数共六次。事实上,在图1中的两台路由器之间冗余Flood的发送有两次分别是RTA收到RTB Flood过来的LSA后又分别从接口s1和s2把该LSA Flood回去,在图2中用虚线显示。如果RTA不Flood这两条LSA,那么RTA和RTB都能提高2/6(33%)的效率。而且并行链路越多,冗余Flood的LSA越多。四条链路会冗余Flood 3条LSA,浪费的效率是3/8(37%)。随着链路的增加,冗余Flood的LSA就越多,浪费的效率会越来越趋近于50%。
本发明的发明目的是提供一种避免冗余Flood的方法,通过本发明,通过本发明,可以消除冗余Flood的LSA,利用本发明可以有效减少报文的Flood,同时减少报文的接收处理,降低了带宽的占用。
本发明的目的是通过以下技术方案实现的一种避免冗余Flood的方法,适用于开放最短优先路径OSPF多链路情况,该方法包括A.路由器的一个接口收到一个链路状态广播LSA,查询所述LSA的发送方,记录所述发送方的标识Router-id;B.遍历所述路由器所有的接口下的所有的邻居,每一次遍历过程中,如果当前的邻居满足特定条件,则不向该邻居Flood LSA。
所述的一种避免冗余Flood的方法,步骤A中所述的LSA,是所述路由器接口收到的比自己数据库中更新的、非所述路由器接口生成的链路状态广播LSA。
所述的一种避免冗余Flood的方法,步骤A中所述的发送方的标识Router-id,置于所述LSA的域中;或者,通过函数的参数来传递。
所述的一种避免冗余Flood的方法,所述步骤B中遍历所有的接口下的所有的邻居之前,确定每一个接口、每一个邻居存在。
所述的一种避免冗余Flood的方法,所述步骤B中邻居满足的条件包括当前的邻居的标识Router-id和所述记录的标识Router-id相同,并且不需要Flood隐式ACK。
所述的一种避免冗余Flood的方法,所述步骤B中判断不需要Flood隐式ACK的情况包括所述路由器不是指定路由器DR,或者发送所述LSA的邻居不是非指定路由器DRother。
所述的一种避免冗余Flood的方法,所述步骤B还包括每一次遍历过程中,如果当前的邻居不满足所述的条件,则向该邻居Flood LSA。
所述的一种避免冗余Flood的方法,有多条并行链路时,如果存在一条可靠链路,则只在该条链路上Flood LSA。


图1为拓扑结构示意图。
图2为已有技术中发送LSA的示意图。
图3a为本发明中发送LSA的示意图。
图3b为本发明中发送LSA的示意图。
图4为本发明中发送LSA的流程图。
具体实施例方式
贯穿说明书,示出的该优选实施例和示例应被看作本发明的范例而不受限制。
路由器Router每次收到一条LSA查询该条LSA是由哪一个邻居Flood的,记录该路由器的标识Router-id;遍历所有接口下的所有的邻居路由器,与已经记录的标识Router-id比较;如果标识Router-id相同并且不需要Flood隐式ACK,则跳过该邻居取下一个邻居,否则,向该邻居Flood LSA。
本发明提供的一种避免冗余Flood的方法,具体实施流程如图4所示,其中,
步骤410路由器的一个接口收到一个比自己数据库中更新的,且非自己产生的链路状态广播LSA;步骤420在所述接口下的邻居表中根据源IP地址查找到发送所述LSA的邻居,记录下该路由器的标识Router-id,取第一个接口;步骤430如果所述接口不存在,则跳转到步骤540;步骤440所述接口存在,如果所述路由器自己是指定路由器DR,并且邻居是非指定路由器DRother,则所述接口发送隐式ACK,否则,跳转到步骤460;步骤450取所述路由器的下一接口,跳转到步骤430;步骤460发送显式ACK,取第一个邻居;步骤470如果邻居不存在,跳转到步骤450;步骤480如果邻居关系没有建立,跳转到步骤520;步骤490如果路由器自己是非指定路由器DRother,且LSA是指定路由器DR或备份指定路由器BDR发送过来的,跳转到步骤450;步骤500假如路由器自己是备份指定路由器BDR,则跳转到步骤450;步骤510
路由器自己不是是备份指定路由器BDR,假如当前邻居的标识Router-id和发送这个LSA的邻居的标识Router-id相同,则跳转到步骤530;步骤520给这个邻居发送LSA;步骤530取下一个邻居,跳转到步骤470。
步骤540结束。
此时,Flood LSA的示意图如图3a所示,如果RTA不Flood图2中虚线表示的两条冗余LSA,那么RTA和RTB都能提高2÷6=33%的效率,而且并行链路越多,冗余Flood的LSA越多。随着链路的增加,冗余Flood的LSA就越多,浪费的效率会越来越趋近于50%,因此,本发明最大可减少50%的总报文Flood量。
如图3b所示,如果在多条并行链路的情况下能够确保其中某一条链路一定可靠,则可以指定LSA只在该条链路上Flood,这样就能够更进一步地降低冗余的LSA Flood和接收。以图1中的拓扑为例,如果指定RTB在s0接口上FloodLSA,那么当RTB要向RTA Flood一条LSA时,它只会从s0接口Flood给RTA,而不会再从s1或s2 Flood LSA。这样在多条并行链路的情况下,Flood LSA时就可以把多条链路看成一条链路,使得报文Flood、接收的效率达到最高。也就是说一条LSA仅仅两个报文就够了,比改进前减少了四个报文,效率提高了66%。
通过本发明可以判断邻居上是否已经存在该LSA,如果该邻居上存在该LSA,则不再向其Flood该LSA,如果该邻居上不存在该LSA,且存在一条可靠链路,则只在该条链路上Flood,否则,正常处理。本发明可以消除冗余Flood的LSA,利用本发明可以有效减少报文的Flood,同时减少报文的接收处理,降低了带宽的占用。接口数量越多,效果越好。随着接口数量的增加,最大可减少50%的总报文Flood量。
权利要求
1.一种避免冗余Flood的方法,适用于开放最短优先路径OSPF多链路情况,其特征在于,该方法包括A.路由器的一个接口收到一个链路状态广播LSA,查询所述LSA的发送方,记录所述发送方的标识Router-id;B.遍历所述路由器所有的接口下的所有的邻居,每一次遍历过程中,如果当前的邻居满足特定条件,则不向该邻居Flood LSA。
2.根据权利要求1所述的一种避免冗余Flood的方法,其特征在于,步骤A中所述的LSA,是所述路由器接口收到的比自己数据库中更新的、非所述路由器接口生成的链路状态广播LSA。
3.根据权利要求1所述的一种避免冗余Flood的方法,其特征在于,步骤A中所述的发送方的标识Router-id,置于所述LSA的域中;或者,通过函数的参数来传递。
4.根据权利要求1所述的一种避免冗余Flood的方法,其特征在于,所述步骤B中遍历所有的接口下的所有的邻居之前,确定每一个接口、每一个邻居存在。
5.根据权利要求1、2、3或4所述的一种避免冗余Flood的方法,其特征在于,所述步骤B中邻居满足的条件包括当前的邻居的标识Router-id和所述记录的标识Router-id相同,并且不需要Flood隐式ACK。
6.根据权利要求5所述的一种避免冗余Flood的方法,其特征在于,所述步骤B中判断不需要Flood隐式ACK的情况包括所述路由器不是指定路由器DR,或者发送所述LSA的邻居不是非指定路由器DRother。
7.根据权利要求1或6所述的一种避免冗余Flood的方法,其特征在于,所述步骤B还包括每一次遍历过程中,如果当前的邻居不满足所述的条件,向该邻居Flood LSA。
8.根据权利要求7所述的一种避免冗余Flood的方法,其特征在于,有多条并行链路时,如果存在一条可靠链路,则只在所述可靠链路上Flood LSA。
全文摘要
本发明公开了一种避免冗余Flood的方法,根据开放最短路径优先协议OSPF的Flood原则在Flood一条链路状态公告(LSA)的时候,如果不确定邻居是否已经有该条LSA那就需要把它Flood给对方,如果已经确定该邻居已经有该LSA,则不必再向其Flood该LSA,关键是如何判断在这个邻居上已经存在该LSA,本发明的判断方法是如果路由器A从路由器B收到一条LSA,那么B一定有该条LSA。通过本发明,可以消除冗余Flood的LSA,减少报文的接收、处理工作量,避免带宽的无效占用。
文档编号H04L29/06GK1859375SQ20051010141
公开日2006年11月8日 申请日期2005年11月12日 优先权日2005年11月12日
发明者杨锋 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1