首页> 中国专利> 一种处理OSPF报文乱序的方法及OSPF路由器

一种处理OSPF报文乱序的方法及OSPF路由器

摘要

本发明公开了一种处理开放式最短路径优先(OSPF,Open Shortest Path First)报文乱序的方法及OSPF路由器,在本发明实施例的技术方案中,根据OSPF报文类型分序列号,对OSPF报文进行序列号检查,解决了现有序列号检查方案无法在调整报文处理顺序之后执行的问题,实现了在调整报文处理顺序之后对报文序列号的检查,克服了报文处理顺序调整而带来的乱序问题。

著录项

  • 公开/公告号CN101237462A

    专利类型发明专利

  • 公开/公告日2008-08-06

    原文格式PDF

  • 申请/专利权人 杭州华三通信技术有限公司;

    申请/专利号CN200810101898.6

  • 发明设计人 林长望;郭强;钱雪彪;章海锋;

    申请日2008-03-13

  • 分类号H04L29/06(20060101);H04L12/56(20060101);

  • 代理机构11018 北京德琦知识产权代理有限公司;

  • 代理人宋志强;麻海明

  • 地址 310053 浙江省杭州市高新技术产业开发区之江科技工业园六和路310号华为杭州生产基地

  • 入库时间 2023-12-17 20:28:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-03

    专利权人的姓名或者名称、地址的变更 IPC(主分类):H04L29/06 变更前: 变更后: 申请日:20080313

    专利权人的姓名或者名称、地址的变更

  • 2011-01-05

    授权

    授权

  • 2008-11-05

    实质审查的生效

    实质审查的生效

  • 2008-08-06

    公开

    公开

说明书

技术领域

本发明涉及开放式最短路径优先(OSPF,Open Shortest Path First)技术,尤指一种处理OSPF报文乱序的方法及OSPF路由器。

背景技术

在OSPF协议中,为了保证路由创建的可靠性,在OSPF路由器上启用身份认证功能,使通过身份认证的路由器才能互通路由信息,实现创建路由的可靠性。目前,OSPF协议通常使用信息-摘要算法(MD5,Message-DigestAlgorithm 5)身份认证。在MD5认证中,发送方和接收方协商确定双方使用的密钥,发送方根据密钥和发送报文信息计算得到报文摘要并携带在报文的尾部,发送给接收方;接收方接收报文并根据协商的密钥和收到报文的信息计算得到报文摘要,比较计算得到的报文摘要和收到的报文摘要是否相同,相同,则确定当前报文来自合法用户,否则,丢弃当前收到的报文。

在MD5认证过程中,为了加强认证过程的安全性,通常在报文的头部添加MD5序列号,发送方OSPF路由器按照递增的方式将序列号添加在发送的OSPF报文中。接收方OSPF路由器针对每个邻居路由器维护当前收到的最大序列号,如果收到发送方A发送的OSPF报文,则获取该报文中携带的序列号,并获得自身记录的该邻居路由器发送的最大序列号,将报文中携带的序列号与自身当前记录的最大序列号比较,如果当前携带的序列号大于等于记录的序列号,则进行消息摘要的验证,按照OSPF协议进行后续处理,并用当前获取的序列号更新为发送方A维护的最大序列号;如果小于记录的序列号,则丢弃当前收到的报文,不进行后续处理。

在OSPF协议中,主要包括五类报文:健康检查(HELLO)报文、链路状态信息库描述(DD,Database Description)报文、链路状态信息请求(LSR,Link State Request)报文、链路状态信息更新(LSU,Link State Update)报文和链路状态信息确认(LSAck,Link State Acknowledgment)报文。HELLO报文,用于发现及维持邻居关系,选举DR、BDR;DD报文,用于描述本地链路状态数据库(LSDB,Link State Database)的情况;LSR报文,用于向对端请求本端没有或对端更新的LSA;LSU报文,用于向对方更新LSA;LSAck报文,用于收到LSU之后进行确认。其中,如果Hello报文得不到及时处理会导致邻居DOWN,进而将会由于邻居发生变化而发送大量的LSU报文;同时,如果LSAck报文得不到及时处理会导致LSU报文的重传。为了避免没有及时处理上述两类报文而造成的网络振荡以及不必要的LSA重传,RFC4222提出优先处理HELLO报文以及LSAck报文的解决方案。使HELLO报文和LSAck报文进入OSPF高优先级缓存,其他类型的报文进入OSPF低优先级缓存,在读取当前进行处理的OSPF报文,优先从OSPF高优先级缓存中读取。

