发明内容
有鉴于此,本申请提供一种链路状态通告信息确认方法和设备,能够快速完成LSAck报文回复,避免因CPU繁忙LSAck报文回复延迟而导致的大量报文重传、网络拥塞、路由不通、浪费系统资源的问题。
为解决上述技术问题,本发明的技术方案是这样实现的:
一种链路状态通告信息确认方法,所述方法应用于包含多个开放式最短路径优先OSPF设备的网络中,该网络中相邻的OSPF设备之间建立邻居关系,包括:
任一所述OSPF设备启动第一进程接收邻居OSPF设备发送的链路状态更新LSU报文,解析并确认该LSU报文中的链路状态通告LSA信息后,向所述邻居OSPF设备发送链路状态确认LSAck报文,并向第二进程发送接收的LSU报文;
该OSPF设备启动第二进程接收第一进程发送的LSU报文,并对接收的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理。
一种设备,应用于包含多个开放式最短路径优先OSPF设备的网络中,该网络中相邻的OSPF设备之间建立邻居关系,该设备包括:第一进程模块和第二进程模块;
所述第一进程模块,用于接收邻居OSPF设备发送的链路状态更新LSU报文,解析并确认该报文中的链路状态通告LSA信息,并向该邻居OSPF设备发送链路状态确认LSAck报文,向所述第二进程模块发送接收的LSU报文;
所述第二进程模块,用于接收所述第一进程模块发送的LSU报文,并对所述接收到的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理。
综上所述,本申请通过对接收的LSU报文通过第一进程和第二进程分别进行不同的处理,调用第一进程先完成对LSU报文的LSAck报文的回复,之后再传递给第二进程,进行LSAck报文回复之外的处理,能够快速完成LSAck报文回复,避免因CPU繁忙LSAck报文回复延迟而导致的大量报文重传、网络拥塞、路由不通、浪费系统资源的问题。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。
本发明实施例中提出一种链路状态通告信息确认方法,该方法应用于包含多个OSPF设备的网络中,该网络中相邻的各OSPF设备之间建立邻居关系,该方法能够快速完成LSAck报文回复,避免因CPU繁忙LSAck报文回复延迟而导致的大量报文重传、网络拥塞、路由不通、浪费系统资源的问题。
参见图1,图1为本发明实施例中链路状态通告信息确认方法流程示意图。具体步骤为:
步骤101,任一所述OSPF设备启动第一进程接收邻居OSPF设备发送的LSU报文,解析并确认该LSU报文中的LSA信息后,向所述邻居OSPF设备发送LSAck报文,并向第二进程发送接收的LSU报文。
OSPF设备启动第一进程仅用来接收邻居OSPF设备发送的LSU报文,解析LSU报文中的LSA信息并确认,进行LSAck报文的回复,不进行LSAck报文回复之外的处理,LSAck报文回复之后,第一进程将该LSU报文发送给第二进程。
步骤102,该OSPF设备启动第二进程接收第一进程发送的LSU报文,并对接收的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理。
本步骤中,OSPF设备启动第二进程接收第一进程发送的LSU报文,对接收的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理,具体包括:第二进程从所述接收到的LSU报文中解析LSA信息,完成对LSA信息的数据库安装、泛洪以及路由计算和路由更新。在LSA安装数据库时不能失败,如果当时安装不成功,则临时存储,直到条件具备时安装,避免出现路由丢失的情况。
在具体实现时,该OSPF设备也会有产生本地LSU报文的情况,发送给邻居OSPF设备时,接收到自身OSPF设备回复的LSAck报文。这些操作都由OSPF设备启动第二进程来执行。因此,OSPF启动第一进程所做的处理仅为如下三件事:
第一件事为:接收邻居OSPF设备发送的LSU报文。
第二件事为:解析该接收的LSU报文得到LSA信息,对发送该LSU报文的邻居OSPF设备发送LSAck报文。具体为:解析接收到的LSU报文,获得该报文中所有LSA信息,对每一个LSA信息进行确认,将所有的确认信息封装成一条LSAck报文,回复给发送该LSU报文的邻居OSPF设备。
第三件事为:传递接收的LSU报文给第二进程。该OSPF设备启动第一进程向第二进程发送接收的LSU报文时采用的通信方式为内部TCP方式或管道方式或通信信号量方式等。
OSPF设备启动的第一进程和第二进程的数据不共享,即完全分离,互不相关。第一进程与第二进程之间的通信可以作为一般进程间通信来考虑,任务间通信机制一般包括内部TCP、管道、信号量、共享数据结构等。如果使用共享数据结构,则存在对数据结构的互斥访问,一旦互斥访问数据结构就需要两个任务使用一个信号量来保护被访问的数据结构,如果第一进程取得信号量后对被访问的数据结构执行数据密集型计算操作时,将长时间占用信号量,此时将导致第一进程因获取不到信号量而被阻塞不能运行,或导致系统中的其它进程得不到调度。因此对于本发明具体实施例中,第一进程和第二进程之间的通信方式可以采用内部TCP方式、管道方式或通信信号量方式等。
该方法进一步包括:OSPF设备为第一进程和第二进程设置优先级别,且设置第一进程处理LSU报文的优先级别高于所述第二进程处理LSU报文的优先级别。即第一进程处理完接收的所有LSU报文,才启动第二进程处理其接收到的LSU报文。具体实现时,对第一进程的设置可以满足实时性要求的较高优先级别,该进程处理的任务相对简单,对第二进程的设置可以设置为相对较低的优先级别,避免对系统中其他实时性要求较高的任务造成冲击。
该OSPF设备启动第二进程对接收的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理之前,所述方法进一步包括:该OSPF设备确定所述第一进程中是否存在未处理的LSU报文,如果是,继续通过第一进程处理接收的LSU报文;否则,该OSPF设备启动第二进程对接收的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理。
由于OSPF设备对第一进程设置的优先级高于第二进程,如果仅对于该两个进程处理报文来说,要等第一进程处理完所有的LSU报文时,才会启动第二进程处理其接收到的LSU报文。
第二进程按照互联网协议草案及标准(RFC)等来具体设计实现,自身在处理接收LSU报文的基本流程可以不受第一进程的影响,仅是在接收到LSU报文时,不进行LSAck报文回复。
由上可见,本发明实施例中在实现链路状态通告信息确认方法中将现有技术中一个进程完成的协议主体任务,分离为两个进程来完成,并且将完成回复LSAck报文的进程的优先级设置高于完成协议主体任务中的其他任务的进程优先级,能够实现链路状态通告信息快速确认,避免了由于不能及时回复LSAck报文,导致大量报文重传、网络拥塞、路由不同、浪费系统资源等问题。
本发明具体实施例中基于同样的发明构思,还提出一种设备,可应用于包含多个OSPF设备的网络中,该网络中相邻的OSPF设备之间建立邻居关系。参见图2,图2为用于实现链路状态通告信息确认的设备的结构示意图。该设备包括:第一进程模块201和第二进程模块202。
第一进程模块201,用于接收邻居OSPF设备发送的LSU报文,解析并确认该报文中的LSA信息,并向该邻居OSPF设备发送LSAck报文,向第二进程模块202发送接收的LSU报文。
第二进程模块202,用于接收第一进程模块201发送的LSU报文,并对所述接收到的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理。
较佳地,
第一进程模块201,进一步用于设置自身处理任务的优先级别高于第二进程模块202处理任务的优先级别;当存在未回复LSAck报文的LSU报文时,继续对未处理的LSU报文进行回复LSAck报文处理。
第二进程模块202,进一步用于设置自身处理任务的优先级别低于所述第一进程模块处理任务的优先级别;当第一进程模块201中不存在未回复LSAck报文的LSU报文时,对接收到的LSU报文进行LSAck报文回复之外的OSPF协议任务的处理。
较佳地,
第二进程模块202,用于从接收到的LSU报文中解析LSA信息,完成对LSA信息的数据库安装、泛洪以及路由计算和路由更新;进一步用于若本地产生LSU报文时,发送给与本设备建立邻居关系的OSPF设备,并接收各邻居OSPF设备发送的LSAck报文。
较佳地,
第一进程模块201向第二进程模块202发送接收的LSU报文时采用的通信方式为内部TCP方式、管道方式或通信信号量方式。
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
综上所述,本发明具体实施例中对接的LSU报文通过第一进程和第二进程分别进行不同的处理,调用第一进程先完成对LSU报文的LSAck报文的回复,之后再传递给第二进程,进行LSAck报文回复之外的处理,能够快速完成LSAck报文回复,避免因CPU繁忙LSAck报文回复延迟而导致的大量报文重传、网络拥塞、路由不通、浪费系统资源的问题。
在具体实施例中设置第一进程的优先级高于第二进程,使第一进程完成所有的LSU报文的确认处理之后,再启动第二进程进行LSU报文的确认之外的处理,且由于第一进程的LSU报文确认处理过程简单,且不进行其他处理,因此在不影响网络中其他进程的情况下快速完成了LSAck报文的回复。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。