一种报文流量控制方法

文档序号:7917829阅读:153来源:国知局
专利名称:一种报文流量控制方法
技术领域
本发明涉及数据通信技术领域,尤其涉及一种对发送报文的流量进行控制的方法。
背景技术
目前,在数据通信设备例如路由器设备中,有时候设备内部需要对待发送或接收到的报文进行一些特殊处理,例如加密或解密处理,通常这些特殊处理的操作可以由软件完成。但是,在对性能要求高的场合,这些特殊处理操作可以由硬件完成。图1为现有常见的硬件处理模块在路由器内部的结构示意图。参见图1,路由器的中央处理器(CPU)中运行上层软件(协议栈)和驱动软件,驱动软件向上层软件提供报文处理的软件接口,上层软件通过调用驱动软件提供的接口完成本地的报文处理。驱动软件将待处理的报文发给给硬件处理模块,硬件处理模块将报文进行处理后交回给CPU进行后续处理。图2为现有硬件处理模块内的结构示意图。参见图2,硬件处理模块主要包括硬件先入先出(FIFO)队列和数据处理模块,其中硬件FIFO队列是一种先进先出的数据缓存器, 他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。在图2所示的硬件处理模块中, 所述硬件FIFO队列用于缓存待处理的报文。在性能要求比较高的场合,通常该硬件FIFO 队列的容量会比较大,以便在有突发流量的情况下,能够缓存所有的报文,不会造成报文丢失。但大容量的硬件FIFO队列会给硬件成本带来压力,特别是在成本敏感的情况下更是如此。因此,现有技术目前需要解决的技术问题是如何以较低的成本即在硬件处理模块FIFO队列容量较小的情况下,在传入硬件处理模块的数据流量突发增高时降低报文的丢包率,以满足数据流量突发增高这种对性能要求较高的场合的要求。

发明内容
有鉴于此,本发明的主要目的在于提供一种报文流量控制方法,以在硬件处理模块FIFO容量较小的情况下,在传入硬件处理模块的数据流量突发增高时,降低报文的丢包率。本发明的技术方案是这样实现的一种报文流量控制方法,包括设置流量控制桶和缓存队列;当需要向硬件处理模块发送请求报文时执行步骤 A,当收到硬件处理模块的回应报文时执行步骤E ;A、判断缓存队列中是否有被缓存报文,如果有则执行步骤C,否则执行步骤B ;B、判断流量控制桶的当前桶深是否大于或等于当前需要发送的请求报文的长度,如果是则发送该请求报文,并将当前桶深减去所发送报文的长度得到新的桶深,结束本流程;否则执行步骤C;C、在缓存队列的尾部缓存当前需要发送的请求报文,之后执行步骤D ;D、判断流量控制桶的当前桶深是否大于或等于缓存队列头部的请求报文的长度, 如果是则发送该头部的请求报文,将当前桶深减去所发送报文的长度得到新的桶深,并结束本流程;否则结束本流程;E、将所述桶深增加所述回应报文的长度得到新的桶深,之后执行步骤D。优选的,当收到回应报文之后、并在所述步骤E之前,进一步包括判断所收到的回应报文是否为已发送的请求报文对应的回应报文,如果是,则执行步骤E,否则丢弃该回应报文,结束本流程。优选的,该方法进一步包括如果在请求报文发送后的指定时间内没有收到该请求报文对应的回应报文,判定该请求超时,则将流量控制桶的桶深增加该请求报文的长度得到新的桶深。优选的,该方法进一步设置请求队列,且在发送请求报文时在该请求队列中创建对应的请求节点,该请求节点中包括该请求报文的序列号;并且所述判断回应报文是否为已发送的请求报文对应的回应报文的具体方法为从回应报文的头部信息中提取序列号, 查询所述请求队列中是否存在与所述回应报文序列号匹配的请求节点序列号,如果存在则判定该回应报文为该请求节点所标记的请求报文对应的回应报文,并且进一步删除该请求节点;否则判定该回应报文不是已发送的请求报文对应的回应报文。优选的,所述请求节点中进一步包括上层软件信息和调用信息,在收到回应报文并查询到该回应报文对应的请求节点后,进一步根据该请求节点中的上层软件信息和调用信息将所述回应报文调用至对应的上层软件。优选的,所述流量控制桶的最大桶深大于所述硬件处理模块中的先入先出FIFO 队列容量。优选的,该方法的执行装置为数据处理设备的中央处理器。优选的,所述数据处理设备为路由器。优选的,所述硬件处理模块为硬件加解密模块。与现有技术相比,本发明通过一个流量控制桶和缓存队列之间的控制配合机制来完成流量整形及报文的缓存,在硬件处理模块FIFO队列容量较小的情况下(通常是几K或十几K),以较低的硬件成本,在传入硬件处理模块的数据流量突发增高时降低报文的丢包率,以满足数据流量突发增高这种对性能要求较高的场合的要求。


