具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明公开的报文回调方法及装置,适用于当一个操作流程中报文需要经过特定处理才能进行后续操作时,将待处理的报文发送给特定功能模块,即报文处理装置进行处理,该特定功能模块再将处理后的报文发送回来,以继续进行该操作流程的后续操作。例如,在网络路由器中,IPSec协议层模块的报文传送到加解密驱动模块,由加解密驱动模块发送到加解密芯片进行加解密处理,加解密芯片对报文进行加解密后发送到加解密驱动模块,加解密驱动模块再回传至IPSec协议层模块。为了本领域技术人员清楚的理解本发明的实现方法,在本说明书中将多处以加解密驱动模块的处理流程为例进行举例说明,需要说明的是,本发明的报文回调方法及装置不仅限于加解密处理的场景,还可以应用于其他报文处理的场景,本发明对此不做限定。
实施例一
本发明实施例提供一种报文回调方法,如图1所示,该方法包括:
101、接收报文处理装置发送的封装头部信息后的已处理报文。
其中,报文在传输过程通常会进行头部信息封装,在本发明的实施例中加解密驱动模块接收经过加解密芯片处理后的报文,由于之前加解密驱动模块将报文序列号和BD序列号一起封装到头部信息中,当然封装的头部信息中还可以包含其他与传输或处理所需的信息,例如加密的密钥向量等,本发明实施例对此不做限定。加解密芯片将报文经过加解密处理后,不改变报文封装的头部信息,将处理完成的密文信息替代报文中原有报文数据区的明文信息。
102、从已处理报文封装的头部信息中获取其报文序列号和BD序列号,其中所述BD序列号与BD环的缓存单元一一对应。
其中,在步骤101之前未将报文发送给报文处理装置时,就可以为待处理报文分配报文序列号及未锁定的BD环的缓存单元;将所述待处理报文的回调函数和报文序列号存储在所述BD环的缓存单元中,并锁定所述BD环的缓存单元;对所述待处理报文进行头部信息的封装,并发送给报文处理装置,其中所述待处理报文的封装的头部信息中包含所述待处理报文对应的报文序列号和BD序列号。
103、若所述封装的头部信息中获取的报文序列号与所述BD环的缓存单元中存储的报文序列号匹配,则根据所述BD环的缓存单元中存储的回调函数回调所述已处理报文。
其中,从封装的头部信息中获取到BD序列号后可以查找到对应的BD环的缓存单元,在该BD环的缓存单元中存储有一个报文序列号,将封装的头部信息中获取的报文序列号与BD环的缓存单元中存储的报文序列号进行匹配,若匹配则说明当前接收到的已处理报文是该BD环的缓存单元被锁定时所对应的报文,因此可以调用锁定时在其中存储的回调函数,将已处理报文回调。
反之,从封装的头部信息中获取到BD序列号后必然可以查找到对应的BD环的缓存单元,但是该BD环的缓存单元中存储的报文序列号与当前已处理报文封装的头部信息中获取的报文序列号不匹配,则说明该BD环的缓存单元也许曾经为该报文锁定,但是由于时延或其他原因该BD环的缓存单元已被其他报文占用,其中存储的报文序列号和回调函数是与其他报文对应的,而不是当前接收到的已处理报文的,因此不用执行回调函数对当前已处理报文进行回调。
本发明实施例提供的报文回调方法,从处理装置返回的已处理报文封装的头部信息中获取其报文序列号和BD序列号,若获取的报文序列号与BD环的缓存单元中存储的报文序列号匹配,则根据所述BD环的缓存单元中存储的回调函数回调该已处理报文,与现有技术中依据BD序列号进行回调相比,由于每个报文除了有对应的BD环的缓存单元外,还有报文序列号作为匹配条件,在两者均确定无误的情况下才采用该BD环的缓存单元中的回调函数将已处理报文回调,使得回调的已处理报文是该函数对应的报文,从而确保正确回调已处理报文。
实施例二
本发明实施例提供一种报文回调方法,如图2所示,该方法可以包括:
201、接收到待处理报文。
其中,在一个处理流程中其中的部分处理环节可以交由特定功能的报文处理装置代为处理,因此当接收到待处理报文时,需要将待处理报文发送给报文处理装置,在报文处理完成后,还需要将处理后的报文发送到等待该报文的接口。例如,在网络路由器中,由硬件加解密芯片实现报文的加密和解密操作,IPSec协议层模块将待加密或待解密的报文发送到加解密驱动层,加解密驱动层模块接收到待加解密的报文后需要将其封装头部信息后发送给加解密芯片进行处理。为了在报文处理完毕后将处理后的报文回送给IPSec协议层,加解密驱动层模块就需要准确锁定其回调函数。
加解密驱动模块构建用于缓存报文的虚拟BD环,虚拟BD环的长度可以自由设定,设定的原则是根据加解密芯片(硬件加密芯片)的处理速率来决定,对应的加密速率越高,建议设定的BD环长度越大。创建完成BD环过后需要对每一个BD缓存单元(即BD缓存结构)进行初始化,保证每一个BD缓存单元处于解锁状态供待加解密报文进行缓存,BD缓存单元用于存储对应缓存报文回送IPSec协议层模块的回调函数和回调参数。
当IPSec协议层模块将待加密报文送入加解密驱动层模块时,加解密驱动层模块需要依次查找BD环并获取空闲的BD缓存单元(解锁状态)缓存该报文,然后将BD序列封装至报文头部,并将回调参数保存至对应的BD缓存单元中,最后对该BD缓存单元进行锁定,确保该报文在加解密完成之前该BD缓存单元不会被其他报文占用。
本实施例在加解密报文封装的头部信息中加入了除BD序列号之外的另一个专属于本次发送报文的序列号,该序列号在每一个报文完成封装过后进行累加,每次累加1即可,目的是保证每一个加密请求的报文都有独占的特定标示符。同时将该标示符也保存至报文对应的BD缓存单元中去,作为回收报文时比对报文正确性的依据。
在本实施例中,为待处理的报文分配一个BD环的缓存单元用于存储回调函数等信息。本实施例中的,加解密芯片的作用为报文处理装置,本发明中步骤201-213的执行主体为加解密驱动层模块。
进一步可选的,当BD环的缓存单元充裕时可以直接分配空闲的资源,但当BD环的缓存单元不充裕时,为了充分利用BD环中的BD环的缓存单元,可以采取如步骤202和213的资源回收策略,具体如下。
202、判断BD环中的每个BD环的缓存单元是否均已被锁定;若存在未锁定的BD环的缓存单元,则执行步骤203;若每个BD环的缓存单元均被锁定,则执行步骤213。
需要说明的是,步骤202是可选步骤,当BD环的缓存单元均被锁定时回收部分资源,可选的,也可以在每个缓存单元被锁定时记录其被锁定的时间值,当被锁定的时间超过一定时长则解锁该缓存单元。当然,本发明还可以采用其他回收BD环的缓存单元的方式,本发明实施例对此不做限定,可以理解的是一旦一个缓存单元回收,也就意味着该缓存单元中已存储的之前的报文序列号和回调函数等信息都被丢弃,对应的之前的报文将不会回调,也就被视为丢弃了。
进一步的,为了给报文处理装置和传输过程提供更多的处理时间,避免不必要的丢弃报文,可以延长等待的时间。具体的,为待处理报文分配未锁定的BD环的缓存单元的过程还可以包括:若N次判断表明BD环中的每个的缓存单元均被锁定,则解锁所述BD环中第一个被锁定的缓存单元;其中N为大于1的整数;将解锁后的BD环的缓存单元分配给所述待处理报文。
203、为待处理报文分配报文序列号及未锁定的BD环的缓存单元。
其中,所述报文序列号的形式本实施例不做限定,报文序列号可以为数字编号,或者也可以为时间戳。一个报文对应一个报文序列号,避免报文序列号重复可以防止在报文处理后为其匹配错误的回调函数。其中,时间戳是不重复的,在为待处理报文分配报文序列号的时刻的时间戳作为其序列号,一方面存储在BD环的缓存单元中,另一方面也同时写入到待处理报文封装的头部信息中。当以数字编号作为报文序列号时,数字编号的字节数决定其可选的数字编号的个数,通常数字编号的字节数越多可供分配的数字编号个数越多,需要较长时间及较多报文才能将遍历数字编号从而翻转到第一个编号循环使用编号。同时,数字编号的字节数越长相应的占用空间越多,因此数字编号的字节数可以根据实际需要选择。例如,预设报文序列号的位数为64bit,即8字节,此时需要若干年才会面临序列号翻转,因此可以保证较长时间内的待处理报文均分配到唯一的报文序列号。
204、将所述待处理报文的回调函数和报文序列号存储在所述BD环的缓存单元中。
其中,报文序列号用于匹配处理后的报文是否为该BD环的缓存单元中存储的信息对应的报文,回调函数用于将已处理报文回送到相应接口。
205、锁定所述BD环的缓存单元。
其中,BD环中的缓存单元一旦被分配给待处理报文后,便于该报文一一对应,为了防止该报文被处理后无法回调,需要将存储有报文序列号和回调函数的BD环的缓存单元锁定,后续到来的待处理报文将不再占用该BD环的缓存单元。
206、对所述待处理报文进行头部信息的封装,并发送给报文处理装置,其中所述待处理报文封装的头部信息中包含所述待处理报文对应的报文序列号和BD序列号。
其中,封装的头部信息包括已分配的BD环的缓存单元的BD序列号,以及已分配的报文序列号,当然还可以包括处理或传输所需的其他封装的头部信息,本实施例对此不做限定。例如,封装头部信息后的待加密报文可以为如图3所示的形式,BD序列号为1,报文序列号为2049,其他封装的头部信息可以包括加解密所需要的密钥向量等信息,其中BD序列号、报文序列号以及其他信息的封装顺序本实施例不做限定。
207、接收报文处理装置发送的封装头部信息后的已处理报文。
其中,报文处理装置接收到封装头部信息后的待处理报文后,解析出待处理报文进行处理,保持封装的头部信息中的BD序列号和报文序列号不变,对已处理报文进行重新封装,并返回封装头部信息后的已处理报文。与图3的类似,报文处理装置返回的报文封装的头部信息部分基本不变,只是将待处理报文替换为已处理报文。
208、从已处理报文封装的头部信息中获取其报文序列号和BD序列号,其中所述BD序列号与BD环的缓存单元一一对应。
可以理解的是,每个BD环的缓存单元都有其对应的BD序列号,根据从封装的头部信息中获取的BD序列号可以查找到对应的BD环的缓存单元。
209、将所述封装的头部信息中获取的报文序列号与所述BD环的缓存单元中存储的报文序列号进行匹配;若匹配成功,则执行步骤210;若匹配失败,则执行步骤211。
其中,采用步骤208中获取的BD序列号可以查找到对应的BD环的缓存单元,进一步的通过将已处理报文封装的头部信息中的报文序列号与BD环的缓存单元中存储的报文序列号进行匹配,可以进一步确定该BD环的缓存单元为该报文锁定后是否一直未被重写,从而保证BD环的缓存单元中存储的回调函数是该报文对应的回调函数。
210、根据所述BD环的缓存单元中存储的回调函数回调所述已处理报文。
即加解密驱动模块层模块在报文经过加解密芯片处理后,将处理后的报文回送给IPSec协议层模块。
211、解锁已回调的报文对应的所述BD环的缓存单元。
212、丢弃所述已处理报文。
进一步的,为了在BD环的缓存单元不充足的情况下,有效回收BD环的缓存单元,可以通过步骤202的判断结果确定是否放弃丢失可能性较大的报文或已经丢失的报文的回调,当步骤202判断表明BD环的缓存单元环中的每个BD环的缓存单元均被锁定时,执行如下步骤回收丢失可能性较大或已经丢失的报文对应的BD环的缓存单元:
213、解锁所述BD环的缓存单元环中第一个被锁定的BD环的缓存单元;然后执行步骤203。
例如,如图4所示的一种实际场景举例,首先,为接收到待处理报文其报文序列号为1,为其分配未锁定的BD环的缓存单元BD1,将报文1的相关信息存储在BD1中,并将报文1发送给报文处理装置。然后,在报文处理装置返回处理后的报文1之前,陆续接收到多个报文并分别分配了BD环的缓存单元,导致BD环中的2048个缓存单元全部被占用。接下来,在接收到待处理报文2049时,由于BD环的缓存单元全部被占满所以将最先锁定的BD1解锁,视为报文1已处理失败或丢弃。将报文2049的相关信息写入BD1后锁定BD1,将报文2049发送给报文处理装置。此时,如果再接收到处理完成的报文1,可以查找到对应的BD1,但是BD1中存储的报文序列号此时为2049而不再是1,因此报文1被丢弃。而如果接收到处理完成的报文2049,查找到对应的BD1后,BD1中存储的报文序列号和报文封装的头部信息中的报文序列号均为2049,因此可以确定BD1与报文2049之间的对应关系无误,采用BD1中存储的回调函数回调处理后的报文2049。最后,解锁已回调的报文2049对应的BD1,以便后续待处理报文使用。
本发明实施例提供的报文回调方法,从处理装置返回的已处理报文封装的头部信息中获取其报文序列号和BD序列号,若获取的报文序列号与BD环的缓存单元中存储的报文序列号匹配,则根据所述BD环的缓存单元中存储的回调函数回调该已处理报文,与现有技术中依据BD序列号进行回调相比,由于每个报文除了有对应的BD环的缓存单元外,还有报文序列号作为匹配条件,在两者均确定无误的情况下才采用该BD环的缓存单元中的回调函数将已处理报文回调,使得回调的已处理报文是该函数对应的报文,从而确保正确回调已处理报文。
实施例三
本发明的另一实施例提供一种报文回调装置,如图5所示,该装置可以包括:
接收模块51,用于接收报文处理装置发送的封装头部信息后的已处理报文;
获取模块52,用于从所述接收模块51接收到的已处理报文封装的头部信息中获取其报文序列号和缓冲区描述符BD序列号,其中所述BD序列号与BD环的缓存单元一一对应;
匹配模块53,用于将所述获取模块52获取到的报文序列号和所述BD环的缓存单元中存储的报文序列号进行匹配;
回调模块54,用于当所述匹配模块53的匹配结果表明所述封装的头部信息中获取的报文序列号与所述BD环的缓存单元中存储的报文序列号匹配时,根据所述BD环的缓存单元中存储的回调函数回调所述已处理报文。
可选的,该报文回调模块54还可以用于:当所述匹配模块53的匹配结果表明所述封装的头部信息中获取的报文序列号与所述BD环的缓存单元中存储的报文序列号不匹配时,丢弃所述已处理报文。
在本实施例中,该报文回调装置还可以包括:
分配模块55,用于为待处理报文分配报文序列号及未锁定的BD环的缓存单元;
存储模块56,用于将所述待处理报文的回调函数和报文序列号存储在所述分配模块55分配的BD环的缓存单元中,并锁定所述BD环的缓存单元;
发送模块57,用于对所述待处理报文进行头部信息的封装,并发送给报文处理装置,其中所述待处理报文封装的头部信息中包含所述待处理报文对应的报文序列号和BD序列号。
进一步可选的,在一种实现方式中,所述分配模块55还用于:
当BD环中的每个缓存单元均被锁定时,解锁所述BD环中第一个被锁定的缓存单元;
将解锁后的缓存单元分配给所述待处理报文。
进一步可选的,在另一种实现方式中,所述分配模块55还用于:
当N次判断表明BD环中的每个缓存单元均被锁定时,解锁所述BD环中第一个被锁定的缓存单元;其中N为大于1的整数;
将解锁后的缓存单元分配给所述待处理报文。
进一步可选的,所述报文序列号可以包括:数字编号或时间戳。
本发明实施例提供的报文回调装置,从处理装置返回的已处理报文封装的头部信息中获取其报文序列号和BD序列号,若获取的报文序列号与BD环的缓存单元中存储的报文序列号匹配,则根据所述BD环的缓存单元中存储的回调函数回调该已处理报文,与现有技术中依据BD序列号进行回调相比,由于每个报文除了有对应的BD环的缓存单元外,还有报文序列号作为匹配条件,在两者均确定无误的情况下才采用该BD环的缓存单元中的回调函数将已处理报文回调,使得回调的已处理报文是该函数对应的报文,从而确保正确回调已处理报文。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。