一种报文转发方法及装置与流程

文档序号:12492355阅读:303来源:国知局
一种报文转发方法及装置与流程

本发明涉及计算机技术领域,特别是涉及一种报文转发方法及装置。



背景技术:

网络报文转发设备的转发吞吐性能和新建会话性能代表了一个网络安全厂商的技术实力。随着计算机领域科技发展,多核技术已经成为十分成熟的技术,基于多核系统的网络报文转发设备随之出现,通过增加网络报文转发设备的中央处理器(Central Processing Unit,CPU)核的个数,来提升网络报文转发设备的转发吞吐性能已成为一种趋势。

在现有技术中,在进行报文转发时,网络报文转发设备通常基于用户态和内核态共同维护的实体会话表对报文进行转发,如图1所示,在用户态、内核线程、内核系统调用、内核软中断上下文等分别有不同模块或CPU,对共同维护的实体会话表进行各种新建、删除、更新和查找等访问操作。然而,在多核系统下,为了保证会话表的安全性,用户态和内核态通过加锁的方式访问共同维护的实体会话表,即一个模块或CPU访问实体会话表时,其他模块或CPU无法访问实体会话表,因此会产生多核互斥以及资源竞争的问题,这样会造成网络报文转发设备的转发性能并未随着CPU核个数的增加而线性增长,从而导致报文转发性能较低。



技术实现要素:

有鉴于此,本发明提出了一种报文转发方法及装置,主要目的在于解决由于现有技术中网络报文转发设备的转发性能并未随着CPU核个数的增加而线性增长,导致报文转发性能较低的问题。

为达到上述目的,本发明提供如下技术方案:

一方面,本发明提供了一种报文转发方法,包括:

根据接收到的报文,查询用户态CPU本地建立的实体会话表中是否存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表;

若存在,则通过所述用户态CPU对所述报文进行转发;

若不存在,则基于接收报文的用户态CPU向内核态CPU获取所述报文对应的会话连接建立策略信息;

基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接,并通过所述接收报文的CPU对所述报文进行转发。

进一步地,所述接收报文的用户态CPU通过内核态CPU获取所述报文对应的会话连接建立策略信息包括:

基于所述接收报文的用户态CPU向内核态CPU发送针对所述报文建立会话连接的请求,所述请求中包含所述报文;

所述内核态CPU根据所述请求获取所述报文对应的会话连接建立策略信息,并将所述会话连接建立策略信息发送给所述接收报文的用户态CPU。

进一步地,所述内核态CPU根据所述请求获取所述报文对应的会话连接建立策略信息包括:

所述内核态CPU在接收到所述请求后,查询是否有已建立的会话子连接模板,所述会话子连接模板为源端口号为0且源互联网协议IP地址、目的IP地址、目的端口号以及协议类型与会话连接一致的会话连接模板;

若有已建立的会话子连接模板,则查询已建立的会话子连接模板中是否存在与所述报文对应的会话子连接模板;

若存在与所述报文对应的会话子连接模板,则将所述报文按照所述会话子连接模板封装与所述报文对应的会话消息,并发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息;

若不存在与所述报文对应的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息;

若没有已建立的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息。

进一步地,通过所述用户态CPU对所述报文进行转发包括:

确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU是否为接收报文的用户态CPU;

若为接收报文的用户态CPU,则通过接收报文的用户态CPU对所述报文进行转发;

若为除接收报文的用户态CPU以外的其他用户态CPU,则通过倒核队列将所述报文转发给对应的其他用户态CPU进行转发。

进一步地,所述方法还包括:

为每个用户态CPU建立一个会话消息接收队列,所述会话消息接收队列用于接收用户态其他CPU对本地CPU实体会话表的新建、删除或更新消息。

进一步地,所述方法还包括:

用户态CPU接收设置在用户态的配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息;

接收到所述操作消息的用户态CPU根据所述操作消息对所述用户态CPU本地实体会话表执行对应的操作。

进一步地,所述用户态CPU接收设置在用户态的配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息,包括:

用户态建立与所述配置命令行调试模块进行通信的进程间通信ipc线程;

所述ipc线程接收所述配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息,并根据所述操作消息的类型确定执行所述操作消息的用户态CPU;

将所述操作消息发送给确定的用户态CPU。

进一步地,所述实体会话表包括安全部分和不安全部分,所述安全部分用于存储非地址信息,所述不安全部分用于存储地址信息;所述方法还包括:

在初始化的过程中,将所述实体会话表的地址空间共享给内核态,以便内核态的其他CPU安全的获取一实体会话表的安全信息。

优选地,所述实体会话表采用预先分配的内存池申请获取。

另一个方面,本发明提供了一种报文转发装置,包括:

查询单元,用于根据接收到的报文,查询用户态CPU本地建立的实体会话表中是否存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表;

转发单元,用于若所述查询单元查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,则通过所述用户态CPU对所述报文进行转发;

