郭志鑫 喬美華
1 山東大學(xué) 濟(jì)南 250100
2 河海大學(xué) 南京 210098
隨著互聯(lián)網(wǎng)的迅速普及和發(fā)展,家庭網(wǎng)絡(luò)化已經(jīng)成為信息社會(huì)的一個(gè)發(fā)展趨勢(shì)。通過現(xiàn)有的計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),家庭內(nèi)各種家電和電子設(shè)備可以通過網(wǎng)絡(luò)為人們提供各種服務(wù),獲取外部信息。逐漸增加的帶寬壓力使網(wǎng)絡(luò)運(yùn)營(yíng)商必須提高對(duì)網(wǎng)絡(luò)流量的管理控制能力,而業(yè)務(wù)流量識(shí)別技術(shù)則是實(shí)現(xiàn)下一代網(wǎng)絡(luò)的可控、可信、可擴(kuò)展的一個(gè)重要因素。先進(jìn)的流量識(shí)別技術(shù)不僅可以提高網(wǎng)絡(luò)管理的能力,從一定程度上預(yù)測(cè)網(wǎng)絡(luò)的未知流量,還可廣泛應(yīng)用于網(wǎng)絡(luò)管理、業(yè)務(wù)監(jiān)控、服務(wù)質(zhì)量管理等各個(gè)系統(tǒng),對(duì)下一代網(wǎng)絡(luò)業(yè)務(wù)管理、服務(wù)質(zhì)量控制等都有重大的現(xiàn)實(shí)意義[1-2]。
由于流量識(shí)別和分類是根據(jù)抓包特征的不同進(jìn)行的,所以抓包特征的合適與否決定了識(shí)別的準(zhǔn)確度,抓包特征是否容易得到?jīng)Q定了下一步編程識(shí)別的難度。我們選用抓包工具Wireshark,該工具使用方便,可用于對(duì)網(wǎng)卡上的流量進(jìn)行分析和統(tǒng)計(jì),從而得到流量特征信息。
根據(jù)人們?nèi)粘I盍?xí)慣,本文選取了在電腦端和智能電視端常用的占據(jù)帶寬較大的幾類應(yīng)用作為抓包分析的對(duì)象。選取的應(yīng)用有:QQ視頻聊天、無線傳屏和VOD視頻點(diǎn)播等。其他一些常用的網(wǎng)絡(luò)應(yīng)用如E-mail、QQ文字聊天等由于占據(jù)帶寬有限,不會(huì)對(duì)整個(gè)網(wǎng)絡(luò)的性能造成明顯影響,不作為本文的研究對(duì)象。
本文采用五元組信息(包括源IP地址、目的IP地址、源端口號(hào)、目的端口號(hào)和協(xié)議類型號(hào)五個(gè)信息)、上行流量包長(zhǎng)、下行流量包長(zhǎng)、上行流量包數(shù)、下行流量包數(shù)作為識(shí)別特征。這些信息不一定要單獨(dú)使用,可以進(jìn)行組合處理得到更適合識(shí)別的新的數(shù)據(jù)形式[3-5]。
下面將分析采用上述幾種信息作為識(shí)別特征的可行性,最后得到用于編程識(shí)別的幾種特征。
1)五元組信息的可行性分析。五元組信息是抓包數(shù)據(jù)中最重要的信息,一個(gè)五元組能夠唯一地確定一個(gè)網(wǎng)絡(luò)會(huì)話。所以,如果在抓包過程中發(fā)現(xiàn)某應(yīng)用始終采用某一固定的IP地址或者端口號(hào),則可以用五元信息作為識(shí)別特征,準(zhǔn)確地識(shí)別該應(yīng)用。
2)包長(zhǎng)信息的可行性分析。包長(zhǎng)同樣是封包數(shù)據(jù)中十分重要的信息,但是單獨(dú)一個(gè)或幾個(gè)包的包長(zhǎng)難以體現(xiàn)出某類應(yīng)用的總體特征,可在編程部分設(shè)置一個(gè)定時(shí)器,統(tǒng)計(jì)在一段時(shí)間內(nèi)包長(zhǎng)之和,即這段時(shí)間內(nèi)流量的數(shù)據(jù)量。另外,考慮到數(shù)據(jù)量的大小受網(wǎng)絡(luò)條件的影響較大,本文采用的處理方法為:分別統(tǒng)計(jì)一段時(shí)間內(nèi)上行流量和下行流量的數(shù)據(jù)量,然后以下行數(shù)據(jù)量/上行數(shù)據(jù)量作為最終的識(shí)別特征。該信息還能比較明確地顯示出該應(yīng)用的數(shù)據(jù)流向。
3)包數(shù)信息的可行性分析。為較好地體現(xiàn)不同應(yīng)用的特征,參考包長(zhǎng)信息的處理方式,包數(shù)信息的使用也采用同樣的處理方式,以下行包數(shù)/上行包數(shù)作為最終的識(shí)別特征。為得到各類應(yīng)用的特征,本文采取的抓包方式是每天早上、下午和晚上分別對(duì)某一應(yīng)用抓包三次,連續(xù)抓包兩周,最后將得到的數(shù)據(jù)統(tǒng)一分析,得到各類應(yīng)用的特點(diǎn)[6],總結(jié)見表1。
表1 各類應(yīng)用的特征總結(jié)
通過分析這些特征,綜合考慮識(shí)別的準(zhǔn)確度和編程的難度,本文采取的識(shí)別方法為:在接收到封包并對(duì)封包信息進(jìn)行分析后,首先對(duì)封包的遠(yuǎn)端端口進(jìn)行判斷,如果該端口為16 000或50 021,則可直接識(shí)別為QQ視頻聊天或無線傳屏應(yīng)用;然后設(shè)置定時(shí)器,每隔20秒對(duì)還未識(shí)別的流量上下行數(shù)據(jù)量進(jìn)行統(tǒng)計(jì),如果下行數(shù)據(jù)量/上行數(shù)據(jù)量大于20,則判定為VOD視頻點(diǎn)播。
由于智能應(yīng)用市場(chǎng)發(fā)展十分迅速,每天都會(huì)出現(xiàn)新的應(yīng)用,為了程序的適應(yīng)性并為未來能夠識(shí)別更多的應(yīng)用作準(zhǔn)備,本文將識(shí)別條件寫為正則表達(dá)式的形式存放在數(shù)據(jù)庫(kù)的表中,在識(shí)別時(shí)對(duì)正則表達(dá)式進(jìn)行一一匹配。這樣當(dāng)需要識(shí)別新的應(yīng)用時(shí),只需根據(jù)新應(yīng)用的特點(diǎn)寫成新的正則表達(dá)式添加到已有的表中,識(shí)別流程不需要進(jìn)行改動(dòng)。
經(jīng)過第1章的抓包分析工作,各類應(yīng)用的流量特征已經(jīng)基本確定,本章的工作是根據(jù)這些特征編程實(shí)現(xiàn)流量的統(tǒng)計(jì)與識(shí)別功能,識(shí)別環(huán)境為L(zhǎng)inux,流量特征和識(shí)別結(jié)果均通過數(shù)據(jù)庫(kù)存放。
本系統(tǒng)的框架如圖1所示,分為后臺(tái)管理系統(tǒng)和Linux下的流量識(shí)別兩部分,通過數(shù)據(jù)庫(kù)進(jìn)行交互。下面將對(duì)后臺(tái)管理部分和流量識(shí)別部分的原理分別進(jìn)行詳細(xì)的分析。
圖1 系統(tǒng)框架圖
后臺(tái)管理系統(tǒng)的結(jié)構(gòu)如圖2所示。下面將詳細(xì)分析該系統(tǒng)的工作原理。
圖2 后臺(tái)管理系統(tǒng)結(jié)構(gòu)圖
MySQL是一個(gè)關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),由于它體積較小、運(yùn)行速度快、源碼開放等優(yōu)點(diǎn)而被廣泛應(yīng)用于中小網(wǎng)站的開發(fā)中[7-8]。本文同樣選擇MySQL數(shù)據(jù)庫(kù)作為工作數(shù)據(jù)庫(kù)。
1)規(guī)則表。規(guī)則表用于存放識(shí)別各類應(yīng)用的正則表達(dá)式,它的結(jié)構(gòu)如表2所示。其中order_number為規(guī)則表的主鍵,AppID為各類應(yīng)用的序號(hào),regular_expression為應(yīng)用的正則表達(dá)式,用于識(shí)別路由器上的流量是否符合某一類應(yīng)用的特征。
表2 規(guī)則表結(jié)構(gòu)
正則表達(dá)式是一種邏輯公式,是用已經(jīng)定義好的一些某些特定字符或字符組合組成的一個(gè)“規(guī)則字符串”。這個(gè)“規(guī)則字符串”的作用是用來匹配某個(gè)字符串,檢查該字符串是否符合這個(gè)“規(guī)則字符串”的規(guī)則[9]。
2)結(jié)果表。結(jié)果表用于在成功識(shí)別某應(yīng)用后存儲(chǔ)其五元組和其他信息,它的作用是在識(shí)別開始時(shí)首先將未知流量與已經(jīng)識(shí)別過的結(jié)果進(jìn)行匹配,如果匹配成功則直接識(shí)別為已有應(yīng)用類型,避免進(jìn)行重復(fù)識(shí)別,降低效率。另外,結(jié)果表中的標(biāo)志符current_run_flag用于標(biāo)識(shí)目前正在進(jìn)行的應(yīng)用,并將該信息傳遞給PHP界面。
結(jié)果表的結(jié)構(gòu)如表3所示。其中order_number為結(jié)果表的主鍵,AppID為各類應(yīng)用的序號(hào),local_ip、remote_ip、local_port、remote_port、protocolID為封包的五元組信息,current_run_flag為標(biāo)識(shí)符,當(dāng)值為1時(shí)表示該應(yīng)用正在運(yùn)行,每20秒會(huì)對(duì)所有記錄的標(biāo)識(shí)符進(jìn)行清零。
表3 結(jié)果表結(jié)構(gòu)
流量識(shí)別子系統(tǒng)的編程環(huán)境為L(zhǎng)inux系統(tǒng),工作流程如圖3所示。下面將對(duì)系統(tǒng)的運(yùn)行過程進(jìn)行詳細(xì)的分析。
圖3 流量識(shí)別子系統(tǒng)流程圖
在函數(shù)預(yù)定義的過程中定義了結(jié)果表鏈表頭指針和規(guī)則表鏈表頭指針兩個(gè)全局變量,在初始化時(shí)使用結(jié)果表初始化函數(shù),將數(shù)據(jù)庫(kù)中結(jié)果表信息存入結(jié)果表鏈表,同時(shí)使用規(guī)則表初始化函數(shù)將規(guī)則表信息存入規(guī)則表鏈表。兩個(gè)鏈表將用于后面的封包匹配。
抓包解碼時(shí)主要使用的是入侵檢測(cè)系統(tǒng)Snort。這是一個(gè)用C語(yǔ)言開發(fā)的,開放源代碼的網(wǎng)絡(luò)入侵檢測(cè)防御系統(tǒng),能夠進(jìn)行實(shí)時(shí)流量分析和網(wǎng)絡(luò)數(shù)據(jù)包記錄。用于截取網(wǎng)絡(luò)流量中的數(shù)據(jù)包,分析其中的內(nèi)容并將里面的信息存入流量特征信息結(jié)構(gòu)體中,用于后續(xù)的流量識(shí)別部分[10]。
下一步進(jìn)入流量識(shí)別的關(guān)鍵步驟,將得到的封包進(jìn)行識(shí)別。
根據(jù)圖3所示的流量識(shí)別流程圖,對(duì)一個(gè)封包進(jìn)行一次完整的匹配分為以下三步,每次匹配成功后需要對(duì)結(jié)果表進(jìn)行相應(yīng)的操作。
1)匹配結(jié)果表信息。將當(dāng)前流量特征信息結(jié)構(gòu)體的五元組與結(jié)果表五元組進(jìn)行匹配,如果匹配成功,則說明該結(jié)果在之前已經(jīng)被成功識(shí)別過,直接將相應(yīng)結(jié)果表消息的Flag位設(shè)為1,表示該應(yīng)用正在進(jìn)行;如果不成功,繼續(xù)進(jìn)行正則表達(dá)式的匹配。
2)匹配正則表達(dá)式。由于結(jié)果表匹配不成功,說明該結(jié)果在之前沒有被識(shí)別過,需要使用正則表達(dá)式進(jìn)行匹配。正則表達(dá)式就是從數(shù)據(jù)庫(kù)的規(guī)則表中取出的邏輯公式,用于檢查該結(jié)果是否符合某類應(yīng)用的特征。如果匹配成功,則將該條結(jié)果的識(shí)別記錄增加到結(jié)果表中,并同時(shí)將Flag位設(shè)置為1,表示該應(yīng)用正在進(jìn)行。
3)流量統(tǒng)計(jì)。對(duì)于VOD視頻點(diǎn)播的識(shí)別需要對(duì)一段時(shí)間的上下行流量比進(jìn)行統(tǒng)計(jì)計(jì)算。在每種五元組的起始流量包到來時(shí)記錄起始時(shí)間,每次來一個(gè)相同五元組的流量包時(shí),對(duì)其上下行流量分別進(jìn)行累加,存入流量統(tǒng)計(jì)鏈表。每隔一段時(shí)間將統(tǒng)計(jì)后的信息輸出,用于再次進(jìn)行正則表達(dá)式的匹配。
除了流量統(tǒng)計(jì),定時(shí)器的另一個(gè)作用是判斷應(yīng)用是否正在進(jìn)行。每隔一定時(shí)間,讀取一次系統(tǒng)時(shí)間,與結(jié)果表鏈表中某結(jié)果的最后一次更新時(shí)間相減,如果間隔超過默認(rèn)設(shè)置的時(shí)間,則判定為此段時(shí)間內(nèi)沒有該應(yīng)用的新包到來,將標(biāo)志位Flag設(shè)置為0,表示該應(yīng)用已經(jīng)停止運(yùn)行。
前面已經(jīng)實(shí)現(xiàn)了流量的統(tǒng)計(jì)與識(shí)別功能。這部分通信模塊的設(shè)計(jì)目的是將該功能移植到網(wǎng)關(guān)上,網(wǎng)關(guān)部分只負(fù)責(zé)收包和識(shí)別,而后臺(tái)部分暫時(shí)負(fù)責(zé)數(shù)據(jù)庫(kù)的管理和識(shí)別結(jié)果界面等,隨著后續(xù)開發(fā)的進(jìn)行,后臺(tái)將會(huì)承擔(dān)更多的功能,使系統(tǒng)更加智能。這樣就需要增加網(wǎng)關(guān)和后臺(tái)系統(tǒng)之間的通信機(jī)制。本文采用的通信方式是Socket通信,為TCP方式。
1)網(wǎng)關(guān)側(cè)處理流程。網(wǎng)關(guān)側(cè)處理流程如圖4所示。在網(wǎng)關(guān)開始識(shí)別功能前,首先要向后臺(tái)發(fā)送注冊(cè)請(qǐng)求,只有在得到后臺(tái)允許注冊(cè)的回復(fù)后才能正常工作。然后根據(jù)從后臺(tái)收到的規(guī)則表和結(jié)果表對(duì)封包信息進(jìn)行匹配,如果匹配成功,將結(jié)果表更新,并將識(shí)別后的結(jié)果傳到后臺(tái)。2)后臺(tái)側(cè)處理流程。后臺(tái)側(cè)處理流程如圖5所示。在每次收到網(wǎng)關(guān)側(cè)的包時(shí),首先判斷該網(wǎng)關(guān)是否已經(jīng)注冊(cè),如果未注冊(cè)則丟棄該包。每次收到網(wǎng)關(guān)側(cè)的識(shí)別結(jié)果后,將后臺(tái)的結(jié)果表進(jìn)行刷新。
圖4 網(wǎng)關(guān)側(cè)處理流程圖
Socket又稱“套接字”,用于網(wǎng)絡(luò)進(jìn)程之間的相互通信,應(yīng)用程序通過Socket向網(wǎng)絡(luò)發(fā)出請(qǐng)求或接收網(wǎng)絡(luò)請(qǐng)求。服務(wù)器端與客戶端通過Socket建立連接后,可以調(diào)用IO函數(shù)進(jìn)行讀寫操作。在阻塞模式下,網(wǎng)關(guān)側(cè)或后臺(tái)側(cè)調(diào)用IO函數(shù)收發(fā)信息都需要等待對(duì)方的回應(yīng),在此期間系統(tǒng)不能進(jìn)行其他工作,這樣的工作方式不符合通信模塊的工作流程且效率很低;因此,通信模塊在信息收發(fā)時(shí)均調(diào)用select函數(shù)使其工作在非阻塞方式之下,通過函數(shù)的返回值判斷在緩沖區(qū)是否有新的信息,然后根據(jù)消息ID進(jìn)入相應(yīng)的處理流程。本文通信模塊的消息處理流程如圖6所示[11-13]。
圖5 后臺(tái)側(cè)處理流程圖
圖6 通信模塊消息處理流程
流量識(shí)別系統(tǒng)識(shí)別成功后,識(shí)別結(jié)果被寫入數(shù)據(jù)庫(kù)的結(jié)果表。每條結(jié)果信息的內(nèi)容包括:識(shí)別結(jié)果ID、本地IP地址、遠(yuǎn)端IP地址,本地端口號(hào)、遠(yuǎn)端端口號(hào)、協(xié)議類型號(hào)。結(jié)果信息的內(nèi)容與2.2節(jié)后臺(tái)管理子系統(tǒng)中描述的結(jié)果表結(jié)構(gòu)相對(duì)應(yīng),此處不再詳述。
在對(duì)家庭生活中的常用應(yīng)用進(jìn)行匯總分類時(shí),本文只選取了其中占據(jù)帶寬較多的幾類應(yīng)用,其他占據(jù)帶寬有限的應(yīng)用不作為本文的研究對(duì)象。本文的識(shí)別方法能夠?qū)彝コ蓡T的網(wǎng)絡(luò)活動(dòng)進(jìn)行較為準(zhǔn)確地識(shí)別,在此基礎(chǔ)上,下一步的計(jì)劃是QoS管理系統(tǒng)的實(shí)現(xiàn)。對(duì)各類應(yīng)用的優(yōu)先級(jí)進(jìn)行設(shè)置,在網(wǎng)絡(luò)帶寬有限的情況下,優(yōu)先級(jí)低的應(yīng)用不能影響優(yōu)先級(jí)高的應(yīng)用的運(yùn)行,采用這樣的方式盡量保證家庭成員的重要業(yè)務(wù)能夠順利進(jìn)行。
[1]朱川,韓光潔.家庭網(wǎng)關(guān)平臺(tái)與IMS融合技術(shù)[M].北京:科學(xué)出版社,2012:5-20
[2]薛家勇.嵌入式Linux家庭網(wǎng)關(guān)系統(tǒng)研究與實(shí)現(xiàn)[D].西北工業(yè)大學(xué)碩士學(xué)位論文,2005:1-4
[3]高彥剛.實(shí)用網(wǎng)絡(luò)流量分析技術(shù)[M].北京:電子工業(yè)出版社,2009:8-18
[4]郭明亮.高速網(wǎng)絡(luò)中實(shí)時(shí)流量識(shí)別系統(tǒng)的研究與設(shè)計(jì)[D].北京郵電大學(xué)碩士學(xué)位論文,2010:1-6
[5]左建勛.網(wǎng)絡(luò)流量識(shí)別技術(shù)研究及其應(yīng)用[D].重慶大學(xué)碩士學(xué)位論文,2007:2-8
[6]Chris Sanders.Practical Packet Analysis:Using Wireshark to Solve Real-World Network Problems (2nd Edition)[M].USA:No Starch Press,2009:3-89
[7]潘景昌,劉杰.操作系統(tǒng)實(shí)驗(yàn)教程(Linux版)[M].北京:清華大學(xué)出版社,2010:59-72
[8]吉爾摩.PHP與MySQL程序設(shè)計(jì)[M].朱濤江,譯.北京:人民郵電出版社,2011:372-410
[9]Jan Goyvaerts.Regular Expressions Cookbook[M].USA:O'Reilly Media,2009:8-103
[10]李鳳霞.C語(yǔ)言程序設(shè)計(jì)教程[M].北京:北京理工大學(xué)出版社,2008:246-268
[11]W.Richard Stevens.TCP/IP詳解卷1:協(xié)議[M].北京:機(jī)械工業(yè)出版社,2000:313-349
[12]丁國(guó)華,胡榮強(qiáng).Linux的Socket編程及其在嵌入式網(wǎng)關(guān)中的應(yīng)用[J].電子元器件應(yīng)用,2004,6(10):1-4
[13]W.Richard Stevens.UNIX網(wǎng)絡(luò)編程(第1卷)[M].北京:清華大學(xué)出版社,2010:47-149