羅 丞,葉 猛
(武漢郵電科學(xué)研究院電信系,湖北 武漢 430074)
隨著寬帶互聯(lián)網(wǎng)時(shí)代的到來(lái),用戶(hù)對(duì)信息實(shí)時(shí)性的需求越來(lái)越高,隨之出現(xiàn)了基于P2P技術(shù)的寬帶共享工具。這類(lèi)工具給用戶(hù)帶來(lái)了高實(shí)時(shí)性的體驗(yàn),但同時(shí)也給寬帶運(yùn)營(yíng)商帶來(lái)了監(jiān)管困難的窘境,識(shí)別這些應(yīng)用產(chǎn)生的流量是目前運(yùn)營(yíng)商關(guān)注的重點(diǎn)。因此,針對(duì)P2P應(yīng)用流量的識(shí)別技術(shù)應(yīng)運(yùn)而生。
目前主流的應(yīng)用層協(xié)議識(shí)別技術(shù)主要分為以下3類(lèi)[1]:基于應(yīng)用協(xié)議固有特征的識(shí)別技術(shù),應(yīng)用層網(wǎng)關(guān)識(shí)別技術(shù)和行為模式識(shí)別技術(shù)。
基于P2P技術(shù)的軟件將網(wǎng)絡(luò)上原本孤立的服務(wù)器資源及P2P資源整合在一起,這使得其信令交互部分特征較為明顯,而數(shù)據(jù)下載部分由于加密導(dǎo)致特征模糊。傳統(tǒng)的指紋匹配技術(shù)致力于從算法優(yōu)化角度改進(jìn)匹配速度,但是在面對(duì)特征更加模糊的加密流量時(shí),必須綜合多種特征從多維度來(lái)識(shí)別,多維度帶來(lái)的直接問(wèn)題就是算法的復(fù)雜度呈指數(shù)級(jí)上升,太多特征導(dǎo)致系統(tǒng)處理過(guò)慢,用戶(hù)響應(yīng)時(shí)間過(guò)長(zhǎng),嚴(yán)重影響系統(tǒng)使用,而如果能夠以較少量的特征來(lái)識(shí)別流量就可以加快識(shí)別過(guò)程,提升用戶(hù)使用感受。當(dāng)所要分析的對(duì)象特征太多、維度太高時(shí),可以嘗試通過(guò)某些有損的降低維度算法來(lái)降低冗余維度,保留主要維度,使得所分析對(duì)象特征更顯清晰[2]。
盡管P2P加密流量的特征有很多,但可以通過(guò)降維來(lái)獲取有用的少量特征。在本文中,采用主成分分析(Principal Component Analysis,PCA)[3]來(lái)使得 P2P 加密流量的復(fù)雜特征降維,以降低多維匹配帶來(lái)的復(fù)雜性。
已知有n個(gè)d維數(shù)據(jù)樣本x1,x2,x3,…,xn,指定其中一點(diǎn)Q(q1,q2,q3,…,qd),求在總的樣本中與之距離最近的k個(gè)點(diǎn)。
計(jì)算步驟如下:
1)首先求散布矩陣(離散度矩陣)
先對(duì)n個(gè)樣本的每一維數(shù)據(jù)進(jìn)行處理,求出n個(gè)樣本每一維對(duì)應(yīng)的均值,即得d個(gè)均值m1,m2,m3,…,md。然后用每個(gè)樣本點(diǎn)的每一維數(shù)據(jù)與相應(yīng)維的均值作差,對(duì)于每一個(gè)樣本點(diǎn)即得 xi1-m1,xi2-m2,xi3-m3,…,xid-md這d個(gè)數(shù)據(jù)(其中xi表示n個(gè)數(shù)據(jù)中下標(biāo)為i對(duì)應(yīng)的數(shù)據(jù)類(lèi)),然后以這d個(gè)數(shù)據(jù)構(gòu)造一個(gè)d行1列的矩陣,接著求其轉(zhuǎn)置矩陣,原矩陣與轉(zhuǎn)置矩陣相乘即得到一個(gè)d行d列的對(duì)稱(chēng)矩陣。最后將這n個(gè)對(duì)稱(chēng)矩陣進(jìn)行矩陣加法運(yùn)算即得到離散度矩陣。
2)得到離散度矩陣后,求出該矩陣的d個(gè)特征值及相應(yīng)的特征向量,在求解特征值與特征向量時(shí),由于由第一步知道,所求的離散度矩陣是對(duì)稱(chēng)矩陣,故可采用雅可比法求矩陣的特征值與特征向量,然后將其特征值按大小遞減順序進(jìn)行排序。
3)取第一個(gè),也就是最大特征值對(duì)應(yīng)的特征向量e,作為后面投影操作參照向量。
4)將樣本中的所有數(shù)據(jù)類(lèi),投影到特征向量e上,投影操作方法就是由數(shù)據(jù)類(lèi)的d個(gè)數(shù)據(jù)構(gòu)成的一個(gè)行向量與列特征向量e作矩陣乘法運(yùn)算,故由此得到n個(gè)點(diǎn)的投影坐標(biāo)t1,t2,t3,…,tn,將這n個(gè)投影坐標(biāo)進(jìn)行排序,然后求出所求點(diǎn)對(duì)應(yīng)的投影坐標(biāo)值。找到該坐標(biāo)值后,以該點(diǎn)為中心,向兩邊展開(kāi)搜索,直到找到k個(gè)臨近數(shù)據(jù)類(lèi)滿(mǎn)足要求。
5)由于兩個(gè)數(shù)據(jù)類(lèi)之間的真實(shí)距離大于或等于投影距離,即d(x,Q)≥d(tx,tq),由于已經(jīng)將所有點(diǎn)的投影點(diǎn)進(jìn)行了排序操作,故以所求點(diǎn)Q對(duì)應(yīng)的投影點(diǎn)tq為起始點(diǎn)向兩端逐個(gè)搜索,找到k個(gè)數(shù)據(jù)類(lèi),然后將這些數(shù)據(jù)類(lèi)與所求點(diǎn)之間的距離計(jì)算出來(lái),對(duì)其進(jìn)行排序操作(如按大小遞減排序),則第一個(gè)為dmax,以后向兩端每搜索一個(gè)點(diǎn),就先計(jì)算數(shù)據(jù)類(lèi)與所求點(diǎn)之間的投影距離,如果該距離小于dmax,則該數(shù)據(jù)類(lèi)可能是要求的k臨近點(diǎn)中的一個(gè),之后需要計(jì)算它與所求點(diǎn)之間的真實(shí)距離,再與已經(jīng)存放的k個(gè)數(shù)據(jù)類(lèi)對(duì)應(yīng)的距離進(jìn)行比較,選擇是插入還是舍棄。如果搜索到數(shù)據(jù)類(lèi)的投影值與所求點(diǎn)對(duì)應(yīng)的投影值之間距離大于dmax時(shí),則搜索停止進(jìn)行。
上述算法過(guò)程結(jié)合到具體的數(shù)據(jù)包特征識(shí)別上,就是每個(gè)樣本都是一個(gè)獨(dú)立的以太網(wǎng)數(shù)據(jù)包,這些樣本的維度就是數(shù)據(jù)包的相應(yīng)特征,這些特征應(yīng)該由包長(zhǎng)度、端口號(hào)、上層協(xié)議類(lèi)型、某些位置的字節(jié)值(變長(zhǎng),由于不同的P2P應(yīng)用具有不同的通信結(jié)構(gòu),具體的字節(jié)特征應(yīng)該根據(jù)不同的應(yīng)用來(lái)確定,高維特性也就表現(xiàn)在這里)等構(gòu)成。根據(jù)上述算法得到離散度矩陣C=A AT,A的每一行是一種特征差,A的列數(shù)就是數(shù)據(jù)包的個(gè)數(shù)。算法就是求矩陣C的特征向量。為了簡(jiǎn)單,只取其中部分的特征向量,這些特征向量對(duì)應(yīng)于某些特征值,通常是前M個(gè)大的特征值。這樣便得到了M個(gè)特征向量。接下來(lái)就是將每個(gè)包在這M個(gè)特征向量上作投影,得到一個(gè)M維的權(quán)重向量w=(w1,w2,…,wm),一個(gè)P2P流有多個(gè)包,于是將對(duì)應(yīng)于這個(gè)P2P流的權(quán)重向量求平均作為這個(gè)流的權(quán)重向量。對(duì)于每個(gè)新來(lái)的包,先求得一個(gè)權(quán)重向量,與流庫(kù)中每個(gè)流的權(quán)重向量作比較,如果小于某個(gè)閾值,則認(rèn)為其屬于已知P2P流,否則丟棄。
針對(duì)PCA對(duì)于高維數(shù)據(jù)的優(yōu)勢(shì),在識(shí)別具體業(yè)務(wù)流量之前首先分析該業(yè)務(wù)的軟件行為,通過(guò)抓包摸清楚該業(yè)務(wù)的更多詳細(xì)特征,特征越多,識(shí)別精度越高。在此基礎(chǔ)上應(yīng)用PCA算法降維度,保留有用特征,提高系統(tǒng)識(shí)別實(shí)時(shí)性,從而達(dá)到兼顧實(shí)時(shí)性與識(shí)別率的較好狀態(tài)。
通過(guò)對(duì)P2P工作原理的研究,可以將P2P的通信數(shù)據(jù)按照其行為模式分為以下3類(lèi)[4]:
第一類(lèi)是初始化通信過(guò)程,該過(guò)程主要完成P2P用戶(hù)入網(wǎng)注冊(cè)、廣告接收、信息同步等功能,其特點(diǎn)是服務(wù)端端口固定,載荷區(qū)特征明顯。對(duì)于這部分?jǐn)?shù)據(jù)采用“端口+流+特征”模式來(lái)識(shí)別,記為A模式。
第二類(lèi)是P2S通信過(guò)程,該過(guò)程主要完成同種資源搜索、多點(diǎn)資源下載、本地資源上傳等功能,其特點(diǎn)是服務(wù)端端口較為固定,載荷區(qū)數(shù)據(jù)加密但特征固定,請(qǐng)求包長(zhǎng)度較固定。對(duì)于這部分?jǐn)?shù)據(jù)采用“端口+流+特征+包長(zhǎng)度”模式來(lái)識(shí)別,記為B模式。
第三類(lèi)是P2P通信過(guò)程,該過(guò)程主要完成對(duì)點(diǎn)資源下載、本地資源上傳等功能,其特點(diǎn)是服務(wù)端端口動(dòng)態(tài)變化,載荷區(qū)數(shù)據(jù)加密但比特序列有規(guī)律。對(duì)于這部分?jǐn)?shù)據(jù)采用“流+字節(jié)特征”模式來(lái)識(shí)別,記為C模式。
有了分類(lèi)的數(shù)據(jù),再有針對(duì)性地對(duì)不同的類(lèi)別進(jìn)行不同模式的抓包識(shí)別。為了對(duì)P2P流量進(jìn)行有效的分析,定義以下術(shù)語(yǔ):
1)流:用五元組來(lái)標(biāo)識(shí)一個(gè)連接,即源IP、源port、目標(biāo)IP、目標(biāo)port、傳輸層協(xié)議[5]。一個(gè)數(shù)據(jù)包到來(lái)后先識(shí)別它是否屬于已知流,如果屬于即直接返回,這樣可以節(jié)省大量的CPU資源。
2)字節(jié)特征:數(shù)據(jù)包載荷區(qū)字節(jié)的綜合規(guī)律。這些規(guī)律需要人為的挖掘,通過(guò)對(duì)數(shù)據(jù)包的反復(fù)閱讀和猜測(cè)來(lái)確定某種字節(jié)序列[6]。例如迅雷的P2P加密流量,其中有很大一部分?jǐn)?shù)據(jù)包載荷區(qū)的前4 byte符合“0x**000000”的特征,“**”為非零值。
3)識(shí)別優(yōu)先級(jí):把識(shí)別規(guī)則按照一定順序分配不同優(yōu)先級(jí),優(yōu)先級(jí)高的先識(shí)別。這里把“流”列為最高優(yōu)先級(jí),其次是“端口”、“特征串”、“字節(jié)特征”、“包長(zhǎng)度”。
結(jié)合上述思想可以將程序分為4個(gè)模塊[7]:
1)程序初始化模塊
該模塊主要實(shí)現(xiàn)讀取配置文件(流庫(kù)的權(quán)重參數(shù))、啟動(dòng)其他模塊線(xiàn)程的功能。
2)數(shù)據(jù)包采集模塊
Libpcap是Unix下非常方便的數(shù)據(jù)包截獲API,利用Libpcap函數(shù)庫(kù)可以編寫(xiě)抓包模塊,實(shí)現(xiàn)從服務(wù)器的指定網(wǎng)卡抓包[8]。首先定義網(wǎng)卡描述符,再通過(guò)pcap_open_live函數(shù)打開(kāi)指定網(wǎng)卡并循環(huán)抓取線(xiàn)上的數(shù)據(jù)包。
3)數(shù)據(jù)包處理模塊
抓取的數(shù)據(jù)包經(jīng)過(guò)該模塊的處理應(yīng)該可以順利地標(biāo)示出屬于P2P的流量。首先定義一系列表示TCP/IP協(xié)議棧各層包頭的結(jié)構(gòu)體,定義五元組結(jié)構(gòu)體(即“流”結(jié)構(gòu)體,再包含一些標(biāo)識(shí)位),并聲明一個(gè)“流”指針的容器,利用pcap_loop函數(shù)對(duì)每一個(gè)抓取到的數(shù)據(jù)包進(jìn)行回調(diào)函數(shù)的處理,這里的回調(diào)函數(shù)可以定義并實(shí)現(xiàn)操作數(shù)據(jù)包的方法,根據(jù)識(shí)別優(yōu)先級(jí)來(lái)對(duì)數(shù)據(jù)包進(jìn)行層層過(guò)濾和分配。首先提取數(shù)據(jù)包的五元組信息,根據(jù)這些五元組找出其所屬的流,查看此流是否已經(jīng)存在,用一個(gè)泛型指針遍歷“流”容器,如果此流已經(jīng)存在并且已經(jīng)進(jìn)行了標(biāo)識(shí),則直接返回。否則,新建一個(gè)流,并且提取該包相關(guān)特征,依據(jù)PCA算法得到經(jīng)過(guò)處理后的特征權(quán)重、再將該權(quán)重與已知流的權(quán)重作比較,以此來(lái)判斷該包是否屬于P2P通信。
4)統(tǒng)計(jì)輸出模塊
該模塊每隔一段時(shí)間打印一次數(shù)據(jù)包處理結(jié)果,其中包括總抓包數(shù)目、已識(shí)別的包數(shù)目、識(shí)別率等信息。
P2P應(yīng)用包含范圍很廣,從下載到共享無(wú)所不包,鑒于文章篇幅有限不能完全包括,本次實(shí)驗(yàn)就P2P下載應(yīng)用中具有代表性的迅雷工具作為實(shí)驗(yàn)對(duì)象,采集的樣本數(shù)據(jù)為預(yù)先在真實(shí)環(huán)境下抓取的完整的迅雷下載包,所提取的多維特征為迅雷在未下載、BT下載、電驢下載這3種情況下的流特征(迅雷在未下載時(shí)為A模式,BT及電驢下載時(shí)為B+C混合模式),流庫(kù)中保存的權(quán)重參數(shù)由上述3種情況下分別經(jīng)過(guò)計(jì)算得出,例如迅雷在C模式下的某一種流,其前幾個(gè)包的長(zhǎng)度大概在40 byte左右,采用UDP(用17表示)傳輸,載荷區(qū)特征為0x32000000**(**為可變非零字段,經(jīng)過(guò)計(jì)算的平均值為0x06,計(jì)算時(shí)轉(zhuǎn)換為十進(jìn)制),這些特征便可以標(biāo)識(shí)為{40,11,50,0,0,0,6}的均值,再將幾個(gè)樣本對(duì)上述均值分別求差,并按照算法步驟逐步求解(注意求差過(guò)程中僅計(jì)算包長(zhǎng)度等變量即可),最終可得到該種類(lèi)型的P2P流的權(quán)重,將權(quán)重值記錄在流庫(kù)的配置文件中,這樣便可以模擬真實(shí)環(huán)境下迅雷流量的識(shí)別,并且可以保證沒(méi)有雜包。
實(shí)驗(yàn)服務(wù)器配置為CPU:Intel Xeon E55042 .0GHz×8(8核心),內(nèi)存為16 Gbyte。
實(shí)驗(yàn)步驟如下:
1)在配置文件中配置網(wǎng)絡(luò)信息,如抓包口配置為eth0;
2)打開(kāi)編譯好的程序文件,等待其初始化完畢;
3)利用服務(wù)器的發(fā)包軟件對(duì)eth0口進(jìn)行發(fā)包;
4)觀(guān)察程序打印結(jié)果,生成數(shù)據(jù)文件并使用gnuplot繪圖,分析實(shí)驗(yàn)數(shù)據(jù)。
圖1所示為HTTP情況下的P2P加密流量權(quán)重圖,圖中每個(gè)點(diǎn)都代表一個(gè)流的權(quán)重,其中左起第一個(gè)點(diǎn)為配置的閾值權(quán)重,其他低于該點(diǎn)的代表能夠識(shí)別出的流,高于該點(diǎn)的則為未識(shí)別的流。由圖1可知HTTP方式下流量分布較為均勻。
圖1 HTTP方式下權(quán)重比較
圖2所示為BT情況下的P2P加密流量權(quán)重圖,解圖方式同圖1。圖2中的數(shù)據(jù)顯示出BT方式下權(quán)重的分布情況,可以看出流量分布比較密集,大都分布在閾值權(quán)重附近。
圖2 BT方式下權(quán)重比較
如圖3所示為EMLUE情況下的P2P加密流量權(quán)重圖,解圖方式同圖1。由圖3可以看出EMLUE情況下的流量分布也比較密集,這從側(cè)面說(shuō)明同種P2P類(lèi)型的下載流量之間特征相似度較高。
上述實(shí)驗(yàn)中所發(fā)的包分別對(duì)應(yīng)著迅雷在HTTP下載、BT下載、電驢下載的包,為了保證測(cè)試結(jié)果的普適性,上述3種模式的迅雷包分別在不同的計(jì)算機(jī)上抓取。表1所示為實(shí)驗(yàn)所得的具體識(shí)別率。
圖3 Emule方式下權(quán)重比較
表1 3組不同模式的迅雷流量識(shí)別率對(duì)比
表中的數(shù)據(jù)顯示迅雷流量在HTTP方式下識(shí)別率最高,其次是BT和電驢,未識(shí)別的流量中包含了少量的無(wú)規(guī)律加密數(shù)據(jù)以及無(wú)實(shí)際數(shù)據(jù)的雜包,這部分流量可以在后續(xù)工作中再作識(shí)別或剔除處理。綜上所述,將PCA方法引入P2P流量識(shí)別的策略是可行的,并且是有效的。
為了與其他協(xié)議識(shí)別方法作出比較,如表2所示為從實(shí)時(shí)性、準(zhǔn)確性、對(duì)加密流量的識(shí)別率這3個(gè)方面來(lái)考察特征串識(shí)別、PCA識(shí)別以及流行為特征識(shí)別3種方法的優(yōu)劣。
表2 3組不同識(shí)別方法的優(yōu)劣對(duì)比
相對(duì)于傳統(tǒng)特征串識(shí)別來(lái)說(shuō),PCA算法可以適應(yīng)更大規(guī)模特征而不損失效率,實(shí)時(shí)性很高;相對(duì)于不檢測(cè)載荷的流量行為特征模型來(lái)說(shuō),PCA算法可以更加精確到識(shí)別定位哪一種業(yè)務(wù)在吞噬網(wǎng)絡(luò)帶寬,更有效地為運(yùn)營(yíng)商提供判斷依據(jù);而在加密流量識(shí)別上,PCA具備多特征識(shí)別的天然優(yōu)勢(shì),更多的特征并不會(huì)對(duì)PCA產(chǎn)生很大影響。
P2P流量的識(shí)別已經(jīng)成為網(wǎng)絡(luò)管理中的重要部分,本文利用Wireshark軟件,采用逆向工程的方法,分析和研究了P2P的工作原理和通信過(guò)程,提取其通信過(guò)程中的流特征,但是P2P應(yīng)用由于其流量加密的復(fù)雜性導(dǎo)致特征呈現(xiàn)高維型,而一般的特征串匹配算法都是從改進(jìn)算法的角度來(lái)加快識(shí)別速度,本文嘗試引入PCA算法,希望在不損失識(shí)別率的情況下對(duì)P2P流特征進(jìn)行降維處理,減少需要處理的特征數(shù),從而加快對(duì)P2P流量的識(shí)別。由于PCA一般在人臉識(shí)別和神經(jīng)網(wǎng)絡(luò)等領(lǐng)域應(yīng)用較成熟[9],在網(wǎng)絡(luò)流量識(shí)別方面尚沒(méi)有成熟的使用模型,因此這一方法雖然可行,但還有很多工作有待進(jìn)一步深入研究。
P2P共享技術(shù)發(fā)展的過(guò)程是一個(gè)不斷規(guī)避檢測(cè)的過(guò)程,這就給識(shí)別技術(shù)不斷帶來(lái)新的挑戰(zhàn),應(yīng)用協(xié)議也在不斷改進(jìn),其特征也在不斷變化,因此流量識(shí)別方法也需要隨之進(jìn)行不斷嘗試和調(diào)整。
[1]王鋒.IP業(yè)務(wù)識(shí)別與控制系統(tǒng)(DPI)的發(fā)展現(xiàn)狀與思考[EB/OL].[2008-11-13].http://www.lmtw.com/tech/Using/200811/47956.html.
[2]王敏,李純喜,陳常嘉.淺談基于PCA的網(wǎng)絡(luò)流量分析[J].微計(jì)算機(jī)信息,2006,22(6):94-95.
[3]張媛,張燕平.一種 PCA算法及其應(yīng)用[J].微機(jī)發(fā)展,2005,15(2):67-68.
[4]蔣海明,張劍英,趙二濤,等.PPLive網(wǎng)絡(luò)電視通信機(jī)制研究[J].電視技術(shù),2009,33(12):61-63.
[5]陳亮,龔儉,徐選.基于特征串的應(yīng)用層協(xié)議識(shí)別[J].計(jì)算機(jī)工程與應(yīng)用,2006,24(4):16-19.
[6]殷曉麗,田端財(cái).P2P流量識(shí)別技術(shù)分析[J].科技資訊,2009(8):16-17.
[7]胡文靜,李明,劉錦高.基于LIBPCAP的網(wǎng)絡(luò)流量實(shí)時(shí)采集與信息萃?。跩].計(jì)算機(jī)應(yīng)用研究,2006,1(6):236-238.
[8]MOORE A W,PAPAGIANNAKI K.Toward the accurate identification of network application[C]//Proc.PAM2005.Boston:MA,2005:41-54.
[9]淺談 PCA 人臉識(shí)別[EB/OL].[2011-05-01].http://leen2010.blogbus.com/logs/124631640.html.