获取单元,用于若所述查询单元查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接,则基于接收报文的用户态CPU向内核态CPU获取所述报文对应的会话连接建立策略信息;

建立单元,用于基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接;

所述转发单元,还用于通过所述接收报文的CPU对所述报文进行转发。

进一步地,所述获取单元包括:

获取子单元,用于基于所述接收报文的用户态CPU向内核态CPU发送针对所述报文建立会话连接的请求,所述请求中包含所述报文;

所述获取子单元,还用于所述内核态CPU根据所述请求获取所述报文对应的会话连接建立策略信息;

第一发送子单元,用于将所述会话连接建立策略信息发送给所述接收报文的用户态CPU。

进一步地,所述获取子单元包括:

第一查询模块,用于所述内核态CPU在接收到所述请求后,查询是否有已建立的会话子连接模板,所述会话子连接模板为源端口号为0且源互联网协议IP地址、目的IP地址、目的端口号以及协议类型与会话连接一致的会话连接模板;

第二查询模块,用于若所述第一查询模块查询有已建立的会话子连接模板,则查询已建立的会话子连接模板中是否存在所述报文对应的会话子连接模板;

第一发送模块,用于若所述第二查询模块查询已建立的会话子连接模板中存在所述报文对应的会话子连接模板,则将所述报文按照所述会话子连接模板封装与所述报文对应的会话消息,并发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息;

所述第一发送模块,还用于若所述第二查询模块查询已建立的会话子连接模板中不存在所述报文对应的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息;

第二发送模块,用于若所述第一查询模块查询没有已建立的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息。

进一步地,所述转发单元包括:

第一确定子单元,用于确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU是否为接收报文的用户态CPU;

转发子单元,用于若所述第一确定子单元确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU为接收报文的用户态CPU,则通过接收报文的用户态CPU对所述报文进行转发;

所述转发子单元,还用于若所述第一确定子单元确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU为除接收报文的用户态CPU以外的其他用户态CPU,则通过倒核队列将所述报文转发给对应的其他用户态CPU进行转发。

所述建立单元,还用于为每个用户态CPU建立一个会话消息接收队列,所述会话消息接收队列用于接收用户态其他CUP对本地CUP实体会话表的新建、删除或更新消息。

进一地,所述装置还包括:

接收单元,用于用户态CPU接收设置在用户态的配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息;

执行单元,用于接收到所述操作消息的用户态CPU根据所述操作消息对所述用户态CPU本地实体会话表执行对应的操作。

进一步地,所述接收单元包括:

建立子单元,用于用户态建立与所述配置命令行调试模块进行通信的进程间通信ipc线程;

接收子单元,用于所述ipc线程接收所述配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息;

第二确定子单元,用于根据所述接收子单元接收的所述操作消息的类型确定执行所述操作消息的用户态CPU;

第二发送子单元,用于将所述第二确定子单元确定的所述操作消息发送给确定的用户态CPU。

进一步地,所述实体会话表包括安全部分和不安全部分,所述安全部分用于存储非地址信息,所述不安全部分用于存储地址信息;所述装置还包括:

共享单元,用于在初始化的过程中,将所述实体会话表的地址空间共享给内核态,以便内核态的其他CPU安全的获取一实体会话表的安全信息。

优选地,所述实体会话表采用预先分配的内存池申请获取。

借由上述技术方案,本发明提供的一种报文转发方法及装置,与现有技术基于用户态和内核态共同维护的实体会话表对报文进行转发相比,本发明通过在查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表时,通过所述用户态CPU对所述报文进行转发,以及在查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接时,向内核态CPU获取所述报文对应的会话连接建立策略信息,基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接,并通过所述接收报文的CPU对所述报文进行转发,能够实现基于接收报文的用户态CPU自己维护的实体会话表对报文进行转发,避免了不同CPU竞争同一实体会话表资源,从而可以实现在多核并行转发报文时,消除多核之间互斥以及共享资源竞争的问题,实现网络报文转发设备的转发性能随着CPU核个数的增加做到线性增长,进而提升报文转发性能。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了现有技术提供的用户态和内核态共同维护实体会话表的示意图;

图2示出了本发明实施例提供的一种报文转发方法的流程示意图;

图3示出了本发明实施例提供的不同的用户态CPU各自维护各自负责处理的实体会话表的示意图;

图4示出了本发明实施例提供的另一种报文转发方法的流程示意图;

图5示出了本发明实施例提供的又一种报文转发方法的流程示意图;

图6示出了本发明实施例提供的实体会话表的基本设计架构示意图;

图7示出了本发明实施例提供的基于内核态慢速模块建立的报文对应的会话连接示意图;

图8示出了本发明实施例提供的将报文发送给内核态慢速模块进行新建逻辑处理的流程示意图;

图9示出了本发明实施例提供的内核态的新建处理逻辑的流程示意图;

图10示出了本发明实施例提供的用户态的新建处理逻辑的流程示意图;