图1为现有常见的硬件处理模块在路由器内部的结构示意图;图2为现有硬件处理模块内的结构示意图;图3为本发明所述方法的一种实施流程图。
具体实施例方式下面结合附图及具体实施例对本发明再作进一步详细的说明。
在一种实施例中,本发明所述方法的执行装置可以为数据处理设备的CPU,所述数据通信设备可以为路由器或其他数据通信设备。所述CPU在向硬件处理模块发送请求报文时、以及收到硬件处理模块返回的回应报文时,通过执行本发明的方法来控制发往硬件处理模块的报文流量,从而满足数据流量突发增高这种对性能要求较高的场合的要求。本发明的方法首先需要设置流量控制桶和缓存队列。通过监控所述流量控制桶来控制发送到硬件处理模块但还未收到回应报文的所有请求报文的总字节数,从而避免硬件 FIFO队列的溢出造成丢包。本发明所述流量控制桶为一虚拟的逻辑容量,其容量值被称为桶深,桶深根据请求报文的发送情况和回应报文的接收情况调整,其初始桶深为最大桶深, 该流量控制桶的最大桶深需大于硬件处理模块中的FIFO队列容量,具体数值需要试验得出经验值。所述缓存队列为一报文缓存队列,用于流量控制桶的桶深小于待发送的请求报文的长度时,缓存该请求报文到该缓存队列,在等待流量控制桶的桶深满足要求时再进行处理。为了便于验证硬件处理模块返回的回应请求的合法性,即该回应请求是否为已发送的请求报文对应的回应报文,以及为了在本地保存请求报文的一些基本信息以方便进行 CPU内部驱动软件的后续处理,在一种实施例中,还可以进一步设置一个请求队列,用于将请求报文发送到硬件处理模块后,在该请求队列中创建一个请求节点,该请求节点中包括该请求报文的基本信息(如序列号、上层软件信息、调用信息、数据长度、请求类型等),以便在收到硬件处理模块的回应报文后,从请求队列中取出该回应报文对应的请求节点中的信息,以进行后续操作,例如可以根据该请求节点中的上层软件信息和调用信息将所述回应报文调用至对应的上层软件。在本发明的一种实施例中,可以在CPU中设置驱动软件,上层软件调用驱动软件提供的功能,将发往硬件处理模块的报文会首先发送到该驱动软件中,由该驱动软件执行本发明的方法,对发向硬件处理模块的报文的流量进行控制。并且,本发明不限制CPU与硬件处理模块间通信的数据总线类型,只需要最底层的驱动软件提供对于数据总线的读写函数,方便软件的移植。图3为本发明所述方法的一种实施例流程图。参见图3,该实施例中设置了流量控制桶31、缓存队列32以及请求队列33,该方法主要包括两个处理流程,即发送流程和接收流程,其中线条-1 —表示正常情况下不需要缓存时的发送处理分支,线条-2 —表示发送方向需要缓存时的处理分支,线条-3—表示接收方向处理缓存队列的处理分支。下面分别介绍。(一 )发送流程当驱动软件收到上层软件的处理请求报文时执行步骤301,该请求报文即需要发送到硬件处理模块处理的请求报文,假设该请求报文的数据长度为Y。步骤301、判断缓存队列中是否有被缓存的报文,如果有则执行步骤303,否则执行步骤302。步骤302、判断当前流量控制桶中的桶深是否大于或等于所述当前需要发送的请求报文的数据长度,如果是,表示桶深满足要求,则收集请求报文的基本信息,例如包括收集该请求报文的序列号、上层软件信息、调用信息、数据长度、请求类型等,并可以利用所收集的信息创建一个请求节点,将该请求节点存于所述请求队列中,同时将该请求报文发送到硬件处理模块进行处理,并将流量控制桶的当前桶深减去该请求报文的数据长度Y,得到最新的桶深,结束本流程。如果当前流量控制桶中的桶深小于所述当前需发送的请求报文的数据长度,表示桶深不满足要求,则执行步骤303。步骤303、当前需要发送的请求报文暂时不发送给硬件处理模块,而是将该请求报文缓存到缓存队列的尾部,然后执行步骤304。步骤304、判断当前流量控制桶中的桶深是否大于或等于缓存队列头部的请求报文的数据长度(假设该头部请求报文的数据长度为Z),如果是,则从缓存队列中的头部取出该请求报文,收集请求报文的基本信息,例如包括收集该请求报文的序列号、上层软件信息、调用信息、数据长度、请求类型等,利用所收集的基本信息创建一个请求节点,将该请求节点存于所述请求队列中,同时将该请求报文发送到硬件处理模块进行处理,并将流量控制桶的当前桶深减去该请求报文的数据长度Z,得到最新的桶深,结束本流程。如果当前流量控制桶中的桶深小于缓存队列头部的请求报文的数据长度,则结束本流程。( 二)接收流程当驱动软件收到硬件处理模块返回的回应报文后,则执行步骤311,此处假设该回应报文的数据长度为X。步骤311、首先检查回应报文的合法性,即判断所收到的回应报文是否为已发送的请求报文对应的回应报文,如果是则合法,执行步骤312,否则不合法,丢弃该回应报文,并结束本流程。所述检查回应报文合法性的具体方法可以是从回应报文的头部信息中提取序列号,查询所述请求队列中是否存在与所述回应报文序列号匹配的请求节点序列号,所述匹配一般是指相同,如果存在则判定该回应报文为该请求节点所标记的请求报文对应的回应报文,是合法回应报文;否则判定该回应报文不是已发送的请求报文对应的回应报文,是非法回应报文。步骤312、根据该回应报文对应的请求节点中的上层软件信息和调用信息将所述回应报文调用至对应的上层软件,并从请求队列中删除该回应报文对应的请求节点,并执行步骤313。步骤313、将流量控制桶的桶深加上该回应报文的数据长度X得到新的桶深,更新桶深后执行所述步骤304,即检查当前流量控制桶的桶深是否大于或等于报文缓存队列头部的请求报文的数据长度(假设该头部请求报文的数据长度为Z),如果大于,则从缓存队列中的头部取出该请求报文,创建该请求报文对应的请求队列节点、发送该请求报文、并将流量控制桶的桶深减去该请求报文的数据长度Z得到新的桶深;如果当前流量控制桶中的桶深小于报文缓存队列头部的请求报文的数据长度,则结束本流程。所述检查回应报文合法性的具体方法也可以不依赖于请求队列,也可以采用其他方法检查,例如可以在发送请求报文时在请求报文中添加一特殊标记,只要回应报文中也有该特殊标记,就可以判定该回应报文为已发送的请求报文对应的回应报文。在这种情况下,如果上层软件只有一个且调用方式固定,不需要请求节点的上层软件信息和调用信息将所述回应报文调用至对应的上层软件,则也可以省略掉请求队列。当然,上述检查回应报文合法性的步骤在其他实施例中也可以省去,即收到回应报文就执行步骤312及后续步骤,同样可以降低报文的丢包率,达到本发明的目的,只是效
果稍差。在本发明的另一种实施例中,还进一步包括超时处理流程,即对于发送到硬件处理模块的请求报文进行超时检查,即设定一定时器,在请求报文发送后即启动该定时器,当在该请求报文发送后一定时间内没有收到硬件处理模块针对该请求报文的回应报文,则认为该请求报文超时,将该请求的数据长度返还到流量控制桶中,即将流量控制桶的当前桶深加上该请求报文的数据长度,得到最新的桶深。如果设置了请求队列,则进一步从请求队列中删除该请求报文的请求节点。下面介绍一个利用本发明进行流量控制的一个具体设备的性能数据,例如在某款路由器中包含CPU和硬件处理模块,该硬件处理模块为一个硬件加解密模块,CPU与加解密处理模块间采用以太链路通信,硬件加解密模块的FIFO队列大小为8K,CPU利用本发明的方法控制发往加解密处理模块的流量,软件根据试验确定流量控制桶的最大桶深为16K,实现了因特网协议安全性(IPSEC)使用该硬件加密模块IOM字节大小报文可满足转发性能 200Mbps ο以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种报文流量控制方法,其特征在于,包括设置流量控制桶和缓存队列;当需要向硬件处理模块发送请求报文时执行步骤A,当收到硬件处理模块的回应报文时执行步骤E ;A、判断缓存队列中是否有被缓存报文,如果有则执行步骤C,否则执行步骤B;B、判断流量控制桶的当前桶深是否大于或等于当前需要发送的请求报文的长度,如果是则发送该请求报文,并将当前桶深减去所发送报文的长度得到新的桶深,结束本流程;否则执行步骤C ;C、在缓存队列的尾部缓存当前需要发送的请求报文,之后执行步骤D;D、判断流量控制桶的当前桶深是否大于或等于缓存队列头部的请求报文的长度,如果是则发送该头部的请求报文,将当前桶深减去所发送报文的长度得到新的桶深,并结束本流程;否则结束本流程;E、将所述桶深增加所述回应报文的长度得到新的桶深,之后执行步骤D。
2.根据权利要求1所述的方法,其特征在于,当收到回应报文之后、并在所述步骤E之前,进一步包括判断所收到的回应报文是否为已发送的请求报文对应的回应报文,如果是,则执行步骤E,否则丢弃该回应报文,结束本流程。
3.根据权利要求2所述的方法,其特征在于,该方法进一步包括如果在请求报文发送后的指定时间内没有收到该请求报文对应的回应报文,判定该请求超时,则将流量控制桶的桶深增加该请求报文的长度得到新的桶深。
4.根据权利要求2所述的方法,其特征在于,该方法进一步设置请求队列,且在发送请求报文时在该请求队列中创建对应的请求节点,该请求节点中包括该请求报文的序列号;并且所述判断回应报文是否为已发送的请求报文对应的回应报文的具体方法为从回应报文的头部信息中提取序列号,查询所述请求队列中是否存在与所述回应报文序列号匹配的请求节点序列号,如果存在则判定该回应报文为该请求节点所标记的请求报文对应的回应报文,并且进一步删除该请求节点;否则判定该回应报文不是已发送的请求报文对应的回应报文。
5.根据权利要求4所述的方法,其特征在于,所述请求节点中进一步包括上层软件信息和调用信息,在收到回应报文并查询到该回应报文对应的请求节点后,进一步根据该请求节点中的上层软件信息和调用信息将所述回应报文调用至对应的上层软件。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述流量控制桶的最大桶深大于所述硬件处理模块中的先入先出FIFO队列容量。
7.根据权利要求1至5任一项所述的方法,其特征在于,该方法的执行装置为数据处理设备的中央处理器。
8.根据权利要求7所述的方法,其特征在于,所述数据处理设备为路由器。
9.根据权利要求1至5任一项所述的方法,其特征在于,所述硬件处理模块为硬件加解密模块。
全文摘要
本发明公开了一种硬件报文处理模块驱动软件中的报文流量控制方法,包括设置流量控制桶和缓存队列;当发送报文时执行A,当收到回应报文时执行E;A、判断缓存队列中是否有报文,有则执行C,否则执行B;B、判断流量控制桶的当前桶深是否大于或等于当前需发送报文长度,是则发送该报文并将当前桶深减去所发送报文的长度;否则执行C;C、在缓存队列的尾部缓存当前需发送报文,执行D;D、判断流量控制桶的当前桶深是否大于或等于缓存队列头部报文长度,是则发送该头部报文,将当前桶深减去该报文的长度;E、将当前桶深增加回应报文的长度得到新的桶深,执行D。利用本发明,可以以较低的硬件成本,在数据流量突发增高时降低报文的丢包率。
文档编号H04L12/56GK102299861SQ201110283669
公开日2011年12月28日 申请日期2011年9月22日 优先权日2011年9月22日
发明者周雨潇 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1