如果优先处理HELLO报文和LSAck报文这两种类型的报文,将导致处理报文的顺序与邻居路由器发送报文的顺序不同,这样,由于报文中携带有按照发送顺序填入的序列号。因此,在进行序列号检查时,会使接收在先而未被优先处理的报文被视为非法报文而被丢弃,造成报文乱序。为了解决这个问题,在具体的处理过程中,现有技术对报文进行优先级调整之前,先预处理收到的OSPF协议报文,对其进行序列号的检查以及报文摘要的验证;然后再按照优先处理策略调整报文的处理顺序,以解决MD5认证过程中存在的乱序问题。

现有技术中之所以在调整处理顺序之前对报文进行预处理,主要是因为现有技术中序列号检查的具体方式。如前所述,OSPF路由器为自身的每个邻居路由器仅维护一个最大序列号,所有来自该邻居路由器的报文,都会用维护的同一序列号与报文携带的序列号进行比较,进行序列号的更新,因此在调整OSPF报文处理顺序之后,再对报文进行序列号检查,由于更新的是同一个序列号,进而无法避免MD5认证过程中出现的乱序问题。

由此可见,在现有技术中,为了避免MD5认证过程中调整报文处理顺序而导致的乱序问题,现有技术必须在调整报文处理顺序之前对报文的序列号进行检查,无法在调整报文处理顺序之后,实现对报文序列号的成功检查。然而,在有些场景下,例如从IP层开始就按照优先处理策略调整报文处理顺序,由于序列号检查的操作必须在IP层之后的OSPF模块中进行,因此现有技术无法解决这种场景下MD5认证过程中报文乱序的问题。

发明内容

有鉴于此,本发明提供了一种处OSPF报文乱序的方法及OSPF路由器,应用本发明所提供的方法以及OSPF路由器能够在调整报文的处理顺序之后,实现对报文进行序列号的检查,克服调整报文处理顺序之后出现的乱序问题。

为达到上述目的,本发明的技术方案是这样实现的:

一种处理OSPF报文乱序的方法,该方法包括:

在检查OSPF报文的序列号时,根据OSPF报文类型获得发送该OSPF报文的邻居路由器对应的最大序列号;

判断该OSPF报文中携带的序列号是否大于等于所述获得的最大序列号,如果是,记录当前OSPF报文携带的序列号,根据OSPF协议处理当前OSPF报文;否则,丢弃当前OSPF报文。

一种OSPF路由器,该OSPF路由器包括处理单元和存储单元;

处理单元,用于在检查开放式最短路径优先OSPF报文的序列号时,根据OSPF报文类型从所述存储单元中获得发送该OSPF报文的邻居路由器对应的最大序列号;判断该OSPF报文中携带的序列号是否大于等于所述获得的最大序列号,如果是,将当前OSPF报文携带的序列号记录至所述存储单元,根据OSPF协议处理当前OSPF报文;否则,丢弃当前OSPF报文;

存储单元,用于存储OSPF报文中携带的序列号。

本发明所提供了一种处理OSPF报文乱序的方法及OSPF路由器,在本发明实施例的技术方案中,在检查报文的序列号时,根据当前OSPF报文类型分序列号,对OSPF报文进行序列号检查,解决了现有序列号检查方案无法在调整报文处理顺序之后执行的问题,实现了在调整报文处理顺序之后对报文序列号的检查,克服了报文处理顺序调整而带来的乱序问题。另外,本发明实施例的技术方案不仅能够在调整报文处理顺序之后,成功的进行报文序列号的检查,同时,相对于现有的序列号检查方案来说,还能够提高OSPF路由器处理处理OSPF协议报文的效率。

附图说明

图1为本发明方法的示例性流程图;

图2为本发明OSPF路由器的示例性结构图;

图3为本发明实施例方法的流程图;

图4为本发明实施例OSPF路由器的结构图。

具体实施方式

在本发明实施例的技术方案,为了可以在调整OSPF报文处理顺序之后,仍然能够正常实现对报文序列号的检查,可以根据OSPF报文报文类型对OSPF报文进行序列号检查。

参见图1,图1为本发明方法的示例性流程图,包括:在步骤101中,在检查OSPF报文的序列号时,根据OSPF报文类型获得发送该OSPF报文的邻居路由器对应的最大序列号。在步骤102中,判断该OSPF报文中携带的序列号是否大于等于所述获得的最大序列号,如果是,执行步骤103;否则,执行步骤104。在步骤103中,记录当前OSPF报文携带的序列号,根据OSPF协议处理当前OSPF报文。在步骤104中,丢弃当前OSPF报文。