图11示出了本发明实施例提供的配置命令行调试模块下发配置将转发核CPU3的实体会话表删掉的流程示意图;

图12示出了本发明实施例提供的内核态和用户态共享同一地址空间的示意图;

图13示出了本发明实施例提供的多个不同进程访问用户态转发核1的实体会话表信息的控制表示意图;

图14示出了本发明实施例提供的一种报文转发装置的组成框图;

图15示出了本发明实施例提供的另一种报文转发装置的组成框图。

具体实施方式

下面将参照附图更加详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明实施例提供了一种报文转发方法,如图2所示,所述方法包括:

101、根据接收到的报文,查询用户态CPU本地建立的实体会话表中是否存在与报文对应的会话连接。若是,则执行步骤102;若否,则执行步骤103。

其中,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表。本发明实施例的执行主体可以为基于多核系统的报文转发装置,所述报文转发装置可以为防火墙,也可以为路由器等。用户态CPU接收到的报文可以为网卡发送的。

需要说明的是,可以通过报文对应的会话特征查询用户态CPU本地建立的实体会话表中是否存在与报文对应的会话连接。所述会话特征可以为报文的五元组,所述五元组包括:源互联网协议(Internet Protocol,IP)地址、目的IP地址、源端口号、目的端口号和协议类型。

为了更好的理解不同的用户态CPU各自维护各自负责处理的实体会话表,本发明实施例提供了图3,如图3所示,在用户态CPU转发接收到网卡发送的报发后,可以对自己内核的用户态实体会话表进行任何增删操作。用户态的转发核1可以对内核的用户态实体会话表1进行新建和删除操作;用户态的转发核2可以对内核的用户态实体会话表2进行新建和删除操作;用户态的转发核3可以对内核的用户态实体会话表3进行新建和删除操作。由于实体会话表是不同的用户态CPU各自维护各自负责处理的实体会话表,实体会话表每个CPU核内独立的局部资源,仅能仅允许建立该实体会话表的CPU核进行新建、删除操作,其他的CPU核无法对非自己核的独有会话资源进行任何增删操作,因此本发明实施例是采用无锁方式查询用户态CPU本地建立的实体会话表,与采用现有技术采用加锁方式相比,可以避免因加锁带来的性能降低问题,从而可以做到报文转发的性能随着CPU的个数增长,进而可以提高报文转发性能。

102、通过用户态CPU对报文进行转发。

对于本发明实施例,若用户态CPU本地建立的实体会话表存在与报文对应的会话连接,则对报文进行转发的用户态CPU可以为接收报文的用户态CPU,也可以为除接收报文的用户态CPU以外的其他用户态CPU。具体地,若接收报文的用户态CPU本地建立的实体会话表中存在与报文对应的会话连接,则通过接收报文的用户态CPU对报文进行转发,若接收报文的用户态CPU本地建立的实体会话表中不存在与报文对应的会话连接,则查询所述报文对应的会话连接存在的实体会话表,并通过该实体会话表所属的其他用户态CPU对报文进行转发。

103、基于接收报文的用户态CPU向内核态CPU获取报文对应的会话连接建立策略信息。

需要说明的是,若用户态CPU本地建立的实体会话表不存在与报文对应的会话连接,则说明所述报文对应的会话连接是连接首包,在用户态CPU中并未建立过所述报文对应的会话连接,此时需要建立所述报文对应的会话连接,以便后续报文进行快速转发。具体地,所述报文对应的会话连接可以为根据所述报文对应的会话连接建立策略信息建立的,所述报文对应的会话连接建立策略信息用于指示如何建立报文对应的会话连接。所述内核态CPU保存有不同报文分别对应的会话连接建立策略信息。

在本发明实施例中,所述基于接收报文的用户态CPU向内核态CPU获取报文对应的会话连接建立策略信息的具体过程可以为:向内核态CPU发送所述报文建立会话连接的请求,以便内核态CPU根据所述请求获取所述报文对应的会话连接建立策略信息,并发送给接收报文的用户态CPU。

104、基于接收报文的用户态CPU根据会话连接建立策略信息建立与所述报文对应的会话连接,并通过接收报文的CPU对报文进行转发。

对于本发明实施例,在接收报文的用户态CPU本地建立所述报文对应的会话连接,并通过接收报文的CPU对报文进行转发,实现了转发报文的用户态CPU即为接收报文的用户态CPU,从而避免了在报文转发过程中进行倒核操作,节省了倒核操作带来的系统开销,进而提升了报文转发性能。

本发明实施例提供的一种报文转发方法,与现有技术基于用户态和内核态共同维护的实体会话表对报文进行转发相比,本发明通过在查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表时,通过所述用户态CPU对所述报文进行转发,以及在查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接时,向内核态CPU获取所述报文对应的会话连接建立策略信息,基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接,并通过所述接收报文的CPU对所述报文进行转发,能够实现基于接收报文的用户态CPU自己维护的实体会话表对报文进行转发,避免了不同CPU竞争同一实体会话表资源,从而可以实现在多核并行转发报文时,消除多核之间互斥以及共享资源竞争的问题,实现网络报文转发设备的转发性能随着CPU核个数的增加做到线性增长,进而提升报文转发性能。

