一种报文分流方法及装置的制造方法

文档序号:10515380阅读:370来源:国知局
一种报文分流方法及装置的制造方法
【专利摘要】一种报文分流方法及装置,该方法包括:将RSS随机秘钥中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为0;使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算,根据哈希运算得到的哈希值对该报文进行分流处理;其中,上述RSS分流数据由一个或多个报文头字段组成。本申请可以充分利用网卡硬件已有的RSS报文分流技术,通过对网卡寄存器中的RSS随机秘钥进行设置实现报文分流,在现有的分流方式的基础上派生出多种新的分流方式以满足更多更灵活的系统需求,同时避免了管道模式对系统性能造成的不利影响。
【专利说明】
一种报文分流方法及装置
技术领域
[0001]本申请涉及网络通信领域,尤其涉及一种报文分流方法及装置。
【背景技术】
[0002]多核处理器是指在一块处理器中集成两个或多个完整的计算引擎(内核)。在多核、多处理器环境中,当访问多个处理器核心共享的资源时需要进行加锁处理,而加锁对系统整体性能的负面影响很大。为了避免加锁带来的开销及对系统性能的负面影响,在系统设计时通常会设法避免资源共享,具体到网络设备(例如,路由器,交换机,网络服务器等)中,就是使属于同一报文流的报文都由同一个处理器核心来处理,以避免报文跨处理器核心处理所带来的处理器核心之间的资源共享。
[0003]目前,主流网卡大多数都支持RSS(Receive_Side Scaling,接收端调节)报文分流技术,使用该分流技术可以使同一报文流的报文都由一个处理器核心来处理。但是目前网卡提供的接口都只允许在几种预先设定的配置方式中选择分流方式,包括:
[0004]配置方式一:将具有相同的源IP(Internet Protocol,互联网协议)地址、目的IP地址的报文作为同一报文流的报文对IP报文进行分流;
[0005]配置方式二:将具有相同的源IP地址、目的IP地址、源端口号和目的端口号的报文作为同一报文流的报文对TCP (Transfer Control Protocol,传输控制协议)或UDP (UserDatagram Protocol,用户数据报协议)报文进行分流。
[0006]除了上述网卡预先设定配置方式外,系统开发和管理人员无法选择其它的方式进行分流。例如,如果需要在分流时屏蔽目的地址对分流的影响,即仅依据源IP地址、源端口号和目的端口号进行报文分流,由于现有的网卡并未提供相应的配置接口,上述报文分流方式在现有技术中无法实现。
[0007]由上可知,现有的RSS报文分流技术中可选的分流方式较少,灵活性差,无法满足用户的需求。
[0008]公开号为“ 103269317A”,名称为“基于对称多处理SMP系统的无锁化通信方法和系统”的中国专利中披露了一种RSS报文分流方法,该方法的主要思路是不对目前网卡的RSS报文分流功能进行修改,而是将整个系统运行于管道(pipeline)模式,并且将一个处理器核心(例如,记作CoreA)用于处理报文分流,报文都由网卡送到CoreA,由CoreA执行一次哈希(HASH)运算后再根据哈希运算的结果将报文发送给对应的处理器核心。
[0009]上述分流方法需要使用一个处理器核心专用于报文分流,不进行其它业务的处理,浪费了处理器资源,而且该处理器核心容易成为整个系统的性能瓶颈。此外,由于使用上述分流方法时整个系统运行于管道模式,一次报文处理需要由多个处理器核心共同完成,因此一次报文处理所需的数据需要存储在多个处理器核心所对应的高速缓冲存储器(Cache)中,这会降低处理器的Cache命中率,进一步降低了系统性能。

【发明内容】

