本公开涉及网络协议安全,尤其涉及一种基于多核处理器的ipsec报文转发方法及装置。
背景技术:
1、互联网安全协议(internet protocol security,ipsec)作为一种在ip层对数据进行加密认证的网络传输协议,在网络安全技术领域发挥越来越重要的作用。随着不同多样化的应用场景的出现,以及网络数据量吞吐的增加,ipsec报文加解密的效率成为了限制ipsec报文转发性能的主要因素。
2、随着多核处理器的发展,尤其是linux内核对多核处理器的支持越来越成熟,在linux系统下多核并行处理数据包的加密和解密操作,不同的cpu处理器从物理网卡中获取数据包,然后进入linux系统的ipsec协议栈处理数据包。对于需要解密的数据包,cpu处理器根据数据包的协议号将数据包送入ipsec协议栈做解密处理,解密处理完成后,cpu处理器将数据包送入物理网卡中发送出去。对于需要加密的数据包,cpu处理器将数据包发送至ipsec协议栈做加密处理,加密处理完成后,cpu处理将数据包送入物理网卡中发送出去。各个cpu处理器并行进行处理。
3、相关技术通过多核处理器并行处理的方式来提高ipsec报文的处理效率,但是这种处理方式会存在并发竞争的问题,ipsec协议栈每个数据包的加密和解密都需要去查询安全联盟(security association,sa)和策略,sa和策略作为一种公共资源在多核处理器访问时需要加锁来避免并发的问题,导致多核处理器之间在ipsec协议栈中竞争锁的问题频发,影响ipsec报文的转发性能。
技术实现思路
1、有鉴于此,本公开实施例提供了一种基于多核处理器的ipsec报文转发方法及装置,能够合理分配多核处理器资源,减少多核处理器在ipsec协议栈中竞争锁的频率,提高ipsec报文的转发性能。
2、第一方面,本公开实施例提供了一种基于多核处理器的ipsec报文转发方法,采用如下技术方案:
3、在linux系统的ipsec协议栈加载过程中,初始化第一cpu分组中若干个第一cpu处理器对应的若干个第一数据包缓存队列,以及初始化第二cpu分组中若干个第二cpu处理器对应的若干个第二数据包缓存队列;
4、加载网卡驱动,并在所述网卡驱动中屏蔽所述第二cpu分组的收包网卡中断;
5、通过所述若干个第一cpu处理器接收第一数据包,并在所述ipsec协议栈的入口将所述第一数据包分别发送到执行加解密操作的所述若干个第一数据包缓存队列,通过核间中断的方式通知所述若干个第二cpu处理器;
6、分别遍历所述若干个第二cpu处理器对应的若干个第二数据包缓存队列,在所述若干个第二cpu处理器的软中断处理函数中分别处理所述第二数据包缓存队列中的第二数据包;
7、将所述第二数据包发送到所述ipsec协议栈进行加解密操作得到加解密数据包,并通过调用所述网卡驱动的接口发送所述加解密数据包。
8、在一些实施例中,所述方法还包括:
9、分别为所述若干个第一数据包缓存队列和所述若干个第二数据包缓存队列创建链表头,所述链表头包括加密链表头和解密链表头;
10、动态配置所述若干个第一数据包缓存队列和所述若干个第二数据包缓存队列的最大长度;
11、根据所述链表头为所述若干个第一数据包缓存队列和所述若干个第二数据包缓存队列分配队列头,所述队列头包括发送端cpu处理器、接收端cpu处理器和链表头的类型信息。
12、在一些实施例中,通过所述若干个第一cpu处理器接收第一数据包,并在所述ipsec协议栈的入口将所述第一数据包分别发送到执行加解密操作的所述若干个第一数据包缓存队列,通过核间中断的方式通知所述若干个第二cpu处理器,包括:
13、当所述若干个第一cpu处理器接收到的所述第一数据包为待加密数据包,且所述第一数据包缓存队列的长度未达到最大长度时,根据所述队列头将所述待加密数据包发送到对应的用于执行加密操作的第一数据包缓存队列;
14、通过核间中断的方式通知作为接收端cpu处理器的所述若干个第二cpu处理器收取加密后的第一数据包。
15、在一些实施例中,所述方法还包括:
16、当所述若干个第一cpu处理器接收到的所述第一数据包为待解密数据包,且所述第一数据包缓存队列的长度未达到最大长度时,根据所述队列头将所述待解密数据包发送到对应的用于执行解密操作的第一数据包缓存队列;
17、通过核间中断的方式通知作为接收端cpu处理器的所述若干个第二cpu处理收取解密后的第一数据包。
18、在一些实施例中,所述分别遍历所述若干个第一cpu处理器对应的若干个第一数据包缓存队列,在软中断处理函数中处理所述第一数据包缓存队列中的第一数据包,包括:
19、所述分别遍历所述若干个第二cpu处理器对应的若干个第二数据包缓存队列,在所述若干个第二cpu处理器的软中断处理函数中分别处理所述第二数据包缓存队列中的第二数据包,包括:
20、在所述若干个第二cpu处理器的软中断处理函数中遍历用于执行加密操作的所述第二数据包缓存队列;
21、将所述第二数据包缓存队列中待加密的所述第二数据包依次发送至所述ipsec协议栈中进行加密处理;
22、在所述若干个第二cpu处理器的软中断处理函数中遍历用于执行解密操作的所述第二数据包缓存队列;
23、将所述第二数据包缓存队列中待解密的所述第二数据包依次发送至所述ipsec协议栈中进行解密处理。
24、第二方面,本公开实施例还提供了一种基于多核处理器的ipsec报文转发装置,采用如下技术方案:
25、初始化单元,被配置为在linux系统的ipsec协议栈加载过程中,初始化第一cpu分组中若干个第一cpu处理器对应的若干个第一数据包缓存队列,以及初始化第二cpu分组中若干个第二cpu处理器对应的若干个第二数据包缓存队列;
26、屏蔽网卡中断单元,被配置为加载网卡驱动,并在所述网卡驱动中屏蔽所述第二cpu分组的收包网卡中断;
27、发送单元,被配置为通过所述若干个第一cpu处理器接收第一数据包,并在所述ipsec协议栈的入口将所述第一数据包分别发送到执行加解密操作的所述若干个第一数据包缓存队列,通过核间中断的方式通知所述若干个第二cpu处理器;
28、遍历单元,被配置为分别遍历所述若干个第二cpu处理器对应的若干个第二数据包缓存队列,在所述若干个第二cpu处理器的软中断处理函数中分别处理所述第二数据包缓存队列中的第二数据包;
29、加解密单元,被配置为将所述第二数据包发送到所述ipsec协议栈进行加解密操作得到加解密数据包,并通过调用所述网卡驱动的接口发送所述加解密数据包。
30、在一些实施例中,所述装置还包括:
31、创建单元,被配置为分别为所述若干个第一数据包缓存队列和所述若干个第二数据包缓存队列创建链表头,所述链表头包括加密链表头和解密链表头;
32、设置单元,被配置为动态配置所述若干个第一数据包缓存队列和所述若干个第二数据包缓存队列的最大长度;
33、分配单元,被配置为根据所述链表头为所述若干个第一数据包缓存队列和所述若干个第二数据包缓存队列分配队列头,所述队列头包括发送端cpu处理器、接收端cpu处理器和链表头的类型信息。
34、在一些实施例中,所述发送单元包括:
35、发送模块,被配置为当所述若干个第一cpu处理器接收到的所述第一数据包为待加密数据包,且所述第一数据包缓存队列的长度未达到最大长度时,根据所述队列头将所述待加密数据包发送到对应的用于执行加密操作的第一数据包缓存队列;
36、通知模块,被配置为通过核间中断的方式通知作为接收端cpu处理器的所述若干个第二cpu处理器收取加密后的第一数据包。
37、第三方面,本公开实施例还提供了一种电子设备,采用如下技术方案:
38、所述电子设备包括:
39、至少一个处理器;以及,
40、与所述至少一个处理器通信连接的存储器;其中,
41、所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行以上任一所述的基于多核处理器的ipsec报文转发方法。
42、第四方面,本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行以上任一所述的基于多核处理器的ipsec报文转发方法。
43、本公开实施例提供的一种基于多核处理器的ipsec报文转发方法及装置,在linux系统的初始化阶段,根据linux系统中cpu处理器的数量,将cpu处理器进行分组,例如分成第一cpu分组和第二cpu分组,第二cpu分组用于运行ipsec协议栈来处理加解密的数据包并发包,第一cpu分组用于收包,第一cpu分组和第二cpu分组通过若干个数据包的加解密缓存队列来平衡两组cpu之间的处理速度,通过合理分配多核cpu处理器的资源,减少了多核处理器同时运行ipsec协议栈而导致的竞争锁的频率,提高了ipsec报文的转发性能。
44、上述说明仅是本公开技术方案的概述,为了能更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为让本公开的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。