本发明实施例提供了另一种报文转发方法,如图4所示,所述方法包括:

201、根据接收到的报文,查询用户态CPU本地建立的实体会话表中是否存在与报文对应的会话连接。若是,则执行步骤202;若否,则执行步骤203。

其中,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表。实体会话表只在用户态唯一存在,无需多个定时器维护状态机。如果在内核态存在一份实体会话表的副本的话,不仅仅需要维护实体会话表在用户态和内核态的一致性,因为维护一致性的消息可能丢失,为了防止内存泄漏,内核态还需要维护一个定时器,来保证实体会话表不能内存泄漏。本发明实施例通过在用户态建立实体会话表,只需要用户态每核定时器来维护会话表的生存周期即可,简化了实体会话表的维护复杂度。

202、通过用户态CPU对报文进行转发。

对于本发明实施例,步骤202具体可以包括:确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU是否为接收报文的用户态CPU;若为接收报文的用户态CPU,则通过接收报文的用户态CPU对所述报文进行转发;若为除接收报文的用户态CPU以外的其他用户态CPU,则通过倒核队列将所述报文转发给对应的其他用户态CPU进行转发。与所述报文对应的会话连接所属的用户态CPU为建立所述报文对应的会话连接的CPU。

为了更好的理解报文转发的具体过程,本发明实施例提供了图5,如图5所述,用户态CPU接收到网卡发送的报文后,首先查询本地建立的实体会话表,若实体会话表中存在报文对应的会话连接,则查询本地用户态CPU是否为建立所述报文对应的会话连接存在的实体会话表的CPU,若是,则本地用户态CPU基于实体会话表转发对报文进行转发。若否,则通过倒核队列(Rollover Protection System,Rps)将所述报文转发给对应的其他用户态CPU进行转发。若实体会话表中不存在报文对应的会话连接,则需要新建报文对应的会话连接。对于网络转发而言,最佳状况用户态CPU是从网卡收到报文后,查找报文对应的会话连接,这个报文对应的会话连接直接就在当前核,并基于已经建立好的实体会话表进行快速转发。即如图5所示,最佳路径为图5中的中间部分流程。由于报文对应的会话连接为每个CPU核内独立的局部资源,且实体会话表为每个CPU核内独立的局部资源,因此,本发明实施例中查询实体会话表为无锁查找,基于建立报文对应的会话连接存在的实体会话表的CPU对报文进行转发,能够实现整个报文转发操作为无锁操作,从而能够实现CPU核个数的增加做到线性增长,进而提升报文转发性能。

203、基于接收报文的用户态CPU向内核态CPU发送针对报文建立会话连接的请求。

其中,所述请求中包含所述报文。由于报文可以为动态端口类的连接报文,对于网络报文转发设备,触发会话连接建立的方式有两种情况:

第一种是报文驱动触发建立。即由同一会话连接的报文五元组所建立的,用户态CPU从网卡等设备上接收到报文时,需要对报文进行解析并根据报文的五元组信息建立报文对应的会话连接。

第二种是动态端口类的连接报文在父连接报文被识别时触发建立。由于动态端口类的连接报文的连接端口是未知的,是动态私有端口,为了识别出动态端口类的连接报文的报文类型和转发安全策略,网络报文转发设备在收到动态端口类的连接报文的会话父连接报文后,会预先建立好动态端口类的连接报文的会话连接模板,即预先建立好父连接报文对应的会话子连模板,所述会话子连模板为源端口号为0且源IP地址、目的IP地址、目的端口号以及协议类型与会话连接一致的会话连接模板。由于识别出父连接报文类型并确定其有子连接的深度识别模块是在模块在内核态的系统调用上下文,且与第一种建立报文对应的会话连接方式不一样,在本发明实例中对于动态端口类的连接报文建立会话连接时,可以采用同步方式,直接在内核态建立会话子连接模板。通过将会话子模板建立在内核态,除了方便深度识别模块可以同步新建、更新和删除操作外,还可以方便会话子连接模板的维护,提高会话子连接模板维护效率,由于用户态的实体会话表是每核资源,生存周期均只与报文的连接建立时间和协议相关,而会话子连接模板的生存与死亡只取决于深度识别模块。这类会话子连接模板在用户态维护时,需要将添加、删除、更新等操作变为异步操作,还要考虑同步消息丢失时,维护这个会话模板的生存周期等,设计起来十分复杂。

