利用二次分流实现隧道报文对称RSS处理的方法及系统转让专利

申请号 : CN202110343516.6

文献号 : CN113098794B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 穆远彪李昭熹冀博马骥孙晓鹏

申请人 : 郑州信大捷安信息技术股份有限公司

摘要 :

本发明涉及一种利用二次分流实现隧道报文对称RSS处理的方法及系统,在第一隧道设备和第二隧道设备内均设置有RSS模块,及若干CPU、环形缓冲区队列和普通队列;CPU读取报文并通过索引值进行匹配并将未匹配成功的报文送至CPU对应的环形缓冲区队列中缓存;RSS模块包含用于对报文执行哈希运算获取哈希值的哈希模块和用于通过哈希值和索引值将报文分配至对应普通队列模块的间接寻址模块。本发明利用第一隧道设备和第二隧道设备中CPU的环形缓冲区队列和普通队列实现二次分流方案,将预期处理的核心CPU ID携带在报文中进行传递到接收的隧道设备中,接收隧道报文设备根据携带核心CPU ID进行二次分流到对应的正确核心上进行报文处理,实现隧道报文的对称RSS处理。

权利要求 :

1.一种利用二次分流实现隧道报文对称RSS处理的方法,其特征在于,利用CPU的普通队列和环形缓冲区队列对接收到的报文进行二次分流以实现同一个连接的双向报文处理,具体包含如下内容:

针对客户端生成的第一原始报文,第一隧道设备利用其RSS模块对第一原始报文进行哈希运算,并将哈希运算的哈希值与其间接寻址模块索引值进行比对,通过比对结果将第一原始报文发送至对应索引值的第一隧道设备CPU的普通队列;CPU从普通队列中读取第一原始报文,将其索引值序号与第一原始报文组合并添加隧道信息后封装成第一隧道报文,发送至第二隧道设备;

第二隧道设备利用其RSS模块对第一隧道报文进行哈希运算获取哈希值,利用哈希值和其间接寻址模块索引值进行比对,通过比对结果将第一隧道报文发送至相应的第二隧道设备CPU的普通队列中;CPU从普通队列中读取第一隧道报文并获取第一隧道报文内对应CPU索引值序号,判断获取的索引值序号与其自身序号是否相同,若不同,则将该第一隧道报文发送至索引值序号对应的CPU环形缓冲区队列中缓存,与索引值序号对应的CPU从其环形缓冲区队列中读取第一隧道报文来获取与索引值序号一致的CPU;索引值序号一致的第二隧道设备CPU对第一隧道报文进行拆分,得到第一隧道报文内的第一原始报文,并将第一原始报文发送至服务器端;

服务器端对第一原始报文进行响应,生成第二原始报文并发送至第二隧道设备;第二隧道设备利用其RSS模块对第二原始报文进行拆解和哈希运算,并与其间接寻址模块内索引值比对,根据比对结果将第二原始报文发送至第二隧道设备相应CPU的普通队列中;CPU从普通队列中读取第二原始报文,将其序号与第二原始报文组合并添加隧道相关信息封装后生成第二隧道报文发送至第一隧道设备;

第一隧道设备调用其RSS模块对第二隧道报文进行哈希运算获取哈希值,将哈希值与其间接寻址模块内索引值比对,根据比对结果将第二隧道报文发送至相应CPU普通队列;

CPU从普通队列中读取第二隧道报文并获取第二隧道报文内CPU对应的索引值序号,并判断该序号与其自身索引值序号是否相同,若不同,则将第二隧道报文发送至索引值序号对应的CPU环形缓冲队列中缓存,索引值序号对应的CPU从环形缓冲队列中读取第二隧道报文来获取与索引值序号对应的CPU;与索引值序号一致的CPU对第二隧道报文进行拆分获取第二原始报文,并将第二原始报文发送至客户端。

2.根据权利要求1所述的利用二次分流实现隧道报文对称RSS处理的方法,其特征在于,第一原始报文和第二原始报文均包含原始源IP地址、原始源端口号、原始目的IP地址、原始目的端口号和原始报文数据。

3.根据权利要求1或2所述的利用二次分流实现隧道报文对称RSS处理的方法,其特征在于,第一原始报文包括客户端IP地址、客户端端口号、服务器端IP地址、服务器端端口号和第一原始报文数据;第二原始报文包括服务器端IP地址、服务器端端口号、客户端IP地址、客户端端口号和第二原始报文数据。

4.根据权利要求1所述的利用二次分流实现隧道报文对称RSS处理的方法,其特征在于,第一隧道报文和第二隧道报文均包含隧道源IP地址、隧道源端口号、隧道目的IP地址、隧道目的端口号和隧道报文数据。

5.根据权利要求1所述的利用二次分流实现隧道报文对称RSS处理的方法,其特征在于,第一隧道设备和第二隧道设备两者的RSS模块中的间接寻址模块内均预先设置有用于CPU间接寻址的索引值,且预先设置的索引值相匹配,第一隧道设备和第二隧道设备内的CPU个数相同。

