本發明涉及通信網絡
技術領域:
,尤其涉及一種虛擬化深度包檢測流量分析方法及系統。
背景技術:
:網絡技術已經成為人們日常生活中不可或缺的一部分,為了提供良好的網絡環境和網絡服務,網絡管理員或者網絡服務提供者ISP需要對網絡的穩定性和安全性進行管理,由此對網絡流量識別和分析也提出了更高的要求。現有技術中,通常利用DPI(DeepPacketInspection,深度包檢測)技術對網絡流量進行識別和分析。通過DPI可以了解用戶的真正需求,充分利用網絡資源,開發有吸引力的增值業務,提升用戶對網絡的依賴性和忠誠度,進而構建更好的盈利模式。但是實現現有的DPI技術需要多種硬件設備,網絡搭建時間長,靈活性低,這也使得網絡管理更加復雜,從而導致運營費用增加。近年來,隨著網絡技術的創新發展,網絡功能虛擬化NFV(NetworkFunctionVirtualization)技術被提出和應用,NFV的技術基礎是使用云計算和虛擬化技術將通用的計算/網絡/存儲硬件設備分解為不同的虛擬資源供上層應用使用,打破了專有硬件對網絡的限制,提升網絡建設、管理和維護的效率。如何將NFV技術與DPI結合,在虛擬化平臺上深度感知網絡應用,進行準確的網絡流量識別分析,成為網絡業務控制和管理的手段,進一步使得構建可運營、可管理的網絡,成為運營商關注的焦點。技術實現要素:本發明提供了一種虛擬化深度包檢測流量分析方法及系統,以解決現有DPI技術的業務識別準確性低,靈活性差的問題。為解決上述問題,本發明提供了一種虛擬化深度包檢測流量分析方法,所述方法包括:I/O接收核接收數據流,對五元組要素相同的數據流設置相同的流標識StreamID,將所述StreamID及其相對應的五元組要素添加到流信息表中,在預分配的內存地址上,將包含所述StreamID的數據流放入先入先出隊列中;工作核從所述先入先出隊列中取出數據流,解析取出的數據流的StreamID,根據預設的正則表達式特征庫文件和所述流信息表,對取出的數據流執行掃描,搜索匹配的特征值,進行深度包檢測,統計訪問所述特征值對應的WEB的流量。可選地,其中,所述五元組要素包括:源IP地址、源端口、目的IP地址、目的端口和協議;所述流信息表包括:所述StreamID與所述五元組要素以及流標記和特征值ID的唯一對應關系;其中,所述流標記用于表示數據流是否已匹配特征值,所述特征值ID對應于所述預設的正則表達式特征庫文件中的特征值。可選地,其中,所述對五元組要素相同的數據流設置相同的流標識StreamID包括:解析接收的數據流的五元組要素,比較當前的所述流信息表中是否存在與該五元組要素相同的數據流;若已存在,則使用該流信息表中五元組要素相同的數據流的StreamID,并將所述StreamID添加到所述數據流的附加字段中;若當前的流信息表中不存在與該五元組要素相同的數據流,則將現有的流信息表的最大StreamID加1作為新的StreamID,在所述流信息表中增加相應的表項,并將所述新的StreamID添加到所述數據流的附加字段中。可選地,其中,所述對取出的數據流執行掃描,搜索匹配的特征值包括:對取出的數據流執行Hyperscan掃描,在流模式下,使用單匹配模式匹配所述流標記,將相同StreamID的多個數據塊作為一條流,搜索匹配的特征值。可選地,其中,所述對取出的數據流執行掃描,搜索匹配的特征值包括:解析取出的數據流的StreamID,判斷所述流信息表中所述StreamID對應的流標記是否置位;當所述StreamID對應的流標記已置位時,判斷所述數據流是否為TCPFIN報文;如果不是TCPFIN報文,則按所述StreamID對應的特征值ID統計所述數據流;如果是TCPFIN報文,則將所述流信息表中所述StreamID對應的流標記清除,結束對所述特征值ID對應的WEB的一次訪問的流量統計。可選地,其中,所述對取出的數據流執行掃描,搜索匹配的特征值還包括:當所述StreamID對應的流標記沒有置位時,判斷所述數據流是否匹配所述預設的正則表達式特征庫文件中的特征值;當所述數據流匹配所述預設的正則表達式特征庫文件中的特征值時,置位所述流信息表中所述StreamID對應的流標記位,記錄特征值ID,按所述特征值ID進行WEB流量統計;當所述數據流未匹配到所述預設的正則表達式特征庫文件中的特征值時,進行TCP流量統計。為解決上述問題,本發明還提供了一種虛擬化深度包檢測流量分析系統,所述系統包括:I/O接收核,用于對接收數據流,對五元組要素相同的數據流設置相同的流標識StreamID,將所述StreamID及其相對應的五元組要素添加到流信息表中,在預分配的內存地址上,將包含所述StreamID的數據流放入先入先出隊列中;工作核,用于從所述先入先出隊列中取出數據流,解析取出的數據流的StreamID,根據預設的正則表達式特征庫文件和所述流信息表,對取出的數據流執行掃描,搜索匹配的特征值,進行深度包檢測,統計訪問所述特征值對應的WEB的流量。可選地,其中,所述五元組要素包括:源IP地址、源端口、目的IP地址、目的端口和協議;所述流信息表包括所述StreamID與所述五元組要素以及流標記和特征值ID的唯一對應關系;其中,所述流標記用于表示數據流是否已匹配特征值,所述特征值ID對應于所述預設的正則表達式特征庫文件中的特征值。可選地,其中,所述I/O接收核包括流分類模塊,所述流分類模塊,用于解析接收的數據流的五元組要素,比較當前的所述流信息表中是否存在與該五元組要素相同的數據流;若已存在,則使用該流信息表中五元組要素相同的數據流的StreamID,并將所述StreamID添加到所述數據流的附加字段中;若當前的流信息表中不存在與該五元組要素相同的數據流,則將現有的流信息表的最大StreamID加1作為新的StreamID,在所述流信息表中增加相應的表項,并將所述新的StreamID添加到所述數據流的附加字段中。可選地,其中,所述工作核包括解析統計模塊;所述解析統計模塊,用于對取出的數據流執行Hyperscan掃描,在流模式下,使用單匹配模式匹配所述流標記,將相同StreamID的多個數據塊作為一條流,搜索匹配的所述特征庫文件中的特征值。可選地,其中,所述解析統計模塊包括解析子模塊和統計子模塊:所述解析子模塊,用于解析取出的數據流的StreamID,判斷所述流信息表中所述StreamID對應的流標記是否置位;所述統計子模塊,用于當所述StreamID對應的流標記已置位時,判斷所述數據流是否為TCPFIN報文;如果不是TCPFIN報文,則按所述StreamID對應的特征值ID統計所述數據流;如果是TCPFIN報文,則將所述流信息表中所述StreamID對應的流標記清除,結束對所述特征值ID對應的WEB的一次訪問的流量統計。可選地,其中,所述解析子模塊,還用于當所述StreamID對應的流標記沒有置位時,判斷所述數據流是否匹配所述預設的正則表達式特征庫文件中的特征值;所述統計子模塊,還用于當所述數據流匹配所述預設的正則表達式特征庫文件中的特征值時,置位所述流信息表中所述StreamID對應的流標記位,記錄特征值ID,按所述特征值ID進行WEB流量統計;當所述數據流未匹配到所述預設的正則表達式特征庫文件中的特征值時,進行TCP流量統計。本發明實施例提供的虛擬化深度包檢測流量分析方法及系統,將網絡功能虛擬化NFV技術與深度包DPI技術有機結合,設置基于五元組的流信息表,I/O接收核基于五元組要素,對接收的數據流分配相應的流標識,工作核對接收的數據流進行解析,獲取流標識,根據預設的正則表達式特征庫文件和上述流信息表,對訪問WEB的流量進行識別和統計,業務識別準確性高、部署過程靈活、可擴展性強,可以有效提高運維成本效益。附圖說明圖1為本發明實施例一的虛擬化深度包檢測流量分析方法示意圖;圖2為本發明實施例二的虛擬化深度包檢測流量分析系統結構示意圖;圖3為本發明實施例二中的模塊示意圖;圖4為本發明的一種示范性實施例的方法流程圖;圖5為圖4中流量分析步驟的具體方法流程圖。本發明目的的實現、功能特點及優點將結合實施例,參照附圖做進一步說明。具體實施方式應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。下面將結合附圖及實施例對本發明的技術方案進行更詳細的說明。需要說明的是,如果不沖突,本發明實施例以及實施例中的各個特征可以相互結合,均在本發明的保護范圍之內。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執行所示出或描述的步驟。本發明的實施例中,使用用于表示元件的諸如“模塊”、“部件”或“單元”的后綴僅為了有利于本發明的說明,其本身并沒有特定的意義。因此,“模塊”與“部件”可以混合地使用。本發明實施例中處理網絡流量的設備為多核設備,將多核設備的邏輯核Lcore預先分為三類:(1)I/O接收核(I/ORXLcore);(2)工作核(WorkerLcore);(3)I/O發送核(I/OTXLcore)。對應地,通過數據面開發套件DPDK(Data-planeDevelopmentKit)在多核設備上創建多個線程,并將每個線程綁定到單獨的核上,以減少線程調度的開銷,提高性能。具體地,I/ORXLcore處理網卡數據接收的線程;WorkerLcore處理數據業務流程,以及I/OTXLcore處理網卡數據發送線程;其中,IORX/TXLcore可以與各個WorkerLcore之間分別創建一個無鎖的單生產者單消費者環形(ring)隊列;各類型邏輯核個數根據總核數分配設置為預定值,例如,配置有以下初始參數,1個I/ORXLcore、1個WorkerLcore、1個I/OTXLcore,同時也可以根據容量需求靈活擴展核個數,進一步提高性能。基于上述多核設備,本發明實施例提出了一種虛擬化深度包檢測流量分析方法,包括:步驟10:I/O接收核接收數據流,對五元組要素相同的數據流設置相同的流標識StreamID,將所述StreamID及其相對應的五元組要素添加到流信息表中,在預分配的內存地址上,將包含所述StreamID的數據流放入先入先出隊列中;步驟12:工作核從所述先入先出隊列中取出數據流,解析取出的數據流的StreamID,根據預設的正則表達式特征庫文件和所述流信息表,對取出的數據流執行掃描,搜索匹配的特征值,進行深度包檢測,統計訪問所述特征值對應的WEB的流量。本發明實施例中,預先設置一個基于五元組(即:源IP地址、源端口、目的IP地址、目的端口和協議)的流信息表,I/ORXLcore可以從網卡接收數據流并且直接將接收到的數據流傳輸到預分配的內存中,例如,I/ORXLcore可以采用輪詢方式調用輪詢模式驅動PMD(PollModeDrivers)驅動從網卡接收數據流并且直接將接收到的數據流傳輸到預分配的內存中;I/O接收核可以在預分配的內存地址上直接處理數據流,接收到數據流后,解析數據流的五元組要素,對五元組要素相同的數據流分配相同的流標識StreamID,將所述StreamID及其相對應的五元組要素添加到所述流信息表中,在所述數據流中增加一字段,分別添加相應的流標識StreamID;在預分配的內存地址上,將包含所述StreamID的數據流放入先入先出隊列中,例如,可以通過寫索引控制入隊操作,將包含流標識StreamID的數據流放入一個無鎖的單生產者單消費者環形隊列中,所述環形隊列介于所述I/O接收核與工作核之間;本實施例中,還預先設定了一個正則表達式特征庫;可選地,例如,針對WEB流量分析,可以設定正則表達式特征庫文件的特征值包括:常用網站域名,例如,www.baidu.com,www.163.com等等,當然也可以包括用戶自定義的其它特征庫文件的特征值,例如:www.abc.com。所述工作核從所述先入先出隊列中取出數據流,解析取出的數據流的StreamID,例如,所述工作核可以通過讀索引控制出隊列操作從所述環形隊列取出數據流,從數據流的附加字段中解析取出的數據流的StreamID;然后根據預設的正則表達式特征庫文件和上述流信息表,對取出的數據流執行掃描,由于預設的正則表達式特征庫文件的特征值包括常用網站域名,因此通過搜索匹配的特征值,進行深度包檢測,可以統計用戶對該匹配到的特征值(網站域名)對應的WEB的訪問流量。本發明實施例提供的虛擬化深度包檢測流量分析方法,將網絡功能虛擬化NFV技術與深度包DPI技術有機結合,設置基于五元組的流信息表,I/O接收核基于五元組要素,對接收的數據流分配相應的流標識,工作核對接收的數據流進行解析,獲取流標識,根據預設的正則表達式特征庫文件和上述流信息表,對訪問WEB的流量進行識別和統計,業務識別準確性高、部署過程靈活、可擴展性強,可以有效提高運維成本效益。可選地,其中,所述五元組要素包括:源IP地址、源端口、目的IP地址、目的端口和協議;所述流信息表包括所述StreamID與所述五元組要素、流標記以及特征值ID的唯一對應關系;其中,所述流標記用于表示數據流是否已匹配特征值,所述特征值ID對應于所述預設的正則表達式特征庫文件中的特征值。例如,可以按下列方式,建立基于五元組的流信息表,如表一所示:表一如表一所示,Flag用于表示一條標識為StreamID的流,是否已經匹配特征值,例如,可以設置Flag=1為已匹配,Flag=0為未匹配。顯然,也可以采用其它類似方式進行標記。表一初始化時可以為空。同時建立特征值ID與特征庫文件中特征值的唯一對應關系,例如,可以如下表二所示:特征值ID特征庫特征值1www.baidu.com2www.163.com3www.sohu.com4www.abc.com…………表二可選地,其中,步驟10中可以包括以下子步驟:步驟101:解析接收的數據流的五元組要素,比較當前的流信息表中是否存在與該五元組要素相同的數據流;若已存在,則使用該流信息表中五元組要素相同的數據流的StreamID,并將所述StreamID添加到所述數據流的附加字段中;若當前的流信息表中不存在與該五元組要素相同的數據流,則將現有的流信息表的最大StreamID加1作為新的StreamID,更新所述流信息表,建立相應的對應表項,并將所述StreamID添加到所述數據流的附加字段中。本實施例中,參照上述表一,I/O接收核對接收的數據流進行解析,判斷其中的五元組要素在上述表一中是否已存在(即上述表一中是否已經有五元組元素相同的流信息),若已存在,就將該五元組元素對應的StreamID添加到所解析的數據流的附加字段中;若當前的流信息表中不存在與該五元組要素相同的數據流,則將現有的最大StreamID加1作為新的StreamID,更新所述流信息表,建立相應的對應表項,并將所述新StreamID添加到所述數據流的附加字段中;顯然,隨著I/O接收核接收數據流的增加,基于五元組的流信息表的內容也會不斷增加。可選地,其中,步驟12中可以包括以下子步驟:步驟121:對取出的數據流執行Hyperscan掃描,在流模式下,使用單匹配模式匹配所述流標記,將相同StreamID的多個數據塊作為一條流,搜索匹配的特征值。本實施例,可以將預先設定的特征庫文件編譯為Hyperscandatabase,并且根據輸入的參數確定匹配模式為singleMatch單匹配模式,以及根據輸入的mode參數確定運行模式為流模式;基于上述流模式下的singleMatch,對數據流執行Hyperscan掃描時,可以將相同StreamID下的多個數據塊作為一條流,搜索匹配的正則表達式特征庫文件中的特征值,得到相應的特征值ID,從而統計相應特征值ID下的總流量。例如,當數據流經過某個網絡設備時超過該設備MTU(MaximumTransmissionUnit,最大傳輸單元)值后,具有分片功能的網絡設備會將數據流分片成多個,如在第一個數據塊結尾為字符“www.bai”,下一個數據塊開頭為字符“du.com”,若匹配特征值“www.baidu.com”,在流模式下執行Hyperscan掃描時能夠匹配,即可以將相同StreamID下的多個數據塊作為一條流。可選地,其中,步驟121可以包括以下步驟:步驟1210:解析取出的數據流的StreamID,判斷所述流信息表中所述StreamID對應的流標記是否置位;當所述StreamID對應的流標記已置位時,判斷所述數據流是否為TCPFIN報文,如果不是TCPFIN報文,則按所述StreamID對應的特征值ID統計所述數據流;如果是TCPFIN報文,則將所述流信息表中所述StreamID對應的流標記清除,結束對所述特征值ID對應的WEB的一次訪問的流量統計。本實施例中,可選地,工作核解析取出的數據流的StreamID后,先判斷所述流信息表中所述StreamID對應的流標記是否置位;例如,當解析出數據流的StreamID為s1時,如果發現Flag=1,則表示表一中的StreamID=s1對應的流標記已置位(即已匹配特征值);如果Flag=0,則表示表一中的StreamID=s1對應的流標記沒有置位;如果所述StreamID=s1對應的流標記已置位,例如,當判斷發現相應的Flag=1時,則判斷所述數據流是否為TCPFIN報文,如果不是TCPFIN報文,則按所述s1對應的特征值ID(如表一中的ID=1)統計訪問WEB的數據流(即統計訪問該特征值ID對應的網站的WEB的中間報文數據流);如果是TCPFIN報文,則清除所述流信息表中所述s1對應的流標記,例如,此時可以清除Flag標志或設置Flag=0,結束對所述特征值ID(ID=1)對應的網站(即www.baidu.com)的一次WEB訪問的流量統計。本發明實施例中,由于采用了流模式和單匹配模式,可以通過匹配流標識對應的標志位,在同一條流中只匹配一次即首次特征值匹配;例如,在WEB訪問中,某個TCP連接建立后的第一個報文通常包含所訪問網站域名,通過本發明實施例的深度包檢測即可以找到一次WEB訪問的流量起點。例如,假定要統計的WEB網站是www.163.com,某個TCP連接后的第一個報文包含的所訪問網站域名為www.163.com;相應的特征庫文件的特征值ID=2,其流標識為s2,則在第一個報文會被I/O接收核分類為流標識StreamID=s2;此后,I/O接收核接收的數據報文,只要是五元組元素與StreamID=s2對應的五元組元素相同,則數據報文中的附加字段中都會被添加s2的流標識,直到接收到TCPFIN報文;工作核解析接收數據報文,TCP連接后的第一個報文即包含StreamID=s2,此時判斷標志位Flag,由于是第一個報文,Flag沒有被置位,即Flag=0,此時需要置位Flag,例如設置Flag=1;此后,凡是StreamID=s2的報文,由于Flag=1已設置,只要FIN標志沒有置位,都屬于對該網站(www.163.com)的同一次訪問的數據流,按一次訪問www.163.com統計流量;當收到的報文中FIN標志置位時,表明本次訪問www.163.com的結束報文已收到,此時工作核清除流信息表中所述s2對應的流標記(例如,設置Flag=0),結束對特征值ID=2對應的網站(即www163.com)的WEB的一次訪問的流量統計。即獲得對特征值ID=2對應的網站的WEB的一次訪問的總流量。可選地,其中,步驟121還可以包括以下步驟:步驟1211:當所述StreamID對應的流標記沒有置位時,判斷所述數據流是否匹配預設的正則表達式特征庫文件中的特征值;當所述數據流匹配所述預設的正則表達式特征庫文件中的特征值時,置位所述流信息表中所述StreamID對應的流標記,記錄特征值ID,按所述特征值ID進行WEB流量統計;當所述數據流未匹配到所述預設的正則表達式特征庫文件中的特征值時,進行TCP流量統計。本實施例中,當工作核接收并解析到流標識為s3的數據流時,如果發現所述StreamID對應的流標記沒有置位,需要判斷該數據流是否匹配預設的正則表達式特征庫文件中的特征值,例如,預設的正則表達式特征庫文件中設置了特征值www.sohu.com,對應的特征值ID=3;如果該數據流(StreamID=s3)匹配特征庫文件中的特征值www.sohu.com,則更新所述流信息表,將StreamID=s3對應的Flag設置為1(Flag=1),并記錄特征值ID=3,表明匹配到新的特征值,進行相應的WEB訪問流量統計(即進行針對訪問www.sohu.com的流量統計,該數據流是某個新用戶首次訪問www.sohu.com的第一個報文);如果所述數據流未匹配到所述預設的正則表達式特征庫文件中的特征值,則該數據流不屬于本發明實施例統計的WEB流量的內容(該數據流與本發明實施例需要統計的WEB網站沒有關系,或者說該數據流不是訪問特征庫中相關WEB的數據流),僅進行TCP流量統計。本發明實施例中設計的五元組分流方法,可以保證同一TCP流被分類至同一streamID中被同一線程所處理。當被訪問站點的源端口變化時(例如,用戶訪問www.163.com時,當www.163.com端口發生變化后,來自www.163.com的報文的五元組要素將發生變化),計算得出的StreamID也將不一樣,實際上訪問的是同一網站,即163,此時可以將同一用戶匹配同一特征庫的特征值ID的多條流統計值累加,即可得出某個用戶關于特征值ID(例如,表二中的特征值ID=2,即對網站www.163.com)訪問的總流量。相應地,本發明實施例還提供一種虛擬化深度包檢測流量分析系統,如圖2所示,包括:I/O接收核20,用于對接收數據流,對五元組要素相同的數據流設置相同的流標識StreamID,將所述StreamID及其相對應的五元組要素添加到流信息表中,在預分配的內存地址上,將包含所述StreamID的數據流放入先入先出隊列中;工作核22,用于從所述先入先出隊列中取出數據流,解析取出的數據流的StreamID,根據預設的正則表達式特征庫文件和所述流信息表,對取出的數據流執行掃描,搜索匹配的特征值,進行深度包檢測,統計訪問所述特征值對應的WEB的流量。本發明實施例提供的虛擬化深度包檢測流量分析系統,將網絡功能虛擬化NFV技術與深度包DPI技術有機結合,設置基于五元組的流信息表,I/O接收核基于五元組要素,對接收的數據流分配相應的流標識,工作核對接收的數據流進行解析,獲取流標識,根據預設的正則表達式特征庫文件和上述流信息表,對訪問WEB的流量進行識別和統計,業務識別準確性高、部署過程靈活、可擴展性強,可以有效提高運維成本效益。可選地,其中,所述五元組要素包括:源IP地址、源端口、目的IP地址、目的端口和協議;所述流信息表包括所述StreamID與所述五元組要素、流標記以及特征值ID的唯一對應關系;其中,所述流標記用于表示數據流是否已匹配特征值,所述特征值ID對應所述預設的正則表達式特征庫文件中的特征值。可選地,所述I/O接收核20包括流分類模塊201:所述流分類模塊201:用于解析接收的數據流五元組要素,比較當前的流信息表中是否存在與該五元組要素相同的數據流;若已存在,則使用該流信息表中五元組要素相同的數據流的StreamID,并將所述StreamID添加到所述數據流的附加字段中;若當前的流信息表中不存在與該五元組要素相同的數據流,則將現有的流信息表的最大StreamID加1作為新的StreamID,更新所述流信息表,建立相應的對應表項,并將所述新的StreamID添加到所述數據流的附加字段中。可選地,所述工作核22包括解析統計模塊221:所述解析統計模塊221:用于對取出的數據流執行Hyperscan掃描,在流模式下,使用單匹配模式匹配所述流標記,將相同StreamID的多個數據塊作為一條流,搜索匹配的所述特征庫文件中的特征值,進行流量統計。可選地,其中,所述解析統計模塊221包括解析判斷子模塊2210和統計子模塊2211:所述解析判斷子模塊2210,用于解析取出的數據流的StreamID,判斷所述流信息表中所述StreamID對應的流標記是否置位;所述統計子模塊2211,用于當所述StreamID對應的流標記已置位時,判斷所述數據流是否為TCPFIN報文,如果不是TCPFIN報文,則按所述StreamID對應的特征值ID統計所述數據流;如果是TCPFIN報文,則將所述流信息表中所述StreamID對應的流標記清除,結束對所述特征值ID對應的WEB的一次訪問的流量統計。可選地,其中,所述解析判斷子模塊2210,還用于當所述StreamID對應的流標記沒有置位時,判斷所述數據流是否匹配所述預設的正則表達式特征庫文件中的特征值;所述統計子模塊2211,用于當所述數據流匹配所述預設的正則表達式特征庫文件中的特征值時,置位所述流信息表中所述StreamID對應的流標記位,并記錄特征值ID,按所述特征值ID進行WEB流量統計;當所述數據流未匹配到所述預設的正則表達式特征庫文件中的特征值時,進行TCP流量統計。下面通過一個示范性例子對本發明的實施例進行更詳細的說明。如圖所示,假設采用一個I/O接收核,一個工作核和一個I/O發送核,其中,在I/O接收核與工作核之間,工作核與I/O發送核之間分別建立了一個無鎖的單生產者單消費者環形隊列。對于I/O接收核I/ORXLcore:步驟30:I/O接收核從網卡收取數據包;本步驟中,基于DPDK高性能轉發平面,I/ORXLcore可以采用輪詢方式調用輪詢模式驅動PMD(PollModeDrivers)驅動從網卡接收數據流并且直接將接收到的數據流傳輸到預分配的內存中;例如,PMD驅動使用無中斷方式直接操作網卡的接收隊列,接收到數據流后直接傳輸到預分配的內存中。步驟31:對接收的數據包進行流分類,給每個接收到的數據流添加StreamID;本步驟中,I/O接收核通過輪詢感知收到數據流后,可以在預分配的內存地址上直接處理數據流,包括以下子步驟:1)使用預先設定的五元組要素(源IP地址,源端口,目的IP地址,目的端口,協議)信息建立流信息表,該流表包含流標識StreamID與源IP地址、源端口、目的IP地址、目的端口、協議已及流標記Flag和特征值ID的唯一對應關系;即,每條流具有一個流標識StreamID,其在流信息表中的源IP地址、源端口、目的IP地址、目的端口以及協議唯一確定;當然,初始時該表內容也可為空;2)確認StreamID:接收到數據流后,解析數據流五元組要素,比較當前的流信息表中是否存在與該五元組要素相同的流,若已存在,則使用該流信息表的StreamID,若不存在,則在現有最大StreamID基礎上加1作為新的StreamID,更新所述流信息表,修改添加流信息表的內容,并將StreamID添加到該數據流的附加子段中。步驟32:將報文放入環形隊列緩存中;本步驟中,I/O接收核線程將已分配StreamID的數據流放入與工作核之間的環形隊列中。具體地,DPDK基于現有KFIFO技術可以實現一種無鎖環形隊列。本發明實施例采用單生產者單消費者無鎖隊列,生產者通過寫索引控制入隊操作,消費者通過讀索引控制出隊列操作。隊列的增長方向是順時鐘方向,生產者以順時鐘方向往隊列中放數據。對于工作核WorkerLcore:步驟33:工作核線程從環形隊列緩存中接收數據流;本步驟中,工作核線程從與I/O接收核之間的環形隊列中輪詢,判斷是否接收到數據流。如上所述,當接收到數據流時,消費者(工作核)同樣以順時鐘方向從隊列中取數據。步驟34:判斷協議報文;本步驟中,工作核從環形隊列取出數據流后,判斷目的IP地址是否為本機IP地址,若為本機IP地址,該數據流上交協議棧處理,否則交由網絡流量分析統計模塊處理。步驟35:網絡流量分析;步驟36:通過環形隊列緩存發送數據流。工作核線程將已分析數據流放入與I/O發送核之間的環形隊列中。對于I/O發送核(I/OTXLcore)步驟37:通過環形隊列緩存接收數據流;I/O發送核線程采用輪詢方式從工作核與I/O發送核隊列中收取待發送數據流。步驟38:發送數據包;I/O發送核可以采用PMD驅動使用無中斷方式直接操作網卡發送隊列,將數據流發出。其中,如圖5所示,上述步驟35包括以下子流程。如圖5所示,可以包括以下步驟:步驟351:解析數據流,獲取數據流的StreamID;步驟352:判斷基于五元組的流信息表中該數據流StreamID對應的流標記Flag是否被置位(流標記Flag已置位表明該數據流已匹配預設的正則表達式特征庫文件中的特征值);如果流標記沒有被置位(例如,Flag=0),執行步驟353;如果流標記已經被置位(例如Flag=1),則執行步驟354;步驟353:判斷流標記未置位的數據流是否匹配預設的正則表達式特征庫;若數據流匹配預設的正則表達式特征庫文件中某個特征值,接步驟356;;如果數據流未匹配到預設的正則表達式特征庫文件中特征值,轉步驟357;步驟356:置位流信息表中該StreamID對應的流標記,表明該數據流已匹配特征值,并記錄特征值ID,然后進行WEB流統計;轉步驟360;步驟357:不對流信息表中該StreamID對應的流標記進行處理,進行TCP流量統計;轉步驟360。其中,步驟35可以包括以下內容:使用高速正則表達式匹配引擎hyperscan實現高性能DPI特征值檢測:預先設定正則表達式特征庫,本實施例是進行WEB流量分析,可以設定正則表達式特征庫包括:常用網站域名;當然也可以包括自定義的特征庫,例如:其它自定義域名:www.abc.com,www.abc.net等等;將預先設定的特征庫文件編譯為hyperscandatabase,并且根據輸入的參數確定匹配模式為singleMatch單匹配模式,以及根據輸入的mode參數確定運行模式為流模式;本實施例中,相同StreamID所含多個數據塊可以視為一條流,可以跨數據塊進行匹配。例如,當數據流經過某個網絡設備時超過該設備MTU(MaximumTransmissionUnit,最大傳輸單元)值后,具有分片功能的網絡設備會將數據流分片成多個,如在第一個數據塊結尾為字符“www.bai”,下一個數據塊開頭為字符“du.com”,若匹配特征值“www.baidu.com”,在流模式下能夠匹配;根據預設的特征庫文件和流分類步驟創建的基于五元組的流信息表信息,對數據流執行掃描,搜索匹配的特征值,進行深度包檢測。例如,典型地,在流模式下使用singleMatch匹配標志位,在同一條流中只匹配一次即首次特征值匹配;在WEB訪問中,某個TCP連接建立后的第一個報文通常包含所訪問網站域名,通過本實施例的深度包檢測即可以找到一次WEB訪問的流量起點。步驟354:判斷流標記已置位的數據流是否為TCPFIN報文;如是TCPFIN報文,接步驟358;如果不是TCPFIN報文,轉步驟359;步驟358:若數據流為TCPFIN報文,則視為流結束標志,清除流信息表中該StreamID對應的流標記,表明該流已結束,確認一次WEB訪問的流量終點;轉步驟360;步驟359:如果不是FIN報文,進行WEB流量統計。步驟360:匯總統計流量并實時顯示。其中,步驟354中,可以判斷接收的數據流的FIN標志位字段是否被置位;當該FIN標志位字段被置位時,表明收到的數據流為TCPFIN報文;如果FIN標志為字段沒有被置位,則表明收到數據流不是TCPFIN報文;本步驟中,可以通過校驗數據流固定字段內容,判斷流標記已置位的數據流是否為TCPFIN報文。若數據流為TCPFIN報文則視為流結束標志,清除流信息表中該StreamID對應的流標記,表明該流已結束,確認一次WEB訪問的流量終點;如果收到的數據流不是TCPFIN報文,則屬于訪問WEB網站的中間報文,需要進行WEB流量統計。步驟360:各種結果統計至相StreamID的統計表中,統計結果顯示使用socket套接字與本系統程序同步數據,將應用程序統計到的數據實時刷新顯示,可以包含以下內容:總流量(字節數、報文個數、帶寬Mbps);總匹配流量(字節數、報文個數、帶寬Mbps);特征庫ID(字節數、報文個數、帶寬Mbps);基于時間段的流量趨勢等等。本實施例設計的基于五元組的流分類方法,可保證同一TCP流被分類至同一StreamID中被同一線程所處理。但是,當被訪問站點的源端口變化時,計算得出的StreamID也將不一樣,而實際上訪問的是同一網站,如百度或163,此時可以將同一用戶匹配同一特征庫ID多條流統計值累加,即可得出某個用戶某個特征值ID即網站訪問的總流量。在上述實施例中,上述的WEB訪問流量分析中虛擬化DPI技術可以通過開源數據面開發套件(Data-planeDevelopmentKit,DPDK)和開源Hyperscan技術的結合來實現,其業務識別準確性明顯高于現有的硬件DPI技術,部署過程中的靈活性、可擴展性及運維成本效益也明顯提高;優選地,如果在開源云操作系統(Openstack)基礎上利用DPDK和開源Hyperscan技術來實現虛擬化的DPI技術,進一步減少技術融合的復雜度,提高可靠性。性能測試結果:本實施例開源的云操作系統Openstack實現應用虛擬化時,在該云平臺上整合開源DPDK與Hyperscan庫,實現高性能深度包檢測。數據流處理過程中直接采用傳遞內存指針的方式,減少了內存拷貝帶來的性能損失,從而能夠提供超高性能的數據平面。例如,采用HP360Gen8服務器,至強E52670CPU,基于Openstack虛擬化平臺,測試結果顯示:報文1400字節時,單工作核,匹配baidu.com字符串,能達到7.2Gbps;報文256字節時,單工作核,匹配baidu.com字符串,能達到1.7Gbps。需要說明的是,在本文中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。以上僅為本發明的優選實施例,并非因此限制本發明的專利范圍,凡是利用本發明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的
技術領域:
,均同理包括在本發明的專利保護范圍內。當前第1頁1 2 3