一種報文分流方法及裝置的制造方法
【專利摘要】一種報文分流方法及裝置,該方法包括:將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日
【發明人】肖寒, 孫成浩, 祝順民, 洪余柯, 姜邦杰
【申請人】阿里巴巴集團控股有限公司