综上所述,本发明实施例,可以将实体会话表拆分为两类:一类为用户态的实体会话表,另一类为内核态的会话子连接模板,这两类实体会话表分别建立在不同的上下文,内核态的各个模块可以同步访问会话子连接模板,保证处理消息的同步及时性,且无需进行异步的操作消息传递,简化了实体会话表整体设计的复杂度。同时这两类实体会话表无任何交集,且内核态的会话子连接模板无需定时器维护生存周期,设计上十分简单,又保证了访问会话的同步性。

为了更好的理解内核态的会话子连接模板和用户态的实体会话表,本发明实施例提供了实体会话表的基本设计架构,如图6所示。在图6中,内核态的各个模块或者慢速核可以同步访问会话子连接模板,用户态的各个模块或者转发核可以访问自己核内维护的用户态实体会话表。

204、内核态CPU根据针对报文建立会话连接的请求获取报文对应的会话连接建立策略信息,并将会话连接建立策略信息发送给接收报文的用户态CPU。

其中,所述内核态CPU可以包括内核态慢速CPU和内核态处理核CPU,内核态慢速CPU可以为内核态慢速模块,功能较为复杂的报文对应的会话连接是基于内核态慢速模块建立的,建立流程可以如图7所示,在图7中,用户态转发核CPU1在接收到网卡发送的报文后,查询实体会话表是否存在报文对应的会话连接,若找到,则基于用户态转发核CPU1内的会话表转发报文;若没找到,则将报文转发给内核态处理核CPU2并请求建立报文对应的会话连接,内核态处理核CPU2在接收到用户态转发核CPU1发送的报文首先查询会话子连接模板,若找到会话子连接模板,则将报文根据会话子连接模板封装和填写会话消息Sessinfo,然后再将报文发送给内核态慢速模块,以便内核态慢速模块获取并返回报文对应的会话连接建立策略信息。若没找到会话子连接模板,将报文发送给内核态慢速模块,以便内核态慢速模块获取并返回报文对应的会话连接建立策略信息。

对于本发明实施例,由于新建报文对应的会话连接的逻辑必须考虑会话连接是会话子连接的可能性,通过在用户态只查询实体会话表以及在内核态查询会话子连接模板,简化了用户态快速逻辑查询实体会话表的复杂度。同时在建立报文对应的会话连接时,增加会话子连接模板是否存在的判断,将可能性较大判断移到流程图的前面,减少了条件判断的次数,从而提升了报文转发性能。

对于本发明实施例,当查询实体会话表中不存在与所述报文对应的会话连接时,需要建立所述报文对应的会话连接,如图8所示,可以将报文发送给内核态慢速模块进行新建逻辑处理,因此所述内核态CPU根据针对报文建立会话连接的请求获取报文对应的会话连接建立策略信息的步骤具体包括:所述内核态CPU在接收到所述请求后,查询是否有已建立的会话子连接模板,则查询已建立的会话子连接模板中是否存在与所述报文对应的会话子连接模板;若存在与所述报文对应的会话子连接模板,则将所述报文按照所述会话子连接模板封装与所述报文对应的会话消息,并发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息;若不存在与所述报文对应的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息;若没有已建立的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息。

为了方便理解,本发明实施例提供了内核态的新建处理逻辑,如图9所示,在图9中UK通道为内核态到用户态的通道,由于会话子连接模板是极为特殊的一种模板,且这种模板是全局表,故先判断是否有建立好的子连接模板,如果没有根本没有建立过子连接模板,则直接将报文发送给慢速模块;否则需要查询子连接模板,没有查找到,直接讲报文交给慢速模块;查找成功则将报文按照子连接模板封装session info,再将报文交给慢速模块进行新建报文连接的处理;等待慢速模块返回处理结果后,将报文再次发回给用户态的快速模块。

205、基于接收报文的用户态CPU根据会话连接建立策略信息建立与报文对应的会话连接,并通过接收报文的CPU对报文进行转发。

为了方便理解,本发明实施例提供了用户态的新建处理逻辑,如图10所示,在图10中KU通道为用户态到内核态的通道,当慢速模块返回报文对应的会话连接建立策略信息时,根据会话连接建立策略信息在接收报文的用户态CPU中建立报文对应的会话连接。

对于本发明实施例,为了方便接收用户态其他CPU对本地CPU实体会话表的新建、删除或更新消息,所述方法还提供了建立会话消息接收队功能,包括:为每个用户态CPU建立一个会话消息接收队列,所述会话消息接收队列用于接收用户态其他CPU对本地CPU实体会话表的新建、删除或更新消息。

对于本发明实施例,为了实现根据新建、删除或更新消息对所述用户态CPU本地实体会话表进行新建、删除或更新操作,所述方法还包括:用户态CPU接收设置在用户态的配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息;接收到所述操作消息的用户态CPU根据所述操作消息对所述用户态CPU本地实体会话表执行对应的操作。

需要说明的是,所述用户态CPU接收设置在用户态的配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息的步骤,具体可以包括:用户态建立与所述配置命令行调试模块进行通信的进程间通信(inter-process communication,ipc)线程;所述ipc线程接收所述配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息,并根据所述操作消息的类型确定执行所述操作消息的用户态CPU;将所述操作消息发送给确定的用户态CPU。

