一種數(shù)據包分類方法
【專利摘要】本發(fā)明公開了一種數(shù)據包分類方法,包括CPU預處理規(guī)則集和GPU執(zhí)行數(shù)據包分類兩大部分;預處理在數(shù)據包分類開始之前執(zhí)行,預先對規(guī)則集進行處理,使得后續(xù)包分類操作得以運行。預處理操作在CPU上完成。包分類操作是算法的核心部分,對輸入的數(shù)據包進行分類,輸出數(shù)據包匹配的優(yōu)先級最高的規(guī)則編號。數(shù)據包分類操作在GPU上完成。本發(fā)明充分利用GPU的硬件特點及優(yōu)勢,較常規(guī)數(shù)據包分類算法有較大性能優(yōu)勢。
【專利說明】
一種數(shù)據包分類方法
技術領域
[0001 ]本發(fā)明涉及一種數(shù)據包分類方法。
【背景技術】
[0002]在現(xiàn)代路由器、交換機和防火墻中,為了實現(xiàn)優(yōu)先路由或數(shù)據包過濾,網絡上傳輸?shù)臄?shù)據包需要根據包頭信息,按照一定的規(guī)則進行分類,執(zhí)行不同的操作。這樣的問題被稱為數(shù)據包分類問題。
[0003]在網絡分層模型中,要傳輸?shù)臄?shù)據被各層協(xié)議的包頭依次封裝,每層的數(shù)據包頭都包含若干個域,它們分別表示該層協(xié)議的特征數(shù)據。一個規(guī)則集含有N條規(guī)則,每條規(guī)則由三部分組成:(1)與域有關的表達式,表達式一般是(1元組(&,&,-_4(1),其中&可能是前綴(數(shù)據包中的IP地址需要進行前綴匹配),也可能是范圍(端口號需要進行范圍匹配),或者是一個精確的值(協(xié)議類型需要進行精確匹配);(2)優(yōu)先級,聲明該條規(guī)則在規(guī)則集中的優(yōu)先級,當一個數(shù)據包和多條規(guī)則匹配時,優(yōu)先級最高的規(guī)則生效;(3)處理動作,如果輸入的數(shù)據包與規(guī)則匹配,則根據該動作對數(shù)據包處理。
[0004]—個輸入的數(shù)據包的包頭經過解析后得到包頭關鍵字P,P為d元組(Pl,P2,…,Pd),d維包分類問題就是在規(guī)則集中找到與P匹配,且具有最高優(yōu)先級的規(guī)則。
[0005]盡管已存在許多改善數(shù)據包分類性能的技術,但為了滿足日益增加的鏈路速率和流量大小,同時保持合理的可擴展性(考慮一些新的互聯(lián)網技術,諸如SDN),數(shù)據包分類問題仍然具有挑戰(zhàn)性。
[0006]隨著GPU計算能力的不斷增強,越來越多的系統(tǒng)和應用程序開始使用GPU來加速計算。相對于CPU,GPU的一個重要優(yōu)勢是它能提供相當強大的并行計算能力。如果我們將最新的CPU和最新的GPU進彳丁對比,往往可以發(fā)現(xiàn)GPU能提供遠超于CPU的每秒鐘浮點運算次數(shù)FLOPS (Floating-point Operat1ns Per Second)0CUDA(Compute Unified DeviceArchitecture,統(tǒng)一計算架構)是由顯卡設計廠商NVIDIA推出的通用并行計算平臺。通過這個平臺,開發(fā)者可以使用C/C++、Fortran等高級語言來編寫代碼,表達并行機制,在支持CUDA的GPU上以高性能執(zhí)行并行計算。
[0007]目前基于GPU平臺的數(shù)據包分類已經取得一定進展。其中,利用GPU的并行計算能力將基本的線性查找算法或者經典的包分類算法移植到GPU上實現(xiàn),可以大幅提高原系統(tǒng)的吞吐率。但是由于這些算法沒有利用GPU的硬件特點,并不適合GPU執(zhí)行,其運行效率還有較大的提升空間。
[0008]另一種基于GPU平臺的包分類器的實現(xiàn)方案是利用CUDA的驅動API,進行程序運行時的動態(tài)編譯,加載并執(zhí)行。這種基于GPU的元編程在于最大程度的減少了對于顯存的訪問需求,使得程序在執(zhí)行包分類時延遲很小。但是這種方法并不適合大規(guī)模的規(guī)則集的情況并且不支持規(guī)則集動態(tài)更新。
【發(fā)明內容】
[0009]本發(fā)明所要解決的技術問題是,針對現(xiàn)有技術不足,提供一種數(shù)據包分類方法。
[0010]為解決上述技術問題,本發(fā)明所采用的技術方案是:一種數(shù)據包分類方法,包括以下步驟:
1)對每個域分別建立索引表,使得對于所有域,給定任意合法輸入I,均能在常數(shù)時間內查詢到一條長度為規(guī)則集的大小的比特串,該比特串中O的位置編號對應合法輸入I不匹配的規(guī)則編號,I的位置編號對應合法輸入I匹配的規(guī)則編號;
2)將所有域的比特串傳輸?shù)紾PU的全局存儲器上待用,并將需要分類的數(shù)據包包頭關鍵字從內存?zhèn)鬏數(shù)紾PU的存儲器上;
3)取出數(shù)據包包頭所有域的值,并將所有域的值轉換為十進制,從GPU全局存儲器取得比特串;
4)對步驟4)的所有比特串執(zhí)行與操作,合并所有的比特串,得到一條比特串,在合并后的比特串中,值為I的比特位置編號對應所述數(shù)據包匹配的規(guī)則編號;
5)檢索所有匹配的規(guī)則,輸出其中優(yōu)先級最高的規(guī)則。
[0011]所述步驟I)中,所述域包括源端口號域、目的端口號域、協(xié)議類型域、源IP地址域和目的IP地址域。
[0012]所述步驟I)的具體實現(xiàn)過程包括:
對于源IP地址域,將該域拆成兩部分,每部分16個比特,最大范圍為[0,65535];首先將該域第一部分共65535條比特串以及第二部分共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中源IP地址域的匹配條件的前16比特轉換為范圍,第一部分中,編號在該范圍內的所有比特串的第i個位置均置為I;將規(guī)則中源IP地址域的匹配條件的后16比特轉換為范圍,第二部分中,編號在該范圍內的所有比特串的第i個位置均置為I;
對于目的IP地址域,將該域拆成兩部分,每部分16個比特,最大范圍為[0,65535],首先將該域第一部分共65535條比特串以及第二部分共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中目的IP地址域的匹配條件的前16比特轉換為范圍,第一部分中,編號在該范圍內的所有比特串的第i個位置均置為I;將規(guī)則中目的IP地址域的匹配條件的后16比特轉換為范圍,第二部分中,編號在該范圍內的所有比特串的第i個位置均置為I;
對于源端口號域,首先將該域全部共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中源端口號域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I;
對于目的端口號域,首先將該域全部共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則i中目的端口號域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I;
對于協(xié)議類型域,首先將該域全部共255條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則i中協(xié)議類型域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I。
[0013]所述步驟4)的具體實現(xiàn)過程為:
取出數(shù)據包包頭源IP地址域的值,將源IP地址域的值前16比特轉換為十進制,該十進制值等于源IP地址域第一部分所求比特串的編號,從GHJ全局存儲器取得比特串;將源IP地址域的值后16比特轉換為十進制,該十進制等于源IP地址域第二部分所求比特串的編號,從GPU全局存儲器取得比特串;
取出數(shù)據包包頭目的IP地址域的值,將目的IP地址域的值前16比特轉換為十進制,該十進制值等于目的IP地址域第一部分所求比特串的編號,從GHJ全局存儲器取得比特串;將目的IP地址域的值后16比特轉換為十進制,該十進制等于目的IP地址域第二部分所求比特串的編號,從GPU全局存儲器取得比特串;
取出數(shù)據包包頭源端口號域的值,將源端口號域的值轉換為十進制,該十進制值等于源端口號域所求比特串的編號,從GPU全局存儲器取得比特串;
取出數(shù)據包包頭目的端口號域的值,將目的端口號域的值轉換為十進制,該十進制值等于目的端口號域所求比特串的編號,從GHJ全局存儲器取得比特串;
取出數(shù)據包包頭協(xié)議類型域的值,將協(xié)議類型域的值轉換為十進制,該十進制值等于協(xié)議類型域所求比特串的編號,從GPU全局存儲器取得比特串。
[0014]與現(xiàn)有技術相比,本發(fā)明所具有的有益效果為:本發(fā)明針對GPU的硬件特點及優(yōu)勢設計數(shù)據結構及算法,并且充分利用CUDA并行計算平臺的相關技術,跟常規(guī)數(shù)據包分類方法相比有較大性能優(yōu)勢,實現(xiàn)了高性能的、靈活、可擴展的數(shù)據包分類。
【附圖說明】
[0015]圖1為本發(fā)明方法與HiCuts算法的吞吐率對比。
【具體實施方式】
[0016]本發(fā)明方法主要由兩部分組成:(I)CPU預處理規(guī)則集;(2)GPU執(zhí)行數(shù)據包分類。以常見的5元組包分類(數(shù)據包按照源IP地址、目的IP地址、源端口號、目的端口號、協(xié)議類型分類)為例,介紹該方法的總體流程。
[0017]一、CPU預處理規(guī)則集
概述:算法對于規(guī)則集中不同的域分別進行預處理。其目的是對每個域分別建立索引表,使得對于所有域,給定任意合法輸入I,均能在常數(shù)時間內查詢到一條長度為規(guī)則集的大小的比特串(由O或I構成的串)。該比特串中O的位置編號對應合法輸入I不匹配的規(guī)則編號,I的位置編號對應合法輸入I匹配的規(guī)則編號。
[0018]對每個域的預處理:
(I)源IP地址域有32個比特,最大范圍為[0,232-1],受到內存空間限制,無法直接預處理232-1條比特串。將該域拆成兩部分,每部分16個比特,最大范圍為[0,65535]。首先將該域第一部分共65535條比特串以及第二部分共65535條比特串全部初始化為全O串。對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中源IP地址域的匹配條件的前16比特轉換為范圍,第一部分中,編號在該范圍內的所有比特串的第i個位置均置為I;將規(guī)則中源IP地址域的匹配條件的后16比特轉換為范圍,第二部分中,編號在該范圍內的所有比特串的第i個位置均置為I。
[0019](2)目的IP地址域有3 2個比特,最大范圍為[O,232_1 ],受到內存空間限制,無法直接預處理232-1條比特串。將該域拆成兩部分,每部分16個比特,最大范圍為[0,65535]。首先將該域第一部分共65535條比特串以及第二部分共65535條比特串全部初始化為全O串。對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中目的IP地址域的匹配條件的前16比特轉換為范圍,第一部分中,編號在該范圍內的所有比特串的第i個位置均置為I;將規(guī)則中目的IP地址域的匹配條件的后16比特轉換為范圍,第二部分中,編號在該范圍內的所有比特串的第i個位置均置為I;
(3)源端口號域有16個比特,最大范圍為[0,65535]。首先將該域全部共65535條比特串全部初始化為全O串。對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中源端口號域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I;
(4)目的端口號域有16個比特,最大范圍為[0,65535]。首先將該域全部共65535條比特串全部初始化為全O串。對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則i中目的端口號域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I;
(5)協(xié)議類型域有8個比特,最大范圍為[O,255]。首先將該域全部共255條比特串全部初始化為全O串。對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則i中協(xié)議類型域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I。
[0020]二、GPU執(zhí)行數(shù)據包分類
在GPU上執(zhí)行數(shù)據包分類之前,需要將預處理完成的5個域共393472(65536*6+256)條比特串傳輸?shù)紾HJ的全局存儲器上待用。
[0021 ]數(shù)據包分類過程總體上分為三步:
(1)將需要分類的數(shù)據包包頭關鍵字從內存?zhèn)鬏數(shù)紾HJ的存儲器上;
(2)GPU開啟大量線程,所有線程并行執(zhí)行分類算法(詳細見下述GPU執(zhí)行分類算法);
(3)將GPU的計算結果傳輸回內存。
[0022]默認情況下,以上三個步驟是順序執(zhí)行的,GPU必須等待內存至GPU存儲器的拷貝工作全部結束才能開始工作,在拷貝結束之前,GPU計算核心是空閑的。同時,顯存至內存的回拷貝也必須等待GHJ的計算全部結束,因而造成設備的利用率不高,程序的效率受到影響。
[0023]通過使用CUDA計算平臺中的Streams(多流)技術優(yōu)化,我們可以使得內存至GPU存儲器的拷貝、GPU的計算、顯存至內存的回拷貝以流水線的方式執(zhí)行,從而達到加速的效果。在CUDA中,流(Stream)的定義是指一系列的串行執(zhí)行的操作組合。在有多條流同時執(zhí)行時,屬于不同流中的操作是并行執(zhí)行的。
[0024]三、GPU執(zhí)行分類算法
GPU中每個線程按照以下步驟執(zhí)行包分類算法:
(1)取出數(shù)據包包頭源IP地址域的值。將源IP地址域的值前16比特轉換為十進制,該十進制值等于源IP地址域第一部分所求比特串的編號,從GHJ全局存儲器取得比特串。將源IP地址域的值后16比特轉換為十進制,該十進制等于源IP地址域第二部分所求比特串的編號,從GPU全局存儲器取得比特串;
(2)取出數(shù)據包包頭目的IP地址域的值。將目的IP地址域的值前16比特轉換為十進制,該十進制值等于目的IP地址域第一部分所求比特串的編號,從GHJ全局存儲器取得比特串。將目的IP地址域的值后16比特轉換為十進制,該十進制等于目的IP地址域第二部分所求比特串的編號,從GHJ全局存儲器取得比特串;
(3)取出數(shù)據包包頭源端口號域的值。將源端口號域的值轉換為十進制,該十進制值等于源端口號域所求比特串的編號,從GPU全局存儲器取得比特串;
(4)取出數(shù)據包包頭目的端口號域的值。將目的端口號域的值轉換為十進制,該十進制值等于目的端口號域所求比特串的編號,從GPU全局存儲器取得比特串;
(5)取出數(shù)據包包頭協(xié)議類型域的值。將協(xié)議類型域的值轉換為十進制,該十進制值等于協(xié)議類型域所求比特串的編號,從GPU全局存儲器取得比特串;
(6)對步驟I至5中求得的共7條比特串執(zhí)行與操作,合并所有的比特串,得到一條比特串。在合并后的比特串中,值為I的比特位置編號對應該數(shù)據包匹配的規(guī)則編號;
(7)檢索所有匹配的規(guī)則,輸出其中優(yōu)先級最高的規(guī)則。
[0025]測試實驗中,用測試的數(shù)據包總數(shù)除以實驗用時,可以得到單位時間內執(zhí)行數(shù)據包分類的數(shù)量。假設數(shù)據包大小均為64Byte,則每秒處理14.88*106個數(shù)據包相當于1Gbps的吞吐量,以此為依據作單位換算。
[0026]實驗中使用的仿真數(shù)據(包括規(guī)則集和數(shù)據包頭)通過ClassBench程序生成。我們測試了兩種類型的規(guī)則集:訪問控制列表(ACL),防火墻(FW)。在實驗中,每種類型的規(guī)則集都有四種不同的規(guī)模,從Ik到4k遞增。例如,fw_lk表示防火墻類型的規(guī)則集,規(guī)模大小為lk。我們只考慮5個域的規(guī)則:源/目的IP地址、源/目的端口以及協(xié)議類型。
[0027]測試主機的CPU為Intel的至強系列E5-2630,GPU為NVIDIA的TeslaK20m,有2496個⑶DA計算核心以及6GB的全局存儲。PC1-E 3.0插槽連接GPU和主機,為內存與GPU之間的傳輸提供16 GB/s的理論帶寬。
[0028]本專利中描述的算法分別使用不同的數(shù)據集與一種經典的包分類算法HiCuts進行對比測試。由于CUDA的參數(shù)配置會對算法的性能產生巨大影響,因而我們以不同的流數(shù)量、線程塊和線程數(shù)組合進行多次測試,使用最優(yōu)化的參數(shù)配置。
[0029]其中每個數(shù)據點測試5次,取平均值作為本次測試結果。結果如圖1所示,在常規(guī)規(guī)模數(shù)據集的情況下,該算法較HiCuts有著較為明顯的優(yōu)勢,其吞吐率較HiCuts提高了70%至400% ο
【主權項】
1.一種數(shù)據包分類方法,其特征在于,包括以下步驟: 1)對每個域分別建立索引表,使得對于所有域,給定任意合法輸入I,均能在常數(shù)時間內查詢到一條長度為規(guī)則集的大小的比特串,該比特串中O的位置編號對應合法輸入I不匹配的規(guī)則編號,I的位置編號對應合法輸入I匹配的規(guī)則編號; 2)將所有域的比特串傳輸?shù)紾PU的全局存儲器上待用,并將需要分類的數(shù)據包包頭關鍵字從內存?zhèn)鬏數(shù)紾PU的存儲器上; 3)取出數(shù)據包包頭所有域的值,并將所有域的值轉換為十進制,從GPU全局存儲器取得比特串; 4)對步驟3)的所有比特串執(zhí)行與操作,合并所有的比特串,得到一條比特串,在合并后的比特串中,值為I的比特位置編號對應所述數(shù)據包匹配的規(guī)則編號; 5)檢索所有匹配的規(guī)則,輸出其中優(yōu)先級最高的規(guī)則。2.根據權利要求1所述的數(shù)據包分類方法,其特征在于,所述步驟I)中,所述域包括源端口號域、目的端口號域、協(xié)議類型域、源IP地址域和目的IP地址域。3.根據權利要求2所述的數(shù)據包分類方法,其特征在于,所述步驟I)的具體實現(xiàn)過程包括: 對于源IP地址域,將該域拆成兩部分,每部分16個比特,最大范圍為[0,65535];首先將該域第一部分共65535條比特串以及第二部分共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中源IP地址域的匹配條件的前16比特轉換為范圍,第一部分中,編號在該范圍內的所有比特串的第i個位置均置為I;將規(guī)則中源IP地址域的匹配條件的后16比特轉換為范圍,第二部分中,編號在該范圍內的所有比特串的第i個位置均置為I; 對于目的IP地址域,將該域拆成兩部分,每部分16個比特,最大范圍為[0,65535],首先將該域第一部分共65535條比特串以及第二部分共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中目的IP地址域的匹配條件的前16比特轉換為范圍,第一部分中,編號在該范圍內的所有比特串的第i個位置均置為I;將規(guī)則中目的IP地址域的匹配條件的后16比特轉換為范圍,第二部分中,編號在該范圍內的所有比特串的第i個位置均置為I; 對于源端口號域,首先將該域全部共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則中源端口號域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I; 對于目的端口號域,首先將該域全部共65535條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則i中目的端口號域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I; 對于協(xié)議類型域,首先將該域全部共255條比特串全部初始化為全O串;對規(guī)則集中所有規(guī)則做如下處理:對于編號為i的規(guī)則,將規(guī)則i中協(xié)議類型域的匹配條件轉換為范圍,編號在該范圍內的所有比特串的第i個位置均置為I。4.根據權利要求3所述的數(shù)據包分類方法,其特征在于,所述步驟4)的具體實現(xiàn)過程為: 取出數(shù)據包包頭源IP地址域的值,將源IP地址域的值前16比特轉換為十進制,該十進制值等于源IP地址域第一部分所求比特串的編號,從GHJ全局存儲器取得比特串;將源IP地址域的值后16比特轉換為十進制,該十進制等于源IP地址域第二部分所求比特串的編號,從GPU全局存儲器取得比特串; 取出數(shù)據包包頭目的IP地址域的值,將目的IP地址域的值前16比特轉換為十進制,該十進制值等于目的IP地址域第一部分所求比特串的編號,從GHJ全局存儲器取得比特串;將目的IP地址域的值后16比特轉換為十進制,該十進制等于目的IP地址域第二部分所求比特串的編號,從GPU全局存儲器取得比特串; 取出數(shù)據包包頭源端口號域的值,將源端口號域的值轉換為十進制,該十進制值等于源端口號域所求比特串的編號,從GPU全局存儲器取得比特串; 取出數(shù)據包包頭目的端口號域的值,將目的端口號域的值轉換為十進制,該十進制值等于目的端口號域所求比特串的編號,從GHJ全局存儲器取得比特串; 取出數(shù)據包包頭協(xié)議類型域的值,將協(xié)議類型域的值轉換為十進制,該十進制值等于協(xié)議類型域所求比特串的編號,從GPU全局存儲器取得比特串。
【文檔編號】H04L12/741GK105897587SQ201610194030
【公開日】2016年8月24日
【申請日】2016年3月31日
【發(fā)明人】張大方, 鄭錦濤, 李彥彪, 李果, 何大成
【申請人】湖南大學