摘 要: 通過引入流特征統(tǒng)計和深度數(shù)據(jù)包檢測相結(jié)合的思想,設(shè)計了一種可擴(kuò)展的10Gb/s線速P2P流量識別引擎" title="識別引擎">識別引擎,給出了該引擎的硬件實(shí)現(xiàn)方案,詳細(xì)介紹了方案中已知流過濾、傳輸層特征統(tǒng)計、凈荷關(guān)鍵詞匹配等核心部分的實(shí)現(xiàn)。測試表明,該引擎可完全實(shí)現(xiàn)10Gb/s速率下的P2P流量線速識別,識別準(zhǔn)確率大于95%。
關(guān)鍵詞: 識別引擎; P2P流量; 流特征識別;深度數(shù)據(jù)包檢測
?
??? 近來,P2P流量成為一個流行的問題,這種無序的流量占用網(wǎng)絡(luò)中50%~90%的帶寬[1],造成網(wǎng)絡(luò)擁塞,致使服務(wù)質(zhì)量下降。通過在網(wǎng)絡(luò)中主動識別標(biāo)識P2P流量,并在此基礎(chǔ)上實(shí)現(xiàn)對P2P流量的管理與控制,是目前被業(yè)內(nèi)認(rèn)可的一種解決方案。
有一些工具使用深層數(shù)據(jù)包檢測技術(shù)" title="檢測技術(shù)">檢測技術(shù)[2] DPI(Deep Packet Inspection)通過軟件(如P2P終結(jié)者)的方式在小型局域網(wǎng)中識別處理P2P流量,其能力有限; 華為、Cisco等公司也推出了相關(guān)產(chǎn)品,基于DPI技術(shù)對流量的應(yīng)用層協(xié)議分類,標(biāo)識出P2P流量,其最大吞吐率" title="吞吐率">吞吐率為4Gb/s。韓國的JamesWon-KiHong等人研發(fā)的流量監(jiān)控系統(tǒng)NG-MON是基于流量特征的檢測技術(shù)[3](Transport Layer Identification),但其性能參數(shù)未知。DPI技術(shù)的缺點(diǎn)是對新P2P應(yīng)用檢測具有滯后性,難以檢測加密P2P應(yīng)用,性能與載荷檢測的復(fù)雜度相關(guān)。基于流量特征的檢測技術(shù)[4]能夠克服這些缺點(diǎn),但它不能指示P2P應(yīng)用協(xié)議具體類型,當(dāng)其他應(yīng)用的流量與P2P流量特征類似時容易誤判。
針對目前已經(jīng)成為主流鏈路" title="鏈路">鏈路傳輸速率的10Gb/s速率,筆者設(shè)計了一種高效的P2P流量識別引擎,把深層數(shù)據(jù)包檢測技術(shù)和基于流量特征的檢測技術(shù)結(jié)合,兼顧效率和精度。該引擎能夠?qū)?0Gb/s鏈路的P2P流量線速識別。
1 P2P識別引擎設(shè)計
本設(shè)計的P2P識別引擎采用流水作業(yè)方式,如圖1所示。
?
當(dāng)一個IP數(shù)據(jù)包(設(shè)為flow:由源IP地址SrcIP、目的IP地址DstIP、源端口SrcPort、目的端口DstPort和協(xié)議域Protocol組成)進(jìn)入該引擎時,它首先通過已知流比較,未知的流量數(shù)據(jù)包送到端口匹配識別引擎進(jìn)行端口匹配,接著不匹配的數(shù)據(jù)包由傳輸層特征識別引擎處理,將未知類型P2P數(shù)據(jù)包送至凈荷檢測識別引擎,做具體類型判斷。對于每個模塊識別出的非P2P流量直接輸出到引擎對外接口;對于識別出的P2P數(shù)據(jù)包,則添加類型指示并送到輸出FIFO,類型指示包括P2P具體類型和P2P未知類型。最后,數(shù)據(jù)包由FIFO輸出。
1.1 已知流過濾
對于P2P流量而言,具有數(shù)據(jù)量大,在線時間長的特點(diǎn)。數(shù)據(jù)包(flow)和儲存在TCAM中的已知P2P流直接比較,快速區(qū)分出是否為已知P2P流;同時有很多知名Web等服務(wù)器的IP地址固定,通過IP地址判斷不是P2P流量。
1.2 端口匹配識別引擎
許多P2P應(yīng)用軟件有默認(rèn)的使用端口,一些用戶沒有修改軟件默認(rèn)端口的習(xí)慣,通過端口可以識別一部分P2P流量。
1.3 傳輸層特征識別引擎
傳輸層識別引擎通過對主機(jī)傳輸層特征的統(tǒng)計識別P2P流量。根據(jù)已有研究成果[4],目前P2P流量在傳輸層特征上存在以下兩個特征:
(1)許多P2P應(yīng)用在一對主機(jī)之間同時采用TCP 和UDP連接;
(2)某一主機(jī)與多個目的主機(jī)通信,并且對于不同目的主機(jī)通常采用不同的目的端口。
上述特征也存在一些例外情況,如DNS、NETBIOS、IRC、游戲和多媒體業(yè)務(wù)流量有(1)的特征, 有時Mail、DNS、Game也具備上述(2)的特征。本設(shè)計采用參考文獻(xiàn)[4]的方法可以區(qū)分這些應(yīng)用??紤]到骨干網(wǎng)鏈路上主機(jī)數(shù)目眾多,無法測量所有主機(jī)的傳輸層特征;但是由于網(wǎng)絡(luò)流量大小服從Zipf分布的特性,10%的主機(jī)的流量占據(jù)了鏈路總流量的90%[5],因此,采用抽樣的方式,僅僅測量流量大的主機(jī)的傳輸層特征。抽樣算法采用參考文獻(xiàn)[6]中提出的sample-and-hold算法。
1.4 凈荷檢測識別引擎
不同的P2P協(xié)議凈荷具有不同的特征,采用特征字符串來匹配凈荷的方式可以精確識別P2P具體應(yīng)用的具體類型。
2 P2P識別引擎的實(shí)現(xiàn)
P2P識別引擎可以識別10Gb/s網(wǎng)絡(luò)中P2P流量。它包括已知流過濾、端口匹配識別、傳輸層特征識別、凈荷檢測識別四個部分,并隨著發(fā)展可以擴(kuò)展新的功能模塊。這在Xilinx Virtex-4 LX160 FPGA上得到了實(shí)現(xiàn)。
2.1 已知流過濾的實(shí)現(xiàn)
要線速地對10Gb/s數(shù)據(jù)流進(jìn)行處理,需兼顧處理速度和存儲容量要求,所以筆者使用TCAM1實(shí)現(xiàn)對數(shù)據(jù)包的過濾。在一條鏈路中,識別引擎的工作時間越長, 識別出來的P2P流量越多,把識別出來的P2P流量用流標(biāo)識符(SrcIP、DstIP、SrcPort、DstPort和Protocol經(jīng)過Bloom filter運(yùn)算壓縮[7]成20bit流標(biāo)識符)存儲在FPGA片外的TCAM1中。許多知名網(wǎng)站服務(wù)器(如sina、 hotmail等)的訪問量很大,其IP地址固定,把這些IP地址也儲存在TCAM1中。如果SrcIP或者DstIP在表中,則可以直接判為非P2P流量。在TCAM1中,如圖2所示,劃分出多塊空間,分別對應(yīng)存儲已知具體類型和未知類型的P2P流量標(biāo)識符、知名網(wǎng)站服務(wù)器IP地址。通過TCAM掩碼可以選擇每一行中的比特哪些必須匹配,哪些可以忽略。如果所有的值在沒有掩碼的比特位置都匹配了,根據(jù)返回的空間地址可以知道數(shù)據(jù)包的類型。通過發(fā)送控制包到 P2P識別引擎可以改變TCAM掩碼、TCAM值和TCAM空間分配。對于識別出具體類型的P2P流量,把數(shù)據(jù)包添加類型指示直接送到輸出FIFO中,對未知類型的P2P流量數(shù)據(jù)包添加類型指示送到凈荷檢測模塊處理,對知名網(wǎng)站服務(wù)器的數(shù)據(jù)包直接送到引擎對外接口;如果沒有匹配,則認(rèn)為是未知流量,對其添加未知類型指示送到端口匹配識別模塊作處理。對已知流的快速標(biāo)識,可以提高判別效率,節(jié)省FPGA資源。
?
2.2 端口匹配的實(shí)現(xiàn)
目前很多的P2P應(yīng)用軟件中都有默認(rèn)的使用端口,例如eMule使用端口4662/4672/4673等。據(jù)統(tǒng)計,目前P2P默認(rèn)端口數(shù)量在100以下,使用FPGA的BLOCK RAM實(shí)現(xiàn)的CAM可以高效地完成端口匹配工作。在這個CAM中,對不同類型端口同樣分配不同空間位置,由返回地址獲得P2P類型。對于端口匹配識別出的具體類型P2P流量,把流標(biāo)識符寫入TCAM1相應(yīng)的位置,同時把數(shù)據(jù)包添加類型指示直接送到輸出FIFO中;對沒有識別出流量類型的數(shù)據(jù)包,送到傳輸層特征識別引擎處理。
2.3 傳輸層特征識別引擎的實(shí)現(xiàn)
傳輸層特征識別引擎的實(shí)現(xiàn)框圖如圖3所示。
?
首先,對于到達(dá)的每個數(shù)據(jù)包,按照概率p對其進(jìn)行抽樣。如果數(shù)據(jù)包被抽樣到,則以“SrcIP +DstIP”作為流標(biāo)志,將該數(shù)據(jù)包所屬的流(設(shè)為F)送往TCP/UDP對判別模塊。如果檢測到F中同時存在活動的TCP和UDP連接(活動時間取64s[7]),并且端口不是表1中列出的端口,則判定F為P2P流量,并輸出到凈荷檢測識別模塊;如果是表1中端口,則根據(jù)參考文獻(xiàn)[4]中方法進(jìn)一步處理;否則,將F送入(IP,PORT)檢測模塊。(IP,PORT)檢測模塊分別統(tǒng)計與各個SrcIP通信的DstIP和DstPort的數(shù)量,如果兩者數(shù)量接近,且均遠(yuǎn)大于1,則認(rèn)為該源IP地址所對應(yīng)的流量為P2P流量。
?
筆者參考了文獻(xiàn)[7]的算法思想,基于d-left Hash函數(shù)實(shí)現(xiàn)了TCP/UDP連接對檢測模塊。采用4個獨(dú)立的Hash函數(shù),Hash結(jié)果空間大小為210,每個Hash單元存放8個(源)IP地址及2bit的狀態(tài)標(biāo)志。IP地址并不直接存放,而是首先對其進(jìn)行壓縮運(yùn)算,得到一個長14bit" title="14bit">14bit的地址標(biāo)號,再將地址標(biāo)號存放在Hash單元中。這樣,實(shí)現(xiàn)TCP/UDP連接對檢測模塊共需要的存儲容量為:
4×8×210×(14+2)=524 288bit
對于所選用的FPGA而言,采用片內(nèi)SRAM即可滿足這一需求。
(IP,PORT)檢測模塊基于Bloom Filter的思想實(shí)現(xiàn)。如圖4所示,(IP,PORT)檢測模塊共維護(hù)10K條統(tǒng)計表項(xiàng),每條表項(xiàng)在FPGA片外SRAM中對應(yīng)一個96bit的存儲區(qū)域。其中有92bit用于Bloom Filter的Hash向量,4bit作為統(tǒng)計計數(shù)器。每到達(dá)一個數(shù)據(jù)包,通過查找其源IP地址統(tǒng)計項(xiàng)的Hash向量,判斷目的IP地址是否是一個新地址,如果是則將對應(yīng)的計數(shù)器加1。否則更新Bloom Filter的Hash向量。與實(shí)現(xiàn)TCP/UDP連接對檢測模塊類似,不直接存儲源IP地址,而是存儲其14bit的壓縮標(biāo)號。這樣,實(shí)現(xiàn)(IP,PORT)檢測模塊共需要140KB的FPGA片內(nèi)存儲空間以及(960×2)=1 920KB的片外SRAM存儲空間。比較容易就可以實(shí)現(xiàn)。
?
2.4? 凈荷檢測識別的實(shí)現(xiàn)
凈荷復(fù)雜就會造成檢測性能下降,10Gb/s的數(shù)據(jù)難以完全實(shí)現(xiàn)線速檢測。但是通過上述三個模塊的處理,送到凈荷檢測的數(shù)據(jù)包速率大大降低(10%),就可以實(shí)現(xiàn)線速檢測。
不同的P2P協(xié)議具有不同的特征[8],表2給出了幾種典型應(yīng)用協(xié)議數(shù)據(jù)區(qū)的判別特征。從不同應(yīng)用協(xié)議的凈荷特征可以看出,絕大部分協(xié)議的報文特征體現(xiàn)在凈荷開頭的前20字節(jié),少數(shù)協(xié)議的報文特征還會體現(xiàn)在凈荷結(jié)尾處的某些字段。用上述固定位置字段的特征信息可以進(jìn)行數(shù)據(jù)包的識別。
?
凈荷檢測識別引擎如圖5所示,使用FPGA外的TCAM2可以高效地實(shí)現(xiàn)凈荷關(guān)鍵詞的匹配。對不同凈荷特征分配不同空間,當(dāng)一個IP包到達(dá),凈荷的匹配比特與TCAM中的表項(xiàng)值比較,如果沒有掩碼的值都匹配了,根據(jù)返回的空間地址可以確定P2P的類型,把未知類型更改為具體類型指示并送到輸出FIFO中,同時把流標(biāo)識符寫入TCAM1相應(yīng)的位置;如果沒有匹配成功,則認(rèn)為是未知類型的P2P數(shù)據(jù)包送到輸出FIFO中。
?
采用多個凈荷檢測識別引擎并行工作的方式,可以提高處理能力。
3 性能分析與測試
在Xilinx Virtex-4 LX160 FPGA上綜合P2P識別引擎在布局布線后的結(jié)果列在表3中。核心邏輯占用了69%的邏輯資源和88%的block RAM。
3.1 吞吐率
本文設(shè)計的P2P識別引擎器件采用Xilinx Virtex-4 LX160 FPGA、IDT 71T75602 SRAM、IDT 75K72100 TCAM。
對于實(shí)現(xiàn)在FPGA內(nèi)部的模塊,F(xiàn)PGA的工作時鐘在125MHz,同時處理128bit的數(shù)據(jù),這樣可以得出P2P識別引擎的吞吐率:128bit×125MHz=16Gb/s。完全能夠?qū)崿F(xiàn)10Gb/s的線速處理。
對于查表匹配模塊,TCAM工作時鐘在100MHz,按照每個最短數(shù)據(jù)包64字節(jié)計算,查表速率:64×8×100=51.2Gb/s;更新一個TCAM表項(xiàng)的內(nèi)容需要4個時鐘周期,更新速率:51.2/4=12.8Gb/s??梢詫?shí)現(xiàn)對10Gb/s數(shù)據(jù)的線速處理。
對于SRAM模塊,設(shè)鏈路數(shù)據(jù)率為10Gb/s,最小包長為64字節(jié),則每個數(shù)據(jù)包的傳輸時間為51.2ns。SRAM的讀寫周期為4ns,接口位寬32bit。每收到一個數(shù)據(jù)包,需要讀寫SRAM各三次,共需24ns。那么,還剩余27.2ns用于判斷Bloom Filter的Hash向量的四個對應(yīng)位是否為1,并更新計數(shù)器。滿足本設(shè)計所選用的FPGA要求,同樣能夠?qū)崿F(xiàn)10Gb/s的線速處理。
按照流水處理的方式,本文設(shè)計的引擎可以實(shí)現(xiàn)對P2P數(shù)據(jù)的線速識別。
3.2 測試
如圖6所示,在測試時使用Spirent AX4000測試儀發(fā)送鏈路速率為10Gb/s包含各種類型流量的數(shù)據(jù)包,識別引擎對其中的P2P流量識別,把識別的結(jié)果用FPGA中實(shí)現(xiàn)的統(tǒng)計模塊記錄下來,通過PC觀察結(jié)果。
?
測試結(jié)果表明,該引擎可以在10Gb/s速率下完成對P2P數(shù)據(jù)包的識別,且準(zhǔn)確率大于95%。但該引擎還有待實(shí)際網(wǎng)絡(luò)流量的測試。
本文設(shè)計的 P2P識別引擎實(shí)現(xiàn)在高性能路由器中(國家863計劃信息技術(shù)領(lǐng)域重大專項(xiàng),大規(guī)模接入?yún)R聚路由器系統(tǒng)性能及關(guān)鍵技術(shù)研究),滿足對10Gb/s鏈路數(shù)據(jù)中的P2P流量線速識別。FPGA所具有的大規(guī)模并行處理能力和可編程的靈活性使得該引擎能獲得極高的處理性能,并且通過重新下載配置信息來改變功能,能夠適應(yīng)P2P應(yīng)用的日益變化和性能需求,具有良好的可擴(kuò)展性。
參考文獻(xiàn)
[1] 鄔賀銓. 2007年寬帶世界論壇亞洲會議.演講稿.
[2] ?SEN S, SPATSCHECK O, WANG D.? Accurate, scalable?in-network identification of P2P traffic using application?signatures. In www, 2004.
[3] ?HAN S H, JAMES W K H. The architecture of NGMON: A passive network monitoring system for high-speed IP networks. Lecture Notes In Computer Science;Vol. 2506,2002.
[4] ?KARARGIANNIS T, BROIDO A, FALOUTSOS M, et al.?Transport layer identification of P2P traffic. In Proceedings ?of ACM SIGCOMM, 2004.
[5] ?ESTAN C, VARGHESE G. New directions in traffic measurement and accounting. SIGCOMM '02, August 19-23,2002, Pittsburgh, Pennsylvania, USA.
[6] ?CLAFFY K, BRAUN H W, POLYZOS G. A parametrizable?methodology for internet traffic flow profiling. In IEEE?JSAC, 1995.
[7] ?BONOMI F, MITZENMACHER M, PANIGRAHY R.?Beyond bloom filters: from approximate membership checks ?to approximate state machines. SIGCOMM’06, September?11–15, 2006, Pisa, Italy.
[8] ?White paper-netflow services and applications http://www.cisco.com/warp/public/cc/pd/iosw/ioft/neflct/tech/napps_wp.%htm.