例如,图11配置命令行调试模块下发配置需要将转发核CPU3的实体会话表删掉,首先是配置命令行调试模块将删除消息通过ipc线程传递给转发核CPU3的ipc接收线程,ipc接收线程再根据消息类型将删除消息传递给转发核CPU3,转发核接收到删除消息后执行删除操作,将本地的用户态实体会话表3进行删除。

需要说明的是,所述实体会话表采用预先分配的内存池申请获取。采用事先分配好的mempool内存池申请,主要有如下几点优势:

A.由于实体会话表的内存预先申请好,能够实现在申请的过程中,减少申请alloc内存的次数,防止造成过多的内存碎片。

B.每个实体会话表的内存地址空间范围是固定的,即内存池中的每一项都会是一个合法的实体会话表地址,即便这个实体会话表实际上被删除了,也不会因为会话删除而访问到无效地址,只能是地址上的会话表已失效,不会导致内存访问越界而死机。

C.由于内存池采用缓存cache内存的申请和释放,每核实体会话表能够cache,更好的利用了cache机制。

在本发明实施例中,为了节省内核态异步获取用户态实体会话表信息带来的开销,所述方法还包括:在初始化的过程中,将所述实体会话表的地址空间共享给内核态,以便内核态的其他CPU安全的获取一实体会话表的安全信息。所述实体会话表可以包括安全部分和不安全部分,所述安全部分用于存储非地址信息,所述不安全部分用于存储地址信息。由于内核态和用户态共享同一地址空间,如图12所示,用户态中的实体会话表是使用内存池的方式申请内存的,且内核态可以访问的实体会话表信息是固定的,因此需要严格规范内核态对实体会话表信息的访问,即仅允许其更改实体会话表中的安全信息。

其中,所述非地址信息包括物理地址(Media Access Control,MAC)信息、局域网(Virtual Local Area Network,VLAN)信息、二三层设备信息等。具体地,可以为源目的MAC地址、源目的设备信息、转发策略等,所述地址信息可以为内存空间的内存地址。

为了方便理解实体会话表的访问控制情况,本发明实施例提供了多个不同进程访问用户态转发核1的实体会话表信息的控制表,如图13所示,快速用户态转发核1、快速用户态的转发核2、快速用户态的转发核3、可以对实体会话表中的安全信息以及不安全信息(危险信息)进行访问,而慢速1内核态的软中断上下文、慢速2内核态的软中断上下文、慢速3内核态的软中断上下文只能访问用户态转发核1的实体会话表中的安全信息,由于实体会话表中的不安全部分为共享给内核态,内核态访问实体会话表中的危险信息进行访问,可能会直接导致死机问题。

本发明实施例提供的另一种报文转发方法,与现有技术基于用户态和内核态共同维护的实体会话表对报文进行转发相比,本发明通过在查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表时,通过所述用户态CPU对所述报文进行转发,以及在查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接时,向内核态CPU获取所述报文对应的会话连接建立策略信息,基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接,并通过所述接收报文的CPU对所述报文进行转发,能够实现基于接收报文的用户态CPU自己维护的实体会话表对报文进行转发,避免了不同CPU竞争同一实体会话表资源,从而可以实现在多核并行转发报文时,消除多核之间互斥以及共享资源竞争的问题,实现网络报文转发设备的转发性能随着CPU核个数的增加做到线性增长,进而提升报文转发性能。此外,在接收报文的用户态CPU本地建立所述报文对应的会话连接,并通过接收报文的CPU对报文进行转发,实现了转发报文的用户态CPU即为接收报文的用户态CPU,从而避免了在报文转发过程中进行倒核操作,节省了倒核操作带来的系统开销,进而提升了报文转发性能。进一步地,本发明实施例通过在用户态只查询实体会话表以及在内核态查询会话子连接模板,简化了用户态快速逻辑查询实体会话表的复杂度。同时在建立报文对应的会话连接时,增加会话子连接模板是否存在的判断,将可能性较大判断移到流程图的前面,减少了条件判断的次数,从而提升了报文转发性能。

进一步的,作为对上述图2所示方法的实现,本发明实施例提供了一种报文转发装置,如图14所示,所述装置包括:查询单元31、转发单元32、获取单元33、建立单元34,其中,

所述查询单元31,可以用于根据接收到的报文,查询用户态CPU本地建立的实体会话表中是否存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表。

本发明实施例的执行主体可以为基于多核系统的报文转发装置,所述报文转发装置可以为防火墙,也可以为路由器等。用户态CPU接收到的报文可以为网卡发送的。