[0010]本申请的目的在于提供一种报文分流方法及装置。
[0011]为了达到上述目的,本申请公开了一种报文分流方法,该方法包括:
[0012]将RSS随机秘钥中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为O;
[0013]使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算,根据哈希运算得到的哈希值对该报文进行分流处理;
[0014]其中,上述RSS分流数据由一个或多个报文头字段组成。
[0015]此外,所述RSS分流数据依序包含4个报文头字段:源IP地址,目的IP地址,源端口号,目的端口号;
[0016]所述待屏蔽比特为所述4个报文头字段中的:
[0017]任意I个报文头字段的全部或部分比特;或
[0018]任意连续的2个报文头字段的全部或部分比特;或
[0019]任意连续的3个报文头字段的全部或部分比特;或
[0020]源IP地址中的全部或部分比特,和源端口号中的全部或部分比特;或
[0021]源IP地址中的全部或部分比特,和目的端口号中的全部或部分比特。
[0022]此外,所述RSS分流数据依序包含2个报文头字段:源IP地址,目的IP地址;
[0023]所述待屏蔽比特为所述2个报文头字段中的任意I个报文头字段的全部或部分比特。
[0024]此外,所述待屏蔽比特包括:
[0025]源IP地址中的子网号和主机号所对应的比特,或源IP地址中的主机号所对应的比特;和/或
[0026]目的IP地址中的子网号和主机号所对应的比特,或目的IP地址中的主机号所对应的比特。
[0027]此外,所述待屏蔽比特为:
[0028]源IP地址中的子网号和主机号所对应的比特;或
[0029]源IP地址中的主机号所对应的比特;或
[0030]目的IP地址中的子网号和主机号所对应的比特;或
[0031]目的IP地址中的主机号所对应的比特。
[0032]此外,所述哈希运算采用基于异或运算的哈希函数。
[0033]此外,所述哈希运算采用Toeplitz哈希函数。
[0034]为了达到上述目的,本申请还公开了一种报文分流装置,包括:
[0035]随机秘钥设置模块,用于将RSS随机秘钥中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为O ;
[0036]哈希运算模块,用于使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算;
[0037]分流模块,用于根据哈希运算得到的哈希值对该报文进行分流处理;
[0038]其中,上述RSS分流数据由一个或多个报文头字段组成。
[0039]此外,所述RSS分流数据依序包含4个报文头字段:源IP地址,目的IP地址,源端口号,目的端口号;
[0040]所述随机秘钥设置模块将所述4个报文头字段中的:
[0041]任意I个报文头字段的全部或部分比特;或
[0042]任意连续的2个报文头字段的全部或部分比特;或
[0043]任意连续的3个报文头字段的全部或部分比特;或
[0044]源IP地址中的全部或部分比特,和源端口号中的全部或部分比特;或
[0045]源IP地址中的全部或部分比特,和目的端口号中的全部或部分比特作为所述待屏蔽比特。
[0046]此外,所述RSS分流数据依序包含2个报文头字段:源IP地址,目的IP地址;
[0047]所述随机秘钥设置模块将所述2个报文头字段中的任意I个报文头字段的全部或部分比特作为所述待屏蔽比特。
[0048]此外,所述待屏蔽比特包括:
[0049]源IP地址中的子网号和主机号所对应的比特,或源IP地址中的主机号所对应的比特;和/或
[0050]目的IP地址中的子网号和主机号所对应的比特,或目的IP地址中的主机号所对应的比特。
[0051]此外,所述待屏蔽比特为:
[0052]源IP地址中的子网号和主机号所对应的比特;或
[0053]源IP地址中的主机号所对应的比特;或
[0054]目的IP地址中的子网号和主机号所对应的比特;或
[0055]目的IP地址中的主机号所对应的比特。
[0056]此外,所述哈希运算模块采用基于异或运算的哈希函数进行所述哈希运算。
[0057]此外,所述哈希运算模块采用Toeplitz哈希函数进行所述哈希运算。
[0058]与现有技术相比,本申请可以获得包括以下技术效果:
[0059]充分利用网卡硬件已有的RSS报文分流技术,通过对网卡寄存器中的RSS随机秘钥进行设置实现报文分流,在现有的分流方式的基础上派生出多种新的分流方式以满足更多更灵活的系统需求,同时避免了管道模式对系统性能造成的不利影响。
[0060]当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有技术效果。
【附图说明】
[0061]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0062]图1是本申请实施例的一种报文分流方法的方法流程图;
[0063]图2是本申请实施例的另一种报文分流方法的方法流程图;
[0064]图3是本申请实施例的RSS随机秘钥中与各报文头字段所对应的比特的位置示意图;
[0065]图4是本申请实施例的另一种报文分流方法的方法流程图;
[0066]图5是本申请实施例的另一种RSS随机秘钥中与各报文头字段所对应的比特的位置示意图;
[0067]图6是本申请实施例的另一种报文分流方法的方法流程图;
[0068]图7是本申请实施例的另一种RSS随机秘钥中与各报文头字段所对应的比特的位置示意图;
[0069]图8是本申请实施例的另一种报文分流方法的方法流程图;
[0070]图9是本申请实施例的另一种RSS随机秘钥中与各报文头字段所对应的比特的位置示意图;
[0071]图10是本申请实施例的另一种报文分流方法的方法流程图;
[0072]图11是本申请实施例的另一种RSS随机秘钥中与各报文头字段所对应的比特的位置示意图;
[0073]图12是本申请实施例的报文分流装置的装置结构图。
【具体实施方式】
[0074]以下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
[0075]在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0076]内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0077]计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0078]实施例描沐
[0079]下面以一实施例对本申请方法的实现作进一步说明。如图1所示,为本申请实施例的一种报文分流方法的方法流程图,该方法包括:
[0080]步骤SlOO:将RSS随机秘钥(RSS Random Secret Key)中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为O ;
[0081]RSS随机秘钥为网卡进行哈希(HASH)运算时所需的参数,RSS随机秘钥存放在网卡的硬件寄存器中,操作系统及上层应用软件可以在网卡初始化等过程中对RSS随机秘钥进行设置和修改。
[0082]其中,上述RSS分流数据由一个或多个报文头字段组成。
[0083]步骤S102:使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算,根据哈希运算得到的哈希值对该报文进行分流处理;
[0084]上述RSS分流数据中包含的多个报文头字段由网卡从接收到的报文中提取。
[0085]RSS分流数据分为两种类型:
[0086]类型I (四元组类型):由4个报文头字段组成,依次包含:源IP地址、目的IP地址、源端口号和目的端口号;
[0087]类型2 ( 二元组类型):由2个报文头字段组成,依次包含:源IP地址、目的IP地址。
[0088]上述根据哈希值对报文进行的分流处理包括:将报文放入与计算得到的哈希值相对应的RSS队列中,并交由与该RSS队列对应的处理器核心进行处理。
[0089]下面以第二实施例对本申请方法的实现作进一步说明。如图2所示,为本申请实施例的另一种报文分流方法的方法流程图;本实施例中,采用IPv4协议,并且当前配置的RSS分流数据类型为四元组类型;该方法包括:
[0090]步骤S200:将RSS随机秘钥中与RSS分流数据中的待屏蔽比特在位置上相对应的比特以及该比特之后的31个比特设置为O ;
[0091]RSS随机秘钥RSSRK为40个字节(320比特)长,其默认值为:
[0092]{0x6D, 0x5A, 0x56, OxDA, 0x25, 0x5B, OxOE, 0xC2,
[0093]0x41, 0x67, 0x25, 0x3D, 0x43, 0xA3, 0x8F, OxBO,
[0094]OxDO, OxCA, 0x2B, OxCB, OxAE, 0x7B, 0x30, 0xB4,
[0095]0x77, OxCB, 0x2D, 0xA3, 0x80, 0x30, 0xF2, OxOC,
[0096]0x6A, 0x42, 0xB7, 0x3B, OxBE, OxAC, 0x01, OxFA}。
[0097]本实施例中,采用IPv4协议,且RSS分流数据类型为四元组类型,因此RSS分流数据={SourcelP+DestlP+SourcePort+DestPort};其中:
[0098]SourceIP为源IP地址,长度L1= 32比特;DestIP为目的IP地址,长度L 2= 32比特;SourcePort为源端口号,长度L3= 16比特!DestPort为目的端口号,长度L4= 16比特;RSS分流数据的总长度L = 96比特。
[0099]本实施例中,上述待屏蔽比特可以是:4个报文头字段中的任意I个报文头字段的全部比特,或任意连续的2个报文头字段的全部比特,或任意连续的3个报文头字段的全部比特,或第I和第3个报文头字段的全部比特,或第I和第4个报文头字段的全部比特。
[0100]图3为第二实施例中RSS随机秘钥中与各报文头字段所对应的比特的位置示意图。图3中,KEYl为第I个报文头字段(即源IP地址)在RSS随机秘钥中所对应的比特;KEY2为第2个报文头字段(即目的IP地址)在RSS随机秘钥中所对应的比特;KEY3为第3个报文头字段(即源端口号)在RSS随机秘钥中所对应的比特;KEY4为第4个报文头字段(即目的端口号)在RSS随机秘钥中所对应的比特。其中:
[0101]KEYl的长度K1= Li+31 = 63比特,KEYl在RSS随机秘钥中的对应位置为:第I?63比特(第I?Q+31比特);
[0102]KEY2的长度K2= L2+31 = 63比特,KEY2在RSS随机秘钥中的对应位置为:第33?95比特(第Q+1?W31比特);
[0103]KEY3的长度K3= L3+31 = 47比特;KEY3在RSS随机秘钥中的对应位置为:第65?111 比特(第 L1+!^+1 ?1^+1^2+1^+31 比特);
[0104]KEY4的长度K4= L4+31 = 47比特;KEY4在RSS随机秘钥中的对应位置为:第81?127 比特(第 Li+I^+Lu+l ?1^+1^2+1^+1^4+31 比特)。
[0105]本实施例中,RSS随机秘钥的有效字节为L+31 = 127比特。
[0106]以待屏蔽比特为目的IP地址字段的全部比特为例,将目的IP地址字段在RSS随机秘钥中所对应的比特及各比特之后的31个比特(即KEY2)设置为O后,上述RSS随机秘钥的值RSSRK将变为:
[0107]{0x6D, 0x5A, 0x56, OxDA, 0x00, 0x00, 0x00, 0x00,
[0108]0x00, 0x00, 0x00, 0x01, 0x43, 0xA3, 0x8F, OxBO,
[0109]OxDO, OxCA, 0x2B, OxCB, OxAE, 0x7B, 0x30, 0xB4,
[0110]0x77, OxCB, 0x2D, 0xA3, 0x80, 0x30, 0xF2, OxOC,
[0111]0x6A, 0x42, 0xB7, 0x3B, OxBE, OxAC, 0x01, OxFA}。
[0112]步骤S202:网卡接收到报文后,根据当前的配置从接收到的报文中提取RSS分流数据;
[0113]如上所述,本实施例中,
[0114]RSS 分流数据={SourcelP+DestlP+SourcePort+DestPort} ο
[0115]步骤S204:网卡使用其硬件寄存器中存储的上述RSS随机秘钥对RSS分流数据进行哈希运算得到哈希值;
[0116]本实施例中,哈希运算可以采用基于异或运算的哈希函数,如Toeplitz (托布里兹)哈希函数,Toeplitz哈希函数的伪代码如下:
[0117]ComputeHash (input [], N)
[0118]For hash-1nput input[]of length N bytes(8N bits)and a random secret key
[0119]K of 320bits
[0120]Result = 0 ;
[0121]For each bit b in input [] {
[0122]if (b == I) then Result' = (left-most 32bits of K);
[0123]shift K left Ibit posit1n ;
[0124]}
[0125]return Result ;
[0126]其中,ComputeHash为Toeplitz哈希函数的函数名;
[0127]input []和N为Toeplitz哈希函数的两个输入参数,input []为长度为N字节(8 X N比特)RSS分流数据,本实施例中,N = 12 ;
[0128]K为40字节(320比特)长的RSS随机秘钥;
[0129]Result为Toeplitz哈希函数输出的哈希值,其初值为O。
[0130]Toeplitz哈希函数中,从输入的RSS分流数据的最左侧的比特开始,对于RSS分流数据中的每一比特b依次进行如下处理:
[0131]判断b是否为1:
[0132]如果b = I,则令 Result = Result'(K[32]),并将 K 左移 I 比特;
[0133]如果b Φ 1,则将K左移I比特。
[0134]完成上述处理后,将Result值作为Toeplitz哈希函数的哈希值输出。
[0135]其中,上述K[32]表示当前K值的最左侧(最高位)的32比特。
[0136]步骤S206:网卡根据计算得到的哈希值对接收到的报文进行分流处理,即将该报文放入与哈希值相对应的RSS队列中,并交由与该RSS队列对应的处理器核心进行处理。
[0137]由上可知,本实施例基于四元组类型的RSS分流数据,通过对RSS随机秘钥进行设置,派生出多种新的分流方式,例如:
[0138]将KEYl设置为0,可依据目的IP地址、源端口号和目的端口号进行分流;或
[0139]将KEY2设置为O,可依据源IP地址、源端口号和目的端口号进行分流;或
[0140]将KEY3设置为0,可依据源IP地址、目的IP地址和目的端口号进行分流;或[0141 ] 将KEY4设置为O,可依据源IP地址、目的IP地址和源端口号进行分流。
[0142]除以上分流方式外,还可以通过:将KEYl和KEY2设置为0,或将KEY2和KEY3设置为0,或将KEY3和KEY4设置为0,或将KEYl、KEY2和KEY3设置为0,或将KEY2、KEY3和KEY4设置为0,或将KEYl和KEY3设置为0,或将KEYl和KEY4设置为O等方式派生出更多的分流方式。
[0143]下面以第三实施例对本申请方法的实现作进一步说明。如图4所示,为本申请实施例的另一种报文分流方法的方法流程图;本实施例中,采用IPv4协议,并且当前配置的RSS分流数据类型为二元组类型;该方法包括:
[0144]步骤S400:将RSS随机秘钥中与RSS分流数据中的待屏蔽比特在位置上相对应的比特以及该比特之后的31个比特设置为O ;
[0145]本实施例中,采用IPv4协议,且RSS分流数据类型为二元组类型,因此RSS分流数据={SourcelP+DestIP};其中:
[0146]SourceIP为源IP地址,长度L1= 32比特;DestIP为目的IP地址,长度L 2= 32比特;RSS分流数据的总长度L = 64比特。
[0147]本实施例中,上述待屏蔽比特可以是2个报文头字段中的任意I个报文头字段的全部比特。
[0148]图5为第三实施例中RSS随机秘钥中与各报文头字段所对应的比特的位置示意图。图5中,KEYl为第I个报文头字段(即源IP地址)在RSS随机秘钥中所对应的比特;KEY2为第2个报文头字段(即目的IP地址字段)在RSS随机秘钥中所对应的比特。其中:
[0149]KEYl的长度K1= L片31 = 63比特,KEYl在RSS随机秘钥中的对应位置为:第I?63比特(第I?Q+31比特);
[0150]KEY2的长度K2= L2+31 = 63比特,KEY2在RSS随机秘钥中的对应位置为:第33?95比特(第Q+1?W31比特);
[0151]本实施例中,RSS随机秘钥的有效字节为L+31 = 95比特。
[0152]步骤S402:网卡接收到报文后,根据当前的配置从接收到的报文中提取RSS分流数据;
[0153]如上所述,本实施例中,
[0154]RSS 分流数据={SourcelP+DestIP} ο
[0155]步骤S404:网卡使用其硬件寄存器中存储的上述RSS随机秘钥对RSS分流数据进行哈希运算得到哈希值;
[0156]本实施例中,哈希运算可以采用基于异或运算的哈希函数,如Toeplitz (托布里兹)哈希函数。
[0157]步骤S406:网卡根据计算得到的哈希值对接收到的报文进行分流处理,即将该报文放入与哈希值相对应的RSS队列中,并交由与该RSS队列对应的处理器核心进行处理。
[0158]由上可知,本实施例基于二元组类型的RSS分流数据,通过对RSS随机秘钥进行设置,派生出多种新的分流方式,例如:
[0159]将KEYl设置为0,可依据目的IP地址进行分流;或
[0160]将KEY2设置为O,可依据源IP地址进行分流。
[0161]下面以第四实施例对本申请方法的实现作进一步说明。如图6所示,为本申请实施例的另一种报文分流方法的方法流程图;本实施例中,采用IPv6协议,并且当前配置的RSS分流数据类型为四元组类型;该方法包括:
[0162]步骤S600:将RSS随机秘钥中与RSS分流数据中的待屏蔽比特在位置上相对应的比特以及该比特之后的31个比特设置为O ;
[0163]本实施例中,采用IPv6协议,且RSS分流数据类型为四元组类型,因此RSS分流数据={SourcelP+DestlP+SourcePort+DestPort};其中:
[0164]SourceIP为源IP地址,长度L1= 128比特;DestIP为目的IP地址,长度L 2= 128比特;SourcePort为源端口号,长度L3= 16比特!DestPort为目的端口号,长度L4= 16比特;RSS分流数据的总长度L = 288比特。
[0165]本实施例中,上述待屏蔽比特可以是:4个报文头字段中的任意I个报文头字段的全部比特,或任意连续的2个报文头字段的全部比特,或任意连续的3个报文头字段的全部比特,或第I和第3个报文头字段的全部比特,或第I和第4个报文头字段的全部比特。
[0166]图7为第四实施例中RSS随机秘钥中与各报文头字段所对应的比特的位置示意图。图7中,KEYl为第I个报文头字段(即源IP地址)在RSS随机秘钥中所对应的比特;KEY2为第2个报文头字段(即目的IP地址)在RSS随机秘钥中所对应的比特;KEY3为第3个报文头字段(即源端口号)在RSS随机秘钥中所对应的比特;KEY4为第4个报文头字段(即目的端口号)在RSS随机秘钥中所对应的比特。其中:
[0167]KEYl的长度K1= L片31 = 159比特,KEYl在RSS随机秘钥中的对应位置为:第I?159比特(第I?Q+31比特);
[0168]KEY2的长度K2= L 2+31 = 159比特,KEY2在RSS随机秘钥中的对应位置为:第129?287比特(第L1+!?!^+1^+31比特);
[0169]KEY3的长度K3= L 3+31 = 47比特;KEY3在RSS随机秘钥中的对应位置为:第257?303比特(第Wl?WL3+31比特);
[0170]KEY4的长度K4= L 4+31 = 47比特;KEY4在RSS随机秘钥中的对应位置为:第273 ?319 比特(第 L1U2U3+1 ?WVLpl 比特)。
[0171]本实施例中,RSS随机秘钥的有效字节为L+31 = 319比特。
[0172]步骤S602:网卡接收到报文后,根据当前的配置从接收到的报文中提取RSS分流数据;
[0173]如上所述,本实施例中,
[0174]RSS 分流数据={SourcelP+DestlP+SourcePort+DestPort} ο
[0175]步骤S604:网卡使用其硬件寄存器中存储的上述RSS随机秘钥对RSS分流数据进行哈希运算得到哈希值;
[0176]本实施例中,哈希运算可以采用基于异或运算的哈希函数,如Toeplitz (托布里兹)哈希函数。
[0177]步骤S606:网卡根据计算得到的哈希值对接收到的报文进行分流处理,即将该报文放入与哈希值相对应的RSS队列中,并交由与该RSS队列对应的处理器核心进行处理。
[0178]由上可知,本实施例基于四元组类型的RSS分流数据,通过对RSS随机秘钥进行设置,派生出了多种新的分流方式,例如:
[0179]将KEYl设置为0,可依据目的IP地址、源端口号和目的端口号进行分流;或
[0180]将KEY2设置为O,可依据源IP地址、源端口号和目的端口号进行分流;或
[0181]将KEY3设置为O,可依据源IP地址、目的IP地址和目的端口号进行分流;或
[0182]将KEY4设置为O,可依据源IP地址、目的IP地址和源端口号进行分流。
[0183]除以上分流方式外,还可以通过:将KEYl和KEY2设置为0,或将KEY2和KEY3设置为0,或将KEY3和KEY4设置为0,或将KEYl、KEY2和KEY3设置为0,或将KEY2、KEY3和KEY4设置为0,或将KEYl和KEY3设置为0,或将KEYl和KEY4设置为O等方式派生出更多的分流方式。
[0184]下面以第五实施例对本申请方法的实现作进一步说明。如图8所示,为本申请实施例的另一种报文分流方法的方法流程图;本实施例中,采用IPv6协议,并且当前配置的RSS分流数据类型为二元组类型;该方法包括:
[0185]步骤S800:将RSS随机秘钥中与RSS分流数据中的待屏蔽比特在位置上相对应的比特以及该比特之后的31个比特设置为O ;
[0186]本实施例中,采用IPv6协议,且RSS分流数据类型为二元组类型,因此RSS分流数据={SourcelP+DestIP};其中:
[0187]SourceIP为源IP地址,长度L1= 128比特;DestIP为目的IP地址,长度L 2= 128比特;RSS分流数据的总长度L = 256比特。
[0188]本实施例中,上述待屏蔽比特可以是2个报文头字段中的任意I个报文头字段的全部比特。
[0189]图9为第五实施例中RSS随机秘钥中与各报文头字段所对应的比特的位置示意图。图9中,KEYl为第I个报文头字段(即源IP地址字段)在RSS随机秘钥中所对应的比特;KEY2为第2个报文头字段(即目的IP地址字段)在RSS随机秘钥中所对应的比特。其中:
[0190]KEYl的长度K1= L !+31 = 159比特,KEYl在RSS随机秘钥中的对应位置为:第I?159比特(第I?Q+31比特);
[0191]KEY2的长度K2= L2+31 = 159比特,KEY2在RSS随机秘钥中的对应位置为:第129?287比特(第L1+!?!^+1^+31比特)。
[0192]本实施例中,RSS随机秘钥的有效字节为L+31 = 287比特。
[0193]步骤S802:网卡接收到报文后,根据当前的配置从接收到的报文中提取RSS分流数据;
[0194]如上所述,本实施例中,
[0195]RSS 分流数据={SourcelP+DestIP} ο
[0196]步骤S804:网卡使用其硬件寄存器中存储的上述RSS随机秘钥对RSS分流数据进行哈希运算得到哈希值;
[0197]本实施例中,哈希运算可以采用基于异或运算的哈希函数,如Toeplitz (托布里兹)哈希函数。
[0198]步骤S806:网卡根据计算得到的哈希值对接收到的报文进行分流处理,即将该报文放入与哈希值相对应的RSS队列中,并交由与该RSS队列对应的处理器核心进行处理。
[0199]由上可知,本实施例基于二元组类型的RSS分流数据,通过对RSS随机秘钥进行设置,派生出了多种新的分流方式,例如:
[0200]将KEYl设置为0,可依据目的IP地址进行分流;或
[0201]将KEY2设置为0,可依据源IP地址进行分流。
[0202]下面以第六实施例对本申请方法的实现作进一步说明。如图10所示,为本申请实施例的另一种报文分流方法的方法流程图;本实施例中,采用IPv4协议,并且当前配置的RSS分流数据类型为二元组类型;该方法包括:
[0203]步骤S1000:将RSS随机秘钥中与RSS分流数据中的待屏蔽比特在位置上相对应的比特以及该比特之后的31个比特设置为O ;
[0204]本实施例中,采用IPv4协议,且RSS分流数据类型为二元组类型,因此RSS分流数据={SourcelP+DestIP}。
[0205]本实施例中,上述待屏蔽比特为2个报文头字段中的任意I个或2报文头字段的部分比特。具体地说,本实施例中待屏蔽比特可以为:
[0206]源IP地址中的子网号和主机号所对应的比特,或主机号所对应的比特;和/或
[0207]目的IP地址中的子网号和主机号所对应的比特,或主机号所对应的比特。
[0208]IP地址以两级划分可以表示为:网络号+主机号,如果以三级划分,主机号又可以表示为:子网号+主机号;此外,IP地址可分为A、B、C等多类,不同类别的IP地址的网络号、子网号和主机号所占比特数不同。
[0209]本实施例中,以Nn表示网络号所占比特数,N s表示子网号所占比特数,N h表示主机号所占比特数,则:
[0210]如果待屏蔽比特为源IP地址的主机号所对应的比特,则将RSS随机秘钥的第Nn+Ns+1?Q+31个比特设置为0,即将图5所示的KEYl的后Nh+31个比特设置为O ;
[0211]如果待屏蔽比特为源IP地址的子网号和主机号所对应的比特,则将RSS随机秘钥的第Nn+1?Q+31个比特设置为0,即将图5所示的KEYl的后Ns+Nh+31个比特设置为O ;
[0212]如果待屏蔽比特为目的IP地址的主机号所对应的比特,则将RSS随机秘钥的第L!+Nn+Ns+1?Q+I^+31比特设置为0,即将图5所示的KEY2的后Nh+31个比特设置为O ;
[0213]如果待屏蔽字节为目的IP地址的子网号和主机号所对应的比特,则将RSS随机秘钥的第Ι^+Νη+1?I^+k+31比特设置为0,即将图5所示的KEY2的后Ns+Nh+31个比特设置为O。
[0214]步骤S1002:网卡接收到报文后,根据当前的配置从接收到的报文中提取RSS分流数据;
[0215]如上所述,本实施例中,
[0216]RSS 分流数据={SourcelP+DestIP} ο
[0217]步骤S1004:网卡使用其硬件寄存器中存储的上述RSS随机秘钥对RSS分流数据进行哈希运算得到哈希值;
[0218]本实施例中,哈希运算可以采用基于异或运算的哈希函数,如Toeplitz (托布里兹)哈希函数。
[0219]步骤S1006:网卡根据输出的哈希值对接收到的报文进行分流处理,即将该报文放入与哈希值相对应的RSS队列中,并交由与该RSS队列对应的处理器核心进行处理。
[0220]由上可知,本实施例基于二元组类型的RSS分流数据,通过对RSS随机秘钥进行设置,派生出多种新的分流方式,例如:
[0221]将KEYl的后Nh+31或后Ns+Nh+31个比特设置为0,可依据源IP地址的网络号或依据源IP地址的网络号和子网号进行分流;和/或
[0222]将KEY2的后Nh+31或后Ns+Nh+31个比特设置为0,可依据目的IP地址的网络号或依据目的IP地址的网络号和子网号进行分流。
[0223]本实施例可以应用于IPv6协议,所不同的是,IPv6协议的IP地址没有包含子网号,其IP地址的构成为网络号+主机号(或称为:网络前缀+主机号),即上述Ns= O0
[0224]本发明的第六实施例可以与本发明的第二至第五实施例中的任何一个结合使用。
[0225]应用实例描述
[0226]下面以一应用实例对本申请方法的实现作进一步说明。
[0227]设接收到的报文为TCP报文,源IP地址={1.1.1.1},源端口号=0x1234,目的IP地址={2.2.2.2},目的端口号=0x50 ;RSS分流数据类型为四元组类型,则:RSS分流数据={SourcelP+DestlP+SourcePort+DestPort}。
[0228]本应用实例中以待屏蔽比特为目的IP地址字段(DestIP)的全部比特为例进行说明。
[0229]图11为本申请应用实例中RSS随机秘钥中与各报文头字段所对应的比特的位置示意图。如图11所示,为了屏蔽目的IP地址字段的对应比特,应当将RSS随机秘钥中的KEY2的全部比特设置为O。
[0230]为了更清晰地说明本申请的原理,本应用实例中对Toeplitz哈希函数进行改写,伪代码如下:
[0231 ] ComputeHash_S(input[], N, K, Result)
[0232]For each bit b in input []{
[0233]if (b == I) then Result' = (left-most 32bits of K);
[0234]shift K left Ibit posit1n ;
[0235]}
[0236]return Result ;
[0237]如以上伪代码所示,ComputeHash_S函数与Toeplitz哈希函数ComputeHash的区别在于ComputeHash_S函数增加了一个输入参数Result,即Result作为哈希值的初始值输入,也作为哈希运算的结果值输出。
[0238]经过上述改写后,我们可以将哈希运算分解为以下子步骤:
[0239]Rssl = ComputeHash_S(SourceIP, 4, KEY1, 0);
[0240]Rss2 = ComputeHash_S(DestIP, 4, KEY2, Rssl);
[0241]Rss3 = ComputeHash_S(SourcePort, 2, KEY3, Rss2);
[0242]Rss4 = ComputeHash_S(DestPort, 2, KEY4, Rss3)。
[0243]在Rss2 = ComputeHash_S (DestIP, 4,KEY2, Rssl)中,由于 KEY2 的全部比特为 0,因此无论DestIP为何值,Rss2 = Rssl,即在哈希函数的计算过程中,哈希值没有变化,即输出的哈希值与DestIP的值无关,通过将KEY2设置为O实现了对目的IP地址字段的屏蔽,以源IP地址、源端口号和目的端口号进行RSS分流。
[0244]下面以另一实施例对本申请装置的实现作进一步说明。如图12所示,为本申请实施例的报文分流装置的装置结构图,报文分流装置包括:随机秘钥设置模块1200、哈希运算模块1202、分流模块1204 ;其中:
[0245]随机秘钥设置模块,用于将RSS随机秘钥中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为O ;
[0246]哈希运算模块,用于使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算;
[0247]分流模块,用于根据哈希运算得到的哈希值对该报文进行分流处理;
[0248]其中,上述RSS分流数据由一个或多个报文头字段组成。
[0249]RSS分流数据依序包含4个报文头字段:源IP地址,目的IP地址,源端口号,目的端口号;
[0250]随机秘钥设置模块将所述4个报文头字段中的:
[0251]任意I个报文头字段的全部或部分比特;或
[0252]任意连续的2个报文头字段的全部或部分比特;或
[0253]任意连续的3个报文头字段的全部或部分比特;或
[0254]源IP地址中的全部或部分比特,和源端口号中的全部或部分比特;或
[0255]源IP地址中的全部或部分比特,和目的端口号中的全部或部分比特作为待屏蔽比特。
[0256]待屏蔽比特包括:
[0257]源IP地址中的子网号和主机号所对应的比特,或源IP地址中的主机号所对应的比特;和/或
[0258]目的IP地址中的子网号和主机号所对应的比特,或目的IP地址中的主机号所对应的比特。
[0259]此外,RSS分流数据还可以依序包含2个报文头字段:源IP地址,目的IP地址;
[0260]所述随机秘钥设置模块将所述2个报文头字段中的任意I个报文头字段的全部或部分比特作为所述待屏蔽比特。
[0261]所述待屏蔽比特为:
[0262]源IP地址中的子网号和主机号所对应的比特;或
[0263]源IP地址中的主机号所对应的比特;或
[0264]目的IP地址中的子网号和主机号所对应的比特;或
[0265]目的IP地址中的主机号所对应的比特。
[0266]所述哈希运算模块采用基于异或运算的哈希函数进行所述哈希运算。
[0267]优选地,所述哈希运算模块采用Toeplitz哈希函数进行所述哈希运算。
[0268]所述装置与前述的方法流程描述对应,更具体的描述请参考上述方法流程的叙述,不再一一赘述。
[0269]上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。
【主权项】
1.一种报文分流方法,其特征在于,该方法包括: 将RSS随机秘钥中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为O; 使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算,根据哈希运算得到的哈希值对该报文进行分流处理; 其中,上述RSS分流数据由一个或多个报文头字段组成。2.根据权利要求1所述的方法,其特征在于, 所述RSS分流数据依序包含4个报文头字段:源IP地址,目的IP地址,源端口号,目的端口号; 所述待屏蔽比特为所述4个报文头字段中的: 任意I个报文头字段的全部或部分比特;或 任意连续的2个报文头字段的全部或部分比特;或 任意连续的3个报文头字段的全部或部分比特;或 源IP地址中的全部或部分比特,和源端口号中的全部或部分比特;或 源IP地址中的全部或部分比特,和目的端口号中的全部或部分比特。3.根据权利要求1所述的方法,其特征在于, 所述RSS分流数据依序包含2个报文头字段:源IP地址,目的IP地址; 所述待屏蔽比特为所述2个报文头字段中的任意I个报文头字段的全部或部分比特。4.根据权利要求2所述的方法,其特征在于, 所述待屏蔽比特包括: 源IP地址中的子网号和主机号所对应的比特,或源IP地址中的主机号所对应的比特;和/或 目的IP地址中的子网号和主机号所对应的比特,或目的IP地址中的主机号所对应的比特。5.根据权利要求3所述的方法,其特征在于, 所述待屏蔽比特为: 源IP地址中的子网号和主机号所对应的比特;或 源IP地址中的主机号所对应的比特;或 目的IP地址中的子网号和主机号所对应的比特;或 目的IP地址中的主机号所对应的比特。6.根据权利要求1所述的方法,其特征在于, 所述哈希运算采用基于异或运算的哈希函数。7.根据权利要求6所述的方法,其特征在于, 所述哈希运算采用Toeplitz哈希函数。8.一种报文分流装置,其特征在于,包括: 随机秘钥设置模块,用于将RSS随机秘钥中与RSS分流数据的待屏蔽比特在位置上相对应的比特及其后续的连续31个比特设置为O ; 哈希运算模块,用于使用上述RSS随机秘钥对接收到的报文的RSS分流数据进行哈希运算; 分流模块,用于根据哈希运算得到的哈希值对该报文进行分流处理; 其中,上述RSS分流数据由一个或多个报文头字段组成。9.根据权利要求6所述的装置,其特征在于, 所述RSS分流数据依序包含4个报文头字段:源IP地址,目的IP地址,源端口号,目的端口号; 所述随机秘钥设置模块将所述4个报文头字段中的: 任意I个报文头字段的全部或部分比特;或 任意连续的2个报文头字段的全部或部分比特;或 任意连续的3个报文头字段的全部或部分比特;或 源IP地址中的全部或部分比特,和源端口号中的全部或部分比特;或 源IP地址中的全部或部分比特,和目的端口号中的全部或部分比特作为所述待屏蔽 比特。10.根据权利要求6所述的装置,其特征在于, 所述RSS分流数据依序包含2个报文头字段:源IP地址,目的IP地址; 所述随机秘钥设置模块将所述2个报文头字段中的任意I个报文头字段的全部或部分比特作为所述待屏蔽比特。11.根据权利要求9所述的装置,其特征在于, 所述待屏蔽比特包括: 源IP地址中的子网号和主机号所对应的比特,或源IP地址中的主机号所对应的比特;和/或 目的IP地址中的子网号和主机号所对应的比特,或目的IP地址中的主机号所对应的比特。12.根据权利要求10所述的装置,其特征在于, 所述待屏蔽比特为: 源IP地址中的子网号和主机号所对应的比特;或 源IP地址中的主机号所对应的比特;或 目的IP地址中的子网号和主机号所对应的比特;或 目的IP地址中的主机号所对应的比特。13.根据权利要求8所述的装置,其特征在于, 所述哈希运算模块采用基于异或运算的哈希函数进行所述哈希运算。14.根据权利要求9所述的装置,其特征在于, 所述哈希运算模块采用Toeplitz哈希函数进行所述哈希运算。
【文档编号】H04L12/743GK105871725SQ201510036029
【公开日】2016年8月17日
【申请日】2015年1月23日
【发明人】肖寒, 孙成浩, 祝顺民, 洪余柯, 姜邦杰
【申请人】阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1