另外,参见图2,图2为本发明OSPF路由器的示例性结构图,包括处理单元和存储单元。其中,处理单元,用于在检查开放式最短路径优先OSPF报文的序列号时,根据OSPF报文类型从所述存储单元中获得发送该OSPF报文的邻居路由器对应的最大序列号;判断该OSPF报文中携带的序列号是否大于等于所述获得的最大序列号,如果是,将当前OSPF报文携带的序列号记录至所述存储单元,根据OSPF协议处理当前OSPF报文;否则,丢弃当前OSPF报文;存储单元,用于存储OSPF报文中携带的序列号。

当OSPF路由器优先处理OSPF报文中的HELLO报文和LSAck报文时,在收到的OSPF报文类型为HELLO报文或者LSAck报文时,获得发送所述HELLO报文或者LSAck报文的邻居路由器对应的第一最大序列号;在收到的OSPF报文类型为链路状态信息库描述DD报文、链路状态信息请求LSR报文或者链路状态信息更新LSU报文时,获得发送所述DD报文、LSR报文或者LSU报文的邻居路由器对应的第二最大序列号。

OSPF路由器为每个邻居路由器创建第一序列号变量和第二序列号变量;在获得所述第一最大序列号时,获得第一序列号对应的序列号变量,将该第一序列号变量当前的值作为所需获得的第一最大序列号;相应的,所述记录当前OSPF报文中携带的序列号为:用当前OSPF报文中携带的序列号更新第一序列号对应的第一序列号变量;在获得所述第二最大序列号时,获得第二序列号对应的第二序列号变量,将第二序列号变量当前的值作为所需获得的第二最大序列号;相应的,所述记录当前OSPF报文中携带的序列号为:用当前OSPF报文中携带的序列号更新第二序列号对应的第二序列号变量。

另外,对于OSPF报文类型和最大序列号之间还可以有其他的对应方法。比如说,每一报文类型对应一个最大序列号:HELLO报文对应第一最大序列号;LSAck报文对应第二最大序列号;DD报文对应第三最大序列号;LSR报文对应第四最大序列号;LSU报文对应第五最大序列号。一般情况下,系统对OSPF报文有处理的先后,本发明将处于同一优先等级类型的OSPF报文设置一个对应的最大序列号,另外一个优先等级的OSPF报文设置另一个对应的最大序列号。这种对应方法能够很好的适用于优先处理策略按照OSPF报文的报文类型确定优先处理等级的场景。在此种场景下,在获得该报文类型对应的最大序列号时,则找到发送当前OSPF报文的邻居路由器对应该报文类型的最大序列号变量,该最大序列号变量当前的值即为所需的最大序列号。在当前OSPF报文携带的序列号大于当前最大序列号时,则用当前OSPF报文中携带的序列号更新对应的最大序列号变量。

由于序列号的划分是根据OSPF报文的优先处理策略进行的,使具有相同优先级处理级别的报文对应同一序列号,因此对应同一序列号的报文还是按照接收顺序进行排队处理,因此本发明按照OSPF报文类型进行序列号检查,能够解决报文乱序而导致合法报文序列号检查不通过的问题。本发明实施例的技术方案克服了调整报文处理顺序之后出现的乱序问题,实现了调整报文的处理顺序之后对报文进行序列号的检查。

除了上述提及的两种优先处理策略之外,本发明的技术方案还适用于其他的优先处理策略。例如,在仅需要优先级处理HELLO报文时,则可以将HELLO报文设置为高优先级类型,OSPF报文中的其他四个类型设置为低优先级类型。又如,当优先处理等级分为三类,具有高等优先级的为HELLO报文、具有中等优先级的为LSAck报文,具有低等优先级的DD报文、LSR报文和LSU报文,则此时可以设置高优先级类型、中优先级类型以及低优先级类型。

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明做进一步的详细说明。

由于本发明实施例能够很好的应用于先调整报文处理顺序,再进行序列号检查的场合,因此,本发明实施例主要以该应用场合为例进行介绍。