由于实体会话表是不同的用户态CPU各自维护各自负责处理的实体会话表,实体会话表每个CPU核内独立的局部资源,仅能仅允许建立该实体会话表的CPU核进行新建、删除操作,其他的CPU核无法对非自己核的独有会话资源进行任何增删操作,因此本发明实施例是采用无锁方式查询用户态CPU本地建立的实体会话表,与采用现有技术采用加锁方式相比,可以避免因加锁带来的性能降低问题,从而可以做到报文转发的性能随着CPU的个数增长,进而可以提高报文转发性能。

所述转发单元32,可以用于若所述查询单元31查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,则通过所述用户态CPU对所述报文进行转发。

所述获取单元33,可以用于若所述查询单元31查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接,则基于接收报文的用户态CPU向内核态CPU获取所述报文对应的会话连接建立策略信息。若用户态CPU本地建立的实体会话表不存在与报文对应的会话连接,则说明所述报文对应的会话连接是连接首包,在用户态CPU中并未建立过所述报文对应的会话连接,此时需要建立所述报文对应的会话连接,以便后续报文进行快速转发。

所述建立单元34,可以用于基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接。

所述转发单元32,还可以用于通过所述接收报文的CPU对所述报文进行转发。

对于本发明实施例,在接收报文的用户态CPU本地建立所述报文对应的会话连接,并通过接收报文的CPU对报文进行转发,实现了转发报文的用户态CPU即为接收报文的用户态CPU,从而避免了在报文转发过程中进行倒核操作,节省了倒核操作带来的系统开销,进而提升了报文转发性能。

需要说明的是,本发明实施例提供的一种报文转发装置所涉及各功能单元的其他相应描述,可以参考图2所示方法的对应描述,在此不再赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。

本发明实施例提供的一种报文转发装置,与现有技术基于用户态和内核态共同维护的实体会话表对报文进行转发相比,本发明通过在查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表时,通过所述用户态CPU对所述报文进行转发,以及在查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接时,向内核态CPU获取所述报文对应的会话连接建立策略信息,基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接,并通过所述接收报文的CPU对所述报文进行转发,能够实现基于接收报文的用户态CPU自己维护的实体会话表对报文进行转发,避免了不同CPU竞争同一实体会话表资源,从而可以实现在多核并行转发报文时,消除多核之间互斥以及共享资源竞争的问题,实现网络报文转发设备的转发性能随着CPU核个数的增加做到线性增长,进而提升报文转发性能。

进一步的,作为对上述图4所示方法的实现,本发明实施例提供了另一种报文转发装置,如图15所示,所述装置包括:查询单元41、转发单元42、获取单元43、建立单元44,其中,

所述查询单元41,可以用于根据接收到的报文,查询用户态CPU本地建立的实体会话表中是否存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表。所述实体会话表采用预先分配的内存池申请获取。

采用事先分配好的内存池mempool申请,主要有如下几点优势:

A.由于实体会话表的内存预先申请好,能够实现在申请的过程中,减少申请alloc内存的次数,防止造成过多的内存碎片。

B.每个实体会话表的内存地址空间范围是固定的,即内存池中的每一项都会是一个合法的实体会话表地址,即便这个实体会话表实际上被删除了,也不会因为会话删除而访问到无效地址,只能是地址上的会话表已失效,不会导致内存访问越界而死机。

C.由于内存池采用缓存cache内存的申请和释放,每核实体会话表能够cache,更好的利用了cache机制。

所述转发单元42,可以用于若所述查询单元41查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,则通过所述用户态CPU对所述报文进行转发。

所述获取单元43,可以用于若所述查询单元41查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接,则基于接收报文的用户态CPU向内核态CPU获取所述报文对应的会话连接建立策略信息。

所述建立单元44,可以用于基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接。

所述转发单元42,还可以用于通过所述接收报文的CPU对所述报文进行转发。

进一步地,所述获取单元43包括:获取子单元431和第一发送子单元432。

所述获取子单元431,可以用于基于所述接收报文的用户态CPU向内核态CPU发送获取针对所述报文建立会话连接的请求,所述请求中包含所述报文。

所述获取子单元431,还可以用于所述内核态CPU根据所述请求获取所述报文对应的会话连接建立策略信息。

第一发送子单元432,可以用于将所述会话连接建立策略信息发送给所述接收报文的用户态CPU。

所述获取子单元431包括:第一查询模块4311、第二查询模块4312、第一发送模块4313和第二发送模块4314。

所述第一查询模块4311,可以用于所述内核态CPU在接收到所述请求后,查询是否有已建立的会话子连接模板,所述会话子连接模板为源端口号为0且源互联网协议IP地址、目的IP地址、目的端口号以及协议类型与会话连接一致的会话连接模板。通过将会话子模板建立在内核态,除了方便深度识别模块可以同步新建、更新和删除操作外,还可以方便会话子连接模板的维护,提高会话子连接模板维护效率。

所述第二查询模块4312,可以用于若所述第一查询模块4311查询有已建立的会话子连接模板,则查询已建立的会话子连接模板中是否存在所述报文对应的会话子连接模板。