6.根据权利要求1所述的利用二次分流实现隧道报文对称RSS处理的方法,其特征在于,第二隧道设备中RSS模块对第二原始报文进行拆解,组合成包含客户端IP地址、客户端端口号、服务器端IP地址和服务器端端口号的新四元组报文数据,并通过对该新四元组报文数据进行哈希运算来获取哈希值。

7.一种用于实施根据权利要求1至6之一所述的利用二次分流实现隧道报文对称RSS处理的方法的利用二次分流实现隧道报文对称RSS处理的系统,包括客户端,服务器端,及设置于客户端和服务器端之间用于正向报文和反向报文传送的第一隧道设备和第二隧道设备,第一隧道设备和第二隧道设备共同构成正向报文和反向报文传送隧道的两端,其特征在于,所述第一隧道设备和第二隧道设备内均设置有RSS模块,及若干CPU、环形缓冲区队列和普通队列,其中,每个隧道设备的CPU个数均与对应的环形缓冲区队列和普通队列相一致,CPU、环形缓冲区队列及普通队列三者通过索引值相匹配;RSS模块对客户端和服务器端传送的数据报文通过普通队列分发至对应CPU;CPU读取报文并通过索引值进行匹配,匹配正确则进行相应报文处理,否则将报文送至CPU对应的环形缓冲区队列中进行缓存;所述RSS模块包含用于对报文执行哈希运算获取哈希值的哈希模块和用于通过哈希值和索引值将报文分配至对应普通队列模块的间接寻址模块,每个间接寻址模块内均预置有若干索引值。

8.根据权利要求7所述的利用二次分流实现隧道报文对称RSS处理的系统,其特征在于,哈希值包括源IP地址、源端口号、目的端IP地址和目的端口号。

9.根据权利要求7所述的利用二次分流实现隧道报文对称RSS处理的系统,其特征在于,针对第一隧道设备和第二隧道设备中,每个隧道设备至少包含一个CPU、一个环形缓冲区队列和一个普通队列,且两个隧道设备内的CPU个数相同。

10.根据权利要求7或9所述的利用二次分流实现隧道报文对称RSS处理的系统,其特征在于,第一隧道设备中CPU、环形缓冲区队列和普通队列分别用CPU1i、RING1i和QUE1i表示,其RSS模块与每个QUE1i相连接,并通过第一网口与客户端连接,通过第二网口与第二隧道设备对应连接,其中,i=1,2,…,n,n为第一隧道设备内实际CPU个数;第二隧道设备中CPU、环形缓冲区队列和普通队列分别用CPU2i、RING2i和QUE2i表示,第二隧道设备的RSS模块与每个QUE2i相连接,且通过第三网口与第一隧道设备连接,通过第四网口与服务器端连接。

说明书 :

利用二次分流实现隧道报文对称RSS处理的方法及系统

技术领域

[0001] 本发明属于网络技术领域,特别涉及一种利用二次分流实现隧道报文对称RSS处理的方法及系统。

背景技术

[0002] DPDK(Data Plane Development Kit,数据平面开发套件)是由6WIND、Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极
大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。DPDK是一个开源的数
据平面开发工具集。其通过网卡RSS、旁路OS、网卡无中断轮询、用户态驱动、独占CPU、大页
内存等技术提供了用户态下高性能的数据包处理能力。在DPDK架构中为了提供更高报文处
理性能,往往启用多个核心(CPU)、多线程模式,各自CPU独立处理。网卡收到报文后根据报
文特征{源IP地址、源端口号、目的IP地址、目的端口号等}对接收报文进行RSS处理分发到
不同的CPU处理。
[0003] 在网络应用中,如果同一个连接的双向报文在开启RSS之后被分发到同一个CPU上处理,这种RSS就称为对称RSS。对于需要为连接保存一些信息的网络应用来说,对称RSS对
性能提升有很大帮助。如果同一个连接的双向报文被分发到不同的CPU,那么两个CPU之间
共享这个连接的信息就会涉及到锁,而锁显然是会影响处理性能的。在基于DPDK技术的隧
道设备实现中,当基于DPDK的多CPU高性能模式运行时,会面临到对称RSS问题:即如何保证
经由隧道设备的某一个CPU处理并封装了原始报文的隧道报文在发到另一端隧道设备后和
收到从该另一端隧道设备返回的前述原始报文的响应隧道报文时,该响应隧道报文能够再
次分配回归到与先前相同的同一个CPU进行后续处理?之所以出现对称RSS失效问题是因为
正向报文是基于原始报文四元组{客户端的IP地址,客户端的端口号,服务器端的IP地址,
服务器端的端口号}的哈希值来计算由哪个CPU进行处理,而反向报文是基于隧道报文四元
组{第二隧道设备的IP地址,第二隧道设备的端口号,第一隧道设备的IP地址,第一隧道设
备的端口号}的哈希值来计算由哪个CPU进行处理,两者的哈希值不同,所以,不能分配到同
一个CPU上进行处理。如何根据隧道报文的处理过程和对称RSS的特点,实现DPDK架构下的
利用二次分流实现隧道报文对称RSS处理的,从而提升报文处理速度和效率,是目前急需解
决的问题。