首先,当优先处理策略为优先处理OSPF报文中的HELLO报文和LSAck报文时,可以将HELLO报文和LSAck报文设置为对应第一序列号变量;将DD报文、LSR报文和LSU报文设置为对应第二序列号变量。同时,在OSPF路由器设置序列号需要对应每个邻居路由器设置对应的序列号变量。例如,当前OSPF路由器A存在三个邻居路由器B、C和D,那么在设置第一序列号变量和第二序列号变量时,需要为每个邻居路由器设置第一和第二序列号变量。序列号变量随着该变量对应报文所携带的序列号的增大,而不断更新,始终保持序列号变量的值为接收该类型报文以来序列号的最大值。

参见图3,图3为本实施例方法的流程图,具体包括:

在步骤301中,收到OSPF报文。

在步骤302中,判断是否为HELLO报文或者LSAck报文,如果是,执行步骤303;否则,执行步骤304。

在步骤303中,将当前接收到的OSPF报文送入高优先级通道,执行步骤305。

在本发明实施例中,高优先级通道可以是由高优先级OSPF缓存组成,在报文经过IP层处理后,将当前OSPF报文按照先进先出原则送入高优先级OSPF缓存,等待进行OSPF处理。另外,高优先级通道也可以是由高优先级IP队列和高优先级OSPF缓存组成,在当前OSPF报文进行IP层处理之前,将当前报文按照先进先出原则送入高优先级IP队列,待IP层处理完毕之后,再按照先进先出送入高优先级OSPF缓存,等待进行OSPF处理。

在步骤304中,将当前接收到的OSPF报文送入低优先级通道。

相对的,本发明实施例中的低优先级通道可以是低优先级OSPF缓存组成,在报文经过IP层处理后,将当前OSPF报文按照先进先出原则送入低优先级OSPF缓存,等待进行OSPF处理。另外,低优先级通道也可以是由低优先级IP队列和低优先级OSPF缓存组成,在当前OSPF报文进行IP层处理之前,将当前报文按照先进先出送入低优先级IP队列,待IP层处理完毕之后,再按照先进先出原则送入低优先级OSPF缓存,等待进行OSPF处理。

在步骤305中,在需要读取当前进行OSPF处理的OSPF报文时,优先从高优先级通道中读取OSPF报文。也就是,在高优先级OSPF缓存存在有排队的报文时,优先从OSPF缓存中读取当前进行OSPF处理的报文。当然,也并不仅限于这种优先读取方式。

在步骤306中,确定当前OSPF报文对应的序列号变量。

当OSPF报文类型为HELLO报文或者LSAck报文时,获得发送当前HELLO报文或者LSAck报文的邻居路由器对应的第一最大序列号;当OSPF报文类型为DD报文、LSR报文或者LSU报文时,获得发送当前DD报文、LSR报文或者LSU报文的邻居路由器对应的第二最大序列号。

在步骤307中,读取当前序列号变量的值得到最大序列号,即发送当前OSPF报文的邻居路由器对应的最大序列号。

在步骤308中,获得当前取出OSPF报文中携带的序列号,判断当前OSPF报文中携带的序列号是否大于等于当前获得的最大序列号,如果是,执行步骤309;否则,执行步骤310。

本步骤中,获得当前OSPF报文中携带的序列号的操作,可以在本步骤中执行,也可以在步骤305取出当前OSPF报文之后执行。

在步骤309中,用当前OSPF报文携带的序列号,更新发送该报文的邻居路由器对应的序列号变量,并根据OSPF协议理当前OSPF报文,结束当前处理流程。

在步骤310中,则丢弃当前OSPF报文,结束当前处理流程。

另外,参见图4,图4为本发明实施例OSPF路由器的结构图,包括处理单元和存储单元。

与图2所示的结构相同,处理单元,用于在检查开放式最短路径优先OSPF报文的序列号时,根据OSPF报文类型从所述存储单元中获得发送该OSPF报文的邻居路由器对应的最大序列号;判断该OSPF报文中携带的序列号是否大于等于所述获得的最大序列号,如果是,将当前OSPF报文携带的序列号记录至所述存储单元,根据OSPF协议处理当前OSPF报文;否则,丢弃当前OSPF报文;存储单元,用于存储OSPF报文中携带的序列号。

具体的,所述处理单元,用于根据OSPF报文类型获得发送该OSPF报文的邻居路由器对应的最大序列号时,当OSPF报文类型为健康检查HELLO报文或者链路状态信息确认LSAck报文时,从所述存储单元中获得发送所述HELLO报文或者LSAck报文的邻居路由器对应的第一最大序列号;当OSPF报文类型为链路状态信息库描述DD报文、链路状态信息请求LSR报文或者链路状态信息更新LSU报文时,从所述存储单元中获得发送所述DD报文、LSR报文或者LSU报文的邻居路由器对应的第二最大序列号。

