一種報(bào)文分流方法及裝置的制造方法
【專利摘要】一種報(bào)文分流方法及裝置,該方法包括:將網(wǎng)卡流控制器的過(guò)濾器掩碼中的源和目的IP地址掩碼、源端口號(hào)掩碼設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非0;為各處理器核心分配不同的端口號(hào)集合,設(shè)置各處理器核心所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與端口號(hào)集合的對(duì)應(yīng)關(guān)系;處理器核心使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置接收到的正向報(bào)文的源端口號(hào),發(fā)送該正向報(bào)文;網(wǎng)卡接收到反向報(bào)文后使用過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該反向報(bào)文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列;處理器核心對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理。本申請(qǐng)充分利用網(wǎng)卡硬件已有的流控制器的過(guò)濾器分流技術(shù)將同一條流的報(bào)文送到同一個(gè)處理器核心上處理。
【專利說(shuō)明】
-種巧文分流方法及裝置
技術(shù)領(lǐng)域
[0001] 本申請(qǐng)涉及網(wǎng)絡(luò)通信領(lǐng)域,尤其涉及一種報(bào)文分流方法及裝置。
【背景技術(shù)】
[0002] 在網(wǎng)絡(luò)設(shè)備中,二層設(shè)備只需要處理包轉(zhuǎn)發(fā),而四層及W上設(shè)備如NAT(化twork AcMress Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)網(wǎng)關(guān)、VPN(Vi;rtual Private 化twork,虛擬專用網(wǎng)) 網(wǎng)關(guān)則需要維護(hù)會(huì)話信息,只有確定了報(bào)文所屬的會(huì)話后才可W提取相應(yīng)的會(huì)話信息進(jìn)行 報(bào)文的處理。而對(duì)于設(shè)置有多處理器或多核處理器的網(wǎng)絡(luò)設(shè)備,如果多個(gè)處理器核必同時(shí) 處理同一個(gè)會(huì)話會(huì)涉及到復(fù)雜的會(huì)話加鎖、報(bào)文出、入接口保序等問(wèn)題,送不僅會(huì)增加系統(tǒng) 的復(fù)雜性,還會(huì)對(duì)系統(tǒng)性能造成嚴(yán)重影響,因此需要將屬于同一條流/同一個(gè)會(huì)話的報(bào)文 送到同一個(gè)處理器核必上處理。
[0003] 目前主流網(wǎng)卡硬件一般都提供了分流功能,可W通過(guò)設(shè)置硬件過(guò)濾條件實(shí)現(xiàn)分 流。W INTCL(英特爾)82599網(wǎng)卡為例,其提供的RSS(Receive-Side Scaling,接收端調(diào) 節(jié))分流功能可W根據(jù)報(bào)文的五元組將報(bào)文分流到特定的處理器核必進(jìn)行處理,但是只能 支持最多32K(32X1024)個(gè)不同的五元組組合,送對(duì)于網(wǎng)關(guān)類應(yīng)用顯然遠(yuǎn)遠(yuǎn)不夠。
[0004] 此外,網(wǎng)絡(luò)設(shè)備在對(duì)報(bào)文進(jìn)行處理時(shí)可能會(huì)改變報(bào)文的IP (Internet Protocol, 互聯(lián)網(wǎng)協(xié)議)地址和端口號(hào)。例如,報(bào)文在經(jīng)過(guò)源NAT設(shè)備處理后其源IP地址會(huì)改變;再 女口,報(bào)文經(jīng)過(guò)VPN設(shè)備處理后可能被加上一個(gè)新的IP頭,送同樣會(huì)改變報(bào)文的IP地址。如 果同一條流/同一個(gè)會(huì)話的正向報(bào)文(即由連接發(fā)起者發(fā)送的報(bào)文)和反向報(bào)文(即發(fā)送 給連接發(fā)起者的報(bào)文)的IP地址不完全相同,則依賴網(wǎng)卡RSS分流功能很難將雙向會(huì)話分 流到同一個(gè)處理器核必進(jìn)行處理。
[0005] 公開號(hào)為"103269317A",名稱為"基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法和 系統(tǒng)"的中國(guó)專利中披露了一種RSS報(bào)文分流方法,該方法的主要思路是將整個(gè)系統(tǒng)運(yùn)行于 管道(pipeline)模式,并且將一個(gè)處理器核必(例如,記作CoreA)用于處理報(bào)文分流,報(bào) 文都由網(wǎng)卡送到CoreA,由CoreA執(zhí)行一次哈希(HASH)運(yùn)算后再根據(jù)哈希運(yùn)算的結(jié)果將報(bào) 文發(fā)送給對(duì)應(yīng)的處理器核必。
[0006] 上述分流方法需要使用一個(gè)處理器核必專用于報(bào)文分流,不進(jìn)行其它業(yè)務(wù)的處 理,浪費(fèi)了處理器資源,而且該處理器核必容易成為整個(gè)系統(tǒng)的性能瓶頸。此外,由于使用 上述分流方法時(shí)整個(gè)系統(tǒng)運(yùn)行于管道模式下,一次報(bào)文處理需要由多個(gè)處理器核必共同完 成,因此一次報(bào)文處理所需的數(shù)據(jù)需要存儲(chǔ)在多個(gè)處理器核必所對(duì)應(yīng)的高速緩沖存儲(chǔ)器 Kache)中,送將會(huì)降低處理器的化Che命中率,進(jìn)一步降低了系統(tǒng)性能。
【發(fā)明內(nèi)容】
[0007] 本申請(qǐng)的目的在于提供報(bào)文分流方法及裝置。
[0008] 為了達(dá)到上述目的,本申請(qǐng)公開了一種報(bào)文分流方法,該方法包括:
[0009] 將網(wǎng)卡流控制器的過(guò)濾器掩碼中的源IP地址掩碼、目的IP地址掩碼和源端口號(hào) 掩碼設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非ο值;
[0010] 為各處理器核必分配不同的端口號(hào)集合,并設(shè)置各處理器核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文 隊(duì)列與所述端口號(hào)集合的對(duì)應(yīng)關(guān)系;
[0011] 處理器核必使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置其接收到的正向報(bào)文的 源端口號(hào),通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文;
[0012] 網(wǎng)卡接收到反向報(bào)文后使用所述過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該反向報(bào)文分 流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列;
[0013] 處理器核必對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理;
[0014] 其中,不同端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果 不同;同一端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果相同。
[001引此外,所述目的端口號(hào)掩碼的值為;OxFFFF?m;
[0016] 其中,0<m<16,《表示二進(jìn)制左移。
[0017] 此外,所述端口號(hào)集合中的端口號(hào)為非知名端口號(hào)。
[0018] 此外,采用如下方式設(shè)置處理器核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與所述端口號(hào)集合的 對(duì)應(yīng)關(guān)系:
[0019] 將為處理器核必分配的端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位 與的結(jié)果值設(shè)置到與該處理器核必關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列所對(duì)應(yīng)的寄存器中。
[0020] 此外,所述端口號(hào)集合包括;Pi,P2, -",ρ。;
[0021] 端口號(hào)集合Ρ沖包含的端口號(hào)為1 ;1《i《η;
[0022] 其中,m > 10, η《16 - m。
[0023] 為了達(dá)到上述目的,本申請(qǐng)還公開了一種報(bào)文分流裝置,該裝置包括:
[0024] 掩碼設(shè)置模塊,用于將網(wǎng)卡流控制器的過(guò)濾器掩碼中的源IP地址掩碼、目的IP地 址掩碼和源端口號(hào)掩碼設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非0值;
[00巧]端口號(hào)分配模塊,用于為各處理器核必分配不同的端口號(hào)集合,并設(shè)置各處理器 核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與所述端口號(hào)集合的對(duì)應(yīng)關(guān)系;
[0026] 處理器核必,用于使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置其接收到的正向報(bào) 文的源端口號(hào),通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文;
[0027] 網(wǎng)卡,用于在接收到反向報(bào)文后使用所述過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該反 向報(bào)文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列;
[0028] 所述處理器核必,還用于對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理;
[0029] 其中,不同端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果 不同;同一端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果相同。
[0030] 此外,所述掩碼設(shè)置模塊將所述目的端口號(hào)掩碼設(shè)置為;OxFFFF?m ;
[0031] 其中,0<m<16,《表示二進(jìn)制左移。
[0032] 此外,所述端口號(hào)分配模塊分配的所述端口號(hào)集合中的端口號(hào)為非知名端口號(hào)。
[0033] 此外,所述端口號(hào)分配模塊采用如下方式設(shè)置處理器核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列 與所述端口號(hào)集合的對(duì)應(yīng)關(guān)系:
[0034] 將為處理器核必分配的端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位 與的結(jié)果值設(shè)置到與該處理器核必關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列所對(duì)應(yīng)的寄存器中。
[0035] 此外,所述端口號(hào)分配模塊分配的所述端口號(hào)集合包括;Ρι,Ρζ,一,Ρ。;
[0036] 端口號(hào)集合Ρ沖包含的端口號(hào)為;2"Η 1,…,2""- 1 ;1《i《η ;
[0037] 其中,m > 10, η《16 - m。
[003引與現(xiàn)有技術(shù)相比,本申請(qǐng)可W獲得包括W下技術(shù)效果:
[0039] 充分利用網(wǎng)卡硬件已有的流控制器的過(guò)濾器分流技術(shù),將屬于同一條流/同一個(gè) 會(huì)話的報(bào)文送到同一個(gè)處理器核必上處理,避免了管道模式對(duì)系統(tǒng)性能造成的不利影響;
[0040] 通過(guò)將知名端口號(hào)排除在分配給各處理器核必的端口號(hào)集合之外,可W將本申請(qǐng) 的過(guò)濾器分流技術(shù)與網(wǎng)卡硬件的其它分流技術(shù)結(jié)合使用,避免了具有知名端口的大量報(bào)文 被集中分配到一個(gè)處理器核必而造成的各處理器核必負(fù)載不均衡的問(wèn)題。
[0041] 當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品并不一定需要同時(shí)達(dá)到W上所述的所有技術(shù)效果。
【附圖說(shuō)明】
[0042] 此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申 請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
[0043] 圖1是本申請(qǐng)實(shí)施例的一種報(bào)文分流方法的方法流程圖;
[0044] 圖2是本申請(qǐng)實(shí)施例的另一種報(bào)文分流方法的方法流程圖;
[0045] 圖3是本申請(qǐng)實(shí)施例的另一種報(bào)文分流方法的方法流程圖;
[0046] 圖4是使用本申請(qǐng)的報(bào)文分流方法的源NAT網(wǎng)關(guān)的報(bào)文處理過(guò)程示意圖;
[0047] 圖5是本申請(qǐng)實(shí)施例的報(bào)文分流裝置的裝置結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0048] W下將配合附圖及實(shí)施例來(lái)詳細(xì)說(shuō)明本申請(qǐng)的實(shí)施方式,藉此對(duì)本申請(qǐng)如何應(yīng)用 技術(shù)手段來(lái)解決技術(shù)問(wèn)題并達(dá)成技術(shù)功效的實(shí)現(xiàn)過(guò)程能充分理解并據(jù)W實(shí)施。
[0049] 在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、 網(wǎng)絡(luò)接口和內(nèi)存。
[0050] 內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/ 或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flashRAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì) 的示例。
[0051] 計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可W由任何方法 或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可W是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。 計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、 動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器值RAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電 可擦除可編程只讀存儲(chǔ)器巧EPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器 (CD-ROM)、數(shù)字多功能光盤值VD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁 性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可W被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中 的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù) 信號(hào)和載波。
[OOW] 連施例描沐
[0053] 下面W-實(shí)施例對(duì)本申請(qǐng)方法的實(shí)現(xiàn)作進(jìn)一步說(shuō)明。如圖1所示,為本申請(qǐng)實(shí)施 例的一種報(bào)文分流方法的方法流程圖,該方法包括:
[0054] 步驟S100 ;將網(wǎng)卡流控制器的過(guò)濾器(Flow Director Filters)的過(guò)濾器掩碼中 的源IP地址掩碼、目的IP地址掩碼和源端口號(hào)掩碼設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非 0值。
[00巧]步驟S102 ;為各處理器核必分配不同的端口號(hào)集合,并設(shè)置各處理器核必所關(guān)聯(lián) 的網(wǎng)卡報(bào)文隊(duì)列與所述端口號(hào)集合的對(duì)應(yīng)關(guān)系;
[0056] 上述端口號(hào)集合中包含的端口號(hào)滿足如下條件;不同端口號(hào)集合中的端口號(hào)與所 述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果不同;同一端口號(hào)集合中的端口號(hào)與所述目的端 口號(hào)掩碼進(jìn)行按位與所得的結(jié)果相同。
[0057] 步驟S104 ;處理器核必使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置其接收到的 正向報(bào)文的源端口號(hào),通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文。
[0058] 步驟S106 ;網(wǎng)卡接收到反向報(bào)文后使用所述過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該 反向報(bào)文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列。
[0059] 步驟S108 ;處理器核必對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理。
[0060] 下面W第二實(shí)施例對(duì)本申請(qǐng)方法的實(shí)現(xiàn)作進(jìn)一步說(shuō)明。如圖2所示,為本申請(qǐng)實(shí) 施例的另一種報(bào)文分流方法的方法流程圖;本實(shí)施例中,在源NAT網(wǎng)關(guān)中應(yīng)用報(bào)文分流方 法;該方法包括:
[006。 步驟S200廟源NAT網(wǎng)關(guān)中設(shè)置網(wǎng)卡的流控制器的過(guò)濾器掩碼;
[0062] 源NAT網(wǎng)關(guān)中的操作系統(tǒng)及上層應(yīng)用軟件可W使用網(wǎng)卡提供的接口進(jìn)行過(guò)濾器 掩碼的設(shè)置。
[0063] 網(wǎng)卡的過(guò)濾器掩碼包括:源IP地址掩碼(sou;rce_ip_mask)、目的IP地址掩碼 (dest_ip_mask)、源端口 號(hào)掩碼(sou;rce_po;rt_mask)和目的端口 號(hào)掩碼(dest_po;rt_ mask)。
[0064] 為了實(shí)現(xiàn)本發(fā)明的分流方法,需要排除報(bào)文中源IP地址、目的IP地址和源端口號(hào) 對(duì)分流的影響,因此令:
[0065] source_ip_mask = 0 ;
[0066] dest_ip_mask = 0 ;
[0067] source_port_mask = 0 ;
[0068] 并將dest_po;rt_mask設(shè)置為任意一個(gè)非0值。
[0069] 四層協(xié)議無(wú)論是TCP(Transfe;r Control Protocol,傳輸控制協(xié)議)還是UDP〇Jser 化tagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議),其端口號(hào)都由2個(gè)字節(jié)表示,端口號(hào)的取值范圍是 0~65535。端口號(hào)可分為Η類:
[0070] 知名端口號(hào)(Well Known Ports),知名端口號(hào)也可稱為系統(tǒng)保留端口號(hào),端口號(hào) 的范圍是;〇~1023 ;知名端口號(hào)被用于常用的網(wǎng)絡(luò)服務(wù);
[0071] 注冊(cè)端口號(hào),端口號(hào)的范圍是:1024~49151,注冊(cè)端口號(hào)被分配給用戶進(jìn)程或應(yīng) 用程序使用;
[007引動(dòng)態(tài)端口號(hào)值ynamic Ports),端口號(hào)的范圍是:49152~65535,動(dòng)態(tài)端口號(hào)一般 不用于固定分配給某種服務(wù),而用于動(dòng)態(tài)分配。
[0073] 注冊(cè)端口號(hào)和動(dòng)態(tài)端口號(hào)可統(tǒng)稱為非知名端口號(hào)。
[0074] 設(shè)置非0值的端口號(hào)掩碼(例如,上述目的端口號(hào)掩碼)本質(zhì)上是將端口號(hào)劃分 為多個(gè)不同的端口號(hào)集合。例如,令dest_po;rt_mask = 0x01,則將所有的可用端口號(hào)(包 括知名端口號(hào)、注冊(cè)端口號(hào)和動(dòng)態(tài)端口號(hào))分為兩個(gè)端口號(hào)集合:端口號(hào)最低位值為1的端 口號(hào)集合和端口號(hào)最低位值為0的端口號(hào)集合。每個(gè)端口號(hào)集合中包含2"個(gè)端口號(hào)。
[0075] 此外,為了提高程序的運(yùn)行效率,節(jié)省用于存儲(chǔ)變量的內(nèi)存等系統(tǒng)資源,需要每個(gè) 端口號(hào)集合中包含連續(xù)的端口號(hào),因此,可W將dest_po;rt_mask從最低比特位開始的連續(xù) m個(gè)比特值設(shè)置為0,其余比特值設(shè)置為1。即將端口號(hào)劃分為個(gè)不同的端口號(hào)集 合,每個(gè)端口號(hào)集合中包含2"個(gè)端口號(hào)。目P,本實(shí)施例中,可W將dest_port_mask設(shè)置為: 0xFFFF?m ;
[0076] 其中,0<m<16,"<<"表示二進(jìn)制左移。
[0077] 步驟S202 ;為源NAT網(wǎng)關(guān)的各處理器核必分配不同的端口號(hào)集合,即將各端口號(hào) 集合中包含的端口號(hào)作為資源分配給各處理器核必;
[007引 由于知名端口號(hào)(端口號(hào)為0~1023)用于常用的網(wǎng)絡(luò)服務(wù),源NAT網(wǎng)關(guān)的網(wǎng)卡 接收到的正向報(bào)文的目的端口號(hào)通常為知名端口號(hào),送一類正向報(bào)文通常應(yīng)當(dāng)使用網(wǎng)卡的 RSS分流功能進(jìn)行分流,W便將該類正向報(bào)文均勻分流到多個(gè)處理器核必進(jìn)行處理,通常不 需要通過(guò)本申請(qǐng)中采用的流控制器的過(guò)濾器進(jìn)行分流。
[0079] 因此,在為各處理器核必分配端口號(hào)集合時(shí),通常應(yīng)當(dāng)避免分配包含知名端口的 端口號(hào)集合。
[0080] 本實(shí)施例中,令10,從2"開始,劃分W下η個(gè)端口號(hào)集合:
[0081] Ρι= 12"·,…,2"·"- U .
[0082] Ρζ= {2川,…,2"·"- 1}.
[0083] …
[0084] Ρι= 1,…,之"·"- U .
[0085] …
[0086] Ρη= 1,…,2?·+η_ 1};
[0087] 其中,η《16-m。
[0088] 本步驟中,可W為一個(gè)處理器核必分配一個(gè)端口號(hào)集合,也可W為一個(gè)處理器核 必分配多個(gè)端口號(hào)集合。
[0089] 步驟S204 ;在源NAT網(wǎng)關(guān)的網(wǎng)卡中分別設(shè)置各處理器核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列 與為各處理器核必所分配的端口號(hào)集合之間的對(duì)應(yīng)關(guān)系;
[0090] 源NAT網(wǎng)關(guān)在初始化過(guò)程中會(huì)為各處理器核必分配網(wǎng)卡報(bào)文隊(duì)列,建立處理器核 必與網(wǎng)卡報(bào)文隊(duì)列之間的關(guān)聯(lián)關(guān)系。
[0091] 源NAT網(wǎng)關(guān)中的操作系統(tǒng)及上層應(yīng)用軟件可W使用網(wǎng)卡提供的接口設(shè)置網(wǎng)卡報(bào) 文隊(duì)列與端口號(hào)集合之間的對(duì)應(yīng)關(guān)系。
[009引例如,源NAT網(wǎng)關(guān)中包含N個(gè)處理器核必;Corel,…,Core,;
[0093] 與各處理器核必關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列分別記作;Qi,…,Qw;
[0094] 為各處理器核必分配的端口號(hào)集合分別為;Pi,…,Pw;
[009引本步驟中將通過(guò)網(wǎng)卡提供的接口建立起Qi和P 1之間的對(duì)應(yīng)關(guān)系。
[0096] 不同類型的網(wǎng)卡提供不同的接口進(jìn)行Qi和Pi之間對(duì)應(yīng)關(guān)系的建立。例如,可朗尋 端口號(hào)集合Pi中的任意一個(gè)端口號(hào)P i [ j]與目的端口號(hào)掩碼dest_po;rt_mask的按位與計(jì) 算的結(jié)果值;Pi[j]&dest_po;rt_mask設(shè)置到Qi所對(duì)應(yīng)的網(wǎng)卡寄存器中。
[0097] 步驟S206 ;源NAT網(wǎng)關(guān)的處理器核必接收到正向報(bào)文后,根據(jù)該正向報(bào)文的五元 組(即源IP地址、目的IP地址、源端口號(hào)、目的端口號(hào)和協(xié)議類型)查找對(duì)應(yīng)的會(huì)話信息;
[0098] 如果未查找到對(duì)應(yīng)的會(huì)話信息,則為該正向報(bào)文創(chuàng)建會(huì)話,并從為該處理器核必 分配的端口號(hào)集合中選擇一個(gè)端口號(hào)作為對(duì)應(yīng)會(huì)話的臨時(shí)端口號(hào),保存對(duì)應(yīng)的會(huì)話信息, 并使用該臨時(shí)端口號(hào)修改該正向報(bào)文的源端口號(hào)后,通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文;
[0099] 如果查找到對(duì)應(yīng)的會(huì)話信息,則從對(duì)應(yīng)的會(huì)話信息中提取該會(huì)話的臨時(shí)端口號(hào), 并使用該臨時(shí)端口號(hào)修改該正向報(bào)文的源端口號(hào)后,通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文。
[0100] 步驟S208 ;源NAT網(wǎng)關(guān)的網(wǎng)卡接收到反向報(bào)文后,使用過(guò)濾器掩碼進(jìn)行流控制器 過(guò)濾,將該反向報(bào)文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列中;
[0101] 流控制器過(guò)濾的主要過(guò)程包括:
[0102] 1)使用過(guò)濾器掩碼和從反向報(bào)文中提取的四元組(源IP地址、目的IP地址、源端 口號(hào)和目的端口號(hào))進(jìn)行按位與運(yùn)算;
[0103] 由于本發(fā)明中將過(guò)濾器掩碼中的源IP地址掩碼、目的IP地址掩碼和源端口號(hào)掩 碼設(shè)置為0,本步驟可W表示為:
[0104]
[0105]
[0106] 上述sou;rce_ip為反向報(bào)文的源IP地址,dest_ip為反向報(bào)文的目的IP地址, sou;rce_pcxrt為反向報(bào)文的源端口號(hào),dest_pcxrt為反向報(bào)文的目的端口號(hào)。
[0107] 根據(jù)按位與化)運(yùn)算的特征,pMASK的值僅由dest_port&dest_po;rt_mask的值決 定。
[0108] 2)使用pMSK值進(jìn)行哈希查找,找到與pMSK值相對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列,該網(wǎng)卡報(bào) 文隊(duì)列就是與dest_port&dest_po;rt_mask的值相對(duì)應(yīng),也就是與反向報(bào)文的目的端口號(hào) 所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列;
[0109] 3)將反向報(bào)文送入對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列中。
[0110] 由步驟S204中的描述可知,由于網(wǎng)卡報(bào)文隊(duì)列與處理器核必之間存在對(duì)應(yīng)關(guān)系, 而與處理器核必相對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列又與為該處理器核必所分配的端口號(hào)集合相對(duì)應(yīng) (即與dest_port&dest_po;rt_mask的值相對(duì)應(yīng)),因此經(jīng)過(guò)上述流控制器過(guò)濾,最終將反向 報(bào)文交由與該報(bào)文的目的端口所屬的端口號(hào)集合相對(duì)應(yīng)的處理器核必進(jìn)行處理。
[01U] 步驟S210 ;源NAT網(wǎng)關(guān)的處理器核必對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn) 行處理。
[0112] 由上可知,使用本實(shí)施例的報(bào)文分流方法,在源NAT網(wǎng)關(guān)中實(shí)現(xiàn)了同一條流/同一 個(gè)會(huì)話的正向報(bào)文和反向報(bào)文由相同的處理器核必進(jìn)行處理的目的。
[0113] 下面W第Η實(shí)施例對(duì)本申請(qǐng)方法的實(shí)現(xiàn)作進(jìn)一步說(shuō)明。如圖3所示,為本申請(qǐng)實(shí) 施例的另一種報(bào)文分流方法的方法流程圖;本實(shí)施例中,在VPN網(wǎng)關(guān)中應(yīng)用報(bào)文分流方法; 該方法包括:
[0114] 步驟S300廟VPN網(wǎng)關(guān)中設(shè)置網(wǎng)卡的流控制器的過(guò)濾器掩碼;
[011引為了實(shí)現(xiàn)本發(fā)明的分流方法,需要排除報(bào)文中源IP地址、目的IP地址和源端口號(hào) 對(duì)分流的影響,因此令:
[0116] source_ip_mask = 0 ;
[0117] dest_ip_mask = 0 ;
[0118] source_port_mask = 0 ;
[0119] dest_po;rt_mask = (0xFFFF<<m);其中 0<m<16。
[0120] 當(dāng)然,本實(shí)施例也可W將dest_port_mask設(shè)置為任意的非0值。
[0121] 步驟S302 ;為VPN網(wǎng)關(guān)的各處理器核必分配不同的端口號(hào)集合,即將各端口號(hào)集 合中包含的端口號(hào)作為資源分配給各處理器核必;
[0122] 同樣,為了避免分配包含知名端口的端口號(hào)集合,本實(shí)施例中,令10,從2"開 始,劃分W下η個(gè)端口號(hào)集合:
[012引 Ρι= {2"·,…,2"·"- 1}.
[0124] Ρζ= {2 m",...,2-+2- 1};
[0125] …
[0126] Pi= 口。" 1,…,2"·"- 1};
[0127] …
[0128] Pn= 1,…,2"·+。一 1}.
[0129] 其中,η《16-m。
[0130] 本步驟中,可W為一個(gè)處理器核必分配一個(gè)端口號(hào)集合,也可W為一個(gè)處理器核 必分配多個(gè)端口號(hào)集合。
[0131] 步驟S304 ;在VPN網(wǎng)關(guān)的網(wǎng)卡中分別設(shè)置各處理器核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與 為各處理器核必所分配的端口號(hào)集合之間的對(duì)應(yīng)關(guān)系;
[0132] VPN網(wǎng)關(guān)中的操作系統(tǒng)及上層應(yīng)用軟件可W使用網(wǎng)卡提供的接口設(shè)置網(wǎng)卡報(bào)文隊(duì) 列與端口號(hào)集合之間的對(duì)應(yīng)關(guān)系。
[0133] 例如,VPN網(wǎng)關(guān)中包含N個(gè)處理器核必;Corel,…,Core,;
[0134] 與各處理器核必關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列分別記作;Qi,…,Qw;
[0135] 為各處理器核必分配的端口號(hào)集合分別為;Pi,···,?,;
[0136] 本步驟中將通過(guò)網(wǎng)卡提供的接口建立起Qi和P 1之間的對(duì)應(yīng)關(guān)系。
[0137] 步驟S306 ;VPN網(wǎng)關(guān)的處理器核必接收到正向報(bào)文后,根據(jù)該正向報(bào)文的五元組 (即源IP地址、目的IP地址、源端口號(hào)、目的端口號(hào)和協(xié)議類型)查找對(duì)應(yīng)的會(huì)話信息;
[0138] 如果未查找到對(duì)應(yīng)的會(huì)話信息,則為該正向報(bào)文創(chuàng)建會(huì)話,并從為該處理器核必 分配的端口號(hào)集合中選擇一個(gè)端口號(hào)作為對(duì)應(yīng)會(huì)話的臨時(shí)端口號(hào),保存對(duì)應(yīng)的會(huì)話信息, 并使用該臨時(shí)端口號(hào)作為該正向報(bào)文的外部IP頭的源端口號(hào),為該正向報(bào)文添加外部IP 頭后通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文;
[0139] 如果查找到對(duì)應(yīng)的會(huì)話信息,則從對(duì)應(yīng)的會(huì)話信息中提取該會(huì)話的臨時(shí)端口號(hào), 并使用該臨時(shí)端口號(hào)作為該正向報(bào)文的外部IP頭的源端口號(hào),為該正向報(bào)文添加外部IP 頭后通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文。
[0140] 步驟S308 ;VPN網(wǎng)關(guān)的網(wǎng)卡接收到反向報(bào)文后,使用過(guò)濾器掩碼進(jìn)行流控制器過(guò) 濾,將該反向報(bào)文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列中。
[0141] 步驟S310 ;VPN網(wǎng)關(guān)的處理器核必對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行 處理。
[0142] 由上可知,使用本實(shí)施例的報(bào)文分流方法,在VPN網(wǎng)關(guān)中實(shí)現(xiàn)了同一條流/同一個(gè) 會(huì)話的正向報(bào)文和反向報(bào)文由相同的處理器核必進(jìn)行處理的目的。 陽(yáng)14引 府巧連例描沐
[0144] 下面W-應(yīng)用實(shí)例對(duì)本申請(qǐng)方法的實(shí)現(xiàn)作進(jìn)一步說(shuō)明。如圖4所示,為使用本申 請(qǐng)的報(bào)文分流方法的源NAT網(wǎng)關(guān)的報(bào)文處理過(guò)程示意圖。
[0145] 假設(shè)客戶端發(fā)出正向報(bào)文;報(bào)文1,其源IP地址為;1. 1. 1. 1,源端口號(hào)為;1234, 目的IP地址為;2. 2. 2. 2,目的端口號(hào)為;80 ;
[014引報(bào)文1到達(dá)源NAT網(wǎng)關(guān)后,由于該報(bào)文的目的端口號(hào)為80,為知名端口號(hào),沒有包 含在分配給各處理器核必的端口號(hào)集合中,因此網(wǎng)卡使用其它分流方式(例如,RSS分流功 能)將報(bào)文1分流到某一處理器粉,例如,Corel。上;
[0147] Corel。接收到報(bào)文1后根據(jù)報(bào)文1的四元組未查詢到對(duì)應(yīng)的會(huì)話信息,因此執(zhí)行 NAT邏輯,為報(bào)文1選擇一個(gè)NAT IP地址(例如,3. 3. 3. 3),并從Corel。對(duì)應(yīng)的端口號(hào)集合 中選擇一個(gè)端口號(hào)(例如,40961)作為臨時(shí)端口號(hào),并使用上述IP地址和臨時(shí)端口號(hào)修改 報(bào)文1的源IP地址和源端口號(hào),保存相關(guān)會(huì)話信息后,將報(bào)文1轉(zhuǎn)換為報(bào)文Γ,通過(guò)源NAT 網(wǎng)關(guān)的網(wǎng)卡發(fā)送報(bào)文Γ;
[014引源NAT網(wǎng)關(guān)的網(wǎng)卡接收到目的IP地址為3. 3. 3. 3,目的端口號(hào)為40961的反向報(bào) 文(記作:報(bào)文2)后,使用過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將報(bào)文2分流到Corel。進(jìn)行處 理;
[0149] Corel。根據(jù)NAT邏輯,根據(jù)保存的會(huì)話信息,使用IP地址1. 1. 1. 1,W及端口號(hào) 1234修改報(bào)文2的目的IP地址和目的端口號(hào),將報(bào)文2轉(zhuǎn)換為報(bào)文2',通過(guò)源NAT網(wǎng)關(guān)的 網(wǎng)卡發(fā)送報(bào)文2'。
[0150] 由上可知,屬于同一條流/同一個(gè)會(huì)話的正向報(bào)文和反向報(bào)文都被分流到了同一 個(gè)處理器核必進(jìn)行處理。
[0151] 下面W另一實(shí)施例對(duì)本申請(qǐng)裝置的實(shí)現(xiàn)作進(jìn)一步說(shuō)明。如圖5所示,為本申請(qǐng)實(shí) 施例的報(bào)文分流裝置的裝置結(jié)構(gòu)圖,報(bào)文分流裝置包括:掩碼設(shè)置模塊500、端口號(hào)分配模 塊502、處理器核必504、網(wǎng)卡506 ;其中:
[0152] 掩碼設(shè)置模塊,用于將網(wǎng)卡流控制器的過(guò)濾器掩碼中的源IP地址掩碼、目的IP地 址掩碼和源端口號(hào)掩碼設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非0值;
[0153] 端口號(hào)分配模塊,用于為各處理器核必分配不同的端口號(hào)集合,并設(shè)置各處理器 核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與端口號(hào)集合的對(duì)應(yīng)關(guān)系;
[0154] 處理器核必,用于使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置其接收到的正向報(bào) 文的源端口號(hào),通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文;
[01巧]網(wǎng)卡,用于在接收到反向報(bào)文后使用過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該反向報(bào) 文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列;
[0156] 處理器核必,還用于對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理;
[0157] 不同端口號(hào)集合中的端口號(hào)與目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果不同;同一 端口號(hào)集合中的端口號(hào)與目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果相同。
[0158] 掩碼設(shè)置模塊將目的端口號(hào)掩碼設(shè)置為;0xFFFF?m ;其中,0<m<16,《表示二進(jìn) 制左移。
[0159] 優(yōu)選地,端口號(hào)分配模塊分配的端口號(hào)集合包括;Pi,口2,…,P。;
[0160] 端口號(hào)集合P沖包含的端口號(hào)為1 ;1《i《η;
[0161 ]其中,10,η《16 - m。
[0162] 端口號(hào)分配模塊分配的端口號(hào)集合中的端口號(hào)為非知名端口號(hào)。
[0163] 端口號(hào)分配模塊采用如下方式設(shè)置處理器核必所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與端口號(hào) 集合的對(duì)應(yīng)關(guān)系:
[0164] 將為處理器核必分配的端口號(hào)集合中的端口號(hào)與目的端口號(hào)掩碼進(jìn)行按位與的 結(jié)果值設(shè)置到與該處理器核必關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列所對(duì)應(yīng)的寄存器中。
[0165] 所述裝置與前述的方法流程描述對(duì)應(yīng),更具體的描述請(qǐng)參考上述方法流程的敘 述,不再一一賞述。
[0166] 上述說(shuō)明示出并描述了本申請(qǐng)的若干優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本申請(qǐng) 并非局限于本文所披露的形式,不應(yīng)看作是對(duì)其他實(shí)施例的排除,而可用于各種其他組合、 修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過(guò)上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識(shí) 進(jìn)行改動(dòng)。而本領(lǐng)域人員所進(jìn)行的改動(dòng)和變化不脫離本申請(qǐng)的精神和范圍,則都應(yīng)在本申 請(qǐng)所附權(quán)利要求的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1. 一種報(bào)文分流方法,其特征在于,該方法包括: 將網(wǎng)卡流控制器的過(guò)濾器掩碼中的源IP地址掩碼、目的IP地址掩碼和源端口號(hào)掩碼 設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非0值; 為各處理器核心分配不同的端口號(hào)集合,并設(shè)置各處理器核心所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列 與所述端口號(hào)集合的對(duì)應(yīng)關(guān)系; 處理器核心使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置其接收到的正向報(bào)文的源端 口號(hào),通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文; 網(wǎng)卡接收到反向報(bào)文后使用所述過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該反向報(bào)文分流到 與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列; 處理器核心對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理; 其中,不同端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果不 同;同一端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果相同。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述目的端口號(hào)掩碼的值為:〇xFFFF〈〈m ; 其中,0〈m〈16,〈〈表示二進(jìn)制左移。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述端口號(hào)集合中的端口號(hào)為非知名端口號(hào)。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 采用如下方式設(shè)置處理器核心所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與所述端口號(hào)集合的對(duì)應(yīng)關(guān) 系: 將為處理器核心分配的端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與的 結(jié)果值設(shè)置到與該處理器核心關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列所對(duì)應(yīng)的寄存器中。5. 根據(jù)權(quán)利要求2所述的方法,其特征在于, 所述端口號(hào)集合包括七,P2,…,Pn; 端口號(hào)集合Pi中包含的端口號(hào)為:2m+11,~,2m+1- 1 ;1彡i彡η; 其中,m > 10, η < 16 - m。6. -種報(bào)文分流裝置,其特征在于,該裝置包括: 掩碼設(shè)置模塊,用于將網(wǎng)卡流控制器的過(guò)濾器掩碼中的源IP地址掩碼、目的IP地址掩 碼和源端口號(hào)掩碼設(shè)置為0,將目的端口號(hào)掩碼設(shè)置為非0值; 端口號(hào)分配模塊,用于為各處理器核心分配不同的端口號(hào)集合,并設(shè)置各處理器核心 所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與所述端口號(hào)集合的對(duì)應(yīng)關(guān)系; 處理器核心,用于使用為其分配的端口號(hào)集合中的端口號(hào)設(shè)置其接收到的正向報(bào)文的 源端口號(hào),通過(guò)網(wǎng)卡發(fā)送該正向報(bào)文; 網(wǎng)卡,用于在接收到反向報(bào)文后使用所述過(guò)濾器掩碼進(jìn)行流控制器過(guò)濾,將該反向報(bào) 文分流到與其目的端口號(hào)所屬的端口號(hào)集合所對(duì)應(yīng)的網(wǎng)卡報(bào)文隊(duì)列; 所述處理器核心,還用于對(duì)與其關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列中的反向報(bào)文進(jìn)行處理; 其中,不同端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果不 同;同一端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與所得的結(jié)果相同。7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于, 所述掩碼設(shè)置模塊將所述目的端口號(hào)掩碼設(shè)置為:〇xFFFF〈〈m ; 其中,0〈m〈16,〈〈表示二進(jìn)制左移。8. 根據(jù)權(quán)利要求6所述的裝置,其特征在于, 所述端口號(hào)分配模塊分配的所述端口號(hào)集合中的端口號(hào)為非知名端口號(hào)。9. 根據(jù)權(quán)利要求6所述的裝置,其特征在于, 所述端口號(hào)分配模塊采用如下方式設(shè)置處理器核心所關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列與所述端 口號(hào)集合的對(duì)應(yīng)關(guān)系: 將為處理器核心分配的端口號(hào)集合中的端口號(hào)與所述目的端口號(hào)掩碼進(jìn)行按位與的 結(jié)果值設(shè)置到與該處理器核心關(guān)聯(lián)的網(wǎng)卡報(bào)文隊(duì)列所對(duì)應(yīng)的寄存器中。10. 根據(jù)權(quán)利要求7所述的裝置,其特征在于, 所述端口號(hào)分配模塊分配的所述端口號(hào)集合包括:Pi,P2,…,Pn; 端口號(hào)集合Pi中包含的端口號(hào)為:2m+11,~,2m+1- 1 ;1彡i彡η; 其中,m > 10, η < 16 - m。
【文檔編號(hào)】H04L12/861GK105871741SQ201510037385
【公開日】2016年8月17日
【申請(qǐng)日】2015年1月23日
【發(fā)明人】肖寒, 孫成浩, 祝順民, 姜邦杰
【申請(qǐng)人】阿里巴巴集團(tuán)控股有限公司