一种基于OSPF协议的路由重学方法和设备
技术领域
本申请涉及通信技术领域,特别涉及一种基于开放式最短路径优先(Open ShortestPath First,OSPF)协议的路由重学方法和设备。
背景技术
OSPF协议的路由学习通过链路状态通告(Link State Advertisement,LSA)同步完成。LSA同步有两个机制:邻居状态完全邻接(FULL)之前,通过DD报文交互,链路状态请求(Link State Request,LSR)报文和链路状态更新(Link StateUpdate,LSU)报文同步链路状态数据库(Link State Database,LSDB);邻居状态FULL之后,依赖泛洪(FLOOD)机制,通过LSU报文和链路状态确认(LinkState Ack,LSAck)报文同步LSDB。
已经处于FULL状态的邻居之间LSDB如果需要完全重新同步,则需要主动将邻居状态降到信息交换初始状态(Exstart)并重新开始交互DD报文。在RFC2328中,邻居完全重新同步的过程如下:
(1)DR/BDR选举,将邻居关系降到Exstart后,两端邻居互发I-M-MS置位的MS Neigotiation报文,确定主(Master)/从(Slave)关系,由Master发起LSDB同步。
(2)LSDB摘要信息交换:LSDB同步的双方互发DD报文,提取接收到DD报文中的LSA摘要信息,若本地不存在对应的LSA,则将LSA放到邻居的Requst列表中。
(3)LSDB同步,到达邻居FULL状态:两端邻居互发LSR报文,请求对端将LSR报文中的LSA发送过来。持续此过程,直到邻居的Request列表为空。
上述RFC2328的邻居完全重新同步过程中,邻居状态降到Exstart状态后,链路状态就会发生变化,需要重新描述拓朴,从而导致拓朴变化,整网设备需要重新计算路由,导致部分流量中断。
发明内容
有鉴于此,本发明的目的在于提供一种基于OSPF协议的路由重学方法,该方法能够在保持网络拓扑不变的情况下重新进行LSDB同步。
为了达到上述目的,本发明的目的在于提供一种基于OSPF协议的路由重学方法,该方法包括:
当前路由设备需要与邻居路由设备重新进行LSDB同步时,向邻居路由设备发送完全同步请求报文,接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文,将完全同步响应报文中携带的LSA同步到LSDB;
当前路由设备接收到邻居路由设备发送的完全同步请求报文时,将自身的LSA携带在完全同步响应报文发送到邻居路由设备。
上述方法中,
所述将自身的LSA携带在完全同步响应报文发送到邻居路由设备之前,进一步包括:向邻居路由设备发送完全同步开始报文;
所述将自身的LSA携带在完全同步响应报文发送到邻居路由设备之后,进一步包括:向邻居路由设备发送完全同步结束报文;
所述接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之前,进一步包括:接收邻居路由设备发送的完全同步开始报文;
所述接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之后,进一步包括:接收邻居路由设备发送的完全同步结束报文。
上述方法中,
所述完全同步请求报文为携带本地链路范围的第一透明LSA的链路状态更新LSU报文;所述完全同步开始报文为携带本地链路范围的第二透明LSA的LSU报文;所述完全同步结束报文携带本地链路范围的第三透明LSA的LSU报文;所述完全同步响应报文为LSU报文;
所述向邻居路由设备发送完全同步请求报文的方法为:生成本地链路范围的第一透明LSA,将生成的本地链路范围的第一透明LSA携带在LSU报文中发送到邻居路由设备;
所述向邻居路由设备发送完全同步开始报文的方法为:生成本地链路范围的第二透明LSA,将生成的本地链路范围的第二透明LSA携带在LSU报文中发送到邻居路由设备;
所述向邻居路由设备发送完全同步结束报文的方法为:生成本地链路范围的第三透明LSA,将生成的本地链路范围的第三透明LSA携带在LSU报文中发送到邻居路由设备。
上述方法中,
所述接收到邻居路由设备的完全同步结束报文之后,进一步包括:清除flush当前路由设备生成的本地链路范围的第一透明LSA;
所述向邻居路由设备发送完全同步结束报文之后,进一步包括:flush当前路由设备生成的本地链路范围的第二透明LSA和第三透明LSA。
上述方法中,
所述flush当前路由设备生成的本地链路范围的第一透明LSA时,进一步向邻居路由设备发送用于清除该本地链路范围的第一透明LSA的LSU报文;
当前路由设备接收到邻居路由设备发送的用于清除邻居路由设备生成的本地链路范围的第一透明LSA时,将该本地链路范围的第一透明LSA从LSDB中清除;
所述flush当前路由设备生成的本地链路范围的第二透明LSA和第三透明LSA时,进一步向邻居路由设备发送用于清除该本地链路范围的第二透明LSA和第三透明LSA的LSU报文;
当前路由设备接收到邻居路由设备发送的用于清除邻居路由设备生成的本地链路范围的第二透明LSA和第三透明LSA时,将该本地链路范围的第二透明LSA和第三透明LSA从LSDB中清除。
本发明还提供了一种路由设备,该路由设备包括:收发单元、同步单元;
所述收发单元,用于当所述路由设备需要与邻居路由设备重新进行LSDB同步时,向邻居路由设备发送完全同步请求报文;用于向邻居路由设备发送完全同步请求报文后,接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文;用于接收到邻居路由设备发送的完全同步请求报文;用于接收到邻居路由设备发送的完全同步请求报文后,将所述路由设备的LSA携带在完全同步响应报文发送到邻居路由设备;
所述同步单元,用于在收发单元接收到邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文后,将所述完全同步响应报文中携带的LSA同步到LSDB。
上述路由设备中,
所述收发单元在将所述路由设备的LSA携带在完全同步响应报文发送到邻居路由设备之前,进一步用于:向邻居路由设备发送完全同步开始报文;在将所述路由设备的LSA携带在完全同步响应报文发送到邻居路由设备之后,进一步用于:向邻居路由设备发送完全同步结束报文;
所述收发单元在接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之前,进一步用于:接收邻居路由设备发送的完全同步开始报文;在接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之后,进一步用于:接收邻居路由设备发送的完全同步结束报文。
上述路由设备中,
所述完全同步请求报文为携带本地链路范围的第一透明LSA的链路状态更新LSU报文;所述完全同步开始报文为携带本地链路范围的第二透明LSA的LSU报文;所述完全同步结束报文携带本地链路范围的第三透明LSA的LSU报文;所述完全同步响应报文为LSU报文;
所述收发单元在向邻居路由设备发送完全同步请求报文时,用于:生成本地链路范围的第一透明LSA,将生成的本地链路范围的第一透明LSA携带在LSU报文中发送到邻居路由设备;在向邻居路由设备发送完全同步开始报文时,用于:生成本地链路范围的第二透明LSA,将生成的本地链路范围的第二透明LSA携带在LSU报文中发送到邻居路由设备;在向邻居路由设备发送完全同步结束报文时,用于:生成本地链路范围的第三透明LSA,将生成的本地链路范围的第三透明LSA携带在LSU报文中发送到邻居路由设备。
该路由设备还包括清除单元;
所述清除单元在收发单元接收到邻居路由设备的完全同步结束报文后,进一步用于:清除flush收发单元生成的本地链路范围的第一透明LSA;在收发单元向邻居路由设备发送完全同步结束报文之后,进一步用于:flush收发单元生成的本地链路范围的第二透明LSA和第三透明LSA。
上述路由设备中,
所述收发单元在清除单元flush接收单元生成的本地链路范围的第一透明LSA时,进一步向邻居路由设备发送用于清除该本地链路范围的第一透明LSA的LSU报文;在清除单元flush收发单元生成的本地链路范围的第二透明LSA和第三透明LSA时,进一步向邻居路由设备发送用于清除该本地链路范围的第二透明LSA和第三透明LSA的LSU报文;
所述收发单元,用于接收邻居路由设备发送的用于清除邻居路由设备生成的本地链路范围的第一透明LSA的LSU报文,将该本地链路范围的第一透明LSA从LSDB中清除;用于接收邻居路由设备发送的用于清除邻居路由设备生成的本地链路范围的第二透明LSA和第三透明LSA的LSU报文时,将该本地链路范围的第二透明LSA和第三透明LSA从LSDB中清除。
由上面的技术方案可知,本发明中,当前路由设备需要与邻居路由设备进行LSDB进行重新同步时,通过向邻居路由设备发送完全同步请求报文和接收邻居路由设备返回的完全同步响应报文来完成LSDB的重新同步,不会引起邻居关系和网络拓扑变化。本发明能够在保持网络拓扑不变的情况下重新进行LSDB同步。
附图说明
图1是本发明实施例基于OSPF协议的路由重学方法的流程示意图;
图2是本发明实施例本地链路范围的透明LSA的格式示意图;
图3是本发明实施例提供的路由设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图并举实施例,对本发明的技术方案进行详细说明。
参见图1,图1是本发明实施例基于OSPF协议的路由重学方法的流程示意图,主要包括以下步骤:
步骤101、当前路由设备需要与邻居路由设备重新进行LSDB同步时,向邻居路由设备发送完全同步请求报文,接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文,将完全同步响应报文中携带的LSA同步到LSDB。
这里,导致当前路由设备需要与邻居路由设备完全重新同步LSDB的原因可以由多种,例如,当前路由设备的LSDB损坏时,LSDB不可信,这时就需要与邻居路由设备重新进行LSDB同步;又如,当前路由设备支持轻量级NSR或无备NSR时,如果当前路由设备故障,则为了实现OSPF协议不中断连接,也需要与邻居路由设备重新进行LSDB同步。
本实施例中,完全同步请求报文和完全同步响应报文可以是根据完全重新同步需求新定义的协议报文,也可以是利用现有LSU报文,通过在LSU报文中携带特殊的LSA来表示完全同步请求报文和完全同步响应报文。当采用完全同步请求报文和完全同步响应报文进行LSDB同步时,当前路由设备未主动将邻居FULL状态降到Exstart状态,仍然保持邻居FULL状态不变,因此也不会造成网络拓扑变化。
本步骤中,邻居路由设备接收到当前路由设备发送的完全同步请求报文后,确定当前路由设备需要与自己进行LSDB的完全重新同步,因此需要将自己的LSA(也即邻居路由设备的LSDB中的LSA)携带在完全同步响应报文中发送给当前路由设备。当前路由设备接收到邻居路由设备发送的完全同步响应报文后,将完全同步响应报文中携带的邻居路由设备的LSA同步到当前路由设备的LSDB中,从而可以实现LSDB重新同步。
步骤102、当前路由设备接收到邻居路由设备发送的完全同步请求报文时,将自身的LSA携带在完全同步响应报文发送到邻居路由设备。
邻居路由设备需要与当前路由设备进行LSDB重新同步时,也可以向当前路由设备发送完全同步请求报文。当前路由设备接收到邻居路由设备的完全同步请求报文时,确定邻居路由设备需要与自己进行LSDB的完全重新同步,因此将自己的LSA(也即当前路由设备的LSDB中的LSA)携带在完全同步响应报文中发送给邻居路由设备,从而使得邻居路由设备可以将当前路由设备的LSA同步到邻居路由设备的LSDB中。
在实际应用中,LSDB中通常会包括很多LSA,通常需要发送多个完全同步响应报文才能够将自身的LSA全部同步到邻居路由设备,可以通过向邻居路由设备发送完全同步开始报文和完全同步结束报文来通知邻居路由设备LSDB同步的开始和结束。
为此,在步骤101中,所述将自身的LSA携带在完全同步响应报文发送到邻居路由设备之前,还可以进一步包括:向邻居路由设备发送完全同步开始报文。所述将自身的LSA携带在完全同步响应报文发送到邻居路由设备之后,还可以进一步包括:向邻居路由设备发送完全同步结束报文。
在步骤102中,所述接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之前,还可以进一步包括:接收邻居路由设备发送的完全同步开始报文。所述接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之后,还可以进一步包括:接收邻居路由设备发送的完全同步结束报文。
实际上,邻居路由设备也可以通过设置等待时间来确定当前路由设备是否已经将所有LSA同步到自己,例如,如果预设时间内未收到当前路由设备发送的完全同步响应报文,则确定当前路由设备已经将所有LSA同步到自己。
图2所示本发明实施例中,可以利用现有LSU报文实现完全同步请求报文、完全同步响应报文,完全同步开始报文和完全同步结束报文,具体地,可以通过在LSU报文中携带预先定义的不同的本地链路范围的透明LSA(Link-Local Scoped OpaqueLSA)来表示不同的报文,例如,将携带本地链路范围的第一透明LSA的链路状态更新LSU报文称为完全同步请求报文;将携带本地链路范围的第二透明LSA的LSU报文称为完全同步开始报文;将携带本地链路范围的第三透明LSA的LSU报文称为完全同步结束报文;另外,所述完全同步响应报文可以为LSU type4报文,也即。其中,本地链路范围的透明LSA的格式可以如图2所示,其中,LSA Type字段为9,OpaqueType字段的值为128,TLV字段的取值不同,所表示的透明LSA也不相同,如果当TLV字段中,Type=1,Length=1,Value=0x01时,表示本地链路范围的第一透明LSA;当Type=1,Length=1,Value=0x02时,表示本地链路范围的第二透明LSA;当Type=1,Length=1,Value=0x03时,表示本地链路范围的第三透明LSA。
这样,所述向邻居路由设备发送完全同步请求报文的方法具体可以为:生成本地链路范围的第一透明LSA,将生成的本地链路范围的第一透明LSA携带在LSU报文中发送到邻居路由设备。所述向邻居路由设备发送完全同步开始报文的方法具体可以为:生成本地链路范围的第二透明LSA,将生成的本地链路范围的第二透明LSA携带在LSU报文中发送到邻居路由设备。所述向邻居路由设备发送完全同步结束报文的方法具体可以为:生成本地链路范围的第三透明LSA,将生成的本地链路范围的第三透明LSA携带在LSU报文中发送到邻居路由设备。
图1所示本发明实施例中,
当前路由设备作为LSDB完全重新同步的发起方时,会向邻居路由设备发送完全同步请求报文,在此过程中,生成了本地链路范围的第一透明LSA,在同步结束后,需要flush该本地链路范围的第一透明LSA,以清除非法的LSA。而邻居路由设备作为LSDB完全重新同步的被动方,在接收到当前路由设备的完全同步请求报文后,可以将完全同步请求报文中的本地链路范围的第一透明LSA同步到自身的LSDB中,也可以丢弃完全同步请求报文中的本地链路范围的第一透明LSA。如果邻居路由设备在接收到当前路由设备的完全同步请求报文后,将完全同步请求报文中的本地链路范围的第一透明LSA同步到自身的LSDB中,则当前路由设备在flush该本地链路范围的第一透明LSA时,还需要向邻居路由设备发送用于清除当前路由设备生成的本地链路范围的第一透明LSA的LSU报文,这样,邻居路由设备接收到该LSU报文后,会将该本地链路范围的第一透明LSA从自身的LSDB中清除。这里,用于清除当前路由设备生成的本地链路范围的第一透明LSA的LSU报文中,该本地链路范围的第一透明LSA的LS age字段的值为3600秒。
当前路由设备作为LSDB完全重新同步的被动方,接收到邻居路由设备发送的完全同步请求报文后,会向邻居路由设备发送完全同步开始报文、完全同步响应报文、完全同步结束报文,在此过程中,会生成本地链路范围的第二透明LSA和第三透明LSA,在LSDB同步结束后,需要flush该本地链路范围的第二透明LSA和第三透明LSA,以清除非法的LSA。而邻居路由设备作为LSDB完全重新同步的发起方,在同步过程中,会接收到当前路由设备的完全同步开始报文和完全同步结束报文,可以将完全同步开始报文中的本地链路范围的第二透明LSA以及完全同步结束报文中的本地链路范围的第三透明LSA同步到自身的LSDB中,也可以丢弃完全同步开始报文中的本地链路范围的第二透明LSA以及完全同步结束报文中的本地链路范围的第三透明LSA。如果邻居路由设备将完全同步开始报文中的本地链路范围的第二透明LSA以及完全同步结束报文中的本地链路范围的第三透明LSA同步到自身的LSDB中,则当前路由设备在flush该本地链路范围的第二透明LSA和第三透明LSA时,还需要向邻居路由设备发送用于清除当前路由设备生成的本地链路范围的第二透明LSA和第三透明LSA的LSU报文,这样,邻居路由设备接收到该LSU报文后,会将该本地链路范围的第二透明LSA和第三透明LSA从自身的LSDB中清除。这里,用于清除当前路由设备生成的本地链路范围的第二透明LSA和第三透明LSA的LSU报文中,该本地链路范围的第二透明LSA和第三透明LSA的LS age字段的值均为3600秒。
以上对本发明实施例基于OSPF协议的路由重学方法进行了详细说明,本发明还提供了一种路由设备,下面结合图3进行了详细说明。
图3是本发明实施例提供的路由设备的结构示意图,该路由设备包括:收发单元301、同步单元302;其中,
收发单元301,用于当所述路由设备需要与邻居路由设备重新进行LSDB同步时,向邻居路由设备发送完全同步请求报文;用于向邻居路由设备发送完全同步请求报文后,接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文;用于接收到邻居路由设备发送的完全同步请求报文;用于接收到邻居路由设备发送的完全同步请求报文后,将所述路由设备的LSA携带在完全同步响应报文发送到邻居路由设备;
同步单元302,用于在收发单元301接收到邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文后,将所述完全同步响应报文中携带的LSA同步到LSDB。
上述路由设备中,
所述收发单元301在将所述路由设备的LSA携带在完全同步响应报文发送到邻居路由设备之前,进一步用于:向邻居路由设备发送完全同步开始报文;在将所述路由设备的LSA携带在完全同步响应报文发送到邻居路由设备之后,进一步用于:向邻居路由设备发送完全同步结束报文;
所述收发单元301在接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之前,进一步用于:接收邻居路由设备发送的完全同步开始报文;在接收邻居路由设备发送的携带邻居路由设备的LSA的完全同步响应报文之后,进一步用于:接收邻居路由设备发送的完全同步结束报文。
上述路由设备中,
所述完全同步请求报文为携带本地链路范围的第一透明LSA的链路状态更新LSU报文;所述完全同步开始报文为携带本地链路范围的第二透明LSA的LSU报文;所述完全同步结束报文携带本地链路范围的第三透明LSA的LSU报文;所述完全同步响应报文为LSU报文;
所述收发单元301在向邻居路由设备发送完全同步请求报文时,用于:生成本地链路范围的第一透明LSA,将生成的本地链路范围的第一透明LSA携带在LSU报文中发送到邻居路由设备;在向邻居路由设备发送完全同步开始报文时,用于:生成本地链路范围的第二透明LSA,将生成的本地链路范围的第二透明LSA携带在LSU报文中发送到邻居路由设备;在向邻居路由设备发送完全同步结束报文时,用于:生成本地链路范围的第三透明LSA,将生成的本地链路范围的第三透明LSA携带在LSU报文中发送到邻居路由设备。
该路由设备还包括清除单元303;
所述清除单元303在收发单元301接收到邻居路由设备的完全同步结束报文后,进一步用于:清除flush收发单元生成的本地链路范围的第一透明LSA;在收发单元301向邻居路由设备发送完全同步结束报文之后,进一步用于:flush收发单元生成的本地链路范围的第二透明LSA和第三透明LSA。
所述收发单元301在清除单元303flush接收单元301生成的本地链路范围的第一透明LSA时,进一步向邻居路由设备发送用于清除该本地链路范围的第一透明LSA的LSU报文;在清除单元303flush收发单元303生成的本地链路范围的第二透明LSA和第三透明LSA时,进一步向邻居路由设备发送用于清除该本地链路范围的第二透明LSA和第三透明LSA的LSU报文;
所述收发单元301,用于接收邻居路由设备发送的用于清除邻居路由设备生成的本地链路范围的第一透明LSA的LSU报文,将该本地链路范围的第一透明LSA从LSDB中清除;用于接收邻居路由设备发送的用于清除邻居路由设备生成的本地链路范围的第二透明LSA和第三透明LSA的LSU报文时,将该本地链路范围的第二透明LSA和第三透明LSA从LSDB中清除。
综上所述,本发明中,在需要与邻居路由设备重新进行LSDB同步时,通过向邻居路由设备发送完全同步请求报文并接收邻居路由设备返回的完全同步相应报文,完成与邻居路由设备之间的LSDB的完全重新同步,在此过程中,当前路由设备与邻居路由设备之间的邻居关系不变,网络拓扑也保持不变。LSDB损坏的情况下,由于本发明提供的技术方案不会引起邻居关系和网络拓扑的变化,因而可以通过应用本发明来实现与所有邻居路由设备之间LSDB的完全重新同步。另外,对于支持轻量级NSR或无备LSR的路由设备来说,当需要进行LSDB的完全重新同步时,本发明同样适用。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。