发明内容

[0004] 为此,本发明提供一种利用二次分流实现隧道报文对称RSS处理的方法及系统,以提升DPDK架构下报文处理速度和效率。
[0005] 按照本发明所提供的设计方案,提供一种利用二次分流实现隧道报文对称RSS处理的系统,包括客户端,服务器端,及设置于客户端和服务器端之间用于正向报文和反向报
文传送的第一隧道设备和第二隧道设备,第一隧道设备和第二隧道设备共同构成正向报文
和反向报文传送隧道的两端,所述第一隧道设备和第二隧道设备内均设置有RSS模块,及若
干CPU、环形缓冲区队列和普通队列,其中,每个隧道设备的CPU个数均与对应的环形缓冲区
队列和普通队列相一致,CPU、环形缓冲区队列及普通队列三者通过索引值相匹配;RSS模块
对客户端和服务器端传送的数据报文通过普通队列分发至对应CPU;CPU读取报文并通过索
引值进行匹配,匹配正确则进行相应报文处理,否则将报文送至CPU对应的环形缓冲区队列
中进行缓存;所述RSS模块包含用于对报文执行哈希运算获取哈希值的哈希模块和用于通
过哈希值和索引值将报文分配至对应普通队列模块的间接寻址模块,每个间接寻址模块内
均预置有若干索引值。
[0006] 作为本发明利用二次分流实现隧道报文对称RSS处理的系统,进一步地,哈希值包括源IP地址、源端口号、目的端IP地址和目的端口号。
[0007] 作为本发明利用二次分流实现隧道报文对称RSS处理的系统,进一步地,针对第一隧道设备和第二隧道设备中,每个隧道设备至少包含一个CPU、一个环形缓冲区队列和一个
普通队列,且两个隧道设备内的CPU个数相同。
[0008] 作为本发明利用二次分流实现隧道报文对称RSS处理的系统,进一步地,第一隧道设备中CPU、环形缓冲区队列和普通队列分别用CPU1i、RING1i和QUE1i表示,其RSS模块与每个
QUE1i相连接,并通过第一网口与客户端连接,通过第二网口与第二隧道设备对应连接,其
中,i=1,2,…,n,n为第一隧道设备内实际CPU个数;第二隧道设备中CPU、环形缓冲区队列
和普通队列分别用CPU2i、RING2i和QUE2i表示,第二隧道设备的RSS模块与每个QUE2i相连接,
且通过第三网口与第一隧道设备连接,通过第四网口与服务器端连接。
[0009] 进一步地,基于上述的系统,本发明还提供一种利用二次分流实现隧道报文对称RSS处理的方法,利用CPU的普通队列和环形缓冲区队列对接收到的报文进行二次分流以实
现同一个连接的双向报文处理,具体包含如下内容:
[0010] 针对客户端生成的第一原始报文,第一隧道设备利用其RSS模块对第一原始报文进行哈希运算,并将哈希运算的哈希值与其间接寻址模块索引值进行比对,通过比对结果
将第一原始报文发送至对应索引值的第一隧道设备CPU的普通队列;CPU从普通队列中读取
第一原始报文,将其索引值序号与第一原始报文组合并添加隧道信息后封装成第一隧道报
文,发送至第二隧道设备;
[0011] 第二隧道设备利用其RSS模块对第一隧道报文进行哈希运算获取哈希值,利用哈希值和其间接寻址模块索引值进行比对,通过比对结果将第一隧道报文发送至相应的第二
隧道设备CPU的普通队列中;CPU从普通队列中读取第一隧道报文并获取第一隧道报文内对
应CPU索引值序号,判断获取的索引值序号与其自身序号是否相同,若不同,则将该第一隧
道报文发送至索引值序号对应的CPU环形缓冲区队列中缓存,与索引值序号对应的CPU从其
环形缓冲区队列中读取第一隧道报文来获取与索引值序号一致的CPU;索引值序号一致的
第二隧道设备CPU对第一隧道报文进行拆分,得到第一隧道报文内的第一原始报文,并将第
一原始报文发送至服务器端;
[0012] 服务器端对第一原始报文进行响应,生成第二原始报文并发送至第二隧道设备;第二隧道设备利用其RSS模块对第二原始报文进行拆解和哈希运算,并与其间接寻址模块
内索引值比对,根据比对结果将第二原始报文发送至第二隧道设备相应CPU的普通队列中;
CPU从普通队列中读取第二原始报文,将其序号与第二原始报文组合并添加隧道相关信息
封装后生成第二隧道报文发送至第一隧道设备;
[0013] 第一隧道设备调用其RSS模块对第二隧道报文进行哈希运算获取哈希值,将哈希值与其间接寻址模块内索引值比对,根据比对结果将第二隧道报文发送至相应CPU普通队
列;CPU从普通队列中读取第二隧道报文并获取第二隧道报文内CPU对应的索引值序号,并
判断该序号与其自身索引值序号是否相同,若不同,则将第二隧道报文发送至索引值序号
对应的CPU环形缓冲队列中缓存,索引值序号对应的CPU从环形缓冲队列中读取第二隧道报
文来获取与索引值序号对应的CPU;与索引值序号一致的CPU对第二隧道报文进行拆分获取
第二原始报文,并将第二原始报文发送至客户端。
[0014] 作为本发明利用二次分流实现隧道报文对称RSS处理的方法,进一步地,第一原始报文和第二原始报文均包含原始源IP地址、原始源端口号、原始目的IP地址、原始目的端口
号和原始报文数据。
[0015] 作为本发明利用二次分流实现隧道报文对称RSS处理的方法,进一步地,第一原始报文包括客户端IP地址、客户端端口号、服务器端IP地址、服务器端端口号和第一原始报文
数据;第二原始报文包括服务器端IP地址、服务器端端口号、客户端IP地址、客户端端口号
和第二原始报文数据。
[0016] 作为本发明利用二次分流实现隧道报文对称RSS处理的方法,进一步地,第一隧道报文和第二隧道报文均包含隧道源IP地址、隧道源端口号、隧道目的IP地址、隧道目的端口
号和隧道报文数据。
[0017] 作为本发明利用二次分流实现隧道报文对称RSS处理的方法,进一步地,第一隧道设备和第二隧道设备两者的RSS模块中的间接寻址模块内均预先设置有用于CPU间接寻址
的索引值,且预先设置的索引值相匹配,第一隧道设备和第二隧道设备内的CPU个数相同。
[0018] 作为本发明利用二次分流实现隧道报文对称RSS处理的方法,进一步地,第二隧道设备中RSS模块对第二原始报文进行拆解,组合成包含客户端IP地址、客户端端口号、服务
器端IP地址和服务器端端口号的新四元组报文数据,并通过对该新四元组报文数据进行哈
希运算来获取哈希值。
[0019] 本发明的有益效果:
[0020] 本发明利用第一隧道设备和第二隧道设备中CPU的环形缓冲区队列和普通队列实现二次分流方案,将预期处理的核心CPU ID携带在报文中进行传递到接收的隧道设备中,
接收隧道报文的设备根据携带的核心CPU ID进行二次分流到对应的正确核心上进行报文
处理,以此解决处理核心CPU不一致问题,从而实现隧道报文的对称RSS处理,其中,二次分
流中报文首先根据一定的规则分配到隧道设备的某个CPU,然后,将该CPU ID记录到报文数
据中;在报文到达另一端的隧道设备时,先按既定规则把报文分配到某个CPU,该CPU再判断
报文中所指示的CPU ID,再二次将该报文通过一定的方式分发到对应的CPU进行最终处理;
在第一隧道设备和第二隧道设备都实现报文的对称RSS处理,提升报文处理速度和效率,特
别是对于同一个连接的双向报文,将不会再被分发到不同的CPU,从而避免了在两个不同的
CPU之间处理和共享这个连接的信息时可能遇到的时间和性能方面的影响。既安全可靠,又
简单高效,具有较好的应用前景。
附图说明:
[0021] 图1为实施例中利用二次分流实现隧道报文对称RSS处理的系统原理示意。具体实施方式:
[0022] 为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
[0023] RSS(Receive Side Scaling)是由微软提出的一种负载分流方法,通过计算网络数据报文中的网络层和传输层二/三/四元组的HASH哈希值,取HASH值的最低有效位(LSB)
用于索引间接寻址表RETA(Redirection Table),间接寻址表RETA中的保存索引值用于分
配数据报文到不同的CPU进行处理。现阶段RSS基本已有硬件实现,通过这项技术能够将网
络流量分载到多个CPU上,降低操作系统单个CPU的占用率。索引间接寻址表RETA的一个例
子是INTEL82576/82599RETA,它作为一个包含位宽4位的128项的索引映射表,通过取固定
取HASH值低7位,将其映射到RETA表项,输出索引可在运行时动态调整更新来实现网络流量
动态的负载均衡。隧道,即网络隧道技术,指的是利用一种网络协议(称为隧道协议)来传输
另一种网络协议(称为原始协议),如VXLAN、VPN隧道等。隧道是指,通过用户设定的隧道两
端隧道设备的源、目的IP地址和源、目的端口作为隧道报文的隧道包头信息,同时将需要通
过隧道传输的报文(即原始报文)封装到隧道报文的隧道报文数据部分,从而构成整个隧道
报文。隧道设备是指处理隧道报文的设备。支持对输入的原始报文可封装和输出隧道报文、
对输入的隧道报文可解封装得到原始报文。常规隧道设备中,原始报文从普通网络端口进
入隧道设备,经过预配置的隧道模块处理后会封装外层隧道头信息将报文转发到隧道另一
端的隧道设备。另一端的隧道设备从其隧道网络端口接收到隧道报文后,进行解封装隧道
报文,得到相应的原始报文。本发明实施例,提供一种利用二次分流实现隧道报文对称RSS
处理的系统,包括客户端,服务器端,及设置于客户端和服务器端之间用于正向报文和反向
报文传送的第一隧道设备和第二隧道设备,第一隧道设备和第二隧道设备共同构成正向报
文和反向报文传送隧道的两端,所述第一隧道设备和第二隧道设备内均设置有RSS模块,及
若干CPU、环形缓冲区队列和普通队列,其中,每个隧道设备的CPU个数均与对应的环形缓冲
区队列和普通队列相一致,CPU、环形缓冲区队列及普通队列三者通过索引值相匹配;RSS模
块对客户端和服务器端传送的数据报文通过普通队列分发至对应CPU;CPU读取报文并通过
索引值进行匹配,匹配正确则进行相应报文处理,否则将报文送至CPU对应的环形缓冲区队
列中进行缓存;所述RSS模块包含用于对报文执行哈希运算获取哈希值的哈希模块和用于
通过哈希值和索引值将报文分配至对应普通队列模块的间接寻址模块,每个间接寻址模块
内均预置有若干索引值。
[0024] 在基于DPDK架构实现的隧道设备中,由于隧道报文的特殊性,导致面临对称RSS问题,以下简要地说明存在问题及原因:假设整个报文处理系统包括:客户端、第一隧道设备、
第二隧道设备和服务器端。设第一隧道设备和第二隧道设备内CPU数量均为n个(n为隧道设
备内实际CPU的个数,为大于等于1的自然数),第一隧道设备和第二隧道设备共同构成隧道
的两端;第一隧道设备和第二隧道设备具备RSS和封装拆解隧道报文等功能;客户端所发出
的正向原始报文经第一隧道设备和第二隧道设备所构成隧道传送给服务器端;服务器端所
发出的反向原始报文经第一隧道设备和第二隧道设备所构成隧道传送给客户端。其中,正
向报文/反向报文的含义为:转发设备中标记报文流量方向是正向或者反向。报文流量的方
向是一个相对的概念,通过四元组{IPi,PORTi,IPj,PORTj}进行描述。一般认为转发设备中
接收到连接首次发起方的报文时,认为此时该报文的四元组描述的连接方向的报文为正向
报文,而接收到的与正向报文连接的四元组的源IP地址和端口号、目的IP地址和端口号相
反的连接报文则认为是反向报文。例如客户端发起四元组为{IP1,PORT1,IP2,PORT2}的报文
后,在转发设备收到后,认为该四元组{IP1,PORT1,IP2,PORT2}描述的连接为正向报文。而转
发设备收到该连接的反向连接四元组{IP2,PORT2,IP1,PORT1}时,则认为是反向报文,其中
IP代表IP地址,PORT代表端口号。哈希运算用HA{·}表示。
[0025] (1)第一隧道设备从客户端接收正向原始报文,通过RSS计算,得出哈希值HA1=HA{客户端的IP地址,客户端的端口号,服务器端的IP地址,服务器端的端口号},RSS根据HA1
将该正向原始报文分配到CPU i进行处理,其中,i=1,2,…,n;
[0026] (2)CPU i上的隧道模块处理正向原始报文得到正向隧道报文,正向隧道报文是包括了步骤(1)接收的正向原始报文进行封装后的新报文,其四元组从正向原始报文{客户端
的IP地址,客户端的端口号,服务器端的IP地址,服务器端的端口号}更改为正向隧道报文
{第一隧道设备的IP地址,第一隧道设备的端口号,第二隧道设备的IP地址,第二隧道设备
的端口号};然后,第一隧道设备将该正向隧道报文发送给第二隧道设备;
[0027] (3)第二隧道设备在收到正向隧道报文后,对其进行拆解,还原出正向原始报文后发送给服务器端;服务器端生成反向原始报文后发送回第二隧道设备,并按与上述步骤(1)
和(2)类似的方法进行处理,生成反向隧道报文,反向隧道报文的四元组为{第二隧道设备
的IP地址,第二隧道设备的端口号,第一隧道设备的IP地址,第一隧道设备的端口号};第二
隧道设备将反向隧道报文发送给第一隧道设备;
[0028] (4)第一隧道设备在收到正向隧道报文后,通过RSS计算,得出哈希值HA2=HA{第二隧道设备的IP地址,第二隧道设备的端口号,第一隧道设备的IP地址,第一隧道设备的端
口号},此时,显然,HA2不等于步骤(1)中的HA1,那么在RSS根据HA2将该正向原始报文分配给
CPU时,就不再是CPU i了,而是另一个CPU j,其中,i,j=1,2,…,n;j≠i。
[0029] 本案实施例中,参见图1所示,系统内收发的数据包称统为报文,所述第一隧道设备包括至少一个CPU、至少一个环形缓冲区队列和至少一个普通队列,分别用CPU1i、RING1i
和QUE1i表示;所述CPU1i、RING1i和QUE1i的数量相同;所述CPU1i和QUE1i相连接,所述CPU1i从
QUE1i中读取数据;所述CPU1i与每个环形缓冲区队列RING1i相连接,所述CPU1i从RING1i中读
取数据;所述第一隧道设备还包括第一RSS模块、第一网口和第二网口;所述第一RSS模块包
括第一哈希模块和第一间接寻址模块;所述第一网口和第二网口分别与所述第一RSS模块
相连接;所述第一RSS模块与每个QUE1i相连接;其中i=1,2,…,n;n为第一隧道设备内实际
CPU的个数;
[0030] 所述第二隧道设备包括至少一个CPU、至少一个环形缓冲区队列和至少一个普通队列,分别用CPU2i、RING2i和QUE2i表示;所述CPU2i、RING2i和QUE2i的数量相同;所述CPU2i和
QUE2i相连接;所述CPU2i从QUE2i中读取数据;所述CPU2i与每个环形缓冲区队列RING2i相连
接,所述CPU2i从RING2i中读取数据;所述第二隧道设备还包括第二RSS模块、第三网口和第
四网口;所述第二RSS模块包括第二哈希模块和第二间接寻址模块;所述第三网口和第四网
口均与所述第二RSS模块相连接;所述第二RSS模块与每个QUE2i相连接;其中i=1,2,…,n;
第二隧道设备内实际CPU的个数与第一隧道设备内实际CPU的个数相同均为n个;
[0031] 所述第一哈希模块和所述第二哈希模块用于执行哈希运算,所述哈希运算用HA{·}表示;
[0032] 所述客户端用于与所述第一隧道设备的第一网口进行通信,以收发第一原始报文;所述服务器端用于与所述第二隧道设备的第四网口进行通信,以收发第二原始报文;所
述第一原始报文和第二原始报文均包括原始源IP地址、原始源端口号、原始目的IP地址、原
始目的端口号和原始报文数据;所述第一原始报文具体包括客户端的IP地址、客户端的端
口号、服务器端的IP地址、服务器端的端口号和第一原始报文数据;所述第二原始报文具体
包括服务器端的IP地址、服务器端的端口号、客户端的IP地址、客户端的端口号和第二原始
报文数据;
[0033] 所述第一隧道设备和所述第二隧道设备共同构成隧道的两端;所述第一隧道设备的第二网口与所述第二隧道设备的第三网口进行通信,以收发隧道报文;所述第一隧道设
备内预先配置保存有用于组成第一隧道报文的所述第二隧道设备的第三网口的IP地址和
端口号;所述第二隧道设备内预先配置保存有用于组成第二隧道报文的所述第一隧道设备
的第二网口的IP地址和端口号;第一隧道报文由所述第一隧道设备的第二网口发送给所述
第二隧道设备的第三网口;第二隧道报文由所述第二隧道设备的第三网口发送给所述第一
隧道设备的第二网口;所述第一隧道报文和第二隧道报文均包括隧道源IP地址、隧道源端
口号、隧道目的IP地址、隧道目的端口号和隧道报文数据;
[0034] 所述第一间接寻址模块内预先设置有预先确定好的若干第一索引值,所述第一RSS模块将所述第一哈希模块对相应报文进行哈希运算后所得的哈希值与各所述第一索引
值进行比对,然后根据比对结果将报文分配到所述第一隧道设备内的对应的CPU所对应的
普通队列QUE,以供所述第一隧道设备内的相应CPU进行处理;
[0035] 所述第二间接寻址模块内预先设置有预先确定好的若干第二索引值,所述第二RSS模块将所述第二哈希模块对相应报文进行哈希运算后所得的哈希值与各所述第二索引
值进行比对,然后根据比对结果将报文分配到所述第二隧道设备内的对应的CPU所对应的
普通队列QUE,以供所述第二隧道设备内的相应CPU进行处理;
[0036] 所述第一间接寻址模块内的第一索引值与所述第二间接寻址模块内的第二索引值配置为相同的值。
[0037] 进一步地,基于上述的系统,本发明实施例还提供一种利用二次分流实现隧道报文对称RSS处理的方法,利用CPU的普通队列和环形缓冲区队列对接收到的报文进行二次分
流以实现同一个连接的双向报文处理,具体包含如下内容:
[0038] 针对客户端生成的第一原始报文,第一隧道设备利用其RSS模块对第一原始报文进行哈希运算,并将哈希运算的哈希值与其间接寻址模块索引值进行比对,通过比对结果
将第一原始报文发送至对应索引值的第一隧道设备CPU的普通队列;CPU从普通队列中读取
第一原始报文,将其索引值序号与第一原始报文组合并添加隧道信息后封装成第一隧道报
文,发送至第二隧道设备;
[0039] 第二隧道设备利用其RSS模块对第一隧道报文进行哈希运算获取哈希值,利用哈希值和其间接寻址模块索引值进行比对,通过比对结果将第一隧道报文发送至相应的第二
隧道设备CPU的普通队列中;CPU从普通队列中读取第一隧道报文并获取第一隧道报文内对
应CPU索引值序号,判断获取的索引值序号与其自身序号是否相同,若不同,则将该第一隧
道报文发送至索引值序号对应的CPU环形缓冲区队列中缓存,与索引值序号对应的CPU从其
环形缓冲区队列中读取第一隧道报文来获取与索引值序号一致的CPU;索引值序号一致的
第二隧道设备CPU对第一隧道报文进行拆分,得到第一隧道报文内的第一原始报文,并将第
一原始报文发送至服务器端;
[0040] 服务器端对第一原始报文进行响应,生成第二原始报文并发送至第二隧道设备;第二隧道设备利用其RSS模块对第二原始报文进行拆解和哈希运算,并与其间接寻址模块
内索引值比对,根据比对结果将第二原始报文发送至第二隧道设备相应CPU的普通队列中;
CPU从普通队列中读取第二原始报文,将其序号与第二原始报文组合并添加隧道相关信息
封装后生成第二隧道报文发送至第一隧道设备;
[0041] 第一隧道设备调用其RSS模块对第二隧道报文进行哈希运算获取哈希值,将哈希值与其间接寻址模块内索引值比对,根据比对结果将第二隧道报文发送至相应CPU普通队
列;CPU从普通队列中读取第二隧道报文并获取第二隧道报文内CPU对应的索引值序号,并
判断该序号与其自身索引值序号是否相同,若不同,则将第二隧道报文发送至索引值序号
对应的CPU环形缓冲队列中缓存,索引值序号对应的CPU从环形缓冲队列中读取第二隧道报
文来获取与索引值序号对应的CPU;与索引值序号一致的CPU对第二隧道报文进行拆分获取
第二原始报文,并将第二原始报文发送至客户端。
[0042] 利用第一隧道设备和第二隧道设备中CPU的环形缓冲区队列和普通队列实现二次分流方案,将预期处理的核心CPU ID携带在报文中进行传递到接收的隧道设备中,接收隧
道报文的设备根据携带的核心CPU ID进行二次分流到对应的正确核心上进行报文处理,以
此解决处理核心CPU不一致问题,从而实现隧道报文的对称RSS处理。下面结合图1所示的系
统架构,对本案方案流程做进一步解释说明:
[0043] 步骤1,客户端生成第一原始报文,然后发送到所述第一隧道设备的第一网口;所述第一网口接收到客户端发来的第一原始报文后,将所述第一原始报文发送给第一RSS模
块,所述第一RSS模块调用第一哈希模块对所述第一原始报文中的四元组{客户端的IP地
址,客户端的端口号,服务器端的IP地址,服务器端的端口号}进行哈希运算得到哈希值HA
{客户端的IP地址,客户端的端口号,服务器端的IP地址,服务器端的端口号},然后,所述第
一RSS模块将所述哈希值HA{客户端的IP地址,客户端的端口号,服务器端的IP地址,服务器
端的端口号}与所述第一间接寻址模块内预先设置的若干第一索引值进行比对,然后根据
比对结果将所述第一原始报文发送到相应的CPU1i所对应的QUE1i,其中i=1,2,…,n;
[0044] 步骤2,CPU1i从QUE1i中读取第一原始报文后,将CPU1i所对应的序号i和所述第一原始报文一起组合成第一隧道报文数据,并加上隧道相关信息后封装得到第一隧道报文,所
述第一隧道报文包括第二网口的IP地址、第二网口的端口号、第三网口的IP地址、第三网口
的端口号和所述第一隧道报文数据;所述CPU1i将所述第一隧道报文经所述第一RSS模块和
所述第二网口发送给所述第二隧道设备的第三网口;
[0045] 步骤3,所述第二隧道设备的第三网口将所述第一隧道报文传送给所述第二RSS模块;所述第二RSS模块调用第二哈希模块对所述第一隧道报文的四元组{第二网口的IP地
址,第二网口的端口号,第三网口的IP地址,第三网口的端口号}进行哈希运算得到哈希值
HA{第二网口的IP地址,第二网口的端口号,第三网口的IP地址,第三网口的端口号},然后,
所述第二RSS模块将所述哈希值HA{第二网口的IP地址,第二网口的端口号,第三网口的IP
地址,第三网口的端口号}与所述第二间接寻址模块内预先设置的若干第二索引值进行比
对,然后根据比对结果将所述第一隧道报文发送到相应的CPU2j所对应的QUE2j,其中j=1,
2,…,n;
[0046] 步骤4,CPU2j从QUE2j中读取所述第一隧道报文后,CPU2j对所述第一隧道报文进行拆分,得到封装在所述第一隧道报文数据内的所述CPU1i所对应的序号i;然后,判断i值是否
与j值相同,若i≠j,则CPU2j将所述第一隧道报文发送到RING2i,然后CPU2i从RING2i中读取所
述第一隧道报文;若i=j,则CPU2j即为CPU2i;
[0047] 步骤5,CPU2i对所述第一隧道报文进行拆分,得到封装在所述第一隧道报文数据内的所述第一原始报文;然后,通过所述第四网口将所述第一原始报文发送给所述服务器端;
[0048] 步骤6,所述服务器端在收到第一原始报文后,对其进行响应,生成第二原始报文,然后将所述第二原始报文发送到所述第二隧道设备的第四网口;所述第四网口将所收到的
所述服务器端发送回来的第二原始报文发送给所述第二RSS模块,所述第二RSS模块将第二
原始报文的四元组{服务器端的IP地址,服务器端的端口号,客户端的IP地址,客户端的端
口号}进行拆解,组合成新的四元组{客户端的IP地址,客户端的端口号,服务器端的IP地
址,服务器端的端口号};然后再计算该新四元组的哈希值HA{客户端的IP地址,客户端的端
口号,服务器端的IP地址,服务器端的端口号};然后,第二RSS模块将所述哈希值HA{客户端
的IP地址,客户端的端口号,服务器端的IP地址,服务器端的端口号}与所述第二间接寻址
模块内预先设置的若干第二索引值进行比对,然后根据比对结果将所述第二原始报文发送
到相应的CPU2i所对应的QUE2i,其中i=1,2,…,n;
[0049] 步骤7,CPU2i从QUE2i中读取第二原始报文后,将CPU2i所对应的序号i和所述第二原始报文一起组合成第二隧道报文数据,并加上隧道相关信息后封装得到第二隧道报文,所
述第二隧道报文包括第三网口的IP地址、第三网口的端口号、第二网口的IP地址、第二网口
的端口号和所述第二隧道报文数据;所述CPU2i将所述第二隧道报文经所述第二RSS模块和
所述第三网口发送给所述第一隧道设备的第二网口;
[0050] 步骤8,所述第一隧道设备的第二网口将所述第二隧道报文传送给所述第一RSS模块;所述第一RSS模块调用第一哈希模块对所述第二隧道报文的四元组{第三网口的IP地
址,第三网口的端口号,第二网口的IP地址,第二网口的端口号}进行哈希运算得到哈希值
HA{第三网口的IP地址,第三网口的端口号,第二网口的IP地址,第二网口的端口号},然后,
所述第一RSS模块将所述哈希值HA{第三网口的IP地址,第三网口的端口号,第二网口的IP
地址,第二网口的端口号}与所述第一间接寻址模块内预先设置的若干第一索引值进行比
对,然后根据比对结果将所述第二隧道报文发送到相应的CPU1k所对应的QUE1k,其中k=1,
2,…,n;
[0051] 步骤9,CPU1k从QUE1k中读取所述第二隧道报文后,CPU1k对所述第二隧道报文进行拆分,得到封装在所述第二隧道报文数据内的所述CPU2i所对应的序号i;然后,判断i值是否
与k值相同,若i≠k,则CPU1k将所述第一隧道报文发送到RING1i,然后CPU1i从RING1i中读取所
述第二隧道报文;若i=k,则CPU1k即为CPU1i;
[0052] 步骤10,CPU1i对所述第二隧道报文进行拆分,得到封装在所述第二隧道报文数据内的所述第二原始报文;然后,通过所述第一网口将所述第二原始报文发送给所述客户端。
[0053] 所述第一原始报文、所述第一隧道报文均为正向报文;所述第二原始报文、所述第二隧道报文均为反向报文。
[0054] 所述环形缓冲区队列是指一种环状的存储数据的区域,是一种先进先出的队列类型结构,其空间使用数组或链表等技术来进行构造。环形缓冲区队列特点是对其读出和写
入可以是分开的,写入数据之后可以先不去读取,等到需要读取的时候再去读取。假设CPU
有n个,则对应的环形缓冲区队列也相应的有n个,CPU i可以从环形缓冲区队列i接收数据
包,但CPU i可以根据一定的规则向每个环形缓冲区队列发送数据包,其中,i=1,2,…,n。
[0055] 所述普通队列是指一种先进先出FIFO(First Input First Output)的队列类型结构,其特点是先存入的数据先被提取。
[0056] HASH,又称作散列、杂凑或哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
[0057] 除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
[0058] 在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
[0059] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0060] 最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发
明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员
在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻
易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使
相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护
范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。