具体的,所述存储单元,用于为每个邻居路由器创建第一序列号变量和第二序列号变量;所述处理单元,用于在获得所述第一最大序列号时,找到所述存储单元中第一序列号对应的第一序列号变量,将该第一序列号变量当前的值作为所需获得的第一最大序列号;相应的,在记录当前OSPF报文中携带的序列号时,用当前OSPF报文中携带的序列号更新第一序列号对应的第一序列号变量;在获得所述第二最大序列号时,找到所述存储单元中第二序列号对应的第二序列号变量,将该第二序列号变量当前的值作为所需获得的第二最大序列号;相应的,在记录当前OSPF报文中携带的序列号时,用当前OSPF报文中携带的序列号更新第二序列号对应的第二序列号变量。

另外,OSPF路由器进一步包括:接收单元、高优先级处理单元、低优先级处理单元和控制单元。其中,所述接收单元,用于在收到Hello报文或者LSAck报文时,送入高优先级处理单元;在收到其他报文类型的OSPF报文时,送入低优先级处理单元;所述高优先级处理单元和低优先级处理单元,用于按照先进先出策略缓存送入的报文;所述控制单元,用于优先从高优先级单元中读取OSPF报文,将读取的报文发送至所述处理单元。

具体的,所述高优先级处理单元包括:高优先级IP队列和高优先级OSPF缓存;所述高优先级IP队列,用于按照先进先出策略,接收所述接收单元送入的OSPF报文、并发送至IP层处理;所述高优先级OSPF缓存,用于按照先进先出策略接收经过IP层处理后的OSPF报文;所述低优先级处理单元包括:低优先级IP队列和低优先级OSPF缓存;所述低优先级IP队列,用于按照先进先出策略,接收所述接收单元送入的OSPF报文、并发送至IP层处理;所述低优先级OSPF缓存,用于按照先进先出策略接收经过IP层处理后的OSPF报文。

当优先处理策略是按照OSPF报文的报文类型确定优先处理等级,则根据OSPF报文的报文类型设置对应序列号,例如,HELLO报文对应HELLO序列号变量,LSAck报文对应LSAck序列号变量,DD报文对应DD序列号变量,LSR报文对应LSR序列号变量,LSU报文对应LSU序列号变量。在收到OSPF报文,则根据对应的报文类型获得对应的序列号变量,序列号变量当前的值即为该报文类型对应的最大值,然后根据获得的最大序列号变量与自身携带的序列号进行比较,进行序列号的检查。显然,根据OSPF报文的报文类型设置对应的序列号变量同样适用于优先级策略为优先处理OSPF报文中的HELLO报文和LSAck报文的场景。

在根据报文类型设置对应的序列号变量,处理单元根据OSPF报文类型获得发送该OSPF报文的邻居路由器对应的最大序列号时,则根据当前OSPF报文的报文类型,获得发送所述OSPF报文的邻居路由器对应该报文类型的最大序列号。

通过上述技术方案,本发明实施例通过根据报文的不同类型分序列号,对OSPF报文进行序列号检查,解决了现有序列号检查方案无法在调整报文处理顺序之后执行的问题,实现了在调整报文处理顺序之后,对报文序列号的检查,克服了报文处理顺序调整而带来的乱序问题。

另外,从本发明实施例的技术方案不难得出,本发明的技术方案不仅能够在调整报文处理顺序之后,成功对报文序列号进行检查;还可以在调整报文处理顺序之前,对报文序列号进行成功检查,克服了报文处理顺序调整而带来的乱序问题。

同时,相对于现有的序列号检查方案来说,还能够提高OSPF路由器处理处理OSPF协议报文的效率。现有的序列号检查方案,先解析报文取出其中的序列号,进行序列号的检查;然后,根据报文的不同种类送入不同优先级的OSPF缓存,在正式进行OSPF处理再次解析OSPF报文进行OSPF处理。可见,现有技术中对接收的报文进行了两次解析。而在本发明的技术方案中,由于序列号的检查在调整报文处理顺序之后执行,这样,就可以通过一次解析的操作,完成对报文的序列号、报文摘要的验证以及根据OSPF协议处理报文的操作,提高处理OSPF协议报文的效率。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号