第一发送模块,用于若所述第二查询模块4312查询已建立的会话子连接模板中存在所述报文对应的会话子连接模板,则将所述报文按照所述会话子连接模板封装与所述报文对应的会话信息,并发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息。

所述第一发送模块,还用于若所述第二查询模块查找不成功,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息。

第二发送模块,用于若所述第一查询模块查询没有已建立的会话子连接模板,则将所述报文发送给内核态的CPU,以便获取所述报文对应的会话连接建立策略信息。

所述转发单元42包括:第一确定子单元421和转发子单元422。

所述第一确定子单元421,可以用于确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU是否为接收报文的用户态CPU。

所述转发子单元422,可以用于若所述第一确定子单元421确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU为接收报文的用户态CPU,则通过接收报文的用户态CPU对所述报文进行转发。

所述转发子单元422,还用于若所述第一确定子单元421确定与所述报文对应的会话连接存在的实体会话表所属的用户态CPU为除接收报文的用户态CPU以外的其他用户态CPU,则通过倒核队列将所述报文转发给对应的其他用户态CPU进行转发。

为了方便接收用户态其他CPU对本地CPU实体会话表的新建、删除或更新消息,所述建立单元44,还用于为每个用户态CPU建立一个会话消息接收队列,所述会话消息接收队列用于接收用户态其他CUP对本地CUP实体会话表的新建、删除或更新消息。

为了实现根据新建、删除或更新消息对所述用户态CPU本地实体会话表进行新建、删除或更新操作,所述装置还包括:接收单元45和执行单元46。

所述接收单元45,可以用于用户态CPU接收设置在用户态的配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息。

所述执行单元46,可以用于接收到所述操作消息的用户态CPU根据所述操作消息对所述用户态CPU本地实体会话表执行对应的操作。

所述接收单元45可以包括:建立子单元451、接收子单元452、第二确定子单元453和第二发送子单元454。

所述建立子单元451,可以用于用户态建立与所述配置命令行调试模块进行通信的进程间通信ipc线程。

所述接收子单元452,可以用于所述ipc线程接收所述配置命令行调试模块发送的针对所述用户态CPU本地实体会话表进行操作的操作消息。

所述第二确定子单元453,可以用于根据所述接收子单元452接收的所述操作消息的类型确定执行所述操作消息的用户态CPU。

所述第二发送子单元454,可以用于将所述第二确定子单元453确定的所述操作消息发送给确定的用户态CPU。

在本发明实施例中,为了节省内核态异步获取用户态实体会话表信息带来的开销,所述实体会话表包括安全部分和不安全部分,所述安全部分用于存储非地址信息,所述不安全部分用于存储地址信息;所述非地址信息包括MAC地址信息、VLAN信息、二三层设备信息等。具体地,可以为源目的MAC地址、源目的设备信息、转发策略等,所述地址信息可以为内存空间的内存地址。所述装置还包括:共享单元47。

所述共享单元47,可以用于在初始化的过程中,将所述实体会话表的地址空间共享给内核态,以便内核态的其他CPU安全的获取一实体会话表的安全信息。

本发明实施例提供的另一种报文转发装置,与现有技术基于用户态和内核态共同维护的实体会话表对报文进行转发相比,本发明通过在查询用户态CPU本地建立的实体会话表中存在与所述报文对应的会话连接,所述实体接会话表中包含所述用户态CPU负责处理的会话连接,不同的用户态CPU各自维护各自负责处理的实体会话表时,通过所述用户态CPU对所述报文进行转发,以及在查询用户态CPU本地建立的实体会话表中不存在与所述报文对应的会话连接时,向内核态CPU获取所述报文对应的会话连接建立策略信息,基于所述接收报文的用户态CPU根据所述会话连接建立策略信息建立与所述报文对应的会话连接,并通过所述接收报文的CPU对所述报文进行转发,能够实现基于接收报文的用户态CPU自己维护的实体会话表对报文进行转发,避免了不同CPU竞争同一实体会话表资源,从而可以实现在多核并行转发报文时,消除多核之间互斥以及共享资源竞争的问题,实现网络报文转发设备的转发性能随着CPU核个数的增加做到线性增长,进而提升报文转发性能。此外,在接收报文的用户态CPU本地建立所述报文对应的会话连接,并通过接收报文的CPU对报文进行转发,实现了转发报文的用户态CPU即为接收报文的用户态CPU,从而避免了在报文转发过程中进行倒核操作,节省了倒核操作带来的系统开销,进而提升了报文转发性能。进一步地,本发明实施例通过在用户态只查询实体会话表以及在内核态查询会话子连接模板,简化了用户态快速逻辑查询实体会话表的复杂度。同时在建立报文对应的会话连接时,增加会话子连接模板是否存在的判断,将可能性较大判断移到流程图的前面,减少了条件判断的次数,从而提升了报文转发性能。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的发明名称(如确定网站内链接